REPLACE는 정확히 INSERT와 DELETE를 동시에 수행하는 기능입니다.

주의할 점은, PRIMARY KEY 와 UNIQUE 인덱스를 가지고 있어야 하는데, 없다면 의미없는 구문이 됩니다.

PRIMARY, UNIQUE 인덱스를 가진 열일 경우 새 열을 삽입하기 전에 기존 열을 삭제하게 합니다. 다음 예제는 기존 행에 1를 더한 값을 UPDATE 합니다. 만약, 만족하는 데이터가 있다면 UPDATE 를, 없다면 INSERT 합니다.

#ex.1)
 mysql> REPLACE tb_name SET field_name = field_name+1;

#ex.2)
 mysql> REPLACE INTO tb_name set name = 'myname', cnt = DEFAULT(cnt) + 1, date = '20111010';

실수로 사용자가 2번의 쿼리를 날렸다 하더라도, row는 1개만 출력되고, cnt = 2가 되지 않습니다.

#ex.3)
 mysql> REPLACE INTO tb_name set name = 'myname', cnt = DEFAULT(cnt) + 1;
 mysql> REPLACE INTO tb_name set name = 'myname', cnt = DEFAULT(cnt) + 1;

 mysql> SELECT cnt FROM tb_name WHERE name='myname';
      -> 1

만약, PRIMARY, UNIQUE 인덱스를 가진 열이 아니라면 결과는 달라진다는 점에 주의할 필요가 있습니다.

#ex.4)
 mysql> REPLACE INTO tb_name set name = 'myname', cnt = DEFAULT(cnt) + 1;
 mysql> REPLACE INTO tb_name set name = 'myname', cnt = DEFAULT(cnt) + 1;

 mysql> SELECT cnt FROM tb_name WHERE name='myname';
      -> 2

다음은 PHP의 str_replace() 함수와 흡사합니다.

#ex.5)
 mysql> SELECT REPLACE('mysql.com', 'm', 'www.m');
      -> www.mysql.cowww.m

 mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
      -> WwWwWw.mysql

 mysql> SELECT REPLACE('www.mysql.com', 'com', 'co.kr');
      -> www.mysql.co.kr

0 댓글