mysql何时选择自增id?何时不选?

在MySQL中,数据表的主键一般采用id字段自增的形式。使用自增ID给我们带来不少便捷,但也有不少坏处。自增ID是在设计表时如果将id字段的值设置为自增的形式也就是AUTO_INCREMENT,那么当插入一行数据时就无需指定id,数据表会根据前一个id值+1进行填充。指定了AUTO_INCREMENT的列必须要建索引,一般把ID作为主键,这样系统会自动为ID建立索引。

  • 好处:

    • (1) 增加记录时,可以不用指定id字段不用担心主键重复问题。
    • (2)数据库自动编号,速度快,而且是增量增长,按顺序存放,对于检索非常有利;
    • (3)数字型,占用空间小,易排序,在程序中传递也方便;
  • 坏处:

    • (1) 不具有连续性,表中auto_increment最大值被删除,将不会被重用。就是说会跳号(如果设定的auto_increment_increment是1,那么下一次插入的id值将会从被删除的最大值算起,也就是被删除的最大值+1)
    • (2)历史数据表的主键id会与数据表的id重复,两张自增id做主键的表合并时,id会有冲突,但如果各自的id还关联了其他表,这就很不好操作。
    • (3) 很难处理分布式存储的数据表,尤其是需要合并表的情况下
    • (4) 在系统集成或割接时,如果新旧系统主键不同是数字型就会导致修改主键数据类型,这也会导致其它有外键关联的表的修改,后果同样很严重;
  • 不用自增id可以选用UUID。UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。UUID的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。

    UUID的优点:
    (1)能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。
    (2)保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。
    (3)安全性较高
    UUID的缺点:
    (1)uuid是无序的,这会严重影响到表的插入性能
    (2)uuid占的空间大

  • 大部分场景下,我们都建议主键设为自增

    不建议主键自增的场景:mysql分库分表下的id,考虑具体业务的场景

posted @ 2022-07-13 15:14  大于昨天  阅读(1806)  评论(0编辑  收藏  举报