
RDBMS (관계형 데이터베이스 관리 시스템)를 다루는 현장에서는 종종 insert 문을 볼 수 있습니다. insert는 데이터를 추가하는 대표적인 SQL문이지만, 새로운 데이터를 추가하는 기능은 아닙니다. 여러 데이터를 함께 추가하거나 다른 테이블에서 데이터를 삽입하는 것과 같은 유용한 기능도 제공합니다.
이 기사에서는 insert문의 기능이나 대표적인 사용법, 주의점을 해설합니다. 직장에서 RDBMS를 다루고 있는 분이나 SQL문에 흥미·관심을 가지고 계신 분은, 꼭 읽어 주세요.
SQL의 insert 문이란 무엇인가?
insert 문은 단일 데이터를 가진 행을 새로 삽입하는 SQL 문입니다. RDBMS에 새로운 정보를 추가하는 중요한 작업을 담당합니다. 고객 정보의 추가나 매출 정보의 기록 등 사회에 새로운 정보의 추가는 빠뜨릴 수 없습니다. insert문은 다양한 업종에 있어서, 해야 할 일을 하고 있습니다.
또 다른 데이터로부터 필요한 부분을 추출해 삽입할 수 있는 것도, insert문이 가지는 강점입니다. insert문의 활용에 의해, 데이터를 정리해 유효 활용하는 업무에도 연결하는 것이 가능합니다.
기본 insert 문 사용법
여기에서는 MySQL을 활용하여 기본적인 insert 문 사용법을 확인해 봅시다. 다음 열이 있는 “분할” 테이블을 준비하십시오.
· 직원 번호
・쌍의 색
· 삭제 플래그
MySQL8.0에서는 다음 SQL 문으로 테이블을 만들 수 있습니다.
CREATE TABLE 구분 ( 직원 번호 INT NOT NULL, 쌍 색 VARCHAR(2), 삭제 플래그 INT DEFAULT 0 ) DEFAULT CHARSET = utf8;
첫 번째 단계에서는 테이블 정의만을 결정했으며 데이터는 아무 것도 포함하지 않습니다. 이 상태에서 데이터를 추가합니다. 대표적인 두 가지 경우에 대해 확인해 봅시다.
데이터 한 줄 추가
데이터를 한 줄 추가하는 SQL 문은 insert의 기본 사용법에 있습니다. 기본적인 사용법은, 값을 세트 하는 열명을 제시한 다음에, 대응하는 값을 지정하는 방법입니다. 아래의 insert 문을 확인합시다.
INSERT INTO 분류 (직원 번호, 색상 세트, 삭제 플래그) VALUES (188021, '적색', 0);
표에 있는 열 중, 「사원 번호」 「조의 색」 「삭제 플래그」를 지정해 삽입하는 insert 문입니다. values 절 다음에 해당 값을 순서대로 나열하십시오.
그런데 삽입처의 「조분」표는 「사원 번호」 「조의 색」 「삭제 플래그」의 순서로 구성되어 있습니다. 테이블의 레이아웃대로 값을 지정하는 경우는 열명을 생략해 값만을 지정한 삽입도 가능합니다. 다음 insert 문을 사용하여 새 데이터를 추가할 수 있습니다.
INSERT INTO 분류 VALUES (222201, '빨강', 0);
두 insert 문을 모두 실행한 결과 두 개의 데이터가 입력되었습니다.
직원 번호 | 쌍 색 | 삭제 플래그 |
---|---|---|
188021 | 레드 | 0 |
222201 | 레드 | 0 |
여러 데이터를 하나의 insert 문으로 추가 할 수 있습니다.
데이터가 여러 개인 경우에도 한 줄의 insert 문으로 추가할 수 있습니다. 데이터마다 insert 문을 만드는 수고를 줄일 수 있으므로 초기 데이터 설정을 효율적으로 진행할 수 있습니다.
values 절 다음에 오는 괄호는 한 세트의 데이터를 나타냅니다. 쉼표 뒤에 괄호를 계속하여 추가할 데이터를 늘릴 수 있습니다. 두 개의 데이터를 추가하는 insert 문이 아래에 나와 있습니다.
INSERT INTO 조합 (직원 번호, 색상 세트, 삭제 플래그)
실행하면 두 행의 데이터가 추가됩니다.
열 순서에 따라 데이터를 추가하는 경우 insert 문에 열 이름을 표시할 필요가 없습니다. 데이터를 지정하는 것만으로 추가할 수 있습니다. 다음 insert 문에서는 새로 두 행의 데이터를 추가합니다.
INSERT INTO 분류 VALUES (222204, '녹색', 0), (222205, '청', 0);
2개의 insert문을 실행한 결과, 새롭게 4개의 데이터가 입력되었습니다. 표에는 6개의 데이터가 들어 있습니다.
직원 번호 | 쌍 색 | 삭제 플래그 |
---|---|---|
188021 | 레드 | 0 |
222201 | 레드 | 0 |
222202 | 화이트 | 0 |
222203 | 노랑 | 0 |
222204 | 녹색 | 0 |
222205 | 블루 | 0 |
여러 데이터를 추가할 때는 주의해야 할 포인트가 있습니다. 하나라도 오류가 발생한 데이터가 있는 경우 어떤 데이터도 추가되지 않습니다.
사용법은 데이터베이스에 따라 다를 수 있습니다.
insert 문의 문법은 RDBMS 나 버전에 따라 다를 수 있습니다. 예를 들어 Oracle의 경우, 복수의 데이터를 추가하는 경우는 「INSERT ALL」를 사용해야 하는 한편, 조건에 따라 삽입처의 테이블을 바꿀 수가 있습니다. 또 PostgreSQL의 경우, 복수건의 데이터 추가는 버젼 8.2계로부터의 대응이 되고 있습니다.
이러한 이유로 insert 문을 사용할 때는 사전에 RDBMS 설명서를 참조하는 것이 좋습니다.
실무에 도움이 되는 insert문의 사용법을 소개
insert는 다양한 데이터를 추가하는 방법을 제공합니다. 여기에서는 3개의 예를 소개해, insert문의 사용법을 확인해 갑시다.
여기까지 해설한 순서에 따라 insert문을 실행했을 경우, 「분할」표의 상태는 이하와 같습니다.
직원 번호 | 쌍 색 | 삭제 플래그 |
---|---|---|
188021 | 레드 | 0 |
222201 | 레드 | 0 |
222202 | 화이트 | 0 |
222203 | 노랑 | 0 |
222204 | 녹색 | 0 |
222205 | 블루 | 0 |
이 상태에서 조작을 진행합시다. 어떤 방법도 실무에 도움이 되기 때문에, 마스터해 두는 것을 추천합니다.
일부 열만 지정하여 데이터를 추가할 수 있습니다.
insert 문에서 열을 지정하고 추가하는 경우 테이블에 정의된 모든 열을 지정할 필요가 없습니다. 다음과 같이 데이터를 삽입하려는 열만 지정할 수 있습니다.
INSERT INTO 분류 (직원 번호) VALUES (221200);
이 SQL 문은 직원 번호에 221200을 추가하는 insert 문입니다. 쌍의 색은 지정하지 않으므로 NULL이 설정됩니다. 또 삭제 플래그의 값도 insert문으로 지정하고 있지 않기 때문에, 「조분」표의 작성시에 설정된 디폴트치의 0이 세트 됩니다.
실행 후 직원 번호 221200의 데이터가 추가되었습니다.
직원 번호 | 쌍 색 | 삭제 플래그 |
---|---|---|
188021 | 레드 | 0 |
222201 | 레드 | 0 |
222202 | 화이트 | 0 |
222203 | 노랑 | 0 |
222204 | 녹색 | 0 |
222205 | 블루 | 0 |
221200 | null | 0 |
insert 문을 실행하는 경우 삽입된 테이블에서 기본 키나 NOT NULL이 정의된 열은 생략할 수 없습니다. 반드시 값을 정의합시다. 값을 정의하지 않으면 insert 문이 오류가되어 데이터를 추가하지 못합니다.
추가할 열에 기본값을 설정할 수 있습니다.
insert 문에서는 값을 지정하는 대신 기본값을 삽입하도록 지정할 수도 있습니다. 「데이터를 1행 추가한다」에서 소개한 insert문
INSERT INTO 분류 VALUES (222201, '빨강', 0);
는 다음과 같이 다시 쓸 수 있습니다.
INSERT INTO 분류 VALUES (222201, '빨강', DEFAULT);
이는 “분할” 테이블의 “삭제 플래그” 열에 “DEFAULT 0″이 설정되어 있기 때문입니다. DEFAULT 0은 값을 지정하지 않으면 기본값으로 0을 삽입합니다. “분할”표를 정의하는 SQL 문을 확인해 봅시다.
CREATE TABLE 구분 ( 직원 번호 INT NOT NULL, 쌍 색 VARCHAR(2), 삭제 플래그 INT DEFAULT 0 ) DEFAULT CHARSET = utf8;
default를 사용하는 이점은 기본값이 변경되어도 SQL 문을 수정하지 않고 끝나고 버그를 줄일 수 있다는 것입니다.
다른 표의 데이터 선택 및 삽입
insert 문에서는 다른 표에 있는 데이터를 선택하여 삽입할 수도 있습니다. 「insert into」문으로 삽입처의 테이블이나 열을 지정한 후, select문을 계속하는 것으로 실현할 수 있습니다. 삽입원이 되는 「조분 2019」표를 이하에 나타냈습니다.
직원 번호 | 쌍 색 | 삭제 플래그 |
---|---|---|
219182 | 화이트 | null |
218178 | 노랑 | null |
217174 | 화이트 | null |
216170 | 블루 | null |
위의 표에서 직원 번호가 219,000번을 넘는 분만 「조립」표에 데이터를 삽입하는 경우를 생각해 봅시다. insert 문은 다음과 같습니다.
INSERT INTO 분류 (직원 번호, 쌍 색, 삭제 플래그) SELECT 직원 번호, 쌍 색, 삭제 플래그 FROM 분류 2019 WHERE 직원 번호 >219000;
해당자는 직원 번호 219182로 제한됩니다. 실행 후 “분할”표에 해당하는 데이터가 추가되었는지 확인하십시오.
직원 번호 | 쌍 색 | 삭제 플래그 |
---|---|---|
188021 | 레드 | 0 |
222201 | 레드 | 0 |
222202 | 화이트 | 0 |
222203 | 노랑 | 0 |
222204 | 녹색 | 0 |
222205 | 블루 | 0 |
221200 | null | 0 |
219182 | 화이트 | null |
insert 문을 사용하기위한주의 사항
insert 문을 사용할 때는 주의해야 할 포인트가 3개 있습니다. 부드럽게 데이터를 삽입하고 실무를 진행하기 위해서도 아래에 드는 주의점을 확실히 파악해 둡시다.
열별 제약 조건을 철저히 확인하고 데이터 작성
테이블에 정의된 컬럼 중에는 제약 조건이 제공될 수 있습니다. 기본 키와 NOT NULL은 대표적인 제약의 예입니다. 제약 조건에 맞지 않는 데이터를 추가하려고 하면 오류가 발생하고 처리가 수행되지 않습니다.
또한 추가할 데이터가 문자열인 경우 테이블에 정의된 문자 수의 상한을 초과하지 않는 것이 중요합니다. 테이블의 정의가 어떻게 되어 있는지, 미리 확인해 둡시다.
중복 데이터가 없는지 사전 확인
데이터의 추가로 꼭 피하고 싶은 사태의 하나로, 중복하는 데이터의 등록을 들 수 있습니다. 기본 키 제약 조건이 있는 열에 중복 데이터를 추가하려고 하면 오류가 발생합니다. 이 경우 데이터가 중복되는 상황은 발생하지 않습니다.
한편으로 데이터의 중복을 허용하는 설정이 되어 있는 경우는, 동일한 데이터가 복수 등록되어 버릴 우려가 있습니다. 이러한 사태가 되면 결과가 2배가 되는 등 집계 결과에도 악영향을 미칩니다. 데이터를 추가할 때는 사전에 중복되는 데이터가 없는지 확인해 봅시다.
대량 데이터를 추가하는 데 시간이 걸립니다.
insert 문을 실행하면 데이터 만 업데이트되지 않습니다. 다음 항목도 insert 문 실행과 함께 업데이트됩니다.
· 트랜잭션 로그
· 인덱스
따라서 많은 양의 데이터를 추가하면 처리가 완료되는 데 상당한 시간이 걸릴 수 있습니다. 소요시간은 기기의 성능이나 데이터베이스의 설정에 따라 달라지기 때문에, 과거의 소요시간을 바탕으로 여유를 가지는 스케줄의 설정을 추천합니다.
insert 문을 사용하여 효과적인 SQL 문을 작성합시다.
지금까지 insert 문에 대해 다양한 관점에서 해설했습니다. 몰랐던 사용법이 있는, 의외로 융통이 좋다고 생각한 분도 있는 것은 아닐까요.
insert 문을 사용하면 대량의 데이터를 짧은 SQL 문으로 효율적이고 안정적으로 추가할 수 있습니다. 이 기사와 RDBMS에서 제공하는 정보를 참고하여 효과적인 SQL 문을 작성하고 업무 효율성을 높일 수 있습니다.