MySQLでアイテムの組み合わせの重複挿入を防ぐ方法(UNIQUE制約の使い方)
MySQLでは、複数カラムの値の「組み合わせ」が重複してテーブルに挿入されるのを防ぐことができます。これを実現するには、対象のカラムにUNIQUE制約を設定します。以下の構文で、既存のテーブルにUNIQUE制約を追加できます。
alter table テーブル名 add constraint 制約名 unique(カラム名1, カラム名2, ....N);
この制約を設定すると、指定したカラム同士の値の組み合わせが完全に一致するレコードは、テーブル内に1つしか存在できなくなります。個々のカラムの値は重複しても構いませんが、両方の値が同じ組み合わせになるとエラーが発生します。
テーブルを作成する
まずはサンプル用のテーブルを作成しましょう。
mysql> create table DemoTable
(
Value1 int,
Value2 int
);
Query OK, 0 rows affected (0.47 sec)UNIQUE制約を追加する
次に、Value1とValue2の組み合わせが重複しないように、UNIQUE制約を追加します。
mysql> alter table DemoTable add constraint Value1_Value2_ConstraintKey unique(Value1,Value2); Query OK, 0 rows affected (0.80 sec) Records : 0 Duplicates : 0 Warnings : 0
動作確認:重複データを挿入してみる
INSERTコマンドを使っていくつかレコードを挿入します。ここで注目していただきたいのは、同じ組み合わせ(例:10と10)を再度挿入しようとしたときです。「Duplicate entry」というエラーが表示され、重複した挿入は実行されません。
mysql> insert into DemoTable values(10,10); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(10,20); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(10,10); ERROR 1062 (23000) : Duplicate entry '10-10' for key 'Value1_Value2_ConstraintKey' mysql> insert into DemoTable values(20,10); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable values(20,20); Query OK, 1 row affected (0.23 sec) mysql> insert into DemoTable values(20,10); ERROR 1062 (23000) : Duplicate entry '20-10' for key 'Value1_Value2_ConstraintKey'
上記のように、(10, 10) や (20, 10) を2回目に挿入しようとした時点でエラー1062が発生し、登録が拒否されていることがわかります。
結果を確認する
SELECT文でテーブル内の全レコードを表示してみましょう。
mysql> select *from DemoTable;
実行すると、次のような出力が得られます。
+--------+--------+ | Value1 | Value2 | +--------+--------+ | 10 | 10 | | 10 | 20 | | 20 | 10 | | 20 | 20 | +--------+--------+ 4 rows in set (0.00 sec)
このように、UNIQUE制約を複数カラムに対して設定することで、カラム値の「組み合わせ」単位での一意性を簡単に保証できます。マスタデータや関連テーブルなど、同一ペアの重複登録を避けたい場面で非常に有効な方法です。
-
Windowsでファイルの削除・名前変更を防ぐ3つの方法【標準機能からフリーソフトまで】
パソコンをどんな目的で使っていても、勝手に名前を変更されたり削除されたりしたくない大切なファイルが、必ずいくつかあるはずです。しかし残念ながら、Windowsには標準でファイルの削除を防ぐ仕組みが用意されていません。そのため、パソコンにアクセスできるユーザーなら誰でも、ファイルを見つけて内容を変更したり、名前を変えたり、最悪の場合は削除まで行えてしまいます。 こうした重要なファイルを守ることは、それ自体が一つの課題です。Windowsはデフォルトではファイルを保護してくれませんが、削除の試みからファイルを守るためのオプションが用意されています。実際、標準機能とサードパーティ製ツールの両方に、
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected