gol*_*les 7 mysql auto-increment
我继承了维护一个编码很差的电子商务网站的任务,我正在努力重构很多代码并尝试修复持续存在的错误.
每个数据库插入(将项目添加到购物车等)都以grab_new_id函数开始,该函数COUNT表中的行数,然后,从该数字开始,查询数据库以查找未使用的索引号.除了性能非常糟糕(已经有40,000多行,并且索引被定期删除,所以有时只需要几秒钟才能找到一个新的id)这会在两个操作同时执行时定期中断,因为添加了两个条目具有重复的ID号.
这对我来说似乎很愚蠢 - 为什么不在索引字段上使用自动增量?我已经对它进行了两种测试,并且在没有指定索引ID的情况下向表中添加行(显然)要快很多倍.我的问题是:任何人都可以想到原始程序员可能做到这一点的任何原因吗?是否有一些思想流派将auto_increment视为不良形式?是否有没有自动增量功能的数据库?
我之前从一个不知道该功能存在的人那里看过这个.绝对使用自动增量功能.
有些人会采用"自己动手"的方式处理所有事情,通常是因为他们没有花时间去查看这是否是一个可用的功能,或者其他人是否已经提出它.您经常会看到这些人疯狂的变通办法或表现不佳/脆弱的代码.继承糟糕的数据库根本不好玩,祝你好运!
正如我所理解的那样,Oracle有序列但不是自动生成的ID.但是,通常这种东西是由那些不了解数据库编程并且不愿意看到数据缺口的开发人员完成的(当你从回滚中获得).还有人喜欢创建id,因此他们可以将它用于子表,但是大多数具有自动生成ID的数据库也有一种方法可以在创建时将该id返回给用户.