[sql] 레코드에 특정 값이 없으면 추가하기(중복 방지)
예) users테이블에 email 이 없는 경우 레코드 자료 생성하기
//-------------------------------------
* 방법 1
- INSERT IGNORE 사용
- 일반적인 경우 이미 값이 있는 경우 에러가 발생하지만, IGNORE를 통해 이 에러가 무시되면서
결과적으로 아무 동작도 하지 않게 된다
- 장점 : 빠르고 단순
- 단점 : 검사할 값을 임의로 정하기 힘듬, Unique Index로 지정된 칼럼만 검사
- Unique index 설정이 필요
ALTER TABLE users ADD UNIQUE INDEX(`email`);
-
INSERT IGNORE INTO users SET email = 'qwe@qwe.com', name = 'qwe' , tele = '010';
//--------------------------------------
* 방법 2
- WHERE NOT EXISTS 사용
- 장점 : 검사할 값을 임의로 정할수 있음 , unique index 설정 필요 없음
INSERT INTO users (column1, column2, ...)
SELECT * FROM (SELECT 'value1' as column1 , 'value2' as column2, ...) AS tmp
WHERE NOT EXISTS (
SELECT 1 FROM your_table WHERE column1 = 'value1' AND column2 = 'value2' ... LIMIT 1
);
'value1' as column1 에 as column1 꼭 필요, 없으면 중복값 존재시 에러 발생
//--------------------------------
// 참고
- mysql
https://dev.mysql.com/doc/refman/8.0/en/exists-and-not-exists-subqueries.html
https://stackoverflow.com/questions/3164505/mysql-insert-record-if-not-exists-in-table/3164595