AUTO_INCREMENT 属性可以用来为新行生成一个唯一的标识。它有如下特性:

    • 自增
    • 每张表一个
    • 必须是索引的一部分

    AUTO_INCREMENT 是实例启动时,取当前表的最大值,然后 +1 即为下次自增的值(MAX + 1)。

    AUTO_INCREMENT 要如何使用,参考如下例子:

    1. -- 如果我们在创建表时,指定某列是AUTO_INCREMENT,且没有设置索引,就会报如下错误。
    2. mysql> create table t4(a int auto_increment);
    3. ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
    4. -- 指定列为key后才有效,一般我们指定为PRIMARY KEY
    5. mysql> create table t4(a int auto_increment primary key);
    6. Query OK, 0 rows affected (0.11 sec)
    7. -- 插入NULL
    8. mysql> insert into t4 values(NULL);
    9. Query OK, 1 row affected (0.03 sec)
    10. mysql> select * from t4;
    11. +---+
    12. | a |
    13. +---+
    14. | 1 | -- 插入NULL值,便可以让其自增,且默认从1开始
    15. +---+
    16. 1 row in set (0.00 sec)
    17. -- 插入0值,还是自增的,自增为2
    18. -- 数字0这个值比较特殊,插入0和插入NULL的效果是一样的,都是代表自增
    19. mysql> insert into t4 values(0);
    20. Query OK, 1 row affected (0.03 sec)
    21. mysql> select * from t4;
    22. +---+
    23. | a |
    24. +---+
    25. | 1 |
    26. | 2 | -- 插入0 ,自增长为2
    27. +---+
    28. 2 rows in set (0.00 sec)
    29. -- 插入-1,这个是可以插入指定值的
    30. mysql> insert into t4 values(-1);
    31. Query OK, 1 row affected (0.02 sec)
    32. mysql> select * from t4;
    33. +----+
    34. | a |
    35. +----+
    36. | -1 | -- 刚刚插入的-1
    37. | 1 |
    38. | 2 |
    39. +----+
    40. 3 rows in set (0.00 sec)
    41. -- 插入NULL值,这里是插入0还是3
    42. -- 3,因为插入的值没有大于下一个自增的值,它还是插入自增值
    43. mysql> insert into t4 values(NULL);
    44. Query OK, 1 row affected (0.02 sec)
    45. mysql> select * from t4;
    46. +----+
    47. | a |
    48. +----+
    49. | -1 |
    50. | 1 |
    51. | 2 |
    52. | 3 | -- 刚刚插入NULL 自增为3
    53. +----+
    54. 4 rows in set (0.00 sec)
    55. -- 插入字符0
    56. mysql> insert into t4 values('0');
    57. Query OK, 1 row affected (0.04 sec)
    58. mysql> select * from t4;
    59. +----+
    60. | a |
    61. +----+
    62. | -1 |
    63. | 1 |
    64. | 2 |
    65. | 3 |
    66. | 4 | -- 插入字符'0'后, 自增长为4
    67. +----+
    68. 5 rows in set (0.00 sec)
    69. -- 更新为0
    70. mysql> update t4 set a = 0 where a = -1;
    71. Query OK, 1 row affected (0.03 sec)
    72. Rows matched: 1 Changed: 1 Warnings: 0
    73. mysql> select * from t4;
    74. +---+
    75. | a |
    76. +---+
    77. | 0 | -- 原来的-1更新为0
    78. | 1 |
    79. | 2 |
    80. | 3 |
    81. | 4 |
    82. +---+
    83. 5 rows in set (0.00 sec)
    84. -- 插入NULL 100 NULL
    85. mysql> insert into t4 values(NULL), (100), (NULL);
    86. Query OK, 3 rows affected (0.02 sec)
    87. Records: 3 Duplicates: 0 Warnings: 0
    88. mysql> select * from t4;
    89. +-----+
    90. | a |
    91. +-----+
    92. | 0 |
    93. | 1 |
    94. | 2 |
    95. | 3 |
    96. | 4 |
    97. | 5 | -- 第一个NULL
    98. | 100 | -- 100
    99. | 101 | -- 第二个NULL, 按当前最大的值+1来设置,之前是100,所以这里101
    100. +-----+
    101. 8 rows in set (0.00 sec)
    102. mysql> insert into t4 values(99); -- 插入99
    103. Query OK, 1 row affected (0.02 sec)
    104. mysql> select * from t4;
    105. +-----+
    106. | a |
    107. +-----+
    108. | 0 |
    109. | 1 |
    110. | 2 |
    111. | 3 |
    112. | 4 |
    113. | 5 |
    114. | 99 | -- 刚刚插入的 99
    115. | 100 |
    116. | 101 |
    117. +-----+
    118. 9 rows in set (0.00 sec)

    作者:殷建卫 链接:https://www.yuque.com/yinjianwei/vyrvkf/gywsex 来源:殷建卫 - 架构笔记 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。