ホームページ >データベース >mysql チュートリアル >SQL で「ID 列に明示的な値を挿入できません」エラーがスローされるのはなぜですか?その修正方法は何ですか?

SQL で「ID 列に明示的な値を挿入できません」エラーがスローされるのはなぜですか?その修正方法は何ですか?

DDD
DDDオリジナル
2025-01-19 09:22:10648ブラウズ

Why Does SQL Throw a

「ID 列に明示的な値を挿入できません」SQL エラーのトラブルシューティング

SQL 挿入操作中に「IDENTITY_INSERT が OFF に設定されている場合、テーブル 'table' の ID 列に明示的な値を挿入できません」というエラーが発生しましたか?このガイドでは、その原因と解決策を説明します。 このエラーは、値が自動的に生成される ID 列として指定された列に手動で値を割り当てようとすると発生します。

SQL の ID 列について

ID 列は自動的に増加するデータベース列で、通常は主キーまたは一意の識別子として機能します。 データベースは増分プロセスを管理し、通常は新しい行ごとに固定ステップ値 (通常は 1) を追加します。 これにより、データベース操作と参照整合性にとって不可欠な、一意の連続した値が保証されます。

エラーの根本原因

テーブルの IDENTITY_INSERT プロパティが OFF に設定されているときに ID 列に値を直接挿入しようとすると、エラーが発生します。 この設定により、ID 列への手動での値の割り当てが防止されます。

エラーの解決: IDENTITY_INSERT

の有効化と無効化

この解決策には、影響を受けるテーブルの IDENTITY_INSERT を一時的に有効にして手動挿入を許可することが含まれます。 プロセスは次のとおりです:

  1. IDENTITY_INSERT を有効にする: 次のコマンドを実行します。[TableName] をテーブルの名前に置き換えます:

    <code class="language-sql">SET IDENTITY_INSERT [TableName] ON</code>
  2. 挿入を実行します: ここで、ID 列の明示的な値を使用して挿入ステートメントを実行します。

  3. IDENTITY_INSERT を無効にする: 挿入後、すぐに IDENTITY_INSERT を無効にして自動生成動作を復元します:

    <code class="language-sql">SET IDENTITY_INSERT [TableName] OFF</code>

これにより、後続の挿入で ID 列の自動インクリメント機能が再度使用され、データベースの整合性が維持されます。 予期しない動作を防ぐために、手動で挿入するたびに必ず IDENTITY_INSERT を無効にしてください。

以上がSQL で「ID 列に明示的な値を挿入できません」エラーがスローされるのはなぜですか?その修正方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。