自动增量和唯一性问题

时间:2014-05-03 10:24:56

标签: mysql sql database

我在我的应用中遇到自动增量逻辑时出现问题。说我插入一个'组',并且在mysql中它的Id值为10,下一个是11,12等等。

但是一旦记录(假设它的Id 12)被删除,下一个新项目再次为12。所以它可能有冲突。

可能会使自动增量不重复相同的Int吗?我希望每个Id都是唯一的,一旦删除就意味着它永远不会回来。

2 个答案:

答案 0 :(得分:1)

InnoDB确实有这个“功能”或Bug,最近的auto_increment没有存储在表空间中。一旦重新启动MySQL服务器,“auto_increment”值就会从表的最新值中获取,从而与可能删除的值冲突。

对此的解决方案真的很难看。您可以使用

形式创建每个表具有最高未使用值的表
tablename   maxvalue
 tableA      375
 tableB      12

如果您管理MySQL-Server,您可以编写一个启动后脚本。因此,每删除一行此类表后,如果该行是最大值,则按AFTER DELETE进行检查。使用较新版本的MySQL会更容易一些,因为表格信息存储在INFORMATION_SCHEMA中,而且不仅仅是根据每个选择进行计算(这意味着阅读INFORMATION_SCHEMA不会引发繁重的搜索和阻塞查询)。

如果删除的行是最大值,则只需更新maxvalue。

更新行上每个插入的maxalue会更容易一些,如果这不会减慢系统的速度。

在某些情况下,您只有一个包含关键引用的表,并且该表具有索引,因此您可以从该表中检索maxvalue。

总而言之,这对InnoDB来说是一个大问题,并且为这个未保存的数字auto_increment写了很多触发器真的不太好。

答案 1 :(得分:0)

我认为你没有设置id是主键和自动增量