我的应用程序遇到问题。我有一个表,其中一个字段名称是registration_no。在插入新记录之前,我将registration_no 字段增加1,然后在该表中插入增加的registration_no。问题是当一些用户同时插入数据时,一些 registration_no 值是相同的。我该如何防止这种情况。
问问题
1283 次
2 回答
2
你想使用一个序列。
两个警告:
文章中描述的
AUTO_INCREMENT
功能是非标准的,并且在移动到不同的数据库时可能会出现可移植性问题。如果 an
INSERT
被中止,则序列中的一个数字仍然被消耗,因此您最终可能会在序列中出现漏洞。如果这是不可接受的,请对主(代理)键使用自动生成的序列,并将该键的单独映射添加到“官方”序列号,从而在该表的索引中强制执行唯一性。
另一种方法是在数据库中强制执行UNIQUE
,使用适当的TRANSACTION ISOLATION LEVEL
并添加应用程序逻辑来处理故障INSERT
。
于 2013-09-03T18:02:37.477 回答
0
您可以让数据库registration_no
为您设置,而不是在代码中执行此操作。您可以获得registration_no
插入语句的结果,这将解决您的并发问题。
alter table myTable modify column registration_no int auto_increment
您的查询结果将是记录的索引。IF registration_no
不是您需要registration_no
根据返回的索引 id 查询自动生成的索引。
于 2013-09-03T17:58:18.853 回答