2012-04-27 24 views
16

podemos utilizar un disparador de MySQL en la actualización de columnas específicas, que actualiza otra columna en la misma mesa (misma fila)MySQL disparador 'actualización de la columna' sintaxis

create trigger my_trigger 
BEFORE UPDATE OF col1, col2 ON TABLE_NAME 
for each row 
set NEW.col3 = NEW.col3 +1; 

He probado el código anterior utilizando UPDATE OF col1, col2. No está funcionando en MySQL. ¿Cuál es la sintaxis correcta? ¿Alguien puede señalarme algunos ejemplos?

Respuesta

20

No se puede especificar que el gatillo se va a ejecutar sólo en la actualización de columnas específicas (una UPDATE afecta a la totalidad del expediente), pero se puede probar las columnas que se han actualizado dentro de su disparador:

DELIMITER ;; 

CREATE TRIGGER my_trigger BEFORE UPDATE ON TABLE_NAME FOR EACH ROW 
IF NOT (NEW.col1 <=> OLD.col1 AND NEW.col2 <=> OLD.col2) THEN 
    SET NEW.col3 = NEW.col3 + 1; 
END IF;; 

DELIMITER ; 
+0

Gracias, ¿pero esto es solo específico de mysql? – cldy1020

+0

@ ms1020: ¿Qué otros RDBMS le interesan? – eggyal

+4

Ahora mismo solo puedo usar mysql. Solo quería saber si cualquier otro RDBMS tiene esta limitación. Sé que ORACLE admite la actualización de la columna. – cldy1020

Cuestiones relacionadas