replace into & insert into 차이점, 주의할점이 무엇인지 쉽고 간단하게 확인하기
replace into & insert into 차이점, 주의할점이 무엇인지 쉽고 간단하게 확인하기
안녕하세요.
MYSQL이나 mariadb를 쓰시는 여러분들께 오늘은 replace into 와 insert into의 차이점을 말씀 드려보겠습니다.
자, 그럼 시작해 보겠습니다.
개념이해
아마 여러분들이 insert into에 대해서는 잘 아시리라 생각을 하는데, 잘 이해 안가시는 분들이 있다면 아래 포스트를 한번 보고 오시면 됩니다.
2020.05.15 - [Database/sql 강의] - sql 독학 강의 # mysql insert 사용 방법 17편 -sTricky
insert into 명령은 mysql이나 mariadb에서 데이터를 테이블에 넣는 명령어 입니다.
replace into 명령은 기본적으로 insert into와 동일 하나, 테이블 키를 기준으로 하여 동일 한 키를 입력하려고 한다면 해당 테이터는 삭제하고, 넣으려는 데이터를 넣는 명령어 입니다.
실습을 통해서 정확하게 이해를 해보겠습니다.
실습준비
실습을 하기 위해서 실습 대상이 되는 테이블을 생성 하겠습니다.
아래와 같은 DDL과 insert 문을 활용하여 테이블을 만들고 데이터를 넣을께요.
create table salary
(
name varchar(50) not null comment '이름'
primary key,
dept varchar(1) null comment '부서명',
salary int null comment '급여',
bonus int null comment '보너스'
)
comment '급여대장';
INSERT INTO salary (name, dept, salary, bonus) VALUES ('박지성', 'A', 200, 60);
INSERT INTO salary (name, dept, salary, bonus) VALUES ('손흥민', 'A', 100, 50);
INSERT INTO salary (name, dept, salary, bonus) VALUES ('차두리', 'B', 500, 35);
INSERT INTO salary (name, dept, salary, bonus) VALUES ('타요', 'C', 330, 50);
INSERT INTO salary (name, dept, salary, bonus) VALUES ('홍길동', 'B', 250, 80);
이렇게 데이터를 넣고 select를 하면 다음과 같이 출력이 됩니다.
데이터가 잘 들어갔으니, 실습을 해야겠죠.
replace into 실습
여기에서 아래와 같이 replace into SQL을 실행 해 보겠습니다.
replace into salary values ('조세호','D', 180, 40);
그리고 다시 salary 테이블을 select 하면 조세호라는 데이터가 들어간 것을 확인 할 수 있습니다.
아래와 같이 말이죠.
지금 실습을 하고 있는 salary 테이블의 pk는 name 필드 인데, replace into 가 잘 작동이 되는지를 손흥민의 데이터로 확인을 해보겠습니다. 지금 손흥민의 salary는 100으로 되어 있는데 아래 replace into SQL을 통해서 500으로 변경하여 넣어 보도록 하겠습니다.
replace into salary values ('손흥민','A', 500, 100);
자, 그럼 데이터가 replace into SQL로 잘 변경이 되었는지 확인 해 보겠습니다.
짜잔, 잘 변경이 된 것을 확인 할 수 있습니다.
replace into 주의 할 점
자, 이번엔 주의 할 점을 안내해 드리겠습니다.
replace into 명령은 기본적으로 대상 테이블의 Primary Key를 기준으로 작동이 됩니다.
그래서, 이번에는 위와 똑같은 테이블을 primary key를 정의 하지 않고 만들어서 실습을 해보겠습니다.
아래와 같이 Primary Key가 없는 테이블 만들고, 데이터를 똑같이 넣고, 똑같이 replace into 명령어로 손흥민의 데이터를 변경 시도 해보겠습니다.
create table salary
(
name varchar(50) not null comment '이름',
dept varchar(1) null comment '부서명',
salary int null comment '급여',
bonus int null comment '보너스'
)
comment '급여대장';
INSERT INTO salary (name, dept, salary, bonus) VALUES ('박지성', 'A', 200, 60);
INSERT INTO salary (name, dept, salary, bonus) VALUES ('손흥민', 'A', 100, 50);
INSERT INTO salary (name, dept, salary, bonus) VALUES ('차두리', 'B', 500, 35);
INSERT INTO salary (name, dept, salary, bonus) VALUES ('타요', 'C', 330, 50);
INSERT INTO salary (name, dept, salary, bonus) VALUES ('홍길동', 'B', 250, 80);
위와 같이 테이블 만들고, 물론 Primary Key를 정의 하지 않았습니다. 데이터도 똑같이 넣었죠.
이 상태에서 replace into SQL을 실행 해 보겠습니다. 아래와 같이 말이죠.
replace into salary values ('손흥민','A', 500, 100);
그러면 아래와 같은 결과를 볼 수 있습니다.
손흥민의 데이터가 하나 더 들어간것을 볼 수 있죠. 위에서 처럼 replace 되지 않고 말이죠.
이처럼 Primary Key가 없는 테이블에서는 해당 SQL을 사용 할 수 없다는 점 꼭 명심 하시길 바랍니다.
똑같이 했는데 왜 나는 안되요~~~ 하시면 안됩니다!
감사합니다.
by.sTricky