데이터 정의 언어
객체(Object)를 만들고 (CREATE), 수정하고 (ALTER), 삭제 (DROP) 할 수 있는 구문
오라클 객체의 종류
CREATE TABLE MEMBER(
USER_ID VARCHAR2(20),
USER_PW VARCHAR2(20),
USER_NAME NVARCHAR2(20),
GENDER NVARCHAR2(1)
);
생성된 테이블에는 컬럼별 Comment를 작성할 수 있다
표현식
구분 | 의미 | 적용 위치 |
---|---|---|
NOT NULL | - 데이터에 NULL을 허용하지 않음 | 컬럼 레벨 |
UNIQUE | - 중복된 값을 허용하지 않음 - UNIQUE 제약 조건이 설정되었다 하더라도 NULL값은 중복 삽입됨 - 이때 해결 방법은 UNIQUE 제약조건과 NOT NULL 제약 조건을 같이 주면 됨 | 컬럼레벨/테이블 레벨 |
PRIMARY KEY (기본키) | - NULL을 허용하지 않고, 중복값도 허용하지 않음 - 컬럼의 고유 식별자(Identifier)로 사용 - 테이블당 한개만 설정 가능 - 테이블 레벨에서 설정하면 복합키로 설정이 가능함 | 컬럼레벨/테이블 레벨 |
FOREIGN KEY (외래키) | - 참조 무결성을 유지하기 위한 제약 조건 - 참조된 다른 테이블이 제공하는 값만 사용할 수 있도록 제한을 거는 것 - 참조하는 컬럼과 참조된 컬럼을 통해 테이블간의 관계가 형성 됨 - 해당 컬럼 값은 참조된 테이블의 컬럼 값 중의 하나와 일치하거나 NULL을 가질 수 있음 | 컬럼레벨/테이블 레벨 |
CHECK | - 저장 가능한 데이터 값의 범위나 조건을 지정하여 설정한 값만 허용 함 | 컬럼레벨 |
CREATE TABLE MEMBER(
USER_ID VARCHAR2(20) ,
USER_PW VARCHAR2(20) ,
USER_NAME NVARCHAR2(20),
GENDER NVARCHAR2(1),
PRIMARY KEY(USER_ID, USER_PW) -- 테이블 레벨에서 컬럼 묶어서 설정 가능
);
※ 외래키 설정시 삭제 옵션을 지정하지 않은 상태에서 참조되는 테이블의 데이터 삭제 불가능
ON DELETE RESTRICTED
ON DELETE CASCADE
참조하는 데이터 삭제 -> 자신이 참조하는 컬럼에 속한 행 자체 삭제
CREATE TABLE MEMBER(
USER_ID VARCHAR2(20) PRIMARY KEY,
USER_PW VARCHAR2(20),
USER_NAME NVARCHAR2(20) NOT NULL UNIQUE, -- 컬럼에 주면 컬럼 레벨
GENDER NVARCHAR2(1) CHECK( GENDER IN ('남', '여')),
JOIN_DATE DATE DEFAULT SYSDATE,
UNIQUE(USER_PW) -- 마지막에 주면 테이블 레벨
);
CREATE TABLE SHOPPING(
USER_ID VARCHAR2(20) ,
PRODUCT_NAME VARCHAR2(50),
PRICE NUMBER,
FOREIGN KEY(USER_ID) REFERENCES MEMBER(USER_ID)
);
CONSTRAINT_TYPE
구분 | 의미 |
---|---|
P | PRIMARY KEY |
R | FOREIGN KEY |
C | CHECK 또는 NOT NULL |
U | UNIQUE |
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE FROM USER_CONSTRAINTS
WHERE TABLE_NAME='테이블명';
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME='테이블명'
UNION
SELECT TABLE_NAME,CONSTRAINT_NAME, CONSTRAINT_TYPE
FROM USER_CONSTRAINTS
WHERE TABLE_NAME='테이블명'
ORDER BY 3 DESC;
<BR/><BR/>
CREATE TABLE EMP_DET_JOB AS(
SELECT EMP_ID, EMP_NAME, SALARY, DEPT_TITLE, JOB_NAME
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON (DEPT_CODE=DEPT_ID)
LEFT JOIN JOB USING (JOB_CODE));