예) 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




반응형
Posted by codens