MySQL:插入Max(col)+1 - 没有竞争条件 - 消息收件箱

时间:2016-07-27 22:40:33

标签: mysql

我设置了一个收件箱消息(innodb)表,其中“id”是主索引,自动增量。每行都是单独的消息。我有一个名为“conversation_id”的第二列,它是发送方/接收方之间的一组消息的ID。对话中的所有消息都具有相同的conversation_id编号。

问题:我如何进行MySQL插入,找到最大的“conversation_id”号并加1(Max(col)+ 1) - 并且没有竞争条件?竞争条件是一个大问题,因为数百人每分钟都会发送消息,如果发送消息同时发送消息,我不希望多个用户声称同样的“conversation_id”。

1 个答案:

答案 0 :(得分:0)

这是一个典型的stackoverflow问题示例,它询问答案而不是问题。

您无法“找到最大的conversation_id号码并为其添加1(Max(col)+ 1) - 并且没有竞争条件”。这不是你应该怎么做的。

相反,您的问题应该是“如何以每个新行接收唯一ID的方式向表中添加行,以便按顺序排序ID。”

在任何体面的RDBMS中解决此问题的正确方法是使用所谓的SEQUENCE。 (仔细看看。)

MySQL不支持序列,因此如果必须使用MYSQL,则可用的解决方案是标识(“auto_increment”)列。 (仔细看看。)