执行以下事务时出现以下错误。
错误:#1452 - 无法添加或更新子行:外键约束失败(crowdsource
。posts_category
,CONSTRAINT FK_posts_pcategory
FOREIGN KEY(post_id
)参考posts
(post_id
)ON更新更新CASCADE上的操作
交易:
启动交易;
从posts
中选择@id:= max(post_id);
设置@id = @ id + 1;
INSERT INTO posts
(post_id
,content
,url
,post_time
)VALUES(@ id,'hello','',now());
SELECT *来自帖子;
INSERT INTO posts_category
(post_id
,category_id
)VALUES(@ id,1001),(@ id,1002);
提交;
我的数据库架构在posts
和posts_category
表之间有FK('post_id')
我是否需要保持SET FOREIGN_KEY_CHECKS = 0;在插入post_category表之前?
答案 0 :(得分:1)
从手册,here和here也是如此。除非您想真正掷骰子,否则强烈建议使用auto_increment
列。
这意味着:select @id := max(post_id) ...
是不安全的。这是一个手动的,容易出错的程序员增量。从理论上讲,许多用户可能只是同时运行它,现在我们都拥有相同的ID。
相反,请使用
SET @lastid = LAST_INSERT_ID();
...插入后,可以安全地获取表格插入中的id
(可能是)接下来会出现的。{/ p>
至于你的FK问题,请不要更新或插入违反你明智地放在那里的参照完整性的行。
其他评论:为什么在交易过程中,意味着速度快,你做的是select * from posts
吗?这甚至有用吗?