Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Triggers? / 19 сообщений из 19, страница 1 из 1
15.10.2019, 17:45
    #39876700
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Triggers?
Если я правильно понял:
триггеров на одно событие может быть несколько, порядок их выполнения не должен быть важен, но все-таки - какой?
В зависимости от выбранного типа ENGINE поведение триггера, точнее результаты его работы могут кардинально отличаться.
...
Рейтинг: 0 / 0
15.10.2019, 17:57
    #39876706
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Triggers?
Триггеры выполняются в порядке их создания, если не задано иное при создании триггера (для создаваемого триггера можно задать, перед каким существующим его поместить).
...
Рейтинг: 0 / 0
17.10.2019, 13:48
    #39877681
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Triggers?
Есть база, хочу перенести данные из другой базы (не MySQL, MariaDB).

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

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

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

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

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

Вот так пишут
https://mysql-0v34c10ck.blogspot.com/2011/06/how-to-disableenable-triggers-on-demand.html
...
Рейтинг: 0 / 0
17.10.2019, 19:13
    #39877884
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Triggers?
Ролг ХупинВот так пишутПусть пишут... вот только сам 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
18.10.2019, 00:30
    #39877960
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Triggers?
Ролг ХупинВот так пишут
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
18.10.2019, 08:09
    #39877998
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Triggers?
miksoftЭто и есть "сделать переменную и в триггеры насовать проверки, чтобы не выполнялись"А, точно. Невнимательно посмотрел.
Не, костыль.
...
Рейтинг: 0 / 0
18.10.2019, 09:30
    #39878021
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Triggers?
Все равно как-то не ясно: есть база, надо из другой базы перенести данные в нее:

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

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

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

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

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

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

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

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

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

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


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