停止两个连接运行相同的查询

时间:2012-10-16 15:34:18

标签: mysql

我在我的网站中使用此查询来获取下一个自动增量,但问题是两个或多个连接可以同时运行此查询,并且它们都具有相同的AUto-Increment值。

SHOW TABLE STATUS LIKE 'TABLE_ORDERS';

有什么方法可以阻止两个或多个连接同时运行此查询?

非常感谢!!

Edit

然后,使用此自动增量的值将记录存储在另一个表'收据'中。如果两个连接从Orders表中获得相同的自动增量值,我最终在Receipt表中有两行具有相同的值。

2 个答案:

答案 0 :(得分:1)

您可以将其放入存储过程并添加

SELECT SLEEP(2);

在其中。

  

当前一个查询需要暂停时很有用,例如,当一个从服务器重新连接到主服务器时。

MySQL SLEEP

答案 1 :(得分:1)

你不应该直接使用自动增量值,因为这总会导致你所描述的各种竞争条件。

相反,您应该插入一条记录并检查LAST_INSERT_ID()以查看您的行发出了哪个标识符。然后可以将此值安全地转换到其他表中。

好消息是LAST_INSERT_ID()值表示每个连接上最后一行的插入ID,因此不存在竞争条件的风险。