□ 테이블 생성은 테이블에 대한 구조를 정의하고, 데이터를 저장하기 위한 공간을 할당하는 과정
□ 테이블에 대한 구조 정의는 테이블을 구성하는 칼럼의 데이터 타입과 무결성 제약조건을 정의하는 과정
□ 테이블 이름 정의방법
○ 문자(A-Z, a-z)로 시작, 30자 이내
○ 문자(a-z,A-Z), 숫자(0-9), 특수문자(_,$,#) 사용 가능
○ 대소문자 구별 없음, 소문자로 저장하려면 단일 인용부호 이용
○ 동일 사용자가 소유한 다른 객체의 이름과 중복 불가
○ 서로 다른 테이블에서 동일한 데이터를 저장하는 칼럼 이름은 가능하면 같은 이름을 사용
○ 필요에 따라 언제든지 테이블 생성 가능
○ 완성된 설계도에 따라 테이블을 생성 권장
CREATE [GLOBAL TEMPORARY] TABLE [schema.] table
(column datatype[DEFAULT expression][column_constraint clause]
[,…]);
□ Default 옵션
○ 칼럼의 입력 값이 생략될 경우에 NULL 대신에 입력되는 기본 값을 지정하기 위한 기능
○ 기본값 : 리터럴 값, 표현식, SQL함수 , SYSDATE, USER를 사용
○ 칼럼이나 의사칼럼(NEXTVAL, CURRVAL)은 사용할 수 없음
addr varchar2(100) DEFAULT ‘KOREA’
□ DESC[RIBE] 명령어
○ 테이블의 생성 여부와 테이블의 구조를 확인하기 위한 명령어
○ 칼럼 이름, 데이터 타입과 크기, NOT NULL 무결성 제약조건
DESC[RIBE] table
□ 서브쿼리를 이용한 테이블 생성
○ CREATE TABLE 명령문에서 서브쿼리 절을 이용하여 다른 테이블의 구조와 데이터를 복사하여 새로운 테이블 생성 가능
○ 서브쿼리의 출력 결과가 테이블의 초기 데이터로 삽입
○ CREATE TABLE 명령문에서 지정한 칼럼 수와 데이터 타입과 반드시 일치
○ 칼럼 이름을 명시하지 않을 경우 서브쿼리 칼럼 이름과 동일
○ 무결성 제약조건은 NOT NULL 조건만 복사
- 기본 키, 참조 키와 같은 무결성 제약조건은 사용자의 재정의 필요
○ 디폴트 옵션에서 정의한 값은 그대로 복사
CREATE TABLE table
[column[, column,…]]
AS subquery;
□ 테이블 구조 복사
○ 서브쿼리를 이용한 테이블 생성시 데이터는 복사하지 않고 기존 테이블의 구조만 복사 가능
○ 서브퀴리의 WHERE 조건절에 거짓이 되는 조건을 지정하여 출력 결과 집합이 생성되지 않도록 지정
create table addr_fourth
as select id, name, from address
where 1 = 2;
□ 서브쿼리를 이용한 테이블 생성
○ 주소록 테이블에서 id, name 칼럼만 복사하여 addr_third 테이블을 생성하라
CREATE TABLE addr third
as select id, name from address;
□ 테이블 구조변경
○ ALTER TABLE 명령문 이용
○ 칼럼 추가, 삭제, 타입이나 길이의 재정의와 같은 작업
○ ALTER TABLE … ADD 명령문 사용
○ 추가된 칼럼은 테이블의 마지막 부분에 생성, 위치 지정 불가능
○ 추가된 칼럼에도 기본 값을 지정 가능
○ 수정할 테이블에 기존 데이터가 존재하면 칼럼 값은 NULL로 입력
○ ALTER TABLE table ADD (column datatype [DEFAULT expression][, column datatype]…);
ALTER TABLE ADDRESS
ADD (BIRTH DATE);
□ 테이블 칼럼 삭제
○ 테이블 내의 특정 칼럼과 칼럼의 데이터를 삭제
○ ALTER TABLE … DROP COLUMN 명령문 사용
○ 2개 이상의 칼럼이 존재하는 테이블에서만 삭제 가능
○ 하나의 칼럼 삭제 명령문은 하나의 칼럼만 삭제 가능
○ ALTER TABLE table_name DROP column;
ALTER TAVLE ADDRESS DROP COLUMN COMMENTS;
□ 테이블 칼럼 변경
○ 테이블에서 칼럼의 타입, 크기, 기본 값 변경 가능
○ ALTER TABLE … MODIFY 명령문 이용
○ 기존 칼럼에 데이터가 없는 경우
- 칼럼 타입이나 크기 변경이 자유로움
○ 기존 데이터가 존재하는 경우
- 타입 변경은 CHAR와 VARCHAR2만 허용
- 변경한 칼럼의 크기가 저장된 데이터의 크기보다 같거나 클경우 변경 가능
- 숫자 타입에서는 정밀도 증가 가능
○ 기본 값의 변경은 변경 후에 입력되는 데이터부터 적용
ALTER TABLE ADDRESS
MODIFY PHONE VARCHAR(50);
□ 테이블 DLFMA QUSRUD
○ RENAME 명령문 사용
- 객체의 이름을 변경하는 DDL 명령문
- 뷰, 시퀀스, 동의어 등과 같은 데이터베이스 객체의 이름 변경 가능
○ RENAME OLD_TABLE TO NEW_TABLE
RENAME ADDR_SECOND TO CLIENT_ADDRESS;
□ 테이블 삭제
○ 기존 테이블과 데이터를 모두 삭제
○ DROP TABLE 명령문 사용
○ 삭제된 테이블 칼럼에 대해 생성된 인덱스도 함께 삭제
○ 삭제된 테이블과 관련된 뷰와 동의어 ‘invalid’ 상태
○ 삭제할 테이블의 기본 키나 고유 키를 다른 테이블에서 참조하고 있는 경우 삭제 불가능
- 참조하는 테이블(자식 테이블)을 먼저 삭제
- DROP TABLE 명령문 마지막에 CASCADE CONSTRAINTS 옵션을 사용하여 무결성 제약조건을 동시에 삭제
○ DROP TABLE [schema.] table [cascade constraints]
* cascade constraints : 삭제 대상 테이블의 기본 키나 고유 키를 참조하는 무결성 제약조건을 동시에 삭제하기 위한 옵션
DROP TABLE ADDR_THIRD;
□ TRUNCATE 명령문
○ 테이블 구조는 그대로 유지하고, 테이블의 데이터와 할당된 공간만 삭제
○ 테이블에 생성된 제약조건과 연관된 인덱스, 뷰, 동의어는 유지
○ DELETE 명령문과의 차이
- 기존 데이터만 삭제하는 명령이며, ROLLBACK 가능
- WHERE 절을 이용하여 특정 행만 삭제 가능
○ TRUNCATE 명령문
- 기존 데이터 삭제뿐 아니라, 물리적인 저장 공간까지 반환
- DDL 문이므로 ROLLBACK 이 불가능
- WHERE 절을 이용하여 특정 행만 삭제하는 것이 불가능
○ TRUNCATE TABLE [schema.] table
SELECT * FROM CLIENT_ADDRESS;
□ 데이터 사전의 종류
○ 다수의 사용자가 동일한 데이터를 공유
○ 읽기 전용 뷰로 구성
○ 데이터베이스 관리자나 사용자에게 데이터 사전에 저장된 정보조회 허용
○ 용도에 따라 USER, ALL, DBA 접두어를 사용하여 분류
--USER 데이터 사전 뷰
SELECT TABLE_NAME FROM USER_TABLES;
--ALL 데이터 사전 뷰
SELECT OWNER, TABLE_NAME FROM ALL_TABLS;
--DBA 데이터 사전 뷰
SELECT OWNER, TABLE_NAME FROM DBA_TABLES
--사용자 테이블 정보 조회
SELECT TABLE_NAME, TABLESPACE_NAME, MIN_EXTENTS, MAX_EXTENTS FROM USER_TABLES
WHERE TABLE_NAME LIKE 'ADDR%';
--USER OBJECT
SELECT OBJECT_NAME, OBJECT_TYPE, CREATED FROM USER_OBJECTS
WHERE OBJECT_NAME LIKE 'ADDR%' AND OBJECT_TYPE = 'TABLE';
--USER CATALOG
DESC USER_CATALOG
'DB > SQL_Example' 카테고리의 다른 글
인덱스 관리(By Oracle) (1) | 2024.01.23 |
---|---|
데이터 무결성(By Oracle) (0) | 2024.01.22 |
DML(Data Manpulation Language) (0) | 2024.01.22 |
서브쿼리 (By Oracle) (0) | 2024.01.22 |
조인함수 (By Oracle) (0) | 2024.01.22 |