mysql删除表最后一行,MySQL-如果删除了最后一行,则自动递增不会自动递增

这是设计使然-所有DBMS都使用自动增量列来执行此操作。

如果不这样做,则可能会损坏外部参照完整性。举一个简单的例子,假设您正在使用自动增量列作为键来存储用于缩短服务的URL。您不知道是否已将缩短的URL分配给任何人,并且数据库当然也没有提供,因此重复使用ID 1234可能导致某人的可怜的老太在单击http:/时访问somenastypornsite.xxx而不是loverlyknitting.org。/shortthi.ng/1234,而不是显示“抱歉,但我们的记录中不再存在此链接”消息。

另外,如果您在删除最后一个项目后重设增量,那么在删除第5个项目后,您是否还会进行所有对5,000,000个第5个项目之后的所有内容重新编号的工作(或期望数据库进行重新编号)?完成对其他表的更改,其中其他表的外键约束指向增量列?这样的额外工作可能会使IO变得非常昂贵。

如果在删除最后一项后确实重置了增量点,请非常小心您的事务隔离级别:您可能会在另一个事务使用该值时重置它,从而导致错误(或更糟糕的是,无提示失败),除非您要确保完全100%隔离行动。

我通常建议使用数据库的人员阅读“ SQL Antipatterns”,其中有一个关于此问题的章节名为“ Psuedo-Key Neat Freaks”(以比章节标题所暗示的方式友好的方式涵盖了此问题!)。本质上,如果值的含义不只是键(或最多带有插入顺序的信息),则它可能不应该是自动递增的列,并且如果值不是键(或最多带有插入顺序的含义)也没有意义。信息),那么差距就无关紧要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值