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

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


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
Строка 283: Строка 283:
 \\ Триггер для варианта:​ «удаление узла со смещением дочерних узлов на уровень ввверх»:​\\ SQL код (6) \\ Триггер для варианта:​ «удаление узла со смещением дочерних узлов на уровень ввверх»:​\\ SQL код (6)
  
-<​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
Строка 319: Строка 319:
   * Не уникальный на поле (//​parent_id//​);​   * Не уникальный на поле (//​parent_id//​);​
  
-\\ Наслаждайтесь ;-)\\ //​Сергей Томулевич aka Phoinix (08.07.2009 г.)// 
  
-Теги: 
- 
-  * [[:​ru:​search:?​target_type=posts&​amp;​order=relevance&​amp;​q=[nested+sets]|nested sets]] 
-  * [[:​ru:​search:?​target_type=posts&​amp;​order=relevance&​amp;​q=[nested+set]|nested set]] 
-  * [[:​ru:​search:?​target_type=posts&​amp;​order=relevance&​amp;​q=[mysql]|mysql]] 
-  * [[:​ru:​search:?​target_type=posts&​amp;​order=relevance&​amp;​q=[%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D1%8C%D1%8F+%D0%B1%D0%B4]|деревья бд]] 
-  * [[:​ru:​search:?​target_type=posts&​amp;​order=relevance&​amp;​q=[%D1%82%D1%80%D0%B8%D0%B3%D0%B3%D0%B5%D1%80%D1%8B]|триггеры]] 
- 
-Хабы: 
- 
-  * [[:​ru:​hubs:​mysql:​|MySQL]] 
mysql/nested_set.1730530575.txt.gz · Последние изменения: 2024/11/02 09:56 — werwolf