無法將列設定為自動遞增的問題在MySql中存在
P粉998100648
P粉998100648 2023-08-22 16:23:53
0
2
556
<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粉998100648
P粉998100648

全部回覆(2)
P粉391677921

當我嘗試將一列轉換為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粉146080556

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!