컬럼 정의

컬럼은 테이블에서 각 열에 해당하는 항목이며, 컬럼은 컬럼 이름과 데이터 타입을 명시하여 정의한다.

<column_definition> ::=

column_name column_type [ [ <default_or_shared> ] | [ <column_constraint> ] ]...

 

<default_or_shared> ::=

{ SHARED <value_specification> | DEFAULT <value_specification> } |

AUTO_INCREMENT [ (seed, increment) ]

 

<column_constraint> ::=

NOT NULL | UNIQUE | PRIMARY KEY | FOREIGN KEY <referential definition>

컬럼 이름
설명

컬럼 이름 작성 원칙은 식별자를 참고한다. 생성한 컬럼의 이름은 ALTER TABLE 문의 RENAME COLUMN 절을 사용하여 변경할 수 있다. 자세한 내용은 RENAME COLUMN 절을 참고한다.

예제

다음은 full_name과 age, 2개의 컬럼을 가지는 manager2 테이블을 생성하는 예제이다.

CREATE TABLE manager2 (full_name VARCHAR(40), age INT );

주의 사항
컬럼의 초기 값 설정(SHARED, DEFAULT)
설명

SHARED, DEFAULT는 컬럼 초기 값과 관련된 속성이다. SHARED, DEFAULT 값은 ALTER TABLE 문에서 변경할 수 있다.

참고 테이블 생성 시 DATE, DATETIME, TIME, TIMESTAMP 컬럼의 DEFAULT 값을 SYS_DATE, SYS_DATETIME, SYS_TIME, SYS_TIMESTAMP로 지정하면, CREATE TABLE 시점의 값이 저장된다는 점에 주의한다. 데이터가 INSERT되는 시점의 값을 입력하려면 INSERT 구문의 VALUES 절에 해당 함수를 입력해야 한다.

예제

CREATE TABLE colval_tbl

( id INT, name VARCHAR SHARED 'AAA', phone VARCHAR DEFAULT '000-0000');

INSERT INTO colval_tbl(id) VALUES (1),(2);

SELECT * FROM colval_tbl;

 

           id  name                  phone

=========================================================

            1  'AAA'                 '000-0000'

            2  'AAA'                 '000-0000'

 

--updating column values on every row

INSERT INTO colval_tbl(id, name) VALUES (3,'BBB');

INSERT INTO colval_tbl(id) VALUES (4),(5);

SELECT * FROM colval_tbl;

 

           id  name                  phone

=========================================================

            1  'BBB'                 '000-0000'

            2  'BBB'                 '000-0000'

            3  'BBB'                 '000-0000'

            4  'BBB'                 '000-0000'

            5  'BBB'                 '000-0000'

 

--changing DEFAULT value in the ALTER TABLE statement

ALTER TABLE colval_tbl CHANGE phone DEFAULT '111-1111'

INSERT INTO colval_tbl(id) VALUES (6);

SELECT * FROM colval_tbl;

 

           id  name                  phone

=========================================================

            1  'BBB'                 '000-0000'

            2  'BBB'                 '000-0000'

            3  'BBB'                 '000-0000'

            4  'BBB'                 '000-0000'

            5  'BBB'                 '000-0000'

            6  'BBB'                 '111-1111'

자동 증가 특성(AUTO INCREMENT)
설명

컬럼 값에 자동으로 일련 번호를 부여하기 위해 컬럼에 AUTO_INCREMENT 속성을 정의할 수 있다. SMALLINT, INTEGER, BIGINT, NUMERIC(p,0) 도메인에 한정하여 정의할 수 있다.

동일한 컬럼에 AUTO_INCREMENT 속성과 SHARED 또는 DEFAULT 속성을 동시에 정의할 수 없으며, 사용자가 직접 입력한 값과 자동 증가 특성에 의해 입력된 값이 서로 충돌되지 않도록 주의해야 한다.

AUTO_INCREMENT의 초기값은 ALTER TABLE 문을 이용하여 바꿀 수 있다. 자세한 내용은 ALTER TABLEAUTO_INCREMENT 절을 참고한다.

구문

CREATE TABLE table_name (id int AUTO_INCREMENT[(seed, increment)]) |

CREATE TABLE table_name (id int AUTO_INCREMENT) AUTO_INCREMENT = seed;

CREATE TABLE table_name (id int AUTO_INCREMENT) AUTO_INCREMENT = seed; 구문을 사용할 때에는 다음과 같은 제약 사항이 있다.

예제

CREATE TABLE auto_tbl(id INT AUTO_INCREMENT, name VARCHAR);

INSERT INTO auto_tbl VALUES(NULL, 'AAA'),(NULL, 'BBB'),(NULL, 'CCC');

INSERT INTO auto_tbl(name) VALUES ('DDD'),('EEE');

SELECT * FROM auto_tbl;

 

           id  name

===================================

            1  'AAA'

            2  'BBB'

            3  'CCC'

            4  'DDD'

            5  'EEE'

 

CREATE TABLE tbl (id int AUTO_INCREMENT, val string) AUTO_INCREMENT = 3;

INSERT INTO tbl VALUES (NULL,'cubrid');

 

SELECT * FROM tbl;

           id  val

===================================

            3  'cubrid'

 

CREATE TABLE t (id int AUTO_INCREMENT, id2 int AUTO_INCREMENT) AUTO_INCREMENT = 5;

ERROR: To avoid ambiguity, the AUTO_INCREMENT table option requires the table to  have exactly one AUTO_INCREMENT column and no seed/increment specification.

 

CREATE TABLE t (i int AUTO_INCREMENT(100, 2)) AUTO_INCREMENT = 3;

ERROR: To avoid ambiguity, the AUTO_INCREMENT table option requires the table to  have exactly one AUTO_INCREMENT column and no seed/increment specification.

주의 사항