테이블은 테이블 스페이스에서 생성되고 각 테이블마다 별도의 저장 옵션을 부여할 수 있다. 테이블마다 용량을 지정할 수 있으나 테이블 스페이스에서 확보한 저장 공간 용량을 초과할 수 없다.
테이블은 생성, 변경, 삭제가 가능하고 테이블 내 컬럼에 NULL 값의 허용 여부와 기본값을 지정할 수 있다. 또한 PK를 지정할 수 있고 다른 테이블과 참조 무결성 관계를 지정한다.
■ 테이블 생성
테이블은 데이터베이스에서 가장 많이 이용되는 주요한 오브젝트인 만큼 다향한 옵션을 지정할 수 있다.
CREATE TABLE [schema.] table
{ { column datatype [DEFAULT expr] [column_constraint] ..
| table_constraint }
{, { column datatype [DEFAULT expr] [column_constraint] ...
| table_constraint} ]...
[ [PCTFREE integer] [PCTUSED integer]
[INITRANS integer] [MAXTRANS integer]
[TABLESPACE tablespace]
[STORAGE storage_clause]
[ PARALLEL ( [DEGREE {integer | DEFAULT }]
[ INSTANCES { integer | DEFAULT }])
| NOPARALLEL ]
[ CACHE | NOCACHE ]
| [CLUSTER cluster (column [, column]...)] ]
| ENABLE enable_clause
| DISABLE disable_clause ] ...
[ AS subquery]
- table : 생성하고자 하는 테이블명을 기술한다.
- column : 컬럼명을 기술한다.
- datatype : 컬럼의 데이터타입을 기술한다.
- DEFAULT : 기본값을 지정한다.
- column_constaint : PK, FK를 기술한다.
- STORAGE : 테이블의 저장 옵션을 지정한다.
- PARALLEL : CPU가 여러 개인 OS에서 오라클이 쿼리(query)를 실행할 때 초기 파라미터에 PARALLEL_THREADS_PER_CPU 1보다 크게 설정되어 있으면 병렬로 여러 개의 CPU를 이용할 것인지 지정한다. 이용할 경우 쿼리 속도는 빨라진다.
(1) 테이블 생성
[예제] 다음 모델을 이용하여 제품 테이블을 생성하는 DDL 문장을 작성하라(PK는 ITEMCD고, 테이블 스페이스는 TS_TEST01, INITIAL : 10M, NEXT:1M, PCTINCREASE: 0이다).
제품
제품코드 |
제품명 |
수량 |
단가 |
제품색상 |
만든날짜 |
ITEM
ITEMCD : VARCHAR2(10) NOT NULL |
ITEMNM : VARCHAR2(20) NULL |
QTY : NUMBER(10) DEFAULT 0 NULL |
PRICE : NUMBER(10) DEFAULT 0 NULL |
COLOR : VARCHAR2(10) NULL |
MADEDATE : DATE NULL |
① PRIMARY KEY를 개별 컬럼에서 지정
CREATE TABLE ITEM {
ITEMCD VARCHAR2(10) PRIMARY KEY,
ITEMNM VARCHAR2(20) NULL,
QTY NUMBER(10) NULL,
PRICE NUMBER(10) DEFAULT 0 NULL,
COLOR VARCHAR2(10) NULL,
MADEDATE DATE NULL,
) TABLESPACE TS_TEST01
STORAGE (INITIAL 10M NEXT 1M MINEXTENTS 0) ;
② PRIMARY KEY를 컬럼 끝에 지정
CREATE TABLE ITEM (
ITEMCD VARCHAR2(10) NOT NULL,
ITEMNM VARCHAR(20) NULL,
QTY NUMBER(10) NULL,
PRICE NUMBER(10) DEFAULT 0 NULL,
COLOR VARCHAR2(10) NULL,
MADEDATE DATE NULL,
CONSTRAINT ITEM_PK PRIMARY KEY(ITEMCD)
) TABLESPACE TS_TEST01
STORAGE (INITIAL 10M NEXT 1M MINEXTENTS 0);
- TABLESPACE, STORAGE를 생략하면 사용자에게 할당한 기본 테이블 스페이스에 테이블이 생성된다.
- NULL 작용 여부를 지정하지 않는 경우에는 기본적으로 NULL로 지정된다.
(2) FOREIGN KEY 지정
[예제] 제품(ITEM)테이블의 ITEMCD가 사용자 코드(USER_CODE) 테이블의 PK인 ITEMCD를 참조할 때 DDL 문을 생성하라. 두개의 테이블을 생성하라(테이블 스페이스와 스토리지 옵션은 기본을 유지한다.)
① USER_CODE 테이블 생성
CREATE TABLE USER_CODE (
ITEMCD VARCHAR2(10) NOT NULL,
ITEMNM VARCHAR2(20) NULL
CONSTRANT ITEM_PK PRIMARY KEY(ITEMCD)
);
② ITEM 테이블 생성
CREATE TABLE ITEM (
ITEMCD VARCHAR2(10) NOT NULL,
QTY NUMBER(10) NULL,
PRICE NUMBER(10) DEFAULT ) NULL,
COLOR VARCHAR2(10) NULL,
MADEDATE DATE NULL,
CONSTRAINT ITEM_PK PRIMARY KEY(ITEMCD),
CONSTRAINT ITEM_FK FOREIGN KEY(ITEMCD_ REFERENCES
USER_CODE(ITEMCD);
■ 테이블 변경
- 컬럼의 데이터 타입, 기본값, NULL 허용 등을 바꿀 때 많이 이용한다.
- 신규 컬럼을 추가할 수 있으나 컬럼명을 바꿀 수는 없다.
- 테이블 컬럼의 순서는 바꿀 수 없다. 순서를 바꾸기 위해서는 테이블을 DROP했다가 재생성해야한다.
- 만약 데이터가 있다면 데이터를 임시 테이블이나 컨트롤 파일에 백업하였다가 다시 입력하도록 한다. 이때 컬럼이 재생성되므로 해당 컬럼은 테이블의 맨 마지막에 나타난다.
(1) 테이블 변경
[예제] 앞에서 생성된 제품(ITEM) 테이블의 ITMNM을 VARCHAR(40)의 NOT NULL로 변경하고, 제품 종류 코드(ITEMCLCD VARCHAR(20) NULL)을 기본값 '01'로 지정하여 추가하라
① ITEMNM 컬럼 NOT NULL로 변경
ALTER TABLE ITEM MODIFY ( ITEMNM VARCHAR2(40) NOT NULL);
② ITEMCLCD 컬럼 추가
ALTER TABLE ITEM ADD( ITEMCLCD VARCHAR(20) DEFAULT '01' NULL);
(2) 테이블 컬럼 변경
[예제] 제품(ITEM) 테이블에서 PK를 DROP하고, ALTER TABLE을 이용하여 재생성하라.
① PRIMARY KEY 삭제(DROP)
ALTER TABLE ITEM DROP PRIMARY KEY;
② PRIMARY KEY 추가
ALTER TABLE ITEM ADD( PRIMARY KEY {ITEMCDE} );
■ 테이블 삭제
테이블 삭제(DROP)는 데이터 삭제(Delete)와 다르게 롤백되지 않음에 유의한다.
DROP TABLE [schema,] table
[CASCADE CONSTRAINT]
- 테이블만 삭제할 수도 있고, 테이블이 참조되는 참조 무결성 제약을 삭제할 수도 있다.
- CASCADE CONSTRAINT는 자산이 참조되는, 즉 FK로 연결되어 있는 자식 테이블에 데이터가 있음에도 자신의 테이블을 삭제할 수 있는 것을 말한다. 연결된 자식 테이블의 데이터를 지우거나 자식 테이블을 삭제하지 않음을 기억하자.
- 참조되는 테이블의 데이터가 있는데, "DROP TABLE"만 할 경우 참조 무결성 제약 위반 에러가 발생합니다.
(1) 테이블 삭제
[ 예제 ] 앞에서 생성된 제품(ITEM) 테이블을 삭제하라. FK에 의해 참조될 때와 아닐 때 두 가지 모두를 기술하라.
ⓛ FOREIGN KEY에 참조되지 않을 때
DROP TABLE ITEM;
② FOREIGN KEY에 참조될 때
DROP TABLE ITEM CASCADE = CONSTRAINTS
■ 테이블 이름 변경
이미 생성된 테이블의 이름을 바꾼다. 테이블 이름이 바뀌면서 사전 정보가 바뀌므로 모든 제약 사항은 그래도 유지된다.
만약 ITEM 테이블이 'ALTER TABLE ORDERITEM ADD (FOREIGN KEY (ITEMCD) REFRENCES ITEM);' 라는 문장에 의해 참조 무결성 관계를 가지고 있어도 이름이 변경되면 ITEM-> ITEM1으로 데이터 사전에서 수정되어 참조 무결성을 유지한다.
RENAME old To new
- old : 변경하고자 하는 오브젝트(테이블, 뷰, 시퀀스 등)를 기술한다.
- new : DBMS에서 사용하지 않고 이미 등록되지 않은 새로움 이름을 저장한다.
(1) 테이블 이름 변경
[예제] 제품(ITEM) 테이블의 이름을 ITEM1으로 변경하라.
RENAME ITEM TO ITEM1;
SQL 구문별 상세 설명 - DDL (0) | 2022.04.02 |
---|---|
데이터를 삭제하는 DELETE 문 (0) | 2022.03.30 |
데이터를 수정하는 UPDATE 문 (0) | 2022.03.29 |
데이터를 입력하는 insert문 (0) | 2022.03.26 |
mysqli_connect(): (HY000/1130) 1130 에러 해결방법 (0) | 2022.03.22 |
댓글 영역