MYSQL外键约束检查事务?

时间:2015-09-13 01:17:38

标签: mysql

执行以下事务时出现以下错误。 错误:#1452 - 无法添加或更新子行:外键约束失败(crowdsourceposts_category,CONSTRAINT FK_posts_pcategory FOREIGN KEY(post_id)参考postspost_id)ON更新更新CASCADE上的操作

交易:

启动交易; 从posts中选择@id:= max(post_id); 设置@id = @ id + 1; INSERT INTO postspost_idcontenturlpost_time)VALUES(@ id,'hello','',now()); SELECT *来自帖子; INSERT INTO posts_categorypost_idcategory_id)VALUES(@ id,1001),(@ id,1002); 提交;

我的数据库架构在postsposts_category表之间有FK('post_id')

我是否需要保持SET FOREIGN_KEY_CHECKS = 0;在插入post_category表之前?

1 个答案:

答案 0 :(得分:1)

从手册,herehere也是如此。除非您想真正掷骰子,否则强烈建议使用auto_increment列。 这意味着:select @id := max(post_id) ...是不安全的。这是一个手动的,容易出错的程序员增量。从理论上讲,许多用户可能只是同时运行它,现在我们都拥有相同的ID。

相反,请使用

SET @lastid = LAST_INSERT_ID();

...插入后,可以安全地获取表格插入中的id(可能是)接下来会出现的。{/ p>

至于你的FK问题,请不要更新或插入违反你明智地放在那里的参照完整性的行。

其他评论:为什么在交易过程中,意味着速度快,你做的是select * from posts吗?这甚至有用吗?