我开发了一个Web应用程序,各种客户端可以同时将记录存储到该数据库.
我已设置该数据库的自动主键生成功能,只要将新记录添加到数据库,该功能就会自动生成主键(自动注册).
所以我的问题是我可以依靠这种自动密钥生成功能吗?
如果各种用户同时存储记录会不会有问题?
Mar*_*ers 14
是的,自动增量主键是可靠的,因为永远不会生成重复键.你必须要小心你如何使用它.
在使用MySQL的auto_inc功能时,我想补充一点:
想象一下,你有一个表employees
使用auto_inc和(无论出于何种原因)第二个名为的表former_employees
.让我们进一步假装每个员工都有一个独特的ID(因此auto_inc)附加给他 - 并且他甚至不会因解雇或退出而失去它.
出于业绩原因(让我们想象一下公司有几十亿员工),贵公司将前员工的记录移到同名表中.
现在这里是两个表的快照(现在不介意小ID):
employees former_employees
------------------------ ------------------------
id | name | ... id | name | ...
------------------------ ------------------------
27 | Peter | ... 29 | Andrew | ...
28 | Jacko | ... 30 | Dennis | ...
32 | Paula | ... 31 | Lenny | ...
33 | JoDon | ...
Run Code Online (Sandbox Code Playgroud)
请注意,former_employees
最后一个ID等于33
,而employees
auto_inc计数器34
现在等于.
如果您在此阶段关闭服务器并重新启动它,employees
auto_inc将跳回到33!那是因为MySQL没有在重启之间存储auto_inc计数器!
但请记住这一点.问候.
PS:要绕过这个"功能",你必须触发查看former_employees
最后一个ID的存储过程,如果更大则设置它.
注意(S.Leske):这适用于InnoDB表,但不适用于MyISAM表.不知道其他桌面引擎.