MySQL / MyISAM中的原子查询

时间:2012-09-14 21:18:24

标签: mysql myisam

假设我想使用MySQL w / MyISAM引擎从表中选择一个最大值,然后根据此值插入一个新记录,其最大值为+ 1 (在对其应用转换后) 。我不希望任何其他事务同时发生,读取相同的最大值,然后尝试插入相同的新记录。

如何防止这种情况发生?

我需要LOCK整张桌子,还是什么?


要明确的是,我非常肯定我不能在AUTO_INCREMENT使用{{1}},除非我可以将其执行的操作重新定义为比“加一”更复杂的操作。

1 个答案:

答案 0 :(得分:3)

LOCK TABLES `tbl` WRITE;
INSERT INTO `tbl` (`id`, `foo`) SELECT MAX(`id`)+1, 'bar' FROM `tbl`;
UNLOCK TABLES;

但如果它是标准主键/ ID类型字段,则应使用AUTO_INCREMENT