본문으로 바로가기

MySQL :: On duplicate key update

category Study/web 2018. 8. 8. 16:47

MySQL에서 중복검사를 할 때, 쿼리 결과를 통해 검사를 해왔다.


하지만 이러한 과정을 쿼리 하나로 끝낼 수 있다.




이번 포스팅은 검사후 중복이 아닐 경우에 삽입, 중복일 경우에 업데이트를 하는 쿼리문에 관련된 내용이다.


insert 구문에 on duplicate key update (값) 이 들어가면 위에서 설명한 행동을 취하게 된다.


단 unique한 컬럼이 존재해야 해당 컬럼으로 중복비교가 가능하다는 필수조건이 있다.




우선 아래와 같이 테이블을 만들어보자


1
create table inorup(no int, name varchar(15));
cs



여기서 on duplicate key update가 작동하기 위해선 unique 성질이 필요한데 하는데, no에 부여해보자


1
alter table inorup add unique(no);

cs



desc inroup을 통해 확인해보면 no 컬럼에 unique 성질이 부여된 것을 확인할 수 있다.






이제 쿼리문을 날려보자


1
insert into inorup values(1,"g0pher"on duplicate key update no=1 name="REg0pher";
cs


해당 쿼리문을 첫번째로 전송하면 1, "g0pher"가 들어가게 된다.


하지만 두 번째로 전송하게 되면 no가 1인 데이터가 이미 존재하므로 update가 되어 REg0pher로 name이 바뀌게 된다.



'Study > web' 카테고리의 다른 글

MySQL :: Every derived table must have its own alias  (1) 2018.08.02
HTTP request Brute Force Attack  (0) 2017.07.27
SQLinjection공격  (0) 2017.07.27
OWASP Top 10 - 2017  (2) 2017.07.06
OWASP란?  (0) 2017.07.06