CREATE TABLE
테이블을 생성한다.
테이블 칼럼의 초기값을 SHARED 또는 DEFAULT 값을 통해 정의할 수 있다. (ALTER TABLE 문에서 변경 가능)
DEFAULT 속성값으로 허용되는 의사 칼럼(pseudocolumn)과 함수는 다음과 같다 :
DEFAULT 값 | 데이터 타입 |
---|---|
SYS_TIMESTAMP | TIMESTAMP |
UNIX_TIMESTAMP() | INTEGER |
CURRENT_TIMESTAMP | TIMESTAMP |
SYS_DATE_TIME | DATETIME |
CURRENT_DATETIME | DATETIME |
SYS_DATE | DATE |
CURRENT_DATE | DATE |
SYS_TIME | TIME |
CURRENT_TIME | TIME |
USER, USER() | STRING |
TO_CHAR(data_time[, format]) | STRING |
TO_CHAR(number,[, format]) | STRING |
칼럼값에 자동으로 일련번호를 부여하려면 AUTO_INCREMENT 속성을 사용한다.
칼럼의 제약 조건 종류는 NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY가 있다.
제약 조건 | 의미 |
---|---|
NOT NULL | 반드시 NULL이 아닌 값을 가져야 함 |
UNIQUE | 정의된 칼럼이 고유한 값을 갖도록 함 |
PRIMARY KEY | 기본키로 정의된 칼럼 값은 각 행에서 고유하게 식별됨 |
FOREIGH KEY | 참조 관계에 있는 다른 테이블의 기본키를 참조 |
테이블에서 key란 각 행을 고유하게 식별할 수 있는 하나 이상의 칼럼들의 집합을 말한다. candidate key(후보키)는 테이블 내의 각 행을 고유하게 식별하는 칼럼들의 집합을 의미하며, 사용자는 이러한 candidate key 중 하나를 primary key(기본키)로 정의할 수 있다.
foreign key(외래키)와 참조되는 primary key(기본키)는 동일한 데이터 타입을 가져야 한다. foreign key가 primary key를 참조함에 따라 연관되는 두 테이블 사이에는 일관성이 유지되는데, 이를 참조 무결성이라 한다.
CREATE TABLE LIKE
이미 존재하는 테이블과 동일한 스키마의 테이블을 생성한다.
데이터는 빈 상태로 생성된다.
CREATE TABLE AS SELECT
ALTER TABLE
테이블의 칼럼, 제약 조건, 인덱스를 추가하거나 변경 또는 삭제한다.
ADD COLUMN
ADD CONSTRAINT
ADD INDEX
ALTER COLUMN ... SET DEFAULT
AUTO_INCREMENT
CHANGE
MODIFY
RENAME COLUMN
DROP COLUMN
DROP CONSTRAINT
DROP INDEX
DROP PRIMARY KEY
DROP FOREIGN KEY
DROP TABLE
RENAME TABLE
CREATE INDEX
ALTER INDEX
인덱스의 이름을 변경하거나 인덱스를 재생성한다.
REBUILD
DROP INDEX
인덱스를 제거한다.
고유 인덱스는 DROP CONSTRAINT로도 삭제할 수 있다.
뷰는 물리적으로 존재하지 않는 가상의 테이블이며, 기존의 테이블이나 뷰에 대한 질의문을 이용하여 뷰를 생성할 수 있다.
CREATE VIEW
뷰를 생성한다.
CREATE 뒤에 OR REPLACE 키워드가 명시되면, 기존의 뷰와 이름이 중복되더라도 에러를 출력하지 않고 기존의 뷰를 새로운 뷰로 대체한다.
갱신 가능한 뷰를 생성하려면 다음 조건을 만족해야 한다.
ALTER VIEW
뷰를 갱신한다.
ADD QUERY
AS SELECT
CHANGE QUERY
DROP QUERY
COMMENT
DROP VIEW
RENAME VIEW
CREATE SERIAL
고유한 순번을 반환하는 시리얼을 생성한다.
시리얼 번호는 테이블과 독립적으로 생성된다.
ALTER SERIAL
DROP SERIAL
큐브리드는 기본적으로 DBA와 PUBLIC이라는 두 종류의 사용자를 제공한다.
CREATE USER
ALTER USER
DROP USER
CREATE USER ... GROUPS
CREATE USER ... MEMBERS
GRANT operation TO user
SELECT
지정된 테이블에서 원하는 칼럼을 조회한다.
FROM
WHERE
ORDER BY
LIMIT
JOIN
VALUES
FOR UPDATE
START WITH ... CONNECT BY
INSERT
데이터베이스에 존재하는 테이블에 새로운 레코드를 삽입한다.
INSERT ... SELECT
ON DUPLICATE KEY UPDATE
MERGE
하나 이상의 원본으로부터 하나의 테이블 또는 뷰에 삽입 또는 갱신을 수행한다.
또한 삭제 조건도 추가할 수 있다.
사용자가 MERGE 문을 수행할 수 있게 GRANT 문으로 사용자 권한을 부여하려면 INSERT 권한, UPDATE 권한, 그리고 DELETE 권한을 부여해야 한다.
UPDATE
대상 테이블 또는 뷰에 저장된 레코드의 칼럼 값을 새로운 값으로 업데이트한다.
LIMIT
ORDER BY
JOIN
REPLACE
INSERT 와 비슷하지만, 고유 키 위반이면(PRIMARY KEY 또는 UNIQUE 제약 조건이 정의된 칼럼에 중복된 값을 삽입) 에러 출력 없이 기존 레코드를 삭제한 후 새로운 레코드를 삽입한다.
REPLACE 문을 수행하려면 INSERT 권한과 DELETE 권한이 모두 필요하다.
DELETE
테이블 내에 레코드를 삭제한다.
WHERE과 결합하여 삭제 조건을 명시할 수 있다.
LIMIT
JOIN
TRUNCATE
명시된 테이블의 모든 레코드를 삭제한다.
내부적으로 테이블에 정의된 모든 인덱스와 제약 조건을 먼저 삭제한 후 레코드를 삭제하므로 WHERE 조건이 없은 DELETE 문을 수행하는 것보다 빠르다.
하지만 DELETE 문과는 구분되므로 ON DELETE 트리거가 활성화되지 않는다.
AUTO_INCREMENT 칼럼을 초기화해 데이터가 다시 입력되면 시작값부터 생성한다.
큐브리드는 기본적인 문자 자료형, 숫자 자료형, 날짜/시간 자료형을 지원하며, 추가로 BLOB, CLOB 자료형을 지원한다.
타입 | 바이트 | 최솟값 | 최댓값 |
---|---|---|---|
SHORT, SMALLINT | 2 | -32,768 | 32,767 |
INTEGER, INT | 4 | -2,147,483,648 | 2,147,483,647 |
BIGINT | 8 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
NUMERIC, DECIMAL | 16 | 정밀도 p : 1 / 스케일 s : 0 | 정밀도 p : 38 / 스케일 s : 38 |
FLOAT, REAL | 4 | -3.402823466E+38 (ANSI/IEEE 754-1985 표준) | 3.402823466E+38 (ANSI/IEEE 754-1985 표준) |
DOUBLE, DOUBLE PRECISION | 8 | -1.7976931348623157E+308 (ANSI/IEEE 754-1985 표준) | 1.7976931348623157E+308 (ANSI/IEEE 754-1985 표준) |
큐브리드는 수치형 데이터 타입에 대해 UNSIGNED 타입을 지원하지 않는다.
큐브리드는 두 가지 비트열을 지원한다.
고정길이 비트열 : BIT(n)
가변길이 비트열 : BIT VARYING(n)
큐브리드는 두 종류의 문자열 타입을 지원한다.
고정길이 문자열 : CHAR(n)
가변길이 문자열 : VARCHAR(n)
가변길이 문자열 : STRING
큐브리드는 두 가지 LOB 타입을 지원한다.
Binary Large Object(BLOB)
Character Large Object(CLOB)
큐브리드는 ENUM 데이터 타입을 지원한다.
External LOB(Large Object) 타입은 텍스트 또는 이미지 등 크기가 큰 객체를 처리하기 위한 데이터 타입이다.
타입 | 바이트 | 최솟값 | 최댓값 |
---|---|---|---|
DATE | 4 | 0001년 1월 1일 | 9999년 12월 31일 |
TIME | 4 | 00시 00분 00초 | 23시 59분 59초 |
TIMESTAMP | 4 | 1970년 1월 1일 0시 0분 1초(GMT) 1970년 1월 1일 9시 0분 1초(KST) | 2038년 1월 19일 3시 14분 7초(GMT) 2038년 1월 19일 12시 14분 7초(KST) |
DATETIME | 4 | 0001년 1월 1일 0시 0분 0.000초 | 9999년 12월 31일 23시 59분 59.999초 |
본 시리즈의 글들은 CUBRID DB엔진 오픈 스터디를 진행하며 팀원들과 함께 공부한 내용을 정리한 것입니다.
Github 링크
SQL 발표 내용
참고
CUBRID Manual
도서 『시작하세요! 큐브리드』