我有以下架构:
用户表:
+----------------+--------------+------+-----+---------+----------------+
| 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表中的user
是create 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):无法添加或更新子行:外键约束失败(
student
。student_ibfk_1
,约束user_id
外部键(user
)参考user_id
(CopyLocal = false
))
答案 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()。而且我在此过程中忘记了按键的问题,但是这里显然有几处错误。我想。
我也不会介意关于我的查询的第二意见。但据我测试,它是正确的。
希望有帮助。