如何在有数据的表中添加自动增量标识列

wtlkbnrh  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(307)

如何向包含数据的表中添加自动增量标识列。例如,新添加的列使用旧数据的ID填充旧用户表中的数据
姓名,电子邮件,
公司,@gmail.com
d,d@gmial.com
预期产量
身份证,姓名,电子邮件,
1、公司,@gmail.com
2,d,d@gmial.com

3b6akqbq

3b6akqbq1#

你可以写:

ALTER TABLE MY_TABLE ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
5hcedyr0

5hcedyr02#

ALTERTABLE不允许您对新字段进行排序,因此您可能需要分两个阶段进行排序。例如

DROP TABLE IF EXISTS T;
CREATE TABLE T (NAME VARCHAR(10),EMAIL VARCHAR(20));
INSERT INTO T VALUES('ABC','abc@gmail.com'),('ABCD','abcd@gmial.com');
ALTER TABLE T
    ADD COLUMN  ID INT FIRST;

UPDATE T JOIN(
SELECT NAME, ROW_NUMBER() OVER (ORDER BY NAME DESC) RN FROM T) s
ON S.NAME = T.NAME
SET T.ID = S.RN
;

ALTER TABLE T
    MODIFY COLUMN ID INT AUTO_INCREMENT PRIMARY KEY;

SELECT * FROM T;

其中添加id,然后使用带有order by的行号更新现有记录
有了这个结果

+----+------+----------------+
| ID | NAME | EMAIL          |
+----+------+----------------+
|  1 | ABCD | abcd@gmial.com |
|  2 | ABC  | abc@gmail.com  |
+----+------+----------------+
2 rows in set (0.00 sec)

第二个alter语句然后修改id。

show create table t;

CREATE TABLE `t` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `NAME` varchar(10) DEFAULT NULL,
  `EMAIL` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

如果您不在MySQLversion8或更高版本上,则需要使用使用变量的行号模拟来替换行号位。无论如何,这并没有什么区别,因为任何查询仍然需要包含order by才能获得所需的结果。

相关问题