存在チェックINSERT文 重複行を挿入しない方法
データを登録する時に同一のデータがある場合は挿入したくないって時に使えるSQL。
同一のデータが入っている場合エラーが出たりで困ります。
これを使用すれば同一行は挿入しないようにしてくれます。
説明用サンプルテーブル
CREATE TABLE IF NOT EXISTS `M_USER` ( `MAIL_ADDRESS` varchar(50) DEFAULT NULL COMMENT 'メールアドレス', `PASSWORD` varchar(50) DEFAULT NULL COMMENT 'パスワード', PRIMARY KEY (`MAIL_ADDRESS`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ユーザマスタ' AUTO_INCREMENT=1 ;
通常のSQL
INSERT INTO M_USER VALUES ('hoge', 'piyo')これをそのまま実行すると初回はそのまま登録されますが、既に同じ【MAIL_ADDRESS】が登録されている場合はエラーとなってしまいます。
存在チェックSQL
INSERT INTO M_USER SELECT 'hoge', 'piyo' FROM DUAL WHERE NOT EXISTS( SELECT 'X' FROM M_USER WHERE MAIL_ADDRESS = 'hoge' );DUALを使ってダミーテーブルにします。DBによっては使えなかったりするので注意してください。
対象のテーブルに対象データが存在するかをNOT EXISTSを使って存在しない場合は行を表示するようにします。
SELECT INSERT文なので出力された行がINSERTされます。
もし対象のデータが存在する場合は行が表示されないのでデータも挿入されることはありません。
これでデータの登録時にエラーが出されなくなりました。
ただ、データが存在する場合はUPDATEを行う場合は地道にSELECTしてデータの存在確認をしていくのがいいのかも知れません。
«前の記事:Linuxで重いファイルを分割する方法【PHP】simplexml_load_stringでXML読込時にバイトエラーが出た:次の記事»
Comments
ありがとうございます