如何根据列的顺序添加自动增量主键?

jer*_*use 9 mysql auto-increment

我需要在现有表中添加自动增量ID.我做了:

ALTER TABLE table_name ADD column_name INT NOT NULL AUTO_INCREMENT FIRST ,
ADD PRIMARY KEY (column_name)
Run Code Online (Sandbox Code Playgroud)

但是,自动编号不是基于任何特定的列顺序.我希望mysql根据某列的顺序巧妙地输入自动数字.可能吗?

大多数答案都告诉您如何添加自动增量字段,而不是如何在现有表中控制这些数字.

小智 10

请注意,MySQL表只能有一个AUTO_INCREMENT属性列.

假设该表没有主键:

ALTER TABLE table_name ADD COLUMN new_id INT NOT NULL;
SET @x = 0;
UPDATE table_name SET new_id = (@x:=@x+1) ORDER BY whateveryouwant ASC;
ALTER TABLE table_name ADD PRIMARY KEY new_id (new_id);
ALTER TABLE table_name CHANGE new_id new_id INT NOT NULL AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)

假设该表已经有一个不增加的主键:

只需PRIMARY在第四个命令中省略关键字即可.


Dev*_*art 5

  1. 添加一个新字段 - ALTER TABLE table_name ADD column_name INT FIRTS;
  2. 在新字段中填充数据。
  3. 将此字段作为主键的一部分并添加 AUTO_INCREMENT 选项 -

    ALTER TABLE table_name CHANGE COLUMN id id INT(11) NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id);

编辑:

试试这个计划:

  1. 创建另一个表,与table_name.
  2. 用表中的排序数据填充新table_name表:

    INSERT INTO temp_table_name SELECT * FROM table_name ORDER BY name;

  3. table_name表:

    截断表表名;

  4. 更改table_name表,添加新的自动增量字段并将其设为主要字段(您的代码)。

  5. 从临时复制数据。表到table_name

    INSERT INTO table_name SELECT NULL, t.* FROM temp_table_name t;