powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Один триггер для нескольких таблиц
9 сообщений из 9, страница 1 из 1
Один триггер для нескольких таблиц
    #38539321
windandrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Есть много таблиц, каждая со своим набором данных, и в каждой присутствуют поля id(Binary(16)) и addDate(DateTime).
При вставке данных эти поля должны заполнятся автоматически значениями UNHEX(REPLACE(UUID(), '-', '')) и NOW() соответственно.
Очень не хочется писать на каждую таблицу триггеры с одинаковым содержанием, есть ли альтернативные пути?
...
Рейтинг: 0 / 0
Один триггер для нескольких таблиц
    #38539331
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для первого поля других вариантов нет, насколько я в курсе. Если только полностью отказаться от UUID-ов и перейти на автоинкремент.
Для второго поля можно попробовать использовать тип TIMESTAMP .
...
Рейтинг: 0 / 0
Один триггер для нескольких таблиц
    #38539346
windandrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftДля второго поля можно попробовать использовать тип TIMESTAMP .
TIMESTAMP не подходит, нужна дата, не зависящая от часового пояса.
...
Рейтинг: 0 / 0
Один триггер для нескольких таблиц
    #38539378
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
windandrainmiksoftДля второго поля можно попробовать использовать тип TIMESTAMP .
TIMESTAMP не подходит, нужна дата, не зависящая от часового пояса.У вас разные клиенты в разных часовых поясах?
...
Рейтинг: 0 / 0
Один триггер для нескольких таблиц
    #38539440
windandrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftУ вас разные клиенты в разных часовых поясах?
Да
...
Рейтинг: 0 / 0
Один триггер для нескольких таблиц
    #38539466
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
windandrainmiksoftУ вас разные клиенты в разных часовых поясах?
ДаНу тогда либо явно переводить дату в нужный часовой пояс, либо DateTime и триггер.
...
Рейтинг: 0 / 0
Один триггер для нескольких таблиц
    #38539549
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Триггеры придётся писать на каждую таблицу. А вот логику можно и сборать в одну (или несколько) функцию, при необходимости передавая туда требуемые данные:

Код: 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.
46.
47.
48.
49.
50.
51.
52.
mysql> create table t1(id int, val int);
Query OK, 0 rows affected (0.49 sec)

mysql> create table t2(id int, val int);
Query OK, 0 rows affected (0.22 sec)

mysql> create function genval(i int) returns int not deterministic return 10*rand() + i;
Query OK, 0 rows affected (0.24 sec)

mysql> delimiter @@
mysql> create trigger tt1 before insert on t1
    -> for each row begin
    -> set new.val = genval(new.id);
    -> end;
    -> @@
Query OK, 0 rows affected (0.07 sec)

mysql> create trigger tt2 before insert on t2
    -> for each row begin
    -> set new.val = genval(new.id);
    -> end;
    -> @@
Query OK, 0 rows affected (0.04 sec)

mysql> delimiter ;
mysql> insert into t1(id) values (11),(22);
Query OK, 2 rows affected (0.08 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into t2(id) select 33 union select 44;
Query OK, 2 rows affected (0.04 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t1;
+------+------+
| id   | val  |
+------+------+
|   11 |   13 |
|   22 |   31 |
+------+------+
2 rows in set (0.03 sec)

mysql> select * from t2;
+------+------+
| id   | val  |
+------+------+
|   33 |   42 |
|   44 |   52 |
+------+------+
2 rows in set (0.00 sec)

mysql>
...
Рейтинг: 0 / 0
Один триггер для нескольких таблиц
    #38539657
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
windandrainЗдравствуйте.
Есть много таблиц, каждая со своим набором данных, и в каждой присутствуют поля id(Binary(16)) и addDate(DateTime).
При вставке данных эти поля должны заполнятся автоматически значениями UNHEX(REPLACE(UUID(), '-', '')) и NOW() соответственно.
Очень не хочется писать на каждую таблицу триггеры с одинаковым содержанием, есть ли альтернативные пути?

Варианты:

напиши 20 триггеров, из триггеров вызывай процедуру, где всё и делай.

Напиши маленькую программку - генератор триггеров, например, на python + cheetah (т.е. фактически на cheetah, но там если что внутри надо программного писать -- это python). И все триггера сгенерируй.
...
Рейтинг: 0 / 0
Один триггер для нескольких таблиц
    #38540169
windandrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо! :)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Один триггер для нескольких таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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