powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Triggers?
19 сообщений из 19, страница 1 из 1
Triggers?
    #39876700
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял:
триггеров на одно событие может быть несколько, порядок их выполнения не должен быть важен, но все-таки - какой?
В зависимости от выбранного типа ENGINE поведение триггера, точнее результаты его работы могут кардинально отличаться.
...
Рейтинг: 0 / 0
Triggers?
    #39876706
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Триггеры выполняются в порядке их создания, если не задано иное при создании триггера (для создаваемого триггера можно задать, перед каким существующим его поместить).
...
Рейтинг: 0 / 0
Triggers?
    #39877681
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть база, хочу перенести данные из другой базы (не MySQL, MariaDB).

Надо запретить все триггеры во всех таблицах , перенести данные, разрешить триггеры

Как запретить/разрешить все триггеры в базе?
...
Рейтинг: 0 / 0
Triggers?
    #39877753
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак. Только удаление и последующее восстановление.
...
Рейтинг: 0 / 0
Triggers?
    #39877769
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaНикак. Только удаление и последующее восстановление.

да, уж....
нашел еще: сделать переменную и в триггеры насовать проверки, чтобы не выполнялись.
Это, если триггеры свои и их не до фига.

Как сделать глобальную переменную?
...
Рейтинг: 0 / 0
Triggers?
    #39877772
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaНикак. Только удаление и последующее восстановление.

и еще: как загрузить данные в живую базу, но чтобы триггеры не работали?
Особенно, если база чужая.
Понятно, что можно заскриптовать все триггеры, удалить и потом пересоздать. Это единственный варант?
...
Рейтинг: 0 / 0
Triggers?
    #39877774
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупиннашел еще: сделать переменную и в триггеры насовать проверки, чтобы не выполнялись.
Это, если триггеры свои и их не до фига.А смысл? всё равно они не редактируются, так что по-любому получить его текст. А, имея текст, проще удалить. чем создать наново, но с дополнительной проверкой.
Ролг Хупинкак загрузить данные в живую базу, но чтобы триггеры не работали?
Особенно, если база чужая.Бэкап, подмена данных, рестор.
...
Рейтинг: 0 / 0
Triggers?
    #39877817
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Akina]Ролг Хупиннашел еще: сделать переменную и в триггеры насовать проверки, чтобы не выполнялись.
Это, если триггеры свои и их не до фига.А смысл? всё равно они не редактируются, так что по-любому получить его текст. А, имея текст, проще удалить. чем создать наново, но с дополнительной проверкой.

Вот так пишут
https://mysql-0v34c10ck.blogspot.com/2011/06/how-to-disableenable-triggers-on-demand.html
...
Рейтинг: 0 / 0
Triggers?
    #39877884
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинВот так пишутПусть пишут... вот только сам MySQL про эти переменные как-то не в курсе - в документации про них ни полслова.

Вот попытка воспроизвести то, что там написано (специально взята версия 5.6, указанная в статье):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Enter password: **********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.10-log MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create table test (id int auto_increment primary key, val int);
Query OK, 0 rows affected (0.06 sec)

mysql> create trigger tr before insert on test for each row set new.val = new.id*new.id;
Query OK, 0 rows affected (0.05 sec)

mysql> insert into test values (10,10);
Query OK, 1 row affected (0.00 sec)

mysql> SET @TRIGGER_BEFORE_INSERT_CHECKS = FALSE;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test values (20,20);
Query OK, 1 row affected (0.00 sec)

mysql> SET @TRIGGER_BEFORE_INSERT_CHECKS = TRUE;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test values (30,30);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+----+------+
| id | val  |
+----+------+
| 10 |  100 |
| 20 |  400 |
| 30 |  900 |
+----+------+
3 rows in set (0.02 sec)

mysql>


Ещё вопросы есть?
...
Рейтинг: 0 / 0
Triggers?
    #39877960
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинВот так пишут
https://mysql-0v34c10ck.blogspot.com/2011/06/how-to-disableenable-triggers-on-demand.html Так там же такое:
Код: sql
1.
2.
IF ((@TRIGGER_CHECKS = FALSE)
      OR (@TRIGGER_BEFORE_INSERT_CHECKS = FALSE))

