我读过这个: 在嵌套集中事务安全插入节点?
但我担心在嵌套集模型中插入新节点的锁定。我想在我的树类别中插入一个新节点,但我想确保它插入的新节点没有损坏。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
我的问题是,如果并发用户尝试在同一棵树中插入新节点,事务是否足以更新和调整其他节点的左右?如果 user1 添加新节点(在 transaction1 中执行)同时 user2 添加新节点(在 transaction2 中执行),我确定 user2 在 user2 插入他的新节点之前读取了 user1 添加的节点的更新树?那么,100 个用户在同一时间插入新节点,最后一个用户必须等待用户完成预览才能始终拥有一致性树?