2011-10-05 123 views
5

我需要将自动增量ID添加到已经存在的表中。我做了:如何根据列的顺序添加自动增量主键?

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

但是,自动编号wasnt基于任何特定的列顺序。我希望mysql根据某个列的顺序巧妙地放置自动编号。可能吗?

大部分答案都告诉你如何添加自动增量字段,而不是如何控制已有表中的数字。在新的领域ALTER TABLE table_name ADD column_name INT FIRTS;

  • 填充数据 -

  • 回答

    3
    1. 添加一个新的领域。
    2. 使这个字段作为主键的一部分,并添加AUTO_INCREMENT选项 -

      ALTER TABLE表名 更改列的ID INT(11)NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY(ID);

    编辑:

    试试这个计划:

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

      INSERT INTO temp_table_name SELECT * FROM表名ORDER BY名;

    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;

    +0

    谢谢你的答案devart。在第2步中,我不想手动填充字段。而是让它们根据column_name的排列顺序自动填充 – jerrymouse

    +0

    我已经添加了一个解决方案。 – Devart

    7

    请注意,MySQL表只能有一列与AUTO_INCREMENT属性。

    假设表不具有主键

    ALTER TABLE table_name ADD COLUMN new_id INT NOT NULL; 
    SET @x = 0; 
    UPDATE table_name SET new_id = (@x:[email protected]+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; 
    

    假设表已经具有非递增主键

    只要ommit的PRIMARY关键字在第四命令。

    +0

    只要有一个索引(键),就可以有一个不是PRIMARY KEY的自动递增列。您可以使用此代码将索引添加到列ALTER TABLE table_name ADD INDEX new_id(new_id); – Salar