错误:1452-添加触发器后插入操作失败

时间:2020-04-04 06:24:55

标签: mysql

我有以下架构:

用户表:

+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| student_id     | int          | NO   | PRI | NULL    | auto_increment |
| user_id        | int          | YES  | MUL | NULL    |                |
| specialization | varchar(50)  | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+

学生桌:

user_id

student表中的usercreate trigger after_user_insert -> after insert on user for each row -> begin -> if new.account_type like 'student' then -> insert into student(user_id) values (LAST_INSERT_ID()); -> end if; -> end;// 表中的外键。 依次将数据添加到两个表中的过程一直很好,直到我介绍了此触发器

studentmanager

现在,它给出了

错误1452:(23000):无法添加或更新子行:外键约束失败(studentstudent_ibfk_1,约束user_id外部键(user )参考user_idCopyLocal = false))

1 个答案:

答案 0 :(得分:2)

这真让我花了好些时间才能明白。

CREATE TRIGGER after_user_insert
AFTER insert ON user
FOR EACH ROW
insert into student(user_id) SELECT (user_id) FROM user 
WHERE new.account_type LIKE 'student' ORDER BY user_id DESC LIMIT 1;

结果:

模式(MySQL v8.0)

**Query #1**

    SELECT * FROM user;

| user_id | account_type |
| ------- | ------------ |
| 1       | student      |
| 2       | student      |
| 3       | not          |
| 4       | student      |
| 5       | student      |
| 6       | not          |
| 7       | not          |
| 8       | student      |

---
**Query #2**

    SELECT * FROM student;

| student_id | user_id |
| ---------- | ------- |
| 1          | 1       |
| 2          | 2       |
| 3          | 4       |
| 4          | 5       |
| 5          | 8       |

---

View this working example on DB Fiddle

我不是专家,我这样做很有趣,所以如果我错了,请有人纠正我。我相信没有SELECT就无法拥有LIKE。以及LAST_INSERT_ID()。而且我在此过程中忘记了按键的问题,但是这里显然有几处错误。我想。

我也不会介意关于我的查询的第二意见。但据我测试,它是正确的。

希望有帮助。