如何使用数据向表添加自动增量标识列。即。新添加的带有ID的列填充,用于旧数据 带有数据的旧用户表
姓名,电子邮件
abc,abc@gmail.com
abcd,abcd@gmial.com
预期输出
id,姓名,电子邮件
1,abc,abc @ gmail.com
2,abcd,abcd @ gmial.com
答案 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位。 但这并不是说有什么区别,因为任何查询仍然需要包含订单以获取所需的结果。