我在我的网站中使用此查询来获取下一个自动增量,但问题是两个或多个连接可以同时运行此查询,并且它们都具有相同的 AUto-Increment 值。
SHOW TABLE STATUS LIKE 'TABLE_ORDERS';
有什么方法可以阻止两个或多个连接同时运行此查询吗?
非常感谢!!
Edit
此自动增量的值随后用于将记录存储在另一个表“收据”中。如果两个连接从 Orders 表中获得相同的自动增量值,则最终 Receipt 表中的两行具有相同的值。
最佳答案
您不应该直接使用自动增量值,因为这总是会导致您所描述的竞争条件。
相反,您应该插入一条记录并检查 LAST_INSERT_ID()
以查看向您的行颁发了哪个标识符。然后可以将该值安全地转置到其他表中。
好消息是 LAST_INSERT_ID()
值代表每个连接最后一行的插入 ID,因此应该不存在竞争条件的风险。
关于mysql - 阻止两个连接运行相同的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12918289/