2013-06-17 2 views
0

Ребята Я изучаю триггеры в MySQL, и я немного смущен. Я создал эту таблицу:Как использовать триггеры в Mysql

persons 

pid #primary key 
last_name 
first_name 

затем эту таблицу:

employee_hierarchy 

emp_id #primary key 
pid #foreign key 
role 

И создал этот триггер:

CREATE TRIGGER after_person_insert 
AFTER INSERT ON persons 
FOR EACH ROW 
INSERT INTO employee_hierarchy 
VALUES('','LAST_INSERT_ID()','employee'); 

TRIGGER успешно создан. Но всякий раз, когда я пытаюсь вставить в таблицу лиц, у меня есть чужой ключ. Поэтому я бросил иностранный ключ, и это было успешным. Но зачем использовать этот триггер? Можете ли вы разместить хороший пример, где это полезно? потому что, возможно, это не предназначено для обновления внешних ключей, я не знаю.

+0

пожалуйста отправьте сообщение об ошибке вы получите – Stephan

ответ

1

Вместо того чтобы пытаться получить значение от LAST_INSERT_ID() (BTW вы вставляете строку, поскольку она находится в кавычках) вам просто нужно прочитать присвоенное значение от NEW.pid. Он доступен вам в этот момент AFTER INSERT времени.

CREATE TRIGGER after_person_insert 
AFTER INSERT ON persons 
FOR EACH ROW 
    INSERT INTO employee_hierarchy 
    VALUES(NULL, NEW.pid, 'employee'); 

Вот SQLFiddle демо

+0

Спасибо, что решить мою проблему. Но почему 'LAST_INSERT_ID' не будет работать? –

+0

@ user2492415 Вы очень приветствуетесь :) 'LAST_INSERT_ID()' не будет работать для вас, так как вы не произвели никаких инструкций 'INSERT' в контексте триггера. В этом конкретном случае он всегда будет возвращать '0'. – peterm

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