首頁  >  問答  >  主體

無法將列設定為自動遞增的問題在MySql中存在

<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>
P粉998100648P粉998100648424 天前565

全部回覆(2)我來回復

  • P粉391677921

    P粉3916779212023-08-23 15:36:57

    當我嘗試將一列轉換為auto_increment時,我也遇到了這個問題,其中一行的值為0。一個替代的方法是透過設定:

    SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO';

    來為會話設定。

    這樣可以將該欄位更改為帶有零ID的auto_increment。

    零並不理想,我也不建議在auto_increment列中使用它。不幸的是,它是繼承的資料集的一部分,所以我暫時無法更改它。

    最好在之後清除設定(以及其他設定):

    SET SESSION sql_mode='';

    儘管在目前用戶端會話關閉時會被清除。

    關於'NO_AUTO_VALUE_ON_ZERO'設定的完整詳情在這裡

    回覆
    0
  • P粉146080556

    P粉1460805562023-08-23 00:06:11

    如果表中包含一個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找到。

    回覆
    0
  • 取消回覆