2010-07-02 12 views
9

Mam proste pytanie. Ive got a spust do wstawienia wartości do innej bazy danychTrigger na INSERT ON DUPLICATE KEY

Tak na przykład, jeśli istnieją dwie wartości, a spust jest sprawdzenie wartości w Table A i wstawienie do Table B

Więc tutaj jest kod

-- 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// 

Wyzwalanie powoduje nawet błędy. I nie mam wartości w B

Moja Insert jest

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

Czy ktoś ma jakieś pomysły. Ive próbowałem tworzenie dwóch wyzwala jeden INSERT i inny UPDATE, Ive zmieniony AFTER do BEFORE i mój stół b nadal nie ma nic. Wszelkie pomysły z góry dzięki

+0

Świetne pytanie, a zostaniesz staruszkiem. A co jeśli chcesz pobrać zarówno OLD.val, jak i NEW.val, gdy znajdujesz się w spustu? –

Odpowiedz

10

Spust do uruchomienia na zapytania takie jak

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

zawsze musi być prowadzony na BEFORE INSERT spust.

+2

Wiem, że to jest stare, ale czy masz dowód, że to prawda? – jcoffland

2

Może zamiast

NEW.val!= NULL 

trzeba

NEW.val IS NOT NULL 

Wartość nigdy nie jest równy null, a to nigdy nie jest równa null.

+0

Przepraszamy za spóźnioną odpowiedź, spróbuję tego i opublikuję aktualizację –

+0

nie ma wstawek w tabeli B –

Powiązane problemy