如何使用数据向表中添加自动增量标识列

时间:2019-01-01 08:54:28

标签: mysql sql database

如何使用数据向表添加自动增量标识列。即。新添加的带有ID的列填充,用于旧数据 带有数据的旧用户表

姓名,电子邮件

abc,abc@gmail.com

abcd,abcd@gmial.com

预期输出

id,姓名,电子邮件

1,abc,abc @ gmail.com

2,abcd,abcd @ gmial.com

2 个答案:

答案 0 :(得分:1)

您可以写:

ALTER TABLE MY_TABLE ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY

答案 1 :(得分:0)

Alter表不允许您订购新字段,因此也许您需要分两个阶段进行。例如

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的位置,然后使用row_number对现有记录进行更新,顺序为

有了这个结果

+----+------+----------------+
| 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

如果您未使用mysql 8或更高版本,则需要使用使用变量的行号模拟替换row_number位。 但这并不是说有什么区别,因为任何查询仍然需要包含订单以获取所需的结果。