首页 > 解决方案 > 在不更改当前 ID 的情况下向 db 添加自动增量 - SQL

问题描述

我有一张这样的桌子:

id   |  name 
--------------
1    | John
2    | Mary
.
.
.
NULL | Brian
NULL | Jacob

我的意思是让 id 成为 AUTO INCREMENT 行,但我想我在添加新名称时没有 b/c Brian, Jacob,它没有自动添加递增的 id 值。我想知道是否有一种方法可以添加这些值来替换 NULL,而无需更改其上方的任何 id。

标签: mysqlsql

解决方案


演示:

mysql> create table mytable (id int, name text);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into mytable values
    -> (1, 'John'),
    -> (2, 'Mary'),
    -> (NULL, 'Brian'),
    -> (NULL, 'Jacob');
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> alter table mytable modify column id int auto_increment, add primary key (id);
Query OK, 4 rows affected (0.02 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from mytable;
+----+-------+
| id | name  |
+----+-------+
|  1 | John  |
|  2 | Mary  |
|  3 | Brian |
|  4 | Jacob |
+----+-------+
4 rows in set (0.00 sec)

结论:是的。

您确实需要id成为键中的第一列(我在这里使用了 PRIMARY KEY)。MySQL 的 InnoDB 存储引擎不会让列自动递增,除非它是某个键中最左边的列(也就是说,任何索引都足够了)。


推荐阅读