簡體   English   中英

在mysql表auto_increment中創建一個ID(事后)

[英]make an ID in a mysql table auto_increment (after the fact)

我從另一個開發者處獲得了一個數據 他沒有在任何桌子上使用auto_incrementers。 它們都有主鍵ID,但是他在代碼中手動完成了所有增量操作。

我現在可以把它們變成Auto_incrementers嗎?


哇,非常好,謝謝你。 它在我的一張桌子上毫無障礙地工作。 但是第二個表,我收到此錯誤...將'。\\ DBNAME#sql-6c8_62259c'重命名為'。\\ DBNAME \\ dealer_master_events'時出錯

例如,這是一個具有主鍵但不是AUTO_INCREMENT

mysql> CREATE TABLE foo (
  id INT NOT NULL,
  PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);

您可以MODIFY列以使用AUTO_INCREMENT選項重新定義它:

mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;

確認這已生效:

mysql> SHOW CREATE TABLE foo;

輸出:

CREATE TABLE foo (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1

請注意,您已經就地修改了列定義,而無需創建第二列並刪除原始列。 PRIMARY KEY約束不受影響,您無需在ALTER TABLE語句中提及。

接下來,您可以測試插入是否生成新值:

mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;

輸出:

+----+
| id |
+----+
|  1 | 
|  2 | 
|  5 | 
|  6 | 
+----+
4 rows in set (0.00 sec)

我在Mac OS X上的MySQL 5.0.51上測試了這個。

我還測試了ENGINE=InnoDB和一個依賴表。 修改id列定義不會中斷參照完整性。


要響應您在評論中提到的錯誤150,它可能與外鍵約束沖突。 我道歉,在我測試之后,我認為它會起作用。 以下是一些可能有助於診斷問題的鏈接:

以上都沒有為我的桌子工作。 我有一個帶有無符號整數的表作為主鍵,值為0到31543.目前有超過19000條記錄。 我必須將列修改為AUTO_INCREMENTMODIFY COLUMN AUTO_INCREMENT = 31544 INTEGER UNSIGNED NOT NULL AUTO_INCREMENT )並在同一語句中設置種子( AUTO_INCREMENT = 31544 )。

ALTER TABLE `'TableName'` MODIFY COLUMN `'id'` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT = 31544;

我猜你不需要重新增加現有數據,為什么你不能只運行一個簡單的ALTER TABLE命令來改變PK的屬性?

就像是:

ALTER TABLE `content` CHANGE `id` `id` SMALLINT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT 

我已經在我自己的MySQL數據庫上測試了這個代碼並且它可以工作,但我還沒有嘗試過任何有意義的記錄數。 一旦你改變了行,你需要將增量重置為一個保證不會干擾任何其他記錄的數字。

ALTER TABLE `content` auto_increment = MAX(`id`) + 1

再次,未經測試但我相信它會起作用。

這對我有用(我想讓id為primary並設置自動增量)

ALTER TABLE table_name CHANGE id id INT PRIMARY KEY AUTO_INCREMENT;

是的,很容易。 只需運行數據定義查詢即可更新表,並添加AUTO_INCREMENT列。

如果您有現有數據庫,請注意保留“人工創建”主鍵上可能已存在的任何外鍵關系。

ALTER TABLE `foo` MODIFY COLUMN `bar_id` INT NOT NULL AUTO_INCREMENT;

要么

ALTER TABLE `foo` CHANGE `bar_id` `bar_id` INT UNSIGNED NOT NULL AUTO_INCREMENT;

但是如果你的bar_id是另一個表中的外鍵,那么這些都不會起作用:你會得到的

an error 1068: Multiple primary key defined

要解決此問題,請臨時禁用外鍵約束檢查

set foreign_key_checks = 0;

並在運行上述語句后,再次啟用它們。

set foreign_key_checks = 1;

只要在當前PK中有唯一的整數(或某些唯一值),就可以創建一個新表,並使用IDENTITY INSERT ON插入其中。 然后刪除舊表,並重命名新表。

不要忘記重新創建任何索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM