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

时间:2011-10-05 12:18:40

标签: mysql auto-increment

我需要为现有表添加自动增量ID。我做了:

ALTER TABLE table_name ADD column_name INT NOT NULL AUTO_INCREMENT FIRST ,
ADD PRIMARY KEY (column_name)

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

那里的大部分答案都告诉你如何添加自动增量字段,而不是如何在现有表格中控制这些数字。

2 个答案:

答案 0 :(得分:8)

请注意,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;

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

只需在第四个命令中省略PRIMARY关键字。

答案 1 :(得分:3)

  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,   添加PRIMARY KEY(id);

  4. 修改

    试试这个计划:

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

      INSERT INTO temp_table_name SELECT * FROM table_name ORDER BY name;

    3. 清空table_name表:

      TRUNCATE TABLE table_name;

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

    5. 从temp复制数据。表到table_name

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