|
|
|
Не срабатывает простой триггер в MySQL. Почему?
|
|||
|---|---|---|---|
|
#18+
Есть база linuxtr, есть таблица lt_articles. В этой таблице два поля - id (PRIMARY KEY, AUTO INCREMENT) и sort_order. Задача: при добавлении новой записи должно произойти sort_order = id . Я делаю такой триггер: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Но он не срабатывает - при добавлении новой записи значение поля sort_order остается равным 0. Что делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 09:50:42 |
|
||
|
Не срабатывает простой триггер в MySQL. Почему?
|
|||
|---|---|---|---|
|
#18+
Да потому что BEFORE INSERT - т.е. ПЕРЕД вставкой. Вставка ещё не выполнена. Откуда взяться значению ID? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 12:22:19 |
|
||
|
Не срабатывает простой триггер в MySQL. Почему?
|
|||
|---|---|---|---|
|
#18+
Что за форма регистрацииЗадача: при добавлении новой записи должно произойти sort_order = id .решение: сортировать по ид, поле сорт_ордер вообще удалить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 12:57:15 |
|
||
|
Не срабатывает простой триггер в MySQL. Почему?
|
|||
|---|---|---|---|
|
#18+
tanglir, Id - это уникальный идентификатор, но никак не порядок сортировки. Пример. Имеем объекты, например строки меню (id, sort_order, name, ...): 1, 1, Файл 2, 2, Отменить 3, 3, Повторить 4, 4, Вырезать 5, 5, Вставить 6, 6, Выделить все 7, 7, Найти 8, 8, Заменить Теперь нам нужно добавить пункт Копировать, и засунуть его между Вырезать и Вставить. Менять ID нельзя, он дается один раз и он уникальный (ведь это ID), к нему уже что-то в других частях системы привязано. Мы добавляем новую строку, с триггером она добавится как: 9, 9, Копировать Далее переносим в нужное место: 1, 1, Файл 2, 2, Отменить 3, 3, Повторить 4, 4, Вырезать 9, 5, Копировать 5, 6, Вставить 6, 7, Выделить все 7, 8, Найти 8, 9, Заменить ID не поменялся, размещение в нужном месте сделали за счет sort_order. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 17:07:27 |
|
||
|
Не срабатывает простой триггер в MySQL. Почему?
|
|||
|---|---|---|---|
|
#18+
Что за форма регистрации, а вы сразу не указали, что сорт_ордер впоследствии может изменяться :) ЕМНИП похожая тема не так давно была, и обсуждающие сошлись на том, что проще всего сделать ХП для такой вставки (потому что в бефор-триггере ид ещё не известен, а в афтер-триггере уже ничего нельзя менять). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 17:16:24 |
|
||
|
Не срабатывает простой триггер в MySQL. Почему?
|
|||
|---|---|---|---|
|
#18+
tanglir, tanglir ЕМНИП похожая тема не так давно была, и обсуждающие сошлись на том, что проще всего сделать ХП для такой вставки (потому что в бефор-триггере ид ещё не известен, а в афтер-триггере уже ничего нельзя менять). Я сделал через information_schema. Т.к. тригере BEFORE INSERT мы не можем получить значение для поля AUTO_INCREMENT, а в тригере After мы не можем поменять значение поля воспользуемся такой конструкцией: information_schema.TABLES.AUTO_INCREMENT храниться значение, которое будет вставлено в поле AUTO_INCREMENT в тригире BEFORE INSERT Код: plsql 1. 2. 3. 4. 5. Все замечательно работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 16:32:36 |
|
||
|
Не срабатывает простой триггер в MySQL. Почему?
|
|||
|---|---|---|---|
|
#18+
Близнец1980Все замечательно работаетПока в двух разных сессиях одновременно две вставки не прилетят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 16:44:03 |
|
||
|
Не срабатывает простой триггер в MySQL. Почему?
|
|||
|---|---|---|---|
|
#18+
miksoftБлизнец1980Все замечательно работаетПока в двух разных сессиях одновременно две вставки не прилетят. Встречал, что во время срабатывания триггера та таблица, на которую он повешен, становится залоченой. Или это только к MyISAM относится? Не подскажите, где можно почитать об этом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 17:17:48 |
|
||
|
Не срабатывает простой триггер в MySQL. Почему?
|
|||
|---|---|---|---|
|
#18+
Близнец1980Встречал, что во время срабатывания триггера та таблица, на которую он повешен, становится залоченой. Или это только к MyISAM относится? Не подскажите, где можно почитать об этом?Таблицы MyISAM лочатся на все время их модификации, а не только "во время срабатывания триггера". Так что применительно к MyISAM мой предыдущий комментарий неактуален. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 17:22:10 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1834560]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 381ms |

| 0 / 0 |
