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를 가지고 있지 않으면 REPLACEINSERT 구문처럼 작동한다.

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 구문은 다음과 같이 작동한다:

  1. 첫째, REPLACE 구문은 cities table에 새로운 row의 삽입을 시도한다. 그러나 cities table에는 이미 id가 2인 row가 존재하기에 삽입이 실패한다.

  2. 그리고 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;