Я храню иерархические данные в mysql в виде вложенного набора.Безопасная вставка узла в вложенном наборе?
myTable
id,
title,
lft,
rgt
Я использую следующую серию операторов SQL, чтобы вставить новый узел:
SELECT @myLeft := lft FROM myTable WHERE ID = $id;
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);
Это работает, но есть потенциально проблемы, если много узлов добавляются (рядом) одновременно.
Мне интересно, что является лучшим способом гарантировать повреждение данных (хранимые процедуры не являются опцией). Достаточно ли просто заключить этот sql в транзакцию? Должен ли я использовать транзакции, а также блокировку таблицы?
Благодаря