Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.2.1 |  CUBRID 8.3.0 |  CUBRID 8.3.1 |  CUBRID 8.4.0 |  CUBRID 8.4.1 | 

컬럼 정의

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

column_name column_type

[

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

    [ AUTO_INCREMENT [(seed, increment)] ] |

    [ NOT NULL ] |

    [ UNIQUE ] |

    [ PRIMARY KEY ] |

    [ FOREIGN KEY REFERENCES... ]

]

컬럼 이름
설명

컬럼 이름은 '_', '#', '%'를 포함하는 알파벳으로 구성된 한 단어이다. 컬럼 이름은 도메인을 표현하는 단어가 포함되는 것이 좋다.

예제

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

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

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

컬럼은 정의할 때 SHARED, DEFAULT 구문을 이용하여 초기값을 설정할 수 있다.

  • SHARED 구문을 이용하면 그 테이블의 모든 행은 동일한 값을 가진다.
  • DEFAULT 구문을 이용하면 새로운 행을 생성할 때, 값을 지정하지 않아도 DEFAULT 구문에 지정된 값이 저장된다.
예제 1

남자 선수들의 정보를 저장하는 man 테이블을 생성한다. gender 컬럼을 SHARED로 지정한다.

CREATE TABLE man ( name VARCHAR(40), gender CHAR(1) SHARED );

예제 2

AAA 선수와 BBB 선수를 입력한다. gender 컬럼이 SHARED로 정의 되어 있기 때문에 모든 행이 그 값을 공유한다. BBB 선수의 gender를 입력하지 않아도 'M'으로 되어있는 것을 알 수 있다.

INSERT INTO man VALUES ( 'AAA','M');

INSERT INTO man (name) VALUES ('BBB');

csql> SELECT * FROM man;

csql> ;x

=== <Result of SELECT Command in Line 1> ===

  name                  gender

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

  'AAA'                 'M'

  'BBB'                 'M'

2 rows selected.

예제 3

이번엔 여자선수들의 정보를 저장하는 woman 테이블을 생성한다. gender에 디폴트 값을 W로 지정한다. gender 값을 입력하지 않아도 디폴트 값인 'W'가 입력된다.

CREATE TABLE woman ( name VARCHAR(40), gender CHAR(1) DEFAULT 'W' );

INSERT INTO woman (name) VALUES ('AAA');

csql> SELECT * FROM woman;

csql> ;x

=== <Result of SELECT Command in Line 6> ===

  name                  gender

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

  'AAA'                 'W'

1 rows selected.

주의 사항

SHARED, DEFAULT 값은 ALTER CLASS 문장을 통해 값을 변경할 수 있다.

자동 증가 특성(Auto Increment)
설명

자동 증가 특성은 수치형 컬럼에 각 행의 숫자 값을 자동으로 증가하여 생성하며 초기값과 증가값을 명시하여 정의한다.

구문

AUTO_INCREMENT [(seed, increment)]

  • seed : 번호가 시작하는 초기값이다. 양의 정수만 허용되며 디폴트 값은 1이다.
  • increment : 행마다 증가되는 증가값이다. 양의 정수만 허용되며 디폴트 값은 1이다.
예제 1

다음은 자동 증가 특성이 사용된 athlete 테이블의 스키마이다.

CREATE TABLE athlete (

   code             INTEGER AUTO_INCREMENT(16693, 1) PRIMARY KEY,

   name             VARCHAR(40) NOT NULL,

   gender           CHAR(1)     ,

   nation_code      CHAR(3)     ,

   event            VARCHAR(30)

);

예제 2

다음은 athlete 테이블에 선수 정보를 입력하는 예제이다. 자동 증가 특성을 사용하여 값을 입력할 때에는 테이블 이름 뒤에 자동 증가 컬럼을 제외한 컬럼 명을 정확히 표현해야 한다.

INSERT INTO athlete (name, gender, nation_code, event) VALUES ('Jang Mi-Ran', 'W', 'KOR', 'Weightlifting');  

주의 사항
  • 자동 증가 특성은 SMALLINT, INTEGER, DECIMAL(p,0), NUMERIC(p,0) 도메인에 한정하여 정의할 수 있다.
  • DEFAULTSHARED 구문과 함께 사용할 수 없다.
  • 자동 증가 특성만으로는 UNIQUE 제약 조건을 가지지 않는다.
  • 자동 증가 특성이 있어도 사용자는 임의의 값을 입력, 수정, 삭제할 수 있다. 즉, 자동 증가 특성보다 사용자가 입력하는 값을 우선한다. 이는 사용자가 삭제된 임의의 이전 값을 알고 있고, 그 값으로 데이터를 입력할 때 제한적으로 사용할 것을 권고한다.
  • INSERT INTO 테이블 이름 VALUES(...)와 같이 컬럼이 정의되지 않은 입력문장에서 자동 증가 특성은 지원되지 않는다. 이런 경우는 자동 증가 특성을 가진 컬럼을 제외한 컬럼들을 입력문장에 정의하고 사용해야 한다. 초기값 및 자동 증가 특성에 의해 증가된 최종값은 해당 도메인에서 허용되는 최소 최대값을 넘을 수 없다.
  • 자동 증가 특성은 순환되지 않으므로 타입의 최대값을 넘어갈 경우 오류가 발생하며, 이에 대한 롤백이 일어나지 않는다. 따라서 이와 같은 경우 해당 칼럼을 삭제 후 다시 생성해야 한다.
    예를 들어, 아래와 같이 테이블을 생성했다면, A의 최대값은 32767이다. 32767이 넘어가는 경우 에러가 발생하므로, 초기 테이블 생성시에 컬럼 A의 최대값이 해당 타입의 최대값을 넘지 않는다는 것을 감안해야 한다.

create table tb1(A smallint auto_increment, B char(5));