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