我在mysql中存儲一個嵌套集。動態SQL如果聲明?
我用下面的動態SQL插入一個節點:
SELECT @myLeft := lft
FROM t
WHERE id = ?;
UPDATE t
SET rgt = rgt + 2
WHERE rgt > @myLeft;
UPDATE t
SET lft = lft + 2
WHERE lft > @myLeft;
INSERT INTO t
(title, lft, rgt)
VALUES ("New", @myLeft + 1, @myLeft + 2);
這工作得很好。但是有一個潛在的問題,如果第一個SELECT沒有返回任何結果,那麼層次結構將被破壞。在交易中包裝這不會妨礙這一點。
我怎樣才能確保UPDATE和INSERT語句,如果第一個SELECT語句返回一個結果只執行? (如果可能的話,我真的喜歡在SQL完全做到這一點。)
感謝(提前)對你的幫助。
這是否意味着我必須使用存儲過程?有沒有辦法用簡單的查詢來做到這一點? – user1031947 2013-05-06 18:49:54