MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【MySQL解説】UNIQUE制約付きカラムに重複値を含む複数行INSERTを実行するとどうなる?

UNIQUE制約と重複データを含む複数行INSERTの挙動

MySQLでは、UNIQUE制約が設定されたカラムに対して、重複する値を含む複数行のINSERT文を実行すると、エラーが発生し、テーブルには1件も挿入されません

これは重要なポイントです。INSERT文に含まれる一部の行だけがエラーになるのではなく、単一のINSERT文は原子的(アトミック)に処理されるため、1行でも制約違反があれば文全体が失敗し、ロールバックされます。

以下、実際の例で確認してみましょう。

1. サンプルテーブルの作成

まず、StudentIdカラムにUNIQUE制約を設定したテーブルを作成します。

mysql> create table DemoTable1585
-> (
-> StudentId int,
-> StudentMarks int,
-> UNIQUE(StudentId)
-> );
Query OK, 0 rows affected (1.02 sec)

2. 重複するStudentIdを含むレコードを挿入

次に、INSERTコマンドを使って複数のレコードを挿入します。ここでは、StudentId「3」が意図的に重複しています。

mysql> insert into DemoTable1585 values(1,87),(2,98),(3,91),(3,48);
ERROR 1062 (23000): Duplicate entry '3' for key 'StudentId'

実行すると、「ERROR 1062 (23000): Duplicate entry」というエラーが表示されます。これは、UNIQUE制約が設定されたStudentIdカラムに重複した値「3」が検出されたためです。

3. テーブルの内容を確認

SELECT文でテーブル内の全レコードを表示して確認してみます。

mysql> select * from DemoTable1585;

実行結果は以下の通りです。エラーが発生したため、何も挿入されていません

Empty set (0.00 sec)

まとめ

UNIQUE制約が設定されたカラムに対して重複値を含む複数行INSERTを実行した場合の挙動は以下の通りです。

  • INSERT文全体がエラー(ERROR 1062)で失敗する
  • 制約違反のない行も含め、テーブルには1件も挿入されない

もし一部の行だけを挿入したい場合は、INSERT IGNOREを使用するか、INSERT文を分割して実行する、あるいはON DUPLICATE KEY UPDATE句を活用する方法があります。用途に応じて適切な方法を選択しましょう。

  1. メタバースとは?Facebookが「Meta」に変わった理由とその関係性を徹底解説

    マーク・ザッカーバーグはドラマチックでミステリアスな演出を好むことで知られています。だからこそ、Facebookが突如「Meta」へとブランド名を変更したことにも、それほど驚きはありません。しかし、多くの人にとってはむしろ混乱の方が大きいはずです。「そもそもメタバースとは何なのか?」「Facebookと何の関係があるのか?」——実はこの2つは、あなたが思っている以上に深く結びついています。まずは「メタバース」という言葉の意味と、私たちがすでにその一部となっている可能性について見ていきましょう。 メタバースとは何か? 「メタバース」という言葉は、1992年に発表されたニール・スティーヴンス

  2. Excel で値が重複するリレーションシップを作成する方法

    多くの場合、 関係 を作成する必要があります。 重複を含む Excel で データセットには使用できる共通の列があるためです。しかし、どういうわけか両方のテーブルに Duplicate がある場合 値の場合、プロセスの実行が非常に難しくなります。セル値のリストから複数のワークシートを作成する方法を知りたい場合は、この記事が役に立つかもしれません。この記事では、Excel で重複するセル値との関係を作成する方法について詳しく説明します。 この練習用ワークブックを以下からダウンロードしてください。 人間関係を作る 2 つの簡単な方法 重複を含む Excel で 値 関係を作成するために、次の