mysql - 在不更改当前 ID 的情况下向 db 添加自动增量 - SQL
问题描述
我有一张这样的桌子:
id | name
--------------
1 | John
2 | Mary
.
.
.
NULL | Brian
NULL | Jacob
我的意思是让 id 成为 AUTO INCREMENT 行,但我想我在添加新名称时没有 b/c Brian, Jacob
,它没有自动添加递增的 id 值。我想知道是否有一种方法可以添加这些值来替换 NULL,而无需更改其上方的任何 id。
解决方案
演示:
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 存储引擎不会让列自动递增,除非它是某个键中最左边的列(也就是说,任何索引都足够了)。
推荐阅读
- javascript - 我存储在 Kubernates 引擎上的 api 返回具有相同请求的不同响应
- python - 从 CSV 文件中删除停用词
- c# - 实例化从在其构造函数中具有参数的泛型派生的类
- python - 在进行递归时,Python 列表未按预期传递
- c# - Stackoverflow 异常自动映射器
- python - 把文件变成列表
- python - 无输出 - Jupyter Notebook
- javascript - 当我尝试在我的 NodeJs 应用程序中访问会话数据时,无法读取未定义的属性电子邮件
- spring-boot - 没有从 Spring Boot 应用程序调用多个 RestController
- azure-application-insights - 如何捕获当前时间范围