2011-10-05 128 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