Mysql
MySQL - 無法將主鍵轉換為自動增量
我有一個 MySQL 表,其中軟體將主鍵(int)設置為等於主表的主鍵(自動遞增)。由於設計的變化,我現在需要該欄位自動遞增。當我嘗試 ALTER TABLE 時,它返回以下內容:-
ERROR 1062: ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'PRIMARY' SQL Statement: ALTER TABLE `Clinic`.`ClientSupplementary` CHANGE COLUMN `idClientSupplementary` `idClientSupplementary` INT(11) NOT NULL AUTO_INCREMENT ERROR: Error when running failback script. Details follow. ERROR 1050: Table 'ClientSupplementary' already exists
這讓我完全感到困惑,因為 ‘1’ 絕對是獨一無二的,就像所有其他主鍵值一樣。我應該在哪裡尋找?
你的文章讓我很感興趣。這裡有一個“解決方法” ,但我很好奇,所以我進行了以下測試。在嘗試解決方法之前,您可能想嘗試下面對我有用的方法。如果存在
FOREIGN KEY
s 和潛在衝突(重複和/或 KEY 違規),那麼這將不起作用。這可能是您錯誤的原因。我創建了一個表格(賬單),如下所示。
mysql> CREATE TABLE bill(fred INT, paul VARCHAR(10)); Query OK, 0 rows affected (0.31 sec)
然後插入一些樣本值。
mysql> INSERT INTO bill VALUES(1, 'adsfd'); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO bill VALUES(2, 'adsfd'); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO bill VALUES(3, 'xxxx'); Query OK, 1 row affected (0.05 sec)
然後我執行了一個
SHOW CREATE TABLE My_Table\G
(\G
給出可以剪切和粘貼的清晰輸出)。mysql> SHOW CREATE TABLE bill\G *************************** 1. row *************************** Table: bill Create Table: CREATE TABLE `bill` ( `fred` int(11) DEFAULT NULL, `paul` varchar(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec)
只是為了看看我
INSERT
的s的結果mysql> SELECT * FROM bill; +------+-------+ | fred | paul | +------+-------+ | 1 | adsfd | | 2 | adsfd | | 3 | xxxx | +------+-------+ 3 rows in set (0.00 sec) mysql>
現在,發表你的
ALTER TABLE
聲明。
ALTER TABLE bill MODIFY COLUMN fred INT AUTO_INCREMENT NOT NULL PRIMARY KEY;
重新檢查表的定義。
mysql> SHOW CREATE TABLE bill\G *************************** 1. row *************************** Table: bill Create Table: CREATE TABLE `bill` ( `fred` int(11) NOT NULL AUTO_INCREMENT, `paul` varchar(10) DEFAULT NULL, PRIMARY KEY (`fred`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 1 row in set (0.00 sec)
該領域
fred
現在確實是 aPRIMARY KEY
也是一個AUTO_INCREMENT
.並檢查它是否正常工作。
mysql> INSERT INTO bill (paul) VALUES('yyyy'); Query OK, 1 row affected (0.08 sec) mysql> SELECT * FROM bill; +------+-------+ | fred | paul | +------+-------+ | 1 | adsfd | | 2 | adsfd | | 3 | xxxx | | 4 | yyyy | +------+-------+ 4 rows in set (0.00 sec)
所以,它也是
AUTO_INCREMENT
正確的。我不知道為什麼你原來的陳述給出了奇怪的ALTER TABLE causes auto_increment resequencing
錯誤——也許是某種錯誤?在執行這些測試時,我犯了一些小錯誤——MySQL 似乎對步驟的確切順序和語句的特定語法非常挑剔ALTER TABLE
。
假設您沒有參考
fred
其他地方,這可能是“安全”的方式:ALTER TABLE bill DROP COLUMN fred, ADD COLUMN fred INT AUTO_INCREMENT NOT NULL PRIMARY KEY;