a battle with myself

[ANSI SQL] 4. 테이블 생성과 제어(CREATE/ALTER/DROP/SYSTEM DATE) 본문

sql

[ANSI SQL] 4. 테이블 생성과 제어(CREATE/ALTER/DROP/SYSTEM DATE)

열공_중 2016. 8. 9. 12:27

테이블 생성과 제어

 

테이블 생성 - CREATE TABLE

- 만들 새 테이블의 이름으 CREATE TABLE 뒤에 지정한다.

- 테이블 열의 이름과 정의를  콤마(,)로 구분하여 지정한다.

- 테이블의 위치를 지정해야 하는 DBMS도 있다.

 

CREATE TABLE temp_Table (

field1    char(10)    NOT NULL ,

field2    char(10)    NOT NULL ,

field3    DECIMAL(8,2)    NOT NULL ,

field4    varchar(1000)    NULL

);

 

실행시  빈 테이블 생성

 field1

field2 

field3 

field4 

 

테이블 이름은 CREATE TABLE 키워드 뒤에 지정되며, 테이블 정의(모든열) 은 괄호 내에 위치하고  열사이는 콤마( , )  로 구분 된다.

이 테이블의 경우 네개의 열로 구성되어 있는데 , 각열은 열 이름(테이블 내에서 고유해야함)으로 시작하여 열의 데이터 형식이 이어진다

전체문을 종료할때는 세미콜론( ; )으로 마무리 한다.

※ 데이터 형식 참고

CREATE TABLE 의 구문은 DBMS 에따라 다르다

- 새 테이블을 만들때는 이미 존재하는 테이블 이름을 지정해서는 안되며 그렇게 하면 오류가 발생한다. 테이블 생성 구문을 통해 기존 테이블을이 덮어 쓰여지는 것을 방지하기 위해 SQL은 직접 테이블을 지우고 다시 만들도록 하므로 같은 이름을 지정한다고 해서 기존 테이블이 대체되지 않는다.

 

 

NULL 값의 사용

NULL 값은 값이 없다는 것을 의미한다. 즉 NULL 값을 허용하는 열은 이열에 아무런 값을 넣지 않아도 된다는 의미이다.

NULL 값을 허용하지 않는 열일 경우 값이 없는 행은 받아들이지 않으므로 행을 추가하거나 업데이트 할때 반드시 값을 넣어야한다.

모든 열은 NULL 열이거나 NOT NULL 열이므로 이상태는 테이블을 만들 때 테이블 정의에 지정해주어야 한다.

 

CREATE TABLE Temp_Table (

field1    char(10)    NOT NULL ,

field2    char(10)    NOT NULL ,

field3    DECIMAL(8,2)    NOT NULL ,

field4    varchar(1000)    NULL

);

이 구문은 Temp_Table  을 만드는 구문으로  field1 ~field4 를 호함하는 네개의 열이 지정되었다.

field1~ field3 은 반드시 필요하므로 NOT NULL로 지정 되었는데, 이렇게 하면 값이 지정되지 않은 열이 삽입되는 것을 방지 할 수 있다. 만약 값을 지정하지 않고 행을 추가 하려면 오류가 발생하고 삽입은 실패한다.

field4의 경우 NULL 값이 지정되어 있는데 NULL값을 지정 하지 않아도 기본값이 NULL 이기 때문에 아무것도 작성 하지 않아도 NULL 값을 허용한것으로 인식 한다.

CREATE TABLE Temp_Table (

field1    char(10)    NOT NULL ,

field2    char(10)    NOT NULL ,

field3    DECIMAL(8,2)  ,

field4    varchar(1000) 

);

 

대부분의 DBMS의 경우 NULL 값을 기본값으로 지정한것으로 간주 하지만 모두가 그런것은 아니다. 일반적으로 명시적으로 지정해 주는 것이 좋다.

 

※  NULL 값과 빈문자열을 혼동 하면 안된다. NULL 값은 값이 전혀 없는 것을 의미하여 빈문자열과는 다르다. 사이에 아무것도 없이 두개의 작은 따움표("")를 연달아 입력하는 것이 바로 빈 문자열이며, NULL 값이 허용되지 않는 열이라도 이 값은 넣을 수 있다. 빈 문자열 역시 유효한 값이기 때문이다. NULL 값은 키워드 NULL로 표현하며 빈문자열로 표현할 수 없다.

 

기본값의 지정(DEFAULT)

기본값은 CREATE TABLE 문의 열 정의 부분에서 DEFAULT 키워드를 사용하여 지정할 수 있다. 

행을 삽입할 때 값을 지정하지 않으면 기본으로 사용될 값이 기본값이며, SQL 에서 이를 지정할 수 있다.

 

CREATE TABLE Temp_Table (

field1    char(10)    NOT NULL ,

field2    char(10)    DEFAULT 'Y' ,

field3    DECIMAL(8,2)  ,

field4    varchar(1000) 

);

 

field2 의 열 정의에  DEFAULT 'Y' 로 정의 되어 있는데

이 값은 값 삽입시 별다른 값이 없어도 'Y' 라는 값이 삽입 된다.

 

기본값은 기본 테이블에서 작성 날짜나 주문날짜등  시간을 설정할때 자주 사용된다.

 

※ SYSTEM DATE

시스템 날짜 얻기

Access             NOW()

DB2                  CURRENT_DATE

MySQL              CURRENT_DATE()

ORACLE            SYSDATE

PostgreSQL       CURRENT_DATE

SQLServer         GETDATE()

Sysbase            GETDATE()   

-------------------------------------------------------------------------------------------------------------------------------

테이블 업데이트 - ALTER TABLE

- 데이터가 포함된 테이블의 구조는 변경하지 않는 것이 기본이다. 따라서 애초에 테이블을 디자인 할 때 충분한 시간을 들여 이후에 변경될 소지가 있는지 판단하고 결정해야 한다. 데이터를 이미 넣은 후에 구조를 바꾸는 것은 좋지 않다.

- 기존 테이블에 열을 추가하는 것은 모든 DBMS에서 허용되지만 추가 할 수 있는 데이터 형식과 NULL 및 DEFAULT의 사용 대해서는 약간의 제한이 있다.

- 테이블의 열을 제거하거나 변경하는 것은 허용하지 않는 DBMS가 많다.

- 열의 이름을 변경하는 것은 대부분의 DBMS에서 가능하다.

- 이미 값이 채워진 열을 변경하는 작업은 대부분의 DBMS에서 여러가지로 제한되지만 값이 없는 열일 경우는 한결 수월하다.

 

ALTER TABLE 을 사용하여 테이블을 변경하려면 다음 정보를 지정해야 한다.

- 변경할 테이블의 이름을  ALTER TABLE 키워드 뒤에 지정해야한다.

- 변경할 내용의 목록을 지정해야한다.

 

열 추가

ALTER TABLE Temp_Table ADD field5 char(10);

이구문은 Temp_Table 에 케릭터(10)의 데이터 형식을 가진 field5 열을 추가 하였다.

 

열 삭제

ALTER TABLE Temp_Table DROP COLUMN field5 ;

이구문은 Temp_Table 에  field5 열을 삭제 하였다.

 

 

-------------------------------------------------------------------------------------------------------------------------------

 

테이블 삭제 - DROP TABLE

 

DROP TABLE Temp_Table ;

이 구문은 Temp_Table 을 데이터베이스에서 영구적으로 삭제한다.

- 기본적으로 테이블 삭제는 경고메시지도 없으며 취소할 방법도 없다. 주의가 필요하다.