Триггер при вставке на дубликат ключа - PullRequest
9 голосов
/ 02 июля 2010

У меня простой вопрос. У меня есть триггер для вставки значений в другую базу данных

Так, например, если есть два значения и триггер проверяет значение в Table A и вставляет в Table B

Так вот код

-- Trigger DDL Statements
USE `db`;
DELIMITER //

CREATE
DEFINER=CURRENT_USER()
TRIGGER `db`.`AFTER_INSERT_A`
AFTER INSERT ON `db`.`a`
FOR EACH ROW
BEGIN

    IF NEW.val!= NULL
    THEN

        UPDATE b SET dateRemove=CURRENT_TIMESTAMP WHERE val=NEW.val;

        INSERT INTO b (val) VALUES(NEW.val) ON DUPLICATE KEY UPDATE dateRemove=NULL, dateUpdate=CURRENT_TIMESTAMP;

    END IF;
END//

Триггер не отправляет даже любые ошибки. И у меня нет значений в B

Моя вставка

INSERT INTO a (val) VALUES(`test`) ON DUPLICATE KEY UPDATE dateUpdate=CURRENT_TIMESTAMP

У кого-нибудь есть идеи? Я попытался создать два триггера, один INSERT и другой UPDATE, Ive изменил AFTER на BEFORE, и мой стол b все еще ничего не получил. Любые идеи заранее спасибо

Ответы [ 2 ]

10 голосов
/ 04 июля 2010

Триггер, который будет запущен для запроса, такого как

INSERT INTO table (x, y, z) VALUES('x', 'y', 'z') ON DUPLICATE KEY UPDATE x=VALUES(x);

всегда должен запускаться при BEFORE INSERT триггере.

2 голосов
/ 02 июля 2010

Возможно вместо

NEW.val!= NULL

вам нужно

NEW.val IS NOT NULL

Значение никогда не равно нулю и никогда не равно нулю.

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