2021-12-15 19:36 작성
My SQL basic 메모
Table of contents
MySQL REPLACE 소개
MySQL REPLACE
구문은 다음과 같이 작동한다:
Step 1. 만약 duplicate key error가 발생하면, 특정 table에 새로운 row를 삽입한다.
Step 2. duplicate-key error가 발생해 삽입이 실패하면:
- 특정 table에서 duplicate key error를 발생시키는 충돌 row를 삭제한다.
- 특정 table에 새로운 row를 다시 삽입한다.
새로운 row가 특정 table에 이미 존재하는지 여부를 결정하기 위해 MySQL은 PRIMARY KEY
혹은 UNIQUE KEY
index를 사용한다. 만약 table이 이러한 indexes를 가지고 있지 않으면 REPLACE
는 INSERT
구문처럼 작동한다.
MySQL은
REPLACE
구문이 아닌REPLACE
string function도 가지고 있다.
MySQL REPLACE를 사용해서 새로운 row 삽입하기
다음은 REPLACE
구문의 기본 문법이다:
REPLACE [INTO] table_name(column_list)
VALUES(value_list);
REPLACE
키워드를 제외하고는 INSERT
구문과 흡사하다.
REPLACE
구문을 사용한 예시를 통해 어떻게 작동하는지 확인 해보도록 하자.
첫째, cities
라는 명칭을 가진 새로운 table을 생성하자:
CREATE TABLE cities (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
population INT NOT NULL
);
다음은, cities
table에 몇 가지 rows를 삽입한다:
INSERT INTO cities(name,population)
VALUES('New York',8008278),
('Los Angeles',3694825),
('San Diego',1223405);
그리고 cities
table에 삽입된 데이터를 확인한다.
SELECT * FROM cities;
그 다음, REPLACE
구문을 사용해서 Los Angeles
의 population을 3696820
으로 업데이트 한다.
REPLACE INTO cities(id,population)
VALUES(2,3696820);
마지막으로, cities
를 다시 한 번 쿼리해 교체가 성공적으로 되었는지 확인한다.
name
column의 value가 NULL
이 되었다. REPLACE
구문은 다음과 같이 작동한다:
-
첫째,
REPLACE
구문은cities
table에 새로운 row의 삽입을 시도한다. 그러나cities
table에는 이미 id가 2인 row가 존재하기에 삽입이 실패한다. -
그리고
REPLACE
구문은 id가 2인 row를 삭제하고 똑같이 id가 2이며 population이3696820
인 새로운 row를 삽입한다. name column에는 어떤 value도 명시되지 않았으므로NULL
로 설정된다.
임의의 row를 업데이트 하는데 MySQL REPLACE 구문 사용하기
다음은 데이터를 업데이트 하는데 REPLACE
를 어떻게 사용하는지 보여준다:
REPLACE INTO table
SET
column1 = value1,
column2 = value2;
이 구문은 REPLACE
키워드만 제외하면 UPDATE
구문과 비슷하다. 게다가 WHERE
절이 없다.
다음의 예시는 Phoenix
city의 population을 1768980
으로 업데이트 한다:
REPLACE INTO cities
SET id = 4,
name = 'Phoenix',
population = 1768980;
UPDATE
구문과 달리 만약 SET
절의 column에 대해 value를 명시하지 않으면, REPLACE
는 column의 기본값을 사용할 것이다.
MySQL REPLACE를 사용해서 SELECT 구문으로부터 데이터 삽입하기
다음은 REPLACE
를 이용해 쿼리에서 추출된 데이터를 임의의 table에 삽입하는 방법을 보여준다.
REPLACE INTO table_1(column_list)
SELECT column_list
FROM table_2
WHERE where_condition;
이러한 형태의 REPLACE
구문은 INSERT INTO SELECT
구문과 흡사하다는 것에 주목한다.
다음의 구문은 REPLACE INTO
구문을 사용해서 같은 table에 한 개의 row를 복사한다.
REPLACE INTO
cities(name,population)
SELECT
name,
population
FROM
cities
WHERE id = 1;