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'設定的完整詳情在這裡。
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找到。