Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Один триггер для нескольких таблиц / 9 сообщений из 9, страница 1 из 1
27.01.2014, 16:34:27
    #38539321
windandrain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один триггер для нескольких таблиц
Здравствуйте.
Есть много таблиц, каждая со своим набором данных, и в каждой присутствуют поля id(Binary(16)) и addDate(DateTime).
При вставке данных эти поля должны заполнятся автоматически значениями UNHEX(REPLACE(UUID(), '-', '')) и NOW() соответственно.
Очень не хочется писать на каждую таблицу триггеры с одинаковым содержанием, есть ли альтернативные пути?
...
Рейтинг: 0 / 0
27.01.2014, 16:40:34
    #38539331
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один триггер для нескольких таблиц
Для первого поля других вариантов нет, насколько я в курсе. Если только полностью отказаться от UUID-ов и перейти на автоинкремент.
Для второго поля можно попробовать использовать тип TIMESTAMP .
...
Рейтинг: 0 / 0
27.01.2014, 16:45:52
    #38539346
windandrain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один триггер для нескольких таблиц
miksoftДля второго поля можно попробовать использовать тип TIMESTAMP .
TIMESTAMP не подходит, нужна дата, не зависящая от часового пояса.
...
Рейтинг: 0 / 0
27.01.2014, 17:04:53
    #38539378
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один триггер для нескольких таблиц
windandrainmiksoftДля второго поля можно попробовать использовать тип TIMESTAMP .
TIMESTAMP не подходит, нужна дата, не зависящая от часового пояса.У вас разные клиенты в разных часовых поясах?
...
Рейтинг: 0 / 0
27.01.2014, 17:26:14
    #38539440
windandrain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один триггер для нескольких таблиц
miksoftУ вас разные клиенты в разных часовых поясах?
Да
...
Рейтинг: 0 / 0
27.01.2014, 17:33:29
    #38539466
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один триггер для нескольких таблиц
windandrainmiksoftУ вас разные клиенты в разных часовых поясах?
ДаНу тогда либо явно переводить дату в нужный часовой пояс, либо DateTime и триггер.
...
Рейтинг: 0 / 0
27.01.2014, 18:13:30
    #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
27.01.2014, 20:04:16
    #38539657
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один триггер для нескольких таблиц
windandrainЗдравствуйте.
Есть много таблиц, каждая со своим набором данных, и в каждой присутствуют поля id(Binary(16)) и addDate(DateTime).
При вставке данных эти поля должны заполнятся автоматически значениями UNHEX(REPLACE(UUID(), '-', '')) и NOW() соответственно.
Очень не хочется писать на каждую таблицу триггеры с одинаковым содержанием, есть ли альтернативные пути?

Варианты:

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

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


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