2010-07-02 16 views
9

Tengo una pregunta simple. Ive consiguió un disparador para insertar los valores en otra base de datosDisparador en INSERTAR EN LLAVE DUPLICADA

Así por ejemplo, si hay dos valores y el gatillo está comprobando el valor de Table A e insertar en Table B

Así que aquí es el código

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

El disparador dosent incluso arrojar cualquier error. Y no tengo valores en B

Mi inserto está

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

Acaso alguno tiene alguna idea. He intentado crear dos disparadores uno INSERT y el otro UPDATE, he cambiado el AFTER al BEFORE y mi tabla b todavía no tiene nada. Cualquier idea gracias de antemano

+0

Gran pregunta, y llegar a ser un viejo. Entonces, ¿qué pasa si quieres obtener Oval.val y NEW.val mientras estás dentro del gatillo? –

Respuesta

10

El disparador para ser ejecutado en una consulta como

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

necesitan un rodaje en un disparador BEFORE INSERT.

+2

Sé que esto es antiguo, pero ¿tiene alguna prueba de que esto sea cierto? – jcoffland

2

Tal vez en lugar de

NEW.val!= NULL 

que necesitan

NEW.val IS NOT NULL 

Un valor nunca es igual a cero, y nunca no es igual a null.

+0

Perdón por la respuesta tardía, intentaré esto y publicaré una actualización –

+0

no no insertos en la tabla B –

Cuestiones relacionadas