dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

mysql で重複するレコードを登録しない方法

2022-03-25 00:10:41 | mysql
mysql で重複するレコードを登録しない方法のメモ。
以下のようにテーブルを作成し、エラーにならないように重複するレコードを登録する insert 文を実行します。
create table test1 (
       id    integer not null auto_increment,
       name  varchar(100) not null,

       primary key (id),
       unique key (name)
);

insert into test1 set name = 'name1';
insert into test1 set name = 'name2';
insert into test1 set name = 'name3';

■DB登録内容
mysql> select * from test1;
+----+-------+
| id | name  |
+----+-------+
|  1 | name1 |
|  2 | name2 |
|  3 | name3 |
+----+-------+

■レコード登録
insert ignore into ~ でレコードを登録します。
insert ignore into test1 set name = 'name1';
insert ignore into test1 set name = 'name2';
insert ignore into test1 set name = 'name4';

■DB登録内容確認
mysql> select * from test1;
+----+-------+
| id | name  |
+----+-------+
|  1 | name1 |
|  2 | name2 |
|  3 | name3 |
|  6 | name4 |
+----+-------+

id が name1、name2 分だけインクリメントされています。

次に、テーブルを作り直して、insert ~ where not exists ~ でレコードを登録します。
■レコード登録
insert into test1 (name)
select * from (select 'name1') as tmp
where not exists (select 1 from test1 where name = 'name1');

insert into test1 (name)
select * from (select 'name2') as tmp
where not exists (select 1 from test1 where name = 'name2');

insert into test1 (name)
select * from (select 'name5') as tmp
where not exists (select 1 from test1 where name = 'name5');

■DB登録内容確認
mysql> select * from test1;
+----+-------+
| id | name  |
+----+-------+
|  1 | name1 |
|  2 | name2 |
|  3 | name3 |
|  4 | name5 |
+----+-------+

重複レコードで id がインクリメントされずに、連番になっていることがわかります。


この記事についてブログを書く
« Typescript で chevrotain に... | トップ | BigQuery で json オブジェク... »

mysql」カテゴリの最新記事