对于mysql的AUTO_INCREMENT问题

时间:2010-11-05 23:54:15

标签: mysql

如果我理解这一点,AUTO_INCREMENT =仅对自增长的表有用,如用户日志表,用户详细信息表等需要动态插入/删除记录。但对于我手动需要插入/删除数据的城市,语言等查找表,没有任何好处是正确的,因为我必须在其他表中为这些创建FK,所以如果我手动创建PK ID,那么我可以匹配它在其他表中适当地作为FK而不是让系统自动创建PK然后我必须找到它并将其他表中的那些用作FK?

3 个答案:

答案 0 :(得分:1)

Every table should have a primary key。因此,使用AUTO_INCREMENT设置主键始终有用。

答案 1 :(得分:1)

在cities表中使用auto_increment作为PK可确保后续插入和删除不会导致外部引用突然引用错误的内容。 (即,防止无意中重用键值)。

答案 2 :(得分:1)

我不认为拥有auto_increment列是强制性的。主键必须是唯一的,并且您应该在每个表中都有某些列(或列集)以及主键约束。但是不需要使用自动伪装。

auto_increment的优点是它保证没有两个插入将生成相同的数字,即使它们在并发事务中运行。如果没有锁定,您无法手动执行此操作,这会有效地使您的客户端排队并损害吞吐量。

我在我的书SQL Antipatterns中写了一篇关于这个问题的章节。