無法將列設定為自動遞增的問題在MySql中存在
P粉998100648
2023-08-22 16:23:53
<p>我有一個名為"Bestelling"的表,有4個欄位:"Id"(主鍵),"KlantId","Datum","BestellingsTypeId",現在我想讓列Id自動遞增,但是,當我嘗試這樣做時,我得到了以下錯誤:</p>
<pre class="brush:php;toolbar:false;">ERROR 1062: ALTER TABLE導致自動遞增重新排序,導致主鍵'PRIMARY'的重複條目'1'
SQL語句:
ALTER TABLE `aafest`.`aafest_bestelling` CHANGE COLUMN `Id` `Id` INT(11) NOT NULL AUTO_INCREMENT
ERROR: 執行回滾腳本時發生錯誤。詳細資訊如下。
ERROR 1046: 未選擇資料庫
SQL語句:
CREATE TABLE `aafest_bestelling` (
`Id` int(11) NOT NULL,
`KlantId` int(11) DEFAULT NULL,
`Datum` date DEFAULT NULL,
`BestellingstypeId` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1</pre>
<p>有人有想法嗎? </p>
當我嘗試將一列轉換為auto_increment時,我也遇到了這個問題,其中一行的值為0。一個替代的方法是透過設定:
來為會話設定。
這樣可以將該欄位更改為帶有零ID的auto_increment。
零並不理想,我也不建議在auto_increment列中使用它。不幸的是,它是繼承的資料集的一部分,所以我暫時無法更改它。
最好在之後清除設定(以及其他設定):
儘管在目前用戶端會話關閉時會被清除。
關於'NO_AUTO_VALUE_ON_ZERO'設定的完整詳情在這裡。
如果表中包含一個id為0(或負數)的現有記錄,就會發生這種情況。將所有現有記錄更新為使用正值將允許在該列上設定auto_increment。
編輯:有些人問如何出現了0。為了澄清,MySQL參考手冊指出,「對於數值類型,預設值為0,但對於帶有AUTO_INCREMENT屬性的整數或浮點數類型,預設值為序列中的下一個值。」因此,如果在啟用auto_increment之前在表上執行插入操作而沒有為數值列提供值,則在插入期間將使用預設值0。更多詳細資訊可在https://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html找到。