避免在mysql中并发插入多个相同id
我在申请时遇到了一个问题。我有一个表,其中一个字段名是registration\u no。在插入新记录之前,我将registration\u no字段递增1,然后将递增的registration\u no插入该表中。问题是当一些用户同时插入数据时,一些注册值不相同。如何防止这种情况发生。您可以让数据库为您设置注册号,而不是在代码中执行此操作。您可以在insert语句的结果中获得注册号,这将解决并发问题避免在mysql中并发插入多个相同id,mysql,Mysql,我在申请时遇到了一个问题。我有一个表,其中一个字段名是registration\u no。在插入新记录之前,我将registration\u no字段递增1,然后将递增的registration\u no插入该表中。问题是当一些用户同时插入数据时,一些注册值不相同。如何防止这种情况发生。您可以让数据库为您设置注册号,而不是在代码中执行此操作。您可以在insert语句的结果中获得注册号,这将解决并发问题 alter table myTable modify column registration_
alter table myTable modify column registration_no int auto_increment
查询的结果将是记录的索引如果注册号
不是索引,您需要根据返回的索引id查询自动生成的注册号。您想使用
两个警告:
- 本文中描述的
功能是非标准的,在移动到其他数据库时可能会带来可移植性问题自动增量
- 如果插入被中止,序列中的一个数字仍会被消耗,因此序列中可能会出现孔。如果这是不可接受的,则对主(代理)键使用自动生成的序列,并添加从该键到“官方”序列号的单独映射,从而强制该表索引中的唯一性
另一种方法是在数据库中强制执行
唯一性
ness,使用适当的事务隔离级别
,并添加应用程序逻辑来处理插入失败
您必须重新编写代码以避免发生这种情况。实际上,注册在不同类别中没有不同的范围。因此,我不能给此字段自动递增,也不能给唯一,因为在不同年份可能有相同的注册号。然后您可能需要在事务中处理该注册号,并让编写该注册号的代码处理失败/获取新编号。实际上,注册号在不同类别中的范围不同。因此,我不能给出该字段的自增值,也不能给出唯一值,因为不同年份可能有相同的注册号注册号。唯一
索引可应用于多列。