Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Trigger mysql

Estas en el tema de Trigger mysql en el foro de Bases de Datos General en Foros del Web. Hola, Estoy creando un trigger que quiero que se ejecute siempre que se haga un insert o update en una tabla. El trigger es CREATE ...
  #1 (permalink)  
Antiguo 10/10/2008, 05:18
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 19 años, 8 meses
Puntos: 4
Trigger mysql

Hola,

Estoy creando un trigger que quiero que se ejecute siempre que se haga un insert o update en una tabla.
El trigger es

CREATE TRIGGER `projectes` AFTER INSERT OR UPDATE ON projects INSERT INTO projects_log
SET projects_log.project_id = NEW.project_id,
projects_log.project_short_name = NEW.project_short_name,
projects_log.project_creation = TIMESTAMP( )


Algo esta mal pero no veo el que.
Esto me produce el error

#1064 - Algo estᠥquivocado en su sintax cerca 'TRIGGER `projectes` after insert or update on projects
insert ' en la linea 1


Gracias de antemano

Saludos
__________________
La ficción es y será mi única realidad
  #2 (permalink)  
Antiguo 10/10/2008, 10:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 2 meses
Puntos: 2658
Respuesta: Trigger mysql

Está mal escrito.
Te faltan varias partes:
Código sql:
Ver original
  1. DROP TRIGGER IF EXISTS projectes;
  2. DELIMITER $$
  3. CREATE TRIGGER `projectes` AFTER INSERT OR UPDATE ON projects
  4. FOR EACH ROW
  5. BEGIN
  6. INSERT INTO projects_log
  7. SET projects_log.project_id = NEW.project_id,
  8. projects_log.project_short_name = NEW.project_short_name,
  9. projects_log.project_creation = TIMESTAMP( )
  10. END$$
  11. DELIMITER ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 16/10/2008, 05:34
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 19 años, 8 meses
Puntos: 4
Respuesta: Trigger mysql

Hola,

En primer lugar gracias por la respuesta.
Pero he probado el código que me has puesto y me sigue dando error.

#1064 - You have #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRIGGER IF EXISTS projectes' at line 1


Tambien comentar si es posible para mi version de mysql que es la 4.1.22

Gracias

Saludos
__________________
La ficción es y será mi única realidad
  #4 (permalink)  
Antiguo 16/10/2008, 06:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 2 meses
Puntos: 2658
Respuesta: Trigger mysql

Hubieras comenzado por allí.
MySQL 4.1.22 no soporta triggers... Los triggers fueron implementados en la versión 5 a partir de la release 5.0.2
Ante cualquier duda, leer el manual de referencia de las versión 4.1.22: 1.8.5.4. Stored Routines and Triggers.

Respecto a la sintaxis de lo que te puse, tienes que mirar con cuidado tu mismo y ver si se desliza algún error que yo no me percatara.
Fijate que en la línea 9 no cerré bien la sentencia. Le está faltando el ";" final.
Además yo simplemente copié tu ejemplo sin mirar bien, y en realidad estaba muy mal escrita: SET es una clausula de UPDATE, no de INSERT, y en el INSERT, a menos que impliques todos los campos del registro, debes definri a qué campos ingresaras los valores.
La sintaxis correcta sería:

Código SQL:
Ver original
  1. DELIMITER $$
  2. DROP TRIGGER IF EXISTS projectes$$
  3. CREATE TRIGGER `projectes` AFTER INSERT OR UPDATE ON projects
  4. FOR EACH ROW
  5. BEGIN
  6. INSERT INTO projects_log(project_id, project_short_name, project_creation)
  7. VALUES (NEW.project_id, NEW.project_short_name,TIMESTAMP( ) );
  8. END$$
  9. DELIMITER ;

Si lo que debes hacer es actualizar, la cosa sería mas o menos así:


Código SQL:
Ver original
  1. DELIMITER $$
  2. DROP TRIGGER IF EXISTS projectes$$
  3. CREATE TRIGGER `projectes` AFTER INSERT OR UPDATE ON projects
  4. FOR EACH ROW
  5. BEGIN
  6. INSERT INTO projects_log(project_id, project_short_name, project_creation)
  7. VALUES (NEW.project_id, NEW.project_short_name,TIMESTAMP( ) )
  8. ON DUPLICATE KEY UPDATE project_creation = TIMESTAMP( ) ;
  9. END$$
  10. DELIMITER ;

En este caso estoy suponiendo que project_id Y project_short_name no cambian en la actualización, sino solamente la fecha del proyecto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 16/10/2008 a las 06:41
  #5 (permalink)  
Antiguo 17/10/2008, 01:47
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 19 años, 8 meses
Puntos: 4
Respuesta: Trigger mysql

Muchisimas gracias por toda la explicacion. Si se me migra a mysql 5 no dudes que lo aplicare.

Un saludo y gracias de nuevo
__________________
La ficción es y será mi única realidad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:55.