Вставьте в ту же таблицу триггер mysql - PullRequest
0 голосов
/ 14 декабря 2011

Мне нужно вставлять строку скидки в таблицу каждый раз, когда я вставляю строку в ту же таблицу. Теперь я знаю, что это может закончиться бесконечным циклом, но я поставил чеки, чтобы при вставке строки скидки ничего не вставлялось.

Mysql, похоже, не позволяет этого. Он даже не вставляет в таблицу, не говоря уже о срабатывании триггера

Есть предложения, как это сделать?

Ответы [ 3 ]

4 голосов
/ 14 декабря 2011

Вы не можете изменить таблицу (кроме текущей строки) в триггере, прикрепленном к этой таблице.

Одним из решений является вставка в другую таблицу и включение этого триггера для вставки 2 строк в интересующую вас таблицу.

Если вы сделаете другую таблицу blackhole, вам не придется беспокоиться о хранилище.

DELIMITER $$

CREATE TRIGGER ai_bh_test_each AFTER INSERT ON bh_test FOR EACH ROW
BEGIN
  INSERT INTO table1 (field1, field2, ...) VALUES (new.field1, new.field2, ....);
  INSERT INTO table1 ... values for the second row
END $$

DELIMITER ;
2 голосов
/ 14 декабря 2011

Почему бы вам просто не изменить свой код INSERT на что-то вроде этого? :

INSERT INTO table1 (field1, field2, ...) 
VALUES ( @item, @price, ....)
     , ( @item, @discount, ...) ;

Другое дело - переоценить вашу структуру данных. Похоже, что из-за ограниченной информации, которую вы предоставили, она не нормализована. Вы храните два типа информации в таблице.

Возможно, вы можете объединить две строки (которые нужно вставлять каждый раз) в одну, добавив несколько столбцов в таблицу.

Или разделив таблицу на две таблицы, одну для "обычных" строк товаров и одну для товаров со скидкой.

2 голосов
/ 14 декабря 2011

Это не разрешено в MySQL.

Одним из решений было бы включение триггера два раза в другую таблицу.Затем вы выполняете операции записи и обновления в таблицу записи и чтения из таблицы управляемого чтения триггера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...