0

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

SHOW TABLE STATUS LIKE 'TABLE_ORDERS';

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

非常感谢!!

Edit

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

4

2 回答 2

1

你可以把它放在一个存储过程中并添加一个

SELECT SLEEP(2);

在里面。

这在需要暂停先前的查询时很有用,例如,当从站重新连接到主站时。

MySQL 睡眠

于 2012-10-16T15:37:08.813 回答
1

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

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

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

于 2012-10-16T16:26:51.027 回答