我最近在我的应用程序中遇到了并发事务的错误。以前,复合键的自动递增是使用应用程序本身使用 PHP 实现的。然而,正如我所提到的,id 被重复了,并且发生了各种各样的问题,我后来煞费苦心地手动修复了这些问题。
现在我已经阅读了相关问题并找到了使用触发器的建议。
所以我打算实现一个有点像这样的触发器。
DELIMITER $$
CREATE TRIGGER auto_increment_my_table
BEFORE INSERT ON my_table FOR EACH ROW
BEGIN
SET NEW.id = SELECT MAX(id) + 1 FROM my_table WHERE type = NEW.type;
END $$
DELIMITER ;
但是我对并发性的怀疑仍然存在。就像这个触发器是同时执行的并且在查询时都得到了相同的 MAX(id) 怎么办?
这是处理我的问题的正确方法还是有更好的方法?