避免在mysql中并发插入多个相同的id

时间:2013-09-03 17:53:26

标签: mysql

我在申请时遇到问题。我有一个表,一个字段名称是registration_no。在插入新记录之前,我将registration_no字段增加1,然后在该表中插入递增的registration_no。问题是当某些用户同时插入数据时,某些registration_no值已相同。我该如何防止这种情况。

2 个答案:

答案 0 :(得分:1)

您想使用sequence

两个警告:

  • 本文中描述的AUTO_INCREMENT功能是非标准功能,在迁移到其他数据库时可能会出现可移植性问题。

  • 如果INSERT被中止,序列中的数字仍会被消耗,因此您可能会在序列中出现漏洞。如果这是不可接受的,请为主(代理)密钥使用自动生成的序列,并将该密钥的单独映射添加到“官方”序列号,从而在该表的索引中强制执行唯一性。

另一种方法是在数据库中强制执行UNIQUE,使用适当的TRANSACTION ISOLATION LEVEL并添加应用程序逻辑来处理INSERT的失败。

答案 1 :(得分:0)

您可以让数据库为您设置registration_no,而不是在代码中执行此操作。您可以在insert语句的结果中获取registration_no,这将解决您的并发问题。

alter table myTable modify column registration_no int auto_increment

您的查询结果将是记录的索引。 IF registration_no不是您根据返回的索引ID查询自动生成的registration_no所需的索引。