Инструменты пользователя

Инструменты сайта


mysql:nested_set

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
mysql:nested_set [2024/11/02 09:56]
werwolf
mysql:nested_set [2024/11/02 09:57] (текущий)
werwolf
Строка 6: Строка 6:
 \\ Хорошая новость ребята! В //MySQL// нет проблемы с рекурсивными триггерами! Разработчики //MySQL// просто тупо лочат изменяемую таблицу даже на уровне триггера,​ вот редиски. Но, собственно,​ нас может остановить только отключение электричества.\\ Есть небольшая лазейка,​ с… объединенными таблицами. Хотя я не нашел в документации подтверждения того, что это так специально было задумано,​ но и отрицания тоже не было. Правда есть вероятность того, что эту лазейку могут прикрыть,​ хотя я не вижу в этом смысла.\\ Увы, механизм триггеров в //MySQL// новый и довольно сырой, что накладывает некоторые ограничения на его использование,​ но все же его достаточно для решения нашей задачи.\\ Итак, исходная таблица:​\\ SQL код (1) \\ Хорошая новость ребята! В //MySQL// нет проблемы с рекурсивными триггерами! Разработчики //MySQL// просто тупо лочат изменяемую таблицу даже на уровне триггера,​ вот редиски. Но, собственно,​ нас может остановить только отключение электричества.\\ Есть небольшая лазейка,​ с… объединенными таблицами. Хотя я не нашел в документации подтверждения того, что это так специально было задумано,​ но и отрицания тоже не было. Правда есть вероятность того, что эту лазейку могут прикрыть,​ хотя я не вижу в этом смысла.\\ Увы, механизм триггеров в //MySQL// новый и довольно сырой, что накладывает некоторые ограничения на его использование,​ но все же его достаточно для решения нашей задачи.\\ Итак, исходная таблица:​\\ SQL код (1)
  
-<​code>​+<​code ​mysql>
 CREATE TABLE `ns_tree` ( CREATE TABLE `ns_tree` (
     `id`        int(11) NOT NULL auto_increment,​     `id`        int(11) NOT NULL auto_increment,​
Строка 21: Строка 21:
 \\ На основе нее делаем точно такую же таблицу,​ с точно таким же набором полей:​\\ SQL код (2) \\ На основе нее делаем точно такую же таблицу,​ с точно таким же набором полей:​\\ SQL код (2)
  
-<​code>​+<​code ​mysql>
 CREATE TABLE `_ns_tree` ( CREATE TABLE `_ns_tree` (
     `id`        int(11) NOT NULL auto_increment,​     `id`        int(11) NOT NULL auto_increment,​
Строка 52: Строка 52:
 SQL код (3) SQL код (3)
  
-<​code>​+<​code ​mysql>
 CREATE DEFINER = '​user'​@'​localhost'​ TRIGGER `ns_tree_before_ins_tr` BEFORE INSERT ON `ns_tree` CREATE DEFINER = '​user'​@'​localhost'​ TRIGGER `ns_tree_before_ins_tr` BEFORE INSERT ON `ns_tree`
     FOR EACH ROW     FOR EACH ROW
Строка 111: Строка 111:
 \\ Принцип тот же с применением диалекта.\\ SQL код (4) \\ Принцип тот же с применением диалекта.\\ SQL код (4)
  
-<​code>​+<​code ​mysql>
 CREATE DEFINER = '​user'​@'​localhost'​ TRIGGER `ns_tree_before_upd_tr` BEFORE UPDATE ON `ns_tree` CREATE DEFINER = '​user'​@'​localhost'​ TRIGGER `ns_tree_before_upd_tr` BEFORE UPDATE ON `ns_tree`
     FOR EACH ROW     FOR EACH ROW
Строка 257: Строка 257:
 \\ Из-за отсутствия проблем с рекурсией триггеров,​ удаление вообще становится тривиальной задачей.\\ Триггер для варианта:​ «удаление ветки целиком»:​\\ SQL код (5) \\ Из-за отсутствия проблем с рекурсией триггеров,​ удаление вообще становится тривиальной задачей.\\ Триггер для варианта:​ «удаление ветки целиком»:​\\ SQL код (5)
  
-<​code>​+<​code ​mysql>
 CREATE DEFINER = '​user'​@'​localhost'​ TRIGGER `ns_tree_before_del_tr` AFTER DELETE ON `ns_tree` CREATE DEFINER = '​user'​@'​localhost'​ TRIGGER `ns_tree_before_del_tr` AFTER DELETE ON `ns_tree`
     FOR EACH ROW     FOR EACH ROW
mysql/nested_set.1730530606.txt.gz · Последние изменения: 2024/11/02 09:56 — werwolf