컬럼은 테이블에서 각 열에 해당하는 항목이며, 컬럼은 컬럼 이름과 데이터 타입을 명시하여 정의한다.
<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 값은 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 속성을 정의할 수 있다. SMALLINT, INTEGER, BIGINT, NUMERIC(p,0) 도메인에 한정하여 정의할 수 있다.
동일한 컬럼에 AUTO_INCREMENT 속성과 SHARED 또는 DEFAULT 속성을 동시에 정의할 수 없으며, 사용자가 직접 입력한 값과 자동 증가 특성에 의해 입력된 값이 서로 충돌되지 않도록 주의해야 한다.
AUTO_INCREMENT의 초기값은 ALTER TABLE 문을 이용하여 바꿀 수 있다. 자세한 내용은 ALTER TABLE의 AUTO_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.