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