2012-08-05 19 views
14

Alcance: dos tablas. Cuando se crea un nuevo usuario, tienen cierta información sobre ellos almacenada en una segunda tabla (Esto se hizo usando un activador también, funciona como se esperaba). Aquí hay un ejemplo de la estructura y relación de mi mesa.Disparo de MySQL: Eliminar de la tabla DESPUÉS DE ELIMINAR

Tabla 1->clientes

+-----+---------+-----+ 
+ id + name + val + 
+=====+=========+=====+ 
+ 37 + george + x + 
+-----+---------+-----+ 
+ 38 + sally + y + 
+-----+---------+-----+ 

Tabla 2 ->patron_info

+----+-----+----------+ 
+ id + pid + name + 
+----+-----+----------+ 
+ 1 + 37 + george + 
+----+-----+----------+ 
+ 2 + 38 + sally + 
+----+-----+----------+ 

El administrador puede gestionar los clientes. Cuando eligen eliminar un usuario, el usuario se elimina de la tabla patrons. En este punto, no ocurre nada con tabla 2patron_info.

Estoy simplemente tratando de crear un disparador para eliminar de la tabla 2, cuando la tabla 1 tiene un elemento eliminado. Aquí es lo que he intentado ...

Inicialmente, trato de soltar el gatillo si existe (sólo para limpiar el aire) ...

DROP TRIGGER IF EXISTS log_patron_delete; 

entonces trato de crear el gatillo después. ..

CREATE TRIGGER log_patron_delete AFTER DELETE on patrons 
FOR EACH ROW 
BEGIN 
DELETE FROM patron_info 
    WHERE patron_info.pid = patrons.id 
END 

En este punto, me sale un error de sintaxis 1046: Check syntax near END on line 6. No sé cuál es el error en este punto. Probé varias variaciones diferentes. Además, ¿estoy obligado a usar un delimitador aquí?

¿Alguien puede ayudar a restaurar mi cordura?

+0

¿Qué ayuda necesitarías aquí? ¿Cuál es tu verdadera pregunta? –

+0

@vivek_jonam El activador de eliminación no se activará. Me da un error de sytnax en 'END' en la línea 6. Además, ¿lo envuelvo en un 'DELIMETER $$'? – Ohgodwhy

+1

@Ohgodwhy: solo una nota sobre la pregunta de Memcache: se vinculó solo después de que la agregué. No estaba en "Relacionados" antes de hacerlo. – zerkms

Respuesta

33

Creo que hay un error en el código de activación. Como que desea borrar todas las filas con el ID del usuario eliminado, usted tiene que utilizar old.id (De lo contrario sería eliminar otros identificadores)

probar este como el nuevo disparador:

CREATE TRIGGER log_patron_delete AFTER DELETE on patrons 
FOR EACH ROW 
BEGIN 
DELETE FROM patron_info 
    WHERE patron_info.pid = old.id; 
END 

Dont Olvida el ";" en la consulta de eliminación. Además, si está ingresando el código TRIGGER en la ventana de la consola, también use los delimitadores.

+2

Maaaaaaaaaaaaaaaaaan. Todo terminó siendo el punto y coma en mi cláusula WHERE. Qué tonto soy. Gracias por ese vivek, ¡es apreciado! – Ohgodwhy

+1

¿Por qué utilizar un bloque de instrucción compuesto para una sola instrucción? No hay ningún requisito en la sintaxis ['CREATE TRIGGER'] (http://dev.mysql.com/doc/refman/5.6/en/create-trigger.html) para hacerlo. – Air

+0

no te olvides del ";" - debería estar en BOLD – Ulterior

-1
create trigger doct_trigger 
after delete on doctor 
for each row 
delete from patient where patient.PrimaryDoctor_SSN=doctor.SSN ; 
5

¿Por qué no se establece ON DELETE CASCADE en clave externa patron_info .pid?

+0

Creo que lo mismo cuando leo esto ... –

Cuestiones relacionadas