데이터베이스의 테이블에는 데이터를 입력해야 이를 활용할 수 있다. 관계형 테이블에 데이터를 입력하는 방법으로 INSERT 문장을 이용한다.
DBMS에 있는 유틸리티(오라클의 경우 SQL 로더)를 사용하여 대량의 데이터를 한꺼번에 넣을 수도 있지만, 기본적으로 SQL 문장을 사용하여 데이터를 입력한다.
관계형 데이터베이스에는 서로 테이블간의 참조 무결성 관계가 있으므로 데이터를 입력할 때 무결성이 유지되도록 입력한다. 만약 데이터베이스에 참조 무결성 규칙을 유지하도록 지정하였다면 잘못된 데이터를 입력할 경우 데이터가 입력되지 않는다.
또한 테이블간에 FK 관계를 설정하지 않아 데이터가 입력될 수 있다 하더라도 반드시 논리적인 관계에 의해 데이터를 검증하고 입력해야 한다. 그렇지 않으면 데이터베이스의 가장 중요한 규칙인 데이터 무결성이 지켜지지 않을 것이다.
* INSERT 문장의 구성
테이블에 데이터를 입력하는 방법으로 SQL 문장에서는 INSERT 문장을 이용한다.
다음은 오라클에서 INSERT 문장을 구성하는 문법을 각 절로 구분하여 표시한 것인데..
INSERT INTO 절 | INSERT INTO [SCHEMA,]{TABLE | VIEW }{@DBLINK}[(COLUMN [, COLUMN] ...} |
VALUES 절 | {VALUES {EXPR [, EXPR} ...} | SUBQUERY} |
(1) INSERT INTO 절
데이터가 입력되어야 할 테이블이나 뷰를 지정한다. @DBLINK는 원격지(Remote)에 있는 테이블이나 뷰를 사용할때 데이터베이스 링크(Database Link)이름을 기술한다.
(2) VALUES 절
INSERT INTO 절에 정의한 테이블이나 뷰에 입력될 데이터를 기술한다. 단건 처리일 경우에는 데이터를 직접 입력하고, 여러건을 처리할 경우에는 SUBQUERY 문장을 이용하여 처리 할 수도 있다.
* INSERT 문장 유형에 따른 예제
다음과 같은 구조를 가진 테이블을 이용하여 INSERT 문장을 구성하는 예를 알아보자
제품코드 |
제품명 |
수량 |
단가 |
제품색상 |
만든날짜 |
ITEMNO: VARCHAR2(10) NOT NULL |
ITEMNM: VARCHAR2(20) NULL |
QTY: NUMBER(10) NULL |
PRICE: NUMBER(10) NULL |
COLOR: VARCHAR2(10) NULL |
MADEDATE: DATE NULL |
ITEMCD | ITEMNM | QTY | PRICE | COLOR | MADEDATE |
1001 | 시계-AA | 100 | 35000 | 은색 | 01/07/01 |
1002 | 반지-TU | 300 | 100000 | 금색 | 02/07/01 |
(1) 단건 INSERT
한개의 로우만 입력한다.
[예제] ITEM 테이블에 제품코드 : 1003, 제품명 : 팔찌-XG, 수량 : 50개, 단가 : 20000원, 제품색: 청색, 제조날짜 : 2002년 4월 5일의 데이터를 입력하라
① 테이블 컬럼 지정
INSERT INTO ITEM(ITEMCD, ITEMNM, QTY, PRICE, COLOR, MADEDATE) VALUES ('1003', '팔찌-XG', 50, 20000, '청색', '20020405');
② 테이블 컬럼을 지정하지 않음
INSERT INTO ITEM VALUES ('1003', '팔찌-XG', 50, 20000, '청색', '20020405');
- 테이블 전체 컬럼에 대해 데이터를 입력하는 경우에는 ITEM 다음에 컬럼을 생략해도 무방하다. 단 이때는 VALUES에 있는 데이터값이 테이블 컬럼의 순서와 일치되고 데이터타입이 일치해야한다.
- 문자 형식은 작은따옴표('')를 사용하여 입력한다. 작업따옴표를 생략해도 데이터가 입력되기는 하지만, DBMS 내부적으로 문자열을 인식하는 추가적인 작업이 발생하므로 사용하는 편이 좋다. 또한 작은따옴표를 사용하지 않고 문자열을 입력하면 에러가 발생하는 경우가 있다. 예를 들어 '시계,팔찌겸용-GA'라는 제품명을 따옴표 없이 INSERT 문장을 실행하면 'ORA-00913: 값의 수가 너무 많습니다.' 라는 메시지가 출력된다.
- 숫자의 경우에는 작은따옴표를 사용하지 않는다. 작은따옴표를 사용해도 내부적으로 테이블 컬럼 형식과 일치시키기 위하여 숫자형으로 전환하는 작업이 발생한다. 숫자형의 타입에 문자형의 데이터가 입력되면 데이터 유형이 일치하지 않는다는 에러 메시지가 출력된다.
- 날짜 형식은 작은따옴표를 사용한다. 만약 작은따옴표를 사용하지 않을 경우에는 'ORA-00932 데이터 유형이 일치하지 않습니다.' 라는 에러메시지가 출력된다.
(2) NULL INSERT
테이블의 틀정 컬럼에 NULL을 입력한다.
[예제] ITEM 테이블에 제품코드 : 1004, 제품명 : 목걸이-FR, 수량 : 100개, 단가 : 미정, 제품색 : 은색, 제조날짜 : 2002년 5월 1일의 데이터를 입력하라.
① 테이블 컬럼을 지정하고 컬럼값에 '' 지정
INSERT INTO ITEM(ITEMNO, ITEMNM, QTY, PRICE, COLOR, MADEDATE) VALUES('1004', '목걸이-FR', '', '은색', '20020501');
② 테이블 컬럼을 지정하지 않고 컬럼값에 '' 지정
INSERT INTO ITEM VALUES ('1004' '목걸이-FR', 100, '' , '은색', '20020501');
③ 테이블 컬럼에 NULL 대상 컬럼을 제외하고 컬럽값에 '' 지정
INSERT INTO ITEM(ITEMCD, ITEMNM, QTY, COLOR, MADEDATE) VALUES ('1004', '목걸이-FR', 100, '은색', '20020501'
- 테이블 구조가 NOT NULL 제약조건이 걸려 있는 경우에는 NULL을 입력할 수 있다.
- 널 대상 컬럼의 이름에서 제외하고 VALUES에서 컬럼의 순서와 타입을 일치시켜도 된다.
- 숫자 형식도 컬럼을 지정할 때는 반드시 작은따옴표를 사용해야 한다.
(3) 다건 INSERT
테이블에 여러 개의 로우를 입력한다.
[예제] ITEM 테이블에 있는 모든 내용을 임시 테이블(ITM_T)에 저장하라(단 임심 테이블의 구조는 ITEM 테이블과 구조가 동일함)
① 두 테이블의 컬럼 지정
INSERT NOTO ITEM_T (ITEMNO, ITEMNM, QTY, PRICE, COLOR, MADEDATE) SELECT ITEMCD, ITEMNO, QTY, PRICE, COLOR, MADEDATE FROM ITEM;
② 두 테이블의 컬럼을 지정하지 않음
INSERT INTO ITEM_T SELECT * FROM ITEM;
③ 입력 테이블의 컬럼을 지정하지 않음
INSERT INTO ITEM_T SELECT ITEMCD, ITEMNM, QTY, PRICE, COLOR, MADEDATE FROM ITM;
④ 읽는 ㅌ이블의 컬럼을 지정하지 않음
INSERT INTO ITEM_T(ITEMCD, ITMENM, QTY, PRICE, COLOR, MADEDATE) SELECT * FROM ITEM;
- 읽어오는 테이블에서 ORDER BY 절을 사용할 수 없다.
- 입력한 테이블과 읽어오는 테이블의 컬럼 타입이 동일해야 하며, 컬럼을 생략하기 위해서는 두 테이블이 동일한 스키마 구조를 가져야 한다.
- 두 테이블이 다르고 테이블의 일부 컬럼이 동일하다면 반드시 컬럼명을 명시해서 문장을 작성한다.
- 보통 데이터를 임시로 백업받는 이후에 테이블에 배치 작업이나 스키마 변경 작업을 수행할 때 많이 이용한다.
- 분산 환경에서 데이터베이스 링크가 설정되어 있는 경우 원격지에 있는 동일한 구조의 테이블에 데이터를 입력하기 위해서 사용한다. 이때는 테이블 이름 다음에 데이터베이스 링크 이름을 명시해야한다.
데이터를 삭제하는 DELETE 문 (0) | 2022.03.30 |
---|---|
데이터를 수정하는 UPDATE 문 (0) | 2022.03.29 |
mysqli_connect(): (HY000/1130) 1130 에러 해결방법 (0) | 2022.03.22 |
데이터베이스 모델링(뷰설계, 인덱스 설계) (0) | 2020.05.19 |
데이터베이스 모델링(무결성, 트랜잭션) (0) | 2020.05.19 |
댓글 영역