DataBase/MariaDB & MySQL

[MariaDB/MySQL]데이터 insert하면서 중복되면 update하는 기능

희랍인 조르바 2018. 5. 5. 14:34

다른 개발자분의 소스를 보다가 DB에 insert를 시행하는데 


만약 데이터가 있다면 기존의 데이터를 덮어쓰기가 가능한 방법을 찾았다. 


MariaDB에만 있는 기능인지 오라클이나 다른 DB에도 있는 기능인지는 모르겠다. 


일단, MariaDB/MySQL에 존재하는 기능이다.


그 기능은


INSERT ON DUPLICATE KEY UPDATE 기능이다. 


Primary key/Unique key가 기존에 존재하는 데이터를 찾을 경우, 그 데이터에 UPDATE를 하는 것이다.


*쓰는 방법 예시


1
2
3
4
5
6
7
8
9
10
11
12
13
 INSERT INTO book_table
 
         SET book_seq = 1000 -- primary/unique key
           , book_title = 'greek zorba'
           , book_price = 20000
           , book_location =  '종로'
           , book_author = '니코스 카잔차키스'
 
          ON DUPLICATE KEY UPDATE
             book_title = 'greek zorba'    
           , book_price = 20000
           , book_location =  '종로'
           , book_author = '니코스 카잔차키스'
cs


만약 book_seq에 1000이라는 값에 이미 다른 데이터가 있다면


지금 주입하려는 값으로 대신 UPDATE가 되는 것이다. 


더 다른 방법으로도 쓸 수 있는데 다른 방법이 궁금하다면


여기로 들어가면 된다!