예) 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
'Code > Database (DB)' 카테고리의 다른 글
[SQL] 여러 행 추가 (테스트용 DB 생성) 프로시저 (0) | 2020.09.20 |
---|---|
[SQL] 모든 레코드의 문자열 변경 (정규식) (0) | 2020.09.14 |
[MySql] 정규식 사용 방법 (0) | 2020.08.17 |
[SQL] 추가(INSERT) 시도, 이미 있으면 갱신(UPDATE) [한방쿼리] (0) | 2020.08.07 |
[SQL] 날짜별 레코드 카운트 구하기 (0) | 2020.07.31 |