2012-11-18 5 views
1

У меня есть 3 таблицы, tbl_image, tbl_vehicle_image и tbl_vehicleприсоединиться к команде обновления в триггере

tbl_vehicle_image устраняет многие-многие отношения между tbl_image и tbl_vehicle

tbl_vehicle имеет LAST_MODIFIED_DATE

Как создать триггер, который, когда я изменяю, например, tbl_image.img_lnk, использует tbl_vehicle_image, чтобы найти все записи в tbl_vehicle, которые используют это изображение, и установить их last_modified_date в NOW()?

ответ

1

Вы можете сделать это:

DELIMITER $$; 

create TRIGGER UpdateLastmodifiedDate AFTER UPDATE ON tbl_image 
FOR EACH ROW 
BEGIN 
    UPDATE tbl_vehicle v 
    INNER JOIN tbl_vehicle_image vi ON v.vehicleId = vi.vehicleID 
    INNER JOIN tbl_image i ON vi.imageid = i.id 
    SET v.lastmodified_date = NOW() 
    WHERE i.img_lnk = NEW.img_lnk; 
END$$ 
+0

Я отправлю ее, так как обсуждает этот ответ, я добавил DELIMITER $$ наверху и положил точку с запятой на последней строке (ГДЕ я .....), и проблемы синтаксиса исчезли –

+0

yep, только что получил он работает, прекрасно работает :) –

2
CREATE TRIGGER `trig_after_image_update` AFTER UPDATE ON `tbl_image` 
FOR EACH ROW 
    if old.img_lnk<>NEW.img_lnk 
    then 
     update tbl_vehicle set last_modified_date=NOW() where id in (select vehicle_id from tbl_vehicle_image where image_id=OLD.id); 
    end if; 

Я не все имена полей вашей таблицы так изменить их. Я использовал id как первичный ключ для соответствующей таблицы.

+0

для обоих этих ответов Я получаю «синтаксическую ошибку, неожиданный конец» –

+0

@KellyLarsen - попробуйте 'END $$' вместо' END'. –

+0

@KellyLarsen Используйте 'set delimiter $$' в стартовой строке. –

Смежные вопросы