MySql に列を自動インクリメントに設定できない問題が存在する
P粉998100648
2023-08-22 16:23:53
<p>「Bestelling」という名前のテーブルがあり、「Id」(主キー)、「KlantId」、「Datum」、「BesellingsTypeId」の 4 つの列があります。列 ID を自動的にインクリメントしたいのですが、これを実行しようとすると、次のエラーが発生します: </p>
<pre class="brush:php;toolbar:false;">エラー 1062: ALTER TABLE により自動インクリメント並べ替えが発生し、主キー 'PRIMARY' のエントリ '1' が重複しました。
SQL ステートメント:
ALTER TABLE `aafest`.`aafest_beselling` CHANGE COLUMN `Id` `Id` INT(11) NOT NULL AUTO_INCREMENT
エラー: ロールバック スクリプトの実行中にエラーが発生しました。詳細は以下の通りです。
エラー 1046: データベースが選択されていません
SQL ステートメント:
CREATE TABLE `aafest_beselling` (
`Id` int(11) NOT NULL、
`KlantId` int(11) デフォルト NULL、
「データム」日付 DEFAULT NULL、
`BestellingstypeId` int(11) デフォルト NULL、
主キー (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1</pre>
<p>誰かアイデアはありますか? </p>
列を auto_increment に変換しようとしたときに、行の 1 つの値が 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 をご覧ください。