mysql - 如何在Mysql中使用触发器

标签 mysql triggers foreign-keys

伙计们,我正在探索 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 已成功创建。但是每当我尝试插入人员表时,我都会遇到外键错误。于是我把外键丢掉,就成功了。不过这个触发装置有什么用呢?您能提供一个有用的好例子吗?因为也许这不是为了更新外键而设计的,我不知道。

最佳答案

而不是尝试从 LAST_INSERT_ID() 获取值(顺便说一句,您插入一个字符串,因为它在引号中)您只需要从 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 演示

关于mysql - 如何在Mysql中使用触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17142451/

相关文章:

playframework - Play Framework -SQLite:启用外键

java - 一对多单向关系的外键约束问题

sql - ORA-00904 : "ID": invalid identifier

php - 我无法登录我的本地 Magento 副本——如何在本地软件副本中使用丢失的密码?

mysql - 如何使用 MYSQL 在查询中创建变量 LIMIT

php - 偏移量 0 对 MySQL 结果索引 64 无效(或者查询数据是无缓冲的)

MySQL触发器求和用户ID相同的两列

sql - 在 SQLite 中创建条件 SQL 触发器

php - Laravel 准备语句 UPDATE 查询

php - MySQL跨表触发器