[SQL] CREATE TABLE 테이블 생성, 제약조건(CONSTRAINT), 확인(DESC)[SQL] CREATE TABLE 테이블 생성, 제약조건(CONSTRAINT), 확인(DESC)
Posted at 2014. 5. 29. 15:58 | Posted in == DB ==/SQL[SQL] CREATE TABLE 테이블 생성, 제약조건(CONSTRAINT), 확인(DESC)
1. 테이블 생성 구문 형식
CREATE TABLE 테이블 이름 ( 컬럼명1 DATATYPE [DEFAULT 형식], 컬럼명2 DATATYPE [DEFAULT 형식], 컬럼명3 DATATYPE [DEFAULT 형식] ); |
- 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고한다.
- 테이블 명은 다른 테이블의 이름과 중복되지 않아야 한다.
- 한 테이블 내에서는 컬럼명이 중복되게 지정될 수 없다.
- 테이블 이름을 지정하고 각 컬럼들은 괄호 "( )" 로 묶어 지정한다.
- 각 컬럼들은 콤마 ","로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 ";"로 끝난다.
- 컬럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용하는 것이 좋다.
- 컬럼 뒤에 데이터 유형은 꼭 지정되어야 한다.
- 테이블명과 컬럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.
- 벤더에서 사전에 정의한 예약어(Reserved word)는 쓸 수 없다.
- A-Z, a-z, 0-9, _, $, # 문자만 허용된다.
2. CREATE TABLE 예제
CREATE TABLE PLAYER ( PLAYER_ID CHAR(7) NOT NULL, PLAYER_NAME VARCHAR2(20) NOT NULL, TEAM_ID CHAR(3) NOT NULL, E_PLAYER_NAME VARCHAR2(40), NICKNAME VARCHAR2(30), JOIN_YYYY CHAR(4), POSITION VARCHAR2(10), BACK_NO NUMBER(2), NATION VARCHAR2(20), BIRTH_DATE DATE, SOLAR CHAR(1), HEIGHT NUMBER(3), WEIGHT NUMBER(3), CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID), CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID) ); |
- 테이블 생성시 대/소문자 구분은 하지 않는다. (기본적으로 테이블이나 컬럼명은 대문자로 만들어진다.)
- DATE 유형은 별도로 크기를 지정하지 않는다.
- 문자 데이터 유형은 반드시 가질 수 있는 최대 길이를 표시해야 한다.
- 컬럼과 컬럼의 구분은 콤마로 하되, 마지막 컬럼은 콤마를 찍지 않는다.
- 컬럼에 대한 제약조건이 있으면 CONSTRAINT를 이용하여 추가할 수 있다.
제약조건은 PLAYER_NAME, TEAM_ID 컬럼의 데이터 유형 뒤에 NOT NULL을 정의한 것과 같이 컬럼 LEVEL 방식과,
CONSTRAINT로 테이블 생성 마지막에 모든 제약조건을 기술하는 테이블 LEVEL 방식이 있다.
하나의 SQL 문장내에 두 가지 방식을 혼용해서 사용할 수 있으며, 같은 기능을 가진다.
3. 제약조건 (CONSTRAINT)
제약조건은 사용자가 원하는 조건의 데이터만 유지하기 위한 특정 컬럼에 설정하는 제약이다.
테이블을 생성할 때 제약조건을 반드시 기술할 필요는 없다.
구분 |
설명 |
PRIMARY KEY (기본키) |
- 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 기본키 정의. - 하나의 테이블에 하나의 기본키 제약만 정의할 수 있다. - 기본키 제약을 정의하면 DBMS는 자동으로 UNIQUE 인덱스를 생성하며, 기본키를 구성하는 컬럼에는 NULL을 입력할 수 없다. * PRIMARY KEY = UNIQUE KEY & NOT NULL |
UNIQUE KEY (고유키) |
- 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 고유키를 정의한다. 단, NULL은 고유키 제약의 대상이 아니므로, NULL 값을 가진 행이 여러 개가 있더라도 고유키 제약 위반이 되지 않는다. |
NOT NULL |
- NULL 값의 입력을 금지한다. 디폴트 상태에서는 모든 컬럼에서 NULL을 허가하고 있지만, 이 제약을 지정함으로써 해당 컬럼은 입력 필수가 된다. |
CHECK |
- 입력할 수 있는 값의 범위 등을 제한한다. CHECK 제약으로는 TRUE or FALSE로 평가할 수 있는 논리식을 지정한다. |
FOREIGN KEY |
- 관계형 데이터베이스에서 테이블 간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우 외래키가 생성된다. - 외래키 지정시 참조 무결성 제약 옵션을 선택할 수 있다. |
4. 생성된 테이블 구조 확인 (DESC)
테이블을 생성한 후 테이블의 구조가 제대로 만들어졌는지 확인할 필요가 있다.
Oracle의 경우 DESCRIBE 또는 DESC 로 테이블 정보를 호가인할 수 있다.
DESC PLAYER;
5. SELECT 문장을 통한 테이블 생성
SELECT 문장을 통해 테이블을 생성할 수도 있다.
기존의 테이블을 이용하면 컬럼별로 데이터 유형을 다시 정의하지 않아도 된다.
하지만, 기존 테이블의 제약조건 중 NOT NULL만 새로운 복제 테이블에 적용이 되고, PRIMARY KEY, UNIQUE KEY, FOREIGN KEY, CHECK 등의 다른 제약 조건은 없어 진다.
제약 조건을 추가하기 위해서는 ALTER TABLE 을 사용해야 한다.
CREATE TABLE TEMPPLAYER AS SELECT * FROM PLAYER; |
'== DB == > SQL' 카테고리의 다른 글
[SQL] INSERT 데이터 삽입 (0) | 2014.05.30 |
---|---|
[SQL] DROP TABLE 테이블 삭제 + RENAME 테이블명 변경 (0) | 2014.05.30 |
[SQL] ALTER TABLE 테이블 수정 (ADD, DROP, MODIFY, RENAME) (0) | 2014.05.29 |
[SQL] CREATE TABLE 테이블 생성, 제약조건(CONSTRAINT), 확인(DESC) (0) | 2014.05.29 |
데이터베이스 데이터 유형 및 CHAR와 VARCHAR 비교 (0) | 2014.05.29 |
SQL(Structured Query Language) 정의와 종류(DML, DDL, DCL, TCL) (0) | 2014.05.29 |