Таблица изменения не позволяет вам заказать новое поле, поэтому, возможно, вам нужно сделать это в 2 этапа.Например,
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;
Где идентификатор добавляется, а затем обновляется для существующих записей, используя row_number с порядком по
С таким результатом
+----+------+----------------+
| ID | NAME | EMAIL |
+----+------+----------------+
| 1 | ABCD | abcd@gmial.com |
| 2 | ABC | abc@gmail.com |
+----+------+----------------+
2 rows in set (0.00 sec)
Второй оператор Alter затем модифицируетЯ бы.
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 на симуляцию номера строки с использованием переменных.В любом случае это не имеет никакого значения, так как любой запрос все равно должен включать заказ, чтобы получить желаемый результат.