Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.4.3 |  CUBRID 9.0.0 | 

칼럼 정의

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

<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_nameage, 2개의 칼럼을 가지는 manager2 테이블을 생성하는 예제이다.

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

주의 사항
  • 칼럼 이름의 첫 글자는 반드시 알파벳이어야 한다.
  • 칼럼 이름은 테이블 내에서 고유해야 한다.
칼럼의 초기 값 설정(SHARED, DEFAULT)
설명

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

  • SHARED : 칼럼 값은 모든 행에서 동일하다. 따라서 SHARED 속성은 UNIQUE 제약 조건과 동시에 정의할 수 없다. 초기에 설정한 값과 다른 새로운 값을 INSERT하면, 해당 칼럼 값은 모든 행에서 새로운 값으로 갱신된다.
  • DEFAULT : 새로운 행을 삽입할 때 칼럼 값을 지정하지 않으면 DEFAULT 속성으로 설정한 값이 저장된다.

참고 테이블 생성 시 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;

  • seed : 번호가 시작하는 초기값이다. 모든 정수가 허용되며 기본값은 1이다.
  • increment : 행마다 증가되는 증가값이다. 양의 정수만 허용되며 기본값은 1이다.

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

  • AUTO_INCREMENT 속성을 갖는 칼럼은 하나만 정의해야 한다.
  • (seed, 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.

주의 사항
  • 자동 증가 특성만으로는 UNIQUE 제약 조건을 가지지 않는다.
  • 자동 증가 특성이 정의된 칼럼에 NULL을 입력하면 자동 증가된 값이 저장된다.
  • 자동 증가 특성이 정의된 칼럼에 SHARED 또는 DEFAULT 속성을 설정할 수 없다.
  • 초기값 및 자동 증가 특성에 의해 증가된 최종 값은 해당 타입에서 허용되는 최소/최대값을 넘을 수 없다.
  • 자동 증가 특성은 순환되지 않으므로 타입의 최대값을 넘어갈 경우 오류가 발생하며, 이에 대한 롤백이 일어나지 않는다. 따라서 이와 같은 경우 해당 칼럼을 삭제 후 다시 생성해야 한다.
  • 예를 들어, 아래와 같이 테이블을 생성했다면, A의 최대값은 32767이다. 32767이 넘어가는 경우 에러가 발생하므로, 초기 테이블 생성시에 칼럼 A의 최대값이 해당 타입의 최대값을 넘지 않는다는 것을 감안해야 한다.
  • create table tb1(A smallint auto_increment, B char(5));