CREATE : 데이터베이스 내의 모든 객체를 생성
ALTER : 이미 생성된 객체의 구조를 변경
DROP : 생성되어 있는 객체를 삭제
RENAME : 이미 생성한 객체의 이름을 변경(개명의 개념)
COMMENT : 객체이름, 컬럼에 대한 설명을 데이터베이스 내에 저장
TRUNCATE : 테이블에 저장되어 있는 모든 행을 삭제(테이블 초기화)
예 ) HAPPY란 문자열을 varchar2(10)인 컬럼과 char(10)인 컬럼에 저장한 경우
CHAR(10) 'HAPPY ' >>공백 有
VHARCHAR(10) 'HAPPY'
USER_XXX : 내가 소유한 객체들의 정보
ALL_XXX : 내가 접근할 수 있는 객체들의 정보 (대표적으로 DUAL테이블)
DBA_XXX : DBA ROLE로 접근
CREATE TABLE [schema.]table_name
( column datatype [DEFAULT …],
[, column datatype . . .]
) ;
CREATE TABLE emp
(empid number(4)
,ename varchar2(10)
,sal number(7) default 100
,hiredate date default sysdate) ;
제약조건을 컬럼과 함께 정의
(id NUMBER(5)
CONSTRAINT sawon_id_pk PRIMARY KEY
, 컬럼2 데이터타입
CONSTRAINT 제약조건 )
CONSTRAINT 제약조건명은 유일해야 하므로,
테이블명_컬럼명_PK ( | UK | FK | CK | NN)
으로 부여하는것이 일반적.
제약조건명은 생략 가능. (생략할 경우 SYS_C number 로 자동생성)
NOTNULL 제약조건은 반드시 컬럼레벨로만 정의 가능.
제약조건을 컬럼과 분리하여 정의
복합키 선언시 사용
(id NUMBER(5)
,컬럼2 데이터타입
,컬럼3 데이터타입
, ...
,
CONSTRAINT sawon_id_pk PRIMARY KEY(id)
,CONSTRAIN sawon_id_pk PRIMARY KEY (DEPT_ID, ID) --복합키
,CONSTRAINT 제약조건명2 제약조건(컬럼2)
)
--SAWON 테이블 생성
CREATE TABLE sawon
(id NUMBER(5)
CONSTRAINT sawon_id_pk PRIMARY KEY, --PK
name VARCHAR2(10)
CONSTRAINT sawon_name_nn NOT NULL, --NOT NULL
salary NUMBER(7,2) default 200,
phone VARCHAR2(12)
CONSTRAINT sawon_phone_uk UNIQUE --UNIQUE
CONSTRAINT sawon_phone_ck CHECK --CHECK
(phone LIKE '3429%'),
dept_id NUMBER(2)
CONSTRAINT sawon_dept_id_fk --FK
REFERENCES dept(deptno));
--TEST
insert into sawon(id) values(1);
insert into sawon(id, name) values(1, '홍길동');
-->>SAL은 DEFAULT값인 200으로 저장,
--PHONE, DEPT_ID = NULL
insert into sawon(id, name) values(1, '김철수');
-->> 앞에 입력한 홍길동 사원의 id와 동일.
-->> 기본키 무결성 조건(HR.SAWON_ID_PK)에 위배되어 오류 발생
update sawon
set phone = '3426-1234' where id = 1;
-->>PHONE은 3429%로 시작되어야하는 체크 제약조건(HR.SAWON_PHONE_CK)에 위배되어 오류 발생
update sawon
set phone = '3429-1234' where id = 1;
-->>정상적으로 저장
update sawon
set dept_id = 99 where id = 1;
-->> DEPTNO = 99에 해당하는 부모키가 없어 무결성 제약조건(DEPT_ID_FK)에 위배되어 오류 발생
insert into dept(deptno, dname) values(99,'연습');
-->> 부모키에 DEPTNO=99 INSERT
update sawon
set dept_id = 99 where id = 1;
-->> 정상적으로 저장
delete from dept where deptno = 99;
-->> DEPT=99 부모키 삭제하려고 하면 무결성 제약조건 위배로 오류 발생
update sawon
set dept_id = 10 where id = 1;
-->> 자식키 DEPT_ID = 99를 DEPT_ID = 10으로 변경
delete from dept where deptno = 99;
-->> 부모키 DEPTNO=99 정상적으로 삭제
--SAWON 테이블 생성
CREATE TABLE sawon
(id NUMBER(5)
CONSTRAINT sawon_id_pk PRIMARY KEY,
name VARCHAR2(10)
CONSTRAINT sawon_name_nn NOT NULL,
salary NUMBER(7,2) default 200,
phone VARCHAR2(12)
CONSTRAINT sawon_phone_uk UNIQUE
CONSTRAINT sawon_phone_ck CHECK
(phone LIKE '3429%'),
dept_id NUMBER(2)
CONSTRAINT sawon_dept_id_fk
REFERENCES dept(deptno) on delete cascade);
insert into dept(deptno, dname) values(99,'연습');
insert into sawon(id, name, dept_id) values(1, '홍길동',99);
insert into sawon(id, name, dept_id) values(2, '홍길서',99);
insert into sawon(id, name, dept_id) values(3, '홍길남',99);
insert into sawon(id, name, dept_id) values(4, '홍길북',99);
-->> SALARY는 DEFAULT값인 200, PHONE = NULL인 4개의 행 INSERT
delete from dept where deptno = 99;
-->>부모키인 DEPTNO = 99를 삭제
-->> 자식키도 함께 삭제됨 (참조 무결성)
CREATE TABLE sawon
(id NUMBER(5)
CONSTRAINT sawon_id_pk PRIMARY KEY,
name VARCHAR2(10)
CONSTRAINT sawon_name_nn NOT NULL,
salary NUMBER(7,2) default 200,
phone VARCHAR2(12)
CONSTRAINT sawon_phone_uk UNIQUE
CONSTRAINT sawon_phone_ck CHECK
(phone LIKE '3429%'),
dept_id NUMBER(2)
CONSTRAINT sawon_dept_id_fk
REFERENCES dept(deptno) on delete set null);
insert into dept(deptno, dname) values(99,'연습');
insert into sawon(id, name, dept_id) values(1, '홍길동',99);
insert into sawon(id, name, dept_id) values(2, '홍길서',99);
insert into sawon(id, name, dept_id) values(3, '홍길남',99);
insert into sawon(id, name, dept_id) values(4, '홍길북',99);
-->> PHONE, DEPT_ID가 NULL 인 네개의 행 INSERT
delete from dept where deptno = 99;
-->> 부모키인 DEPTNO = 99 삭제
-->> DEPTNO = 99를 참조하는 자식키는 NULL값으로 초기화
insert into sawon(id, name, salary)
values(5,'백장미', null);
-->> SALARY를 NULL로 명시하면 DEFAULT값인 200이 아닌 NULL로 저장
테이블 레벨에서의 추가. (NOT NULL 제약조건은 반드시 컬럼과 함께 정의해야하므로, 이 방법으로는 추가할 수 없다)
ALTER TABLE table
ADD [CONSTRAINT constraint] type (column) ;
NOT NULL 제약조건은 삭제 불가능
ALTER TABLE table
DROP CONSTRAINT constraint [CASCADE] ;
ALTER TABLE EMP_CP ADD(CONSTRAINT EMP_CP_ID_PK PRIMARY KEY(ID));
ALTER TABLE EMP_CP MODIFY NAME NOT NULL;
RENAME old_name TO new_name
COMMENT ON TABLE
table | COLUMN table.column
IS ‘text’ ;