4.4 KiB
4.4 KiB
행 추가하기 - INSERT
INSERT 명령
INSERT INTO 테이블명 VALUES(값 1, 값 2, ...)
SELECT명령은 데이터 검색을 위한 것으로, 질의를 하면 데이터베이스 서버가 클라이언트로 결과를 반환하는 형식으로 처리된다.- 데이터를 추가할 경우에는 이와 반대로 클라이언트에서 서버로 데이터를 전송하는 형식을 취한며 서버 측은 전송받은 데이터를 데이터베이스에 저장한다.
1. INSERT로 행 추가하기
RDBMS에서는INSERT명령을 사용해 테이블의 행 단위로 데이터를 추가한다.INSERT명령을 통해 행을 추가하려면 각 열의 값을 지정해야 한다.- 먼저
INSERT INTO뒤에 행을 추가할 테이블을 지정한다.
INSERT INTO sample41
- 저장할 데이터를 지정하지 않았기 때문에 아직은
INSERT명령문이 완성되지 않은 상태이다. - 행의 데이터는
VALUES구를 사용해 지정한다.
INSERT INTO sample41 VALUES(1, 'ABC', '2014-01-25');
- 값을 지정할 때는 해당 열의 데이터 형식에 맞도록 지정해야 한다.
- 다만,
INSERT명령을 실행해도 처리상태만 표시될 뿐SELECT명령을 실행했을 때처럼 결과를 출력하지는 않는다. SELECT명령의 경우 실행하면 그 결과가 클라이언트에게 반환되지만,INSERT명령은 데이터가 클라이언트에서 서버로 전송되므로 반환되는 결과가 없는 것이다.
INSERT 명령으로 테이블에 행을 추가할 수 있다!
2. 값을 저장할 열 지정하기
INSERT명령으로 행을 추가할 경우 값을 저장할 열을 지정할 수 있다.- 열을 지정할 경우에는 테이블명 뒤에 괄호로 묶어 열명을 나열하고
VALUES구로 값을 지정한다. VALUES구에 값을 지정할 경우에는 지정한 열과 동일한 개수로 값을 지정해야 한다.
INSERT의 열 지정
INSERT INTO 테이블명 (열1, 열2, ...) VALUES(값1, 값2, ...)
- 위의 문법을 적용하면 지정한 열에 값을 넣어 행을 추가할 수 있다.
3. NOT NULL 제약
- 행을 추가할 때 유효한 값이 없는 상태(
NULL)로 두고 싶을 경우에는VALUES구에서NULL로 값을 지정할 수 있다. - 하지만
NULL값을 허용하지 않는NOT NULL 제약이 걸려있으면 에러가 발생한다. - 이와 같이 테이블에 저장하는 데이터를 성정으로 제한하는 것을 통틀어
제약이라 부른다. NOT NULL 제약은 그중 하나로 이 외에도 다양한 제약이 있다.
NOT NULL 제약이 걸려있는 열은 NULL 값을 허용하지 않는다!
NULL은 여러 측면에서 주의해야 한다.NULL의 조건을 비교할 때는IS NULL을 이용해야 하며NULL을 포함한 연산 결과는 모두NULL이 되어버리기도 한다.NULL을 허용하고 싶지 않다면NOT NULL제약을 걸어두는 편이 좋다.
4. DEFAULT
DESC명령으로 열 구성을 살펴보면Default라는 항목을 찾을 수 있다.Default는 명시적으로 값을 지정하지 않았을 경우 사용하는 초깃값을 말한다.Default값은 테이블을 정의할 때 지정할 수 있다. 열을 지정해 행을 추가할 때 지정하지 않은 열은Default값을 사용하여 저장된다.- 즉, 값을 생략하면 초깃값으로 지정된
Default값으로 저장된다.
값을 생략하지 않고 행 추가하기
INSERT INTO sample411(no, d) VALUES(1, 1);
VALUES구에서DEFAULT키워드를 사용하면 디폴트값이 저장된다.- 아래 예시처럼 디폴트값을 지정하는 것을
DEFAULT를 명시적으로 지정하는 방법이라고 한다.
DEFAULT로 값을 지정해 행 추가하기
INSERT INTO sample411(no, d) VALUES(2, DEFAULT);
암묵적으로 디폴트 저장
- 암묵적으로 지정하는 방법도 있다.
- 여기서 암묵적인 방법이란 디폴트값으로 저장할 열을
INSERT명령문에서 별도 지정하지 않는 것을 말한다. - 그 결과, 명시적 방법과 암묵적 방법 중 어떤 것을 사용해도 지정하지 않은 열의 값이 디폴트로 저장됨을 확인할 수 있다.
암묵적으로 디폴트값을 가지는 행 추가하기
INSERT INTO sample411(no) VALUES(3);