Это и есть "сделать переменную и в триггеры насовать проверки, чтобы не выполнялись"
...
Рейтинг: 0 / 0
Triggers?
    #39877998
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftЭто и есть "сделать переменную и в триггеры насовать проверки, чтобы не выполнялись"А, точно. Невнимательно посмотрел.
Не, костыль.
...
Рейтинг: 0 / 0
Triggers?
    #39878021
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все равно как-то не ясно: есть база, надо из другой базы перенести данные в нее:

1. триггеры - хоть и нельзя запретить, но, предположим как описано выше можно решить.
2. что делать с foreign keys и CONSTRAINT ? По-хорошему их тоже неплохо бы запретить до вставки и потом разрешить.
...
Рейтинг: 0 / 0
Triggers?
    #39878036
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Внешние ключи прекрасно выключаются.

Но я бы не советовал это делать, по крайней мере, без тщательной проверки входящих данных.
...
Рейтинг: 0 / 0
Triggers?
    #39878060
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупинесть база, надо из другой базы перенести данные в нее
Состояние, когда данные из другой базы добавляются к имеющимся, и при этом БД не подготовлена к тому, что на ней потребуется выполнять операцию слияния - в общем следует считать нештатным. И соответственно нет никакого повода обижаться и возмущаться, что процесс обложен граблями и требует костылей.

Ролг Хупинчто делать с foreign keysМожно отключить. Лучше не отключать. необходимость грузить данные в правильном порядке и некоторое замедление процесса загрузки - небольшая цена за гарнтию целостности данных.

Ролг Хупинчто делать с ... CONSTRAINTСмириться. Они крайне редко бывают сложными, и, следовательно, почти не тормозят процесс.
Но если вот реально упёрлось - то только так же, как с триггерами. Удалить, после слияния восстановить.
...
Рейтинг: 0 / 0
Triggers?
    #39878268
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaРолг Хупинесть база, надо из другой базы перенести данные в нее
Состояние, когда данные из другой базы добавляются к имеющимся, и при этом БД не подготовлена к тому, что на ней потребуется выполнять операцию слияния - в общем следует считать нештатным. И соответственно нет никакого повода обижаться и возмущаться, что процесс обложен граблями и требует костылей.

Ролг Хупинчто делать с foreign keysМожно отключить. Лучше не отключать. необходимость грузить данные в правильном порядке и некоторое замедление процесса загрузки - небольшая цена за гарнтию целостности данных.

Ролг Хупинчто делать с ... CONSTRAINTСмириться. Они крайне редко бывают сложными, и, следовательно, почти не тормозят процесс.
Но если вот реально упёрлось - то только так же, как с триггерами. Удалить, после слияния восстановить.

Целевая база - новая, пустая, только структура.
...
Рейтинг: 0 / 0
Triggers?
    #39878332
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинЦелевая база - новая, пустая, только структура.Пфф... А чего тогда огород городить? Прибить базу и развернуть с нуля из бэкапа.
...
Рейтинг: 0 / 0
Triggers?
    #39878359
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огорода нет, создаю базу, натягиваю структуру, а там - есть некоторые минимальные данные и триггеры есть, с того и вопрос возник.
В постгресе я делал функцию, которая запрещает/разрешает. Ну, вот.

Ну, и извечная тяга к знаниям движет
...
Рейтинг: 0 / 0
Triggers?
    #39878522
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупиннатягиваю структуру, а там - есть некоторые минимальные данные и триггеры естьНу так просто переносишь создание триггеров в конец скрипта...
...
Рейтинг: 0 / 0
Triggers?
    #39904229
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

ситуация запутанная..... весьма... но разрешима...
есть опция mysqldump --skip-triggers
в дампе автоматом добавляются флаги отключения констрейнтов
Код: sql
1.
2.
3.
4.
5.
6.
7.
-- Отключение внешних ключей в начале
-- 
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
.......
-- Включение внешних ключей
-- 
/*!40014 SET FOREIGN_KEY_CHECKS = @OLD_FOREIGN_KEY_CHECKS */;


залить без триггеров, потом сделать дамп с триггерами --triggers и --no-date

Решение в лоб всегда самое простое...
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Triggers?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]