MySQLのUNIQUE制約で重複する値の挿入を防ぐ方法
MySQLでは、テーブル作成時にUNIQUE制約を宣言することで、指定したカラムに重複する値が挿入されるのを防ぐことができます。同じ値がすでに存在する場合、INSERT文はエラーとなり、そのレコードは登録されません。
UNIQUE制約の基本構文
UNIQUE制約は、CREATE TABLE文の中で以下のように宣言します。
create table yourTableName
(
yourColumnName1 dataType,
yourColumnName2 dataType,
UNIQUE(yourColumnName1),
UNIQUE(yourColumnName2)
);
サンプルテーブルの作成
実際に、2つのカラムにUNIQUE制約を設定したテーブルを作成してみましょう。
mysql> create table DemoTable
(
Value int,
Value2 int,
UNIQUE(Value),
UNIQUE(Value2)
);
Query OK, 0 rows affected (13.98 sec)
この例では、「Value」カラムと「Value2」カラムの両方にUNIQUE制約を設定しているため、それぞれのカラム内で同じ値を持つレコードは登録できません。
重複データ挿入時の挙動を確認
INSERTコマンドでレコードを挿入してみます。UNIQUE制約が設定されているため、重複する値を含むレコードは挿入されず、エラーが発生します。
mysql> insert into DemoTable values(10,20); Query OK, 1 row affected (0.32 sec) mysql> insert into DemoTable values(10,30); ERROR 1062 (23000): Duplicate entry '10' for key 'Value' mysql> insert into DemoTable values(40,20); ERROR 1062 (23000): Duplicate entry '20' for key 'Value2' mysql> insert into DemoTable values(60,70); Query OK, 1 row affected (1.37 sec)
2つ目のINSERTでは「Value」カラムの値「10」が、3つ目のINSERTでは「Value2」カラムの値「20」が、それぞれ既存データと重複しているため、ERROR 1062(Duplicate entry:重複エントリ)が発生して挿入が拒否されています。一方、4つ目のようにどちらのカラムにも重複がない場合は、正常に登録されます。
SELECT文で登録結果を確認する
SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable;
実行結果は以下の通りです。
+-------+--------+ | Value | Value2 | +-------+--------+ | 10 | 20 | | 60 | 70 | +-------+--------+ 2 rows in set (0.00 sec)
重複していた2件のINSERTが拒否されているため、テーブルには最初の1件と最後の1件、合計2件だけが登録されていることがわかります。
まとめ
このようにUNIQUE制約を宣言しておけば、アプリケーション側で事前チェックを行わなくても、データベースレベルで重複データの登録を自動的に防止できます。メールアドレスやユーザーIDなど、一意性が求められるカラムには積極的に活用しましょう。なお、既存のテーブルに後からUNIQUE制約を追加したい場合は、ALTER TABLE テーブル名 ADD UNIQUE(カラム名); を使用します。
-
JavaScriptでテーブルにNULL値が挿入されるのを防ぐ方法
テーブルにNULL値が挿入されるのを防ぐには、値を入力する際に条件チェックを行う必要があります。NULLをチェックする条件は以下のように記述します。while( !( yourVariableName1==null || yourVariableName2==null || yourVariableName3==null……N){ // yourStatement1 . . N }このロジックを使用することで、NULL値が挿入されることを確実に防ぐことができます。次に、forループを使ってNULL値なしでテーブルに値を挿入します。以下がそのコードです。サンプルコ
-
MySQLで重複する列の値を検索して表示する方法(GROUP BY HAVING句の使い方)
MySQLでテーブル内の重複データを検索したい場面は多くあります。例えば、登録データの重複チェックやデータクレンジングなどが挙げられます。このような場合には、GROUP BY句とHAVING句を組み合わせることで、簡単に重複する列の値を抽出できます。 重複検出の基本的な考え方 GROUP BY句で列の値ごとにレコードをグループ化し、HAVING句で「同じ値が2件以上存在するグループ」だけを絞り込むことで、重複している値だけを取り出すことができます。 サンプルテーブルの作成 まず、検証用のテーブルを作成します。 mysql> create table DemoTable1858