mysql
MYSQL - REPLACE 문법
REPLACE는 정확히 INSERT와 DELETE를 동시에 수행하는 기능입니다.
주의할 점은, PRIMARY KEY 와 UNIQUE 인덱스를 가지고 있어야 하는데, 없다면 의미없는 구문이 됩니다.
PRIMARY, UNIQUE 인덱스를 가진 열일 경우 새 열을 삽입하기 전에 기존 열을 삭제하게 합니다. 다음 예제는 기존 행에 1를 더한 값을 UPDATE 합니다. 만약, 만족하는 데이터가 있다면 UPDATE 를, 없다면 INSERT 합니다.
실수로 사용자가 2번의 쿼리를 날렸다 하더라도, row는 1개만 출력되고, cnt = 2가 되지 않습니다.
만약, PRIMARY, UNIQUE 인덱스를 가진 열이 아니라면 결과는 달라진다는 점에 주의할 필요가 있습니다.
다음은 PHP의 str_replace() 함수와 흡사합니다.
주의할 점은, 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 댓글