私はこれを読みました: ネストされたセットにノードを安全に挿入しますか?
しかし、ネストされたセットモデルに新しいノードを挿入する際のロックが心配でした。ツリー カテゴリに新しいノードを挿入したいのですが、新しいノードが破損することなく挿入されることを確認したいです。mysql で使用されるエンジンは InnoDb です。他の質問が言うように:
BEGIN; -- or whatever API your framework has for starting a transaction
SELECT @myLeft := lft FROM myTable WHERE ID = $id FOR UPDATE;
UPDATE myTable SET rgt = rgt + 2 WHERE rgt > @myLeft;
UPDATE myTable SET lft = lft + 2 WHERE lft > @myLeft;
INSERT INTO myTable(title, lft, rgt) VALUES($title, @myLeft + 1, @myLeft + 2);
COMMIT; -- or whatever API your framework has for commiting a transaction
私の問題は、同時ユーザーが同じツリーに新しいノードを挿入しようとした場合、トランザクションは他のノードの左右を更新および調整するのに十分ですか? ユーザー1が新しいノードを追加し(トランザクション1で実行)、同時にユーザー2が新しいノードを追加する(トランザクション2で実行)場合、ユーザー2が新しいノードを挿入する前に、ユーザー2がユーザー1によって追加されたノードで更新されたツリーを読み取ったと確信していますか?では、100 人のユーザーが新しいノードを挿入するのと同じ時間に、最後のユーザーはプレビュー ユーザーが終了するまで待たなければならず、一貫性ツリーが常に存在するのでしょうか?