SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
SQL초보에서 Schema Objects까지
8.1.5 FlashBack Drop 및 Recycle Bin
리사이클빈(Recycle Bin)이란?
Oracle10g 이후 생긴 기능으로 테이블이 삭제되면 완전히 삭제되지 않고 테이블의 이름을 변경한
후 테이블스페이스 내의 리사이클 빈 영역(윈도우 휴지통 같은 곳)으로 이동 시킨다. 오브젝트가
삭제되면 삭제되는 오브젝트의 정보를 포함하고 있는 데이터 딕셔너리에 존재하는 테이블로써 윈
도우의 휴지통과 비슷한 개념으로 이기능을 이용하여 DROP TABLE 후 복구가 가능하다.
 리사이클 빈으로 옮겨가는 테이블을 FLASHBACK TABLE이라고 한다.
 리사이클 빈안에 만들어지는 FLASHBACK TABLE의 이름은 “BIN$unique_id$version” 형태를 가
진다.(unique_id는 26자의 오브젝트에 대한 유일한 문자열이다)
--세션 레벨에서 리사이클빈 기능의 활성화, 비활성화(기본은 Enabled 이다)
--alter session, alter system 명령으로 가능하며 기능이 꺼져있는 경우 테이블 삭제시 복구 불가능
하다.
SQL> alter session set recyclebin = off;
세션이 변경되었습니다.
SQL> alter session set recyclebin = on;
세션이 변경되었습니다.
--리사이클빈은 아래 명령으로 확인 가능하다.
SQL>drop table sales;
SQL> select object_name, original_name from recyclebin;
OBJECT_NAME ORIGINAL_NAME
------------------------------ --------------------------------
BIN$Taaxs2vjQAS14g+08tU/dg==$0 SALES
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
SALES BIN$Taaxs2vjQAS14g+08tU/dg==$0 TABLE 2014-09-10:12:45:02
--DROP TABLE 명령어 사용시 뒤부분에 PURGE하고 하면 테이블은 영구히 삭제되며 리사이클 빈
으로 이동되지 않는다.
SQL> create table t1 ( id number);
테이블이 생성되었습니다.
SQL> drop table t1;
테이블이 삭제되었습니다.
SQL> desc t1;
ERROR:
ORA-04043: t1 객체는 존재하지 않습니다.
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T1 BIN$TcAMYpDbS8SAUlBQ8kfwVQ==$0 TABLE 2014-09-10:13:30:49
-- flashback table명령어로 복구
SQL> flashback table t1 to before drop;
플래시백이 완료되었습니다.
-- purge 옵션으로 drop하면 리사이클빈에 저장되지 않는다.
SQL> drop table t1 purge;
테이블이 삭제되었습니다.
-- 리사이클빈에는 아무것도 없다.
SQL> show recyclebin;
SQL> -- T1 테이블을 리사이클빈에서 영구히 삭제하려면 아래처럼 purge를 사용한다.
SQL> purge table t1;
테이블이 지워졌습니다.
SQL> -- 리사이클빈 전체를 purge하면 현재 USER의 리사이클빈이 삭제된다.
SQL> purge recyclebin;
휴지통이 지워졌습니다.
SQL> flashback table t1 to before drop;
flashback table t1 to before drop
*
1행에 오류:
ORA-38305: 객체가 RECYCLE BIN에 없음
SQL> conn scott/tiger
연결되었습니다.
SQL> create table t1 ( id number);
테이블이 생성되었습니다.
SQL> create table t2 ( id number);
테이블이 생성되었습니다.
SQL> -- 현재 테이블스페이스는 USERS이다.
SQL> select default_tablespace from user_users;
DEFAULT_TABLESPACE
------------------------------
USERS
SQL> purge tablespace users;
테이블스페이스가 지워졌습니다.
SQL> purge tablespace users user scott;
테이블스페이스가 지워졌습니다.
 다음과 같이 테이블을 만들고 삭제를 반복했다면 리사이클빈에 오리지널 테이블 이름이 EMP
인 것이 여러개 존재할 것이다.
CREATE TABLE EMP ( ...columns ); # EMP version 1
DROP TABLE EMP;
CREATE TABLE EMP ( ...columns ); # EMP version 2
DROP TABLE EMP;
CREATE TABLE EMP ( ...columns ); # EMP version 3
DROP TABLE EMP;
......
......
SQL> SHOW RECYCLEBIN;
ORIGINAL_NAME RECYCLEBIN_NAME OBJECT_TYPE DROP_TIME
--------------------------------------------------------------
EMP BIN$TaaaXccddd+ee$0 TABLE 2016-01-01
EMP BIN$TaaaXccd3d+ee$1 TABLE 2016-02-01
EMP BIN$TaaaXccdyd+ee$2 TABLE 2016-03-01
 아래와 같이 복구하는 경우 가장 최근에 삭제된 테이블이 복구된다.
FLASHBACK TABLE EMP TO BEFORE DROP;
 물론 아래처럼 최근의 EMP 테이블을 복구하면서 RENAME 명령으로 이름을 바꾸는 것도 한
방법이다.
FLASHBACK TABLE EMP TO BEFORE DROP RENAME TO EMP_VERSION_3;
FLASHBACK TABLE EMP TO BEFORE DROP RENAME TO EMP_VERSION_2;
FLASHBACK TABLE EMP TO BEFORE DROP RENAME TO EMP_VERSION_1;
또한 플래시백 테이블의 이름으로 복구도 가능하다.
FLASHBACK TABLE " BIN$TaaaXccddd+ee$0" TO BEFORE DROP;
8.1.6 데이터 무결성(Data Integrity) 제약조건(Constraints)
무결성 제약조건이란?
 IC(Integrity Constraints)는 하나의 테이블내의 칼럼 값에 대해 제약을 가하는 조건으로 데이터
값의 무결함, 정확성, 일관성을 보장하기 위한 방법이다.
 무결성 제약조건에 맞지 않는 데이터가 입력되면 DML(INSERT, UPDATE, DELETE, MERGE)은 롤
백된다.
 테이블 생성시 또는 생성 후 무결성 제약조건 추가 가능 하다.
 테이블의 모든 무결성 제약조건은 데이터 딕셔너리에 저장된다.
 제약조건을 지정할 때 이름을 부여하지 않으면 오라클 내부적으로 SYS_Cn 형태로 이름이 부
여된다
무결성 제약조건(IC) Description
NOT NULL 칼럼값은 NULL 을 가질 수 없다.
PRIMARY
KEY(기본키)
테이블의 행을 유일하게 구별하기 위한 키
Unique Constrinats, NOT NULL Constraints 를 결합한 형태
FOREIGN
KEY(외래키)
같거나/다른 테이블의 PK/UK 값을 참조하기 위한 제약조건
(EMP 테이블에서 DEPTNO 칼럼은 값이 입력된다면 반드시
DEPT 테이블의 DEPTNO 칼럼 값이 입력되어야 한다.)
UNIQUE 칼럼 값은 유일해야 한다.
CHECK 칼럼에 입력되는 값을 지정하거나 그 범위를 지정
무결성 제약조건 정의
컬럼 레벨(Column Constraints Level) : 단일 칼럼에 정의하는것으로 칼럼의 정의가 끝나기 전에 제
약조건을 정의하며 모든 무결성 제약조건을 지정 가능하다.
테이블 레벨(Table Constraints Level) : 칼럼에 대한 정의가 모든 끝난 후 콤마(,)을 찍고 그 다음에
제약조건을 기술하는 것으로 한 개 또는 여러 칼럼에 대해 정의가 가능하며, NOT NULL 제약조건
은 칼럼레벵에서만 정의가 가능하다.
[기본 형식]
칼럼 레벨 :column_name [CONSTRAINT constraint_name] constraint_type
테이블 레벨 : column,,, [CONSTRAINT constraint_name]constraint_type(column_name,,,)
SQL> drop table t1;
테이블이 삭제되었습니다.
--칼럼레벨로 PK 제약조건 정의, constraint 키워드를 사용한다면 반드시 다음에 이름을 기술해야
한다. 기술하지 않으면 SYS_CnXXX 형태로 오라클이 임의로 부여한다.
SQL> create table t1 (
id number constraint pk_t1 primary key,
name varchar2(10));
테이블이 생성되었습니다.
-- user_constraints 딕셔너리뷰를 통해 만든 Primary Key 제약조건을 확인하자.
SQL> desc user_constraints;
이름 널? 유형
----------------------------------------- -------- ----------------------------
OWNER VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
CONSTRAINT_TYPE VARCHAR2(1)
TABLE_NAME NOT NULL VARCHAR2(30)
……
-- Primary Key인 경우 CONSTRAINT_TYPE이 ‘P’
SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from user_constraints
where TABLE_NAME = 'T1';
CONSTRAINT_NAME C TABLE_NAME
------------------------------ - ------------------------------
PK_T1 P T1
--테이블 레벨로 제약조건을 정의해 보자. PK인 경우 자동으로 NOT NULL, Unique KEY 제약조건이
붙으므로 칼럼에 별도로 기술 안해도 된다.
SQL> drop table t1;
테이블이 삭제되었습니다.
SQL> create table t1 (
id number ,
name varchar2(20),
constraint pk_t1 primary key (id));
테이블이 생성되었습니다.
NOT NULL 제약조건
 칼럼의 값이 NULL 일 수 없다는 제약조건 이다.(반드시 NULL이 아닌 값을 가져야 한다)
 칼럼 레벨로만 정의가 가능하며 NOT NULL 같이 DEFAULT 값도 지정 가능하다.
 테이블에 값을 INSERT할 경우 NOT NULL 칼럼은 반드시 기술해야 한다.(DEFAULT로 정의한
경우는 제외)
SQL> drop table t1;
테이블이 삭제되었습니다.
--id칼럼은 Primary Key이므로 자동으로 NOT NULL, Unique Key 제약조건을 가진다.
SQL> create table t1 (
id number ,
name varchar2(20) default '오라클자바커뮤니티' not null,
constraint pk_t1 primary key (id));
테이블이 생성되었습니다.
SQL> insert into t1 (id) values (1);
1 개의 행이 만들어졌습니다.
SQL> commit;
커밋이 완료되었습니다.
SQL> select * from t1;
ID NAME
---------- --------------------
1 오라클자바커뮤니티
Unique Key 제약조건
 칼럼의 값은 유일해야 한다는 제약조건으로 하나의 칼럼 또는 여러 칼럼(32개이내)으로 정의
가능하다.
 NULL값은 항상 유일하므로 입력이 가능 하다.
 칼럼 레벨, 테이블 레벨(주로 복합칼럼으로 제약조건을 만드는 경우) 모두 정의 가능하다.
 Unique Key 제약조건이 지정되면 제약조건과 같은 이름의 인덱스가 자동으로 생성된다.
SQL> drop table t1;
테이블이 삭제되었습니다.
SQL> create table t1 (
id number unique not null,
name varchar2(20) );
테이블이 생성되었습니다.
SQL> insert into t1 values (1, '1길동');
1 개의 행이 만들어졌습니다.
SQL> insert into t1 values (2, '2길동');
1 개의 행이 만들어졌습니다.
SQL> insert into t1 values (1, '1길동');
insert into t1 values (1, '1길동')*
1행에 오류:
ORA-00001: 무결성 제약 조건(SCOTT.SYS_C0011528)에 위배됩니다
SQL> commit;
커밋이 완료되었습니다.
--사용자가 작성한 제약조건을 확인하는 딕셔너리뷰에서 확인, Unique Key 제약조건은 제약조건
타입이 ‘U’ 이다.
SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from user_constraints
2 where TABLE_NAME = 'T1';
CONSTRAINT_NAME C TABLE_NAME
------------------------------ - ------------------------------
SYS_C0011527 C T1
SYS_C0011528 U T1
-- 사용자가 작성한 인덱스를 user_indexes 딕셔너리 뷰에서 확인하자. 제약조건의 이름으로 인덱
스가 만들어져 있음을 알 수 있다.
SQL> select index_name, table_name from user_indexes
where table_name = 'T1';
INDEX_NAME TABLE_NAME
------------------------------ ------------------------------
SYS_C0011528 T1
Primary Key 제약조건
 한 테이블에서 레코드를 유일하게 구별하기 위한 키로써 주키 또는 기본키라고 부른다.
 한 테이블당 하나의 PK만 가질 수 있다.
 PK로 지정된 칼럼은 NULL값을 가질 수 없다.
 PK로 지정된 칼럼은 자동 NOT NULL이고 Unique Key 제약조건을 가지고 제약조건의 이름으
로 Unique Key Index를 생성한다.
 칼럼 레벨 또는 테이블 레벨로 정의 가능하며 PK칼럼이 여러 개인 경우 테이블 레벨로 정의
해야 한다.
SQL> drop table t1;
테이블이 삭제되었습니다.
SQL> create table t1 (
id number constraint pk_t1 primary key,
name varchar2(20));
테이블이 생성되었습니다.
SQL> drop table t1;
테이블이 삭제되었습니다.
SQL> create table t1 (
id number ,
name varchar2(20),
constraint pk_t1 primary key (id) );
테이블이 생성되었습니다.
외래키(Foreign Key) 제약 조건
 외래키 제약조건은 한 테이블의 칼럼 값이 참조되는 테이블의 PK, UK 값만 오도록 할 때 지
정하는 제약조건 이다. 즉 외래키로 지정할 때 참조되는 테이블의 칼럼은 Primary Key 또는
Unique Key 이어야 한다.
 외래키를 포함한 테이블을 자식테이블(Detail/Child Table)이라 하며 참조되는 키(Referencial
Key)를 가지는 테이블을 부모 테이블(Master/Parent Table) 이라고 한다.
 부모 테이블의 PK, UK를 참조하는 자식테이블의 칼럼을 외래키 칼럼이라 하고 부모 테이블
의 칼럼을 참조 키라고 한다.
 외래키와 참조되는 키가 하나의 테이블에 존재할 수 있으며 이를 자기참조(Self Reference)라
고 하고 이 경우 부모테이블과 자식테이블이 동일하다.(EMP 테이블에서 mgr 칼럼은 외래키
칼럼으로 empno 컬럼을 참조한다.)
--제약조건을 확인 할 수 있는 딕셔너리 뷰에서 EMP 테이블에 생성된 제약조건을 조회
SQL> select constraint_name, constraint_type from user_constraints
where table_name = 'EMP';
CONSTRAINT_NAME C
------------------------------ -
PK_EMP P
FK_DEPTNO R  외래키를 의미한다.
-- DEPT 테이블의 deptno 칼럼을 참조하는 EMP 테이블에 생성된 외래키를 삭제
SQL> alter table emp drop constraint fk_deptno;
테이블이 변경되었습니다.
--다시 생성
SQL> alter table emp add constraint fk_deptno foreign key(deptno) references dept(deptno);
테이블이 변경되었습니다.
SQL> drop table t1;
테이블이 삭제되었습니다.
SQL> drop table t2;
테이블이 삭제되었습니다.
--부모테이블을 먼저 생성, 외래키로 내려 줄 칼럼은 PK 또는 UK 칼럼만 가능 하다.
SQL> create table t1 (
id number primary key,
name varchar2(20));
테이블이 생성되었습니다.
--Number 칼럼은 NULL도 가능하지만 값이 들어올 때는 t1 테이블의 id 칼럼의 값이 와야 한다.
SQL> create table t2 (
sale_date date,
id number references t1(id),
amount number
);
테이블이 생성되었습니다.
SQL> insert into t1 values (1, '1길동');
1 개의 행이 만들어졌습니다.
SQL> insert into t2 values (sysdate, 1, 2000);
1 개의 행이 만들어졌습니다.
SQL> insert into t2 values (sysdate, 2, 4000);
insert into t2 values (sysdate, 2, 4000)
*
1행에 오류:
ORA-02291: 무결성 제약조건(SCOTT.SYS_C0011535)이 위배되었습니다- 부모 키가
없습니다
--자식테이블이 존재 하므로 부모테이블의 삭제를 막는다.
SQL> drop table t1;
drop table t1
*
1행에 오류:
ORA-02449: 외래 키에 의해 참조되는 고유/기본 키가 테이블에 있습니다
--테이블 삭제시 먼저 관련 참조무결성 제약조건을 삭제 후 테이블을 삭제한다.
SQL> drop table t1 cascade constraint;
테이블이 삭제되었습니다.
아래 부모테이블과 자식테이블에서 가능한 DML을 표로 만들었다.
DELETE, UPDATE시 참조 무결성 규칙
규칙 설 명
Restrict 부모테이블의 참조되는 값(Referenced Value)에 대해 delete 나
update 를 허락하지 않는다
Set to Null 부모테이블의 참조되는 값(Referenced Value)에 delete 나
update 를 할 때 모든 자식테이블의 외래키값을 NULL 로 만든다.
Set to Default 부모테이블의 참조되는 값(Referenced Value)에 delete 나
update 를 할 때 모든 자식테이블의 외래키값을 기본값으로
만든다.
EMP TABLE(자식테이블) DEPT TABLE(부모테이블)
EMPNO ENAME DEPTNO DEPTNO DNAME
7369 SMITH 20 10 ACCOUNTING
7499 ALLEN 20 20 RESERCH
7521 WARD 30 30 SALES
7566 JONES 20 40 OPERATIONS
7788 CLARK 10 참조키
외래키
INSERT 부모테이블의 DEPTNO 또는 NULL만입력 가능
UPDATE 부모테이블의 DEPTNO 또는 NULL로 변경 가능
DELETE
DELETE CASCADE
DEPTNO만 충돌나지 않으면 입력 가능
가능
가능 가능
삭제를 원하는 DEPTNO가 자식테이블에 없을 때 가능
변경을 원하는 DEPTNO가 자식테이블에 없을 때 가능
Cascade 부모테이블의 참조되는 값(Referenced Value)에 delete 나
update 를 할 때 delete 될 때는 그 값을 가지는 자식레코드를
모두 삭제하고, update 인 경우 해당 값으로 모두 변경 함
No Action 부모테이블의 참조되는 값(Referenced Value)에 대해 delete 나
update 를 허락하지 않음
SQL> drop table t2;
테이블이 삭제되었습니다.
SQL> drop table t1;
테이블이 삭제되었습니다.
SQL> create table t1 (
id number primary key,
name varchar2(20));
테이블이 생성되었습니다.
--id 컬럼에 외래키를 생성했으며 기본적으로 Restrict Mode이므로 자식데이터가 있는 레코드는
삭제 불가하다.
SQL> create table t2 (
sale_date date,
id number references t1(id),
amount number
);
테이블이 생성되었습니다.
SQL> insert into t1 values (1, '1길동');
1 개의 행이 만들어졌습니다.
SQL> insert into t1 values (2, '2길동');
1 개의 행이 만들어졌습니다.
SQL> insert into t2 values (sysdate, 1, 2000);
1 개의 행이 만들어졌습니다.
SQL> insert into t2 values (sysdate, 2, 4000);
1 개의 행이 만들어졌습니다.
SQL> commit;
커밋이 완료되었습니다.
-- t1의 id 값을 부모로 하는 자식데이터 t1의 id가 있으므로 기본적으로 삭제 불가
SQL> delete from t1 where id=1;
delete from t1 where id=1
*
1행에 오류:
ORA-02292: 무결성 제약조건(SCOTT.SYS_C0011537)이 위배되었습니다- 자식 레코드가
발견되었습니다
SQL> drop table t2;
테이블이 삭제되었습니다.
--부모테이블의 값이 삭제될 때 자식테이블의 해당 값을 NULL로 바꾸기 위해 on delete set null을
사용했다.
SQL> create table t2 (
sale_date date,
id number references t1(id) on delete set null,
amount number
);
테이블이 생성되었습니다.
SQL> insert into t2 values (sysdate, 1, 2000);
SQL>insert into t2 values (sysdate, 2, 4000);
SQL> commit;
SQL> select * from t1;
ID NAME
---------- --------------------
1 1길동
2 2길동
SQL> select * from t2;
SALE_DAT ID AMOUNT
-------- ---------- ----------
14/09/10 1 2000
14/09/10 2 4000
SQL> delete from t1 where id=1;
1 행이 삭제되었습니다.
SQL> select * from t2;
SALE_DAT ID AMOUNT
-------- ---------- ----------
14/09/10 2000  id값이 NULL로 되었다.
14/09/10 2 4000
SQL> drop table t2;
테이블이 삭제되었습니다.
--set default는 아직 구현되어 있지 않다.
SQL> create table t2 (
sale_date date,
id number references t1(id) on delete set default,
amount number
);
id number references t1(id) on delete set default,
*
3행에 오류:
ORA-03001: 현재에는 구현되어 있지 않은 기능입니다
--부모테이블 레코드삭제시 자식 테이블의 데이터를 삭제하는 옵션 on delete cascade 이용
SQL> create table t2 (
sale_date date,
id number references t1(id) on delete cascade,
amount number
);
테이블이 생성되었습니다.
SQL> insert into t2 values (sysdate, 2, 4000);
1 개의 행이 만들어졌습니다.
SQL> commit;
커밋이 완료되었습니다.
SQL> select * from t1;
ID NAME
---------- --------------------
2 2길동
SQL> select * from t2;
SALE_DAT ID AMOUNT
-------- ---------- ----------
14/09/10 2 4000
SQL> delete from t1 ;
1 행이 삭제되었습니다.
SQL> select * from t2;
선택된 레코드가 없습니다.
CHECK 제약조건
칼럼에 입력되는 값의 범위를 지정하거나 특정한값만 입력 받고자 할 때 사용하는 제약조건
( 예 : myemp1 테이블의 성별 칼럼에는 ‘M’ or ‘F’ 만 입력 가능하도록 설정하고자 할 때)
SQL> create table mystudent (
id number,
grade number not null check (grade in (1,2,3,4)));
테이블이 생성되었습니다.
SQL> insert into mystudent values (1,1);
1 개의 행이 만들어졌습니다.
--7학년은 CHECK 제약조건으로 인해 입력되지 않는다.
SQL> insert into mystudent values (1,7);
insert into student values (1,7)
*
1행에 오류:
ORA-02290: 체크 제약조건(SCOTT.SYS_C0011542)이 위배되었습니다
무결성 제약 조건의 삭제
ALTER TABLE table_name DROP CONSTRAINT constraint_name [CASCADE]
만약 부모테이블의 PK를 삭제하는 경우 자식테이블에 외래키가 형성되어 있다면 오류가 발생한
다. 이 경우 자식테이블의 외래키를 먼저 삭제하거나 제약조건 삭제시 CASCADE 옵션으로 삭제가
가능하다.
SQL> drop table t1;
SQL> drop table t2;
SQL> create table t1 (
id number primary key,
name varchar2(20));
테이블이 생성되었습니다.
SQL> create table t2 (
sale_date date,
id number references t1(id),
amount number);
테이블이 생성되었습니다.
SQL> alter table t1 drop primary key;
alter table t1 drop primary key
*
1행에 오류:
ORA-02273: 고유/기본 키가 외부 키에 의해 참조되었습니다
--아래의 경우 t1의 PK뿐 아니라 t1 테이블에 생성된 외래키도 함께 삭제된다.
SQL> alter table t1 drop primary key cascade;
테이블이 변경되었습니다.
--이제 T11 T2 테이블에는 제약조건이 남아 있지 않다.
SQL> select constraint_name, constraint_type from user_constraints
where table_name = 'T2';
선택된 레코드가 없습니다.
SQL> select constraint_name, constraint_type from user_constraints
where table_name = 'T1';
선택된 레코드가 없습니다.
SQL> create table t1 (
id number constraint pk_t1 primary key,
name varchar2(20));
테이블이 생성되었습니다.
--drop constraint 구문으로 제약조건 삭제
SQL> alter table t1 drop constraints pk_t1;
테이블이 변경되었습니다.
무결성 제약조건의 활성화, 비활성화
가끔은 대량의 데이터를 입력하는 경우 제약조건 검사로 인해 시간이 오래 걸리거나 일부 데이
터 오류로 인해 무결성 제약조건을 비활성화 해야 될 경우가 있다. 이러한 경우 제약조건을 비활
성화 한 후 다시 활성화 하면 된다.
[기본 형식]
ALTER TABLE table_name ENABLE[NOVALIDATE] CONSTRAINT constraint_name
ALTER TABLE table_name DISABLE CONSTRAINT constraint_name
SQL> drop table t2;
SQL> drop table t1;
SQL> create table t1 (
id number constraint pk_t1 primary key,
name varchar2(20));
테이블이 생성되었습니다.
SQL> alter table t1 disable constraint pk_t1 ;
테이블이 변경되었습니다.
SQL> alter table t1 enable constraint pk_t1 ;
테이블이 변경되었습니다.
무결성 제약조건 조회
USER_CONSTRAINTS 또는 USER_CONS_COLUMNS를 이용하여 테이블에 생성된 제약조건을 검사
또는 제약조건이 생성된 칼럼을 조회 할 수 있다.
--EMP테이블과 T1 테이블에 생성된 제약조건과 그 상태를 조회하시오.
SQL> desc user_constraints;
이름 널? 유형
----------------------------------------- -------- -----------------------
OWNER VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
CONSTRAINT_TYPE VARCHAR2(1)
TABLE_NAME NOT NULL VARCHAR2(30)
SEARCH_CONDITION LONG
R_OWNER VARCHAR2(30)
R_CONSTRAINT_NAME VARCHAR2(30)
DELETE_RULE VARCHAR2(9)
STATUS VARCHAR2(8)
SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME, STATUS from
user_constraints
where table_name in ('EMP','T1');
CONSTRAINT_NAME C TABLE_NAME STATUS
------------------------------ - ------------------------------ --------
PK_EMP P EMP ENABLED
SYS_C0011531 R EMP ENABLED
PK_T1 P T1 DISABLED
--제약조건 PK_EMP이 적용된(EMP TABLE의 PK) 칼럼을 조회하시오.
SQL> column constraint_name format a10
SQL> select CONSTRAINT_NAME,TABLE_NAME,COLUMN_NAME, POSITION from
user_cons_columns
where constraint_name = 'PK_EMP';
CONSTRAINT TABLE_NAME COLUMN_NAM POSITION
---------- ------------------------------ ---------- ----------
PK_EMP EMP EMPNO 1

Más contenido relacionado

La actualidad más candente

효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차
희동 강
 
효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차
희동 강
 
효율적인 SQL 작성방법 1주차
효율적인 SQL 작성방법 1주차효율적인 SQL 작성방법 1주차
효율적인 SQL 작성방법 1주차
희동 강
 
효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차
희동 강
 

La actualidad más candente (20)

#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
[오라클교육/SQL교육/IT교육/실무중심교육학원추천_탑크리에듀]#4.SQL초보에서 Schema Objectes까지
[오라클교육/SQL교육/IT교육/실무중심교육학원추천_탑크리에듀]#4.SQL초보에서 Schema Objectes까지[오라클교육/SQL교육/IT교육/실무중심교육학원추천_탑크리에듀]#4.SQL초보에서 Schema Objectes까지
[오라클교육/SQL교육/IT교육/실무중심교육학원추천_탑크리에듀]#4.SQL초보에서 Schema Objectes까지
 
#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁
#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁
#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁
 
#23.SQL초보에서 Schema Objects까지_SQL기초교육/오라클교육/국비지원환급교육/재직자교육/구로IT학원추천
#23.SQL초보에서 Schema Objects까지_SQL기초교육/오라클교육/국비지원환급교육/재직자교육/구로IT학원추천#23.SQL초보에서 Schema Objects까지_SQL기초교육/오라클교육/국비지원환급교육/재직자교육/구로IT학원추천
#23.SQL초보에서 Schema Objects까지_SQL기초교육/오라클교육/국비지원환급교육/재직자교육/구로IT학원추천
 
효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차
 
WINDOW FUNCTION의 이해와 활용방법_Wh oracle
WINDOW FUNCTION의 이해와 활용방법_Wh oracleWINDOW FUNCTION의 이해와 활용방법_Wh oracle
WINDOW FUNCTION의 이해와 활용방법_Wh oracle
 
(오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트
(오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트(오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트
(오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트
 
효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차
 
EcmaScript6(2015) Overview
EcmaScript6(2015) OverviewEcmaScript6(2015) Overview
EcmaScript6(2015) Overview
 
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
6.테이블만들기
6.테이블만들기6.테이블만들기
6.테이블만들기
 
효율적인 SQL 작성방법 1주차
효율적인 SQL 작성방법 1주차효율적인 SQL 작성방법 1주차
효율적인 SQL 작성방법 1주차
 
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
 
효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차
 
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
자바스터디(6기) 3
자바스터디(6기) 3자바스터디(6기) 3
자바스터디(6기) 3
 
[구로IT학원추천/구로디지털단지IT학원/국비지원IT학원/재직자/구직자환급교육]#9.SQL초보에서 Schema Objects까지
[구로IT학원추천/구로디지털단지IT학원/국비지원IT학원/재직자/구직자환급교육]#9.SQL초보에서 Schema Objects까지[구로IT학원추천/구로디지털단지IT학원/국비지원IT학원/재직자/구직자환급교육]#9.SQL초보에서 Schema Objects까지
[구로IT학원추천/구로디지털단지IT학원/국비지원IT학원/재직자/구직자환급교육]#9.SQL초보에서 Schema Objects까지
 
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
제13장 사용자 권한
제13장 사용자 권한제13장 사용자 권한
제13장 사용자 권한
 

Destacado

스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
탑크리에듀(구로디지털단지역3번출구 2분거리)
 

Destacado (12)

NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스  ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스  ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
 
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
 
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스  ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스  ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
 
(JPA 엔티티 매니저)JPA 기초강좌, 엔티티 매니저. 엔티티 매니저팩토리
(JPA 엔티티 매니저)JPA 기초강좌, 엔티티 매니저. 엔티티 매니저팩토리(JPA 엔티티 매니저)JPA 기초강좌, 엔티티 매니저. 엔티티 매니저팩토리
(JPA 엔티티 매니저)JPA 기초강좌, 엔티티 매니저. 엔티티 매니저팩토리
 
#17.SQL초보에서 Schema Objects까지_오라클교육/SQL기초교육/구로IT학원/구로디짙털단지역
#17.SQL초보에서 Schema Objects까지_오라클교육/SQL기초교육/구로IT학원/구로디짙털단지역#17.SQL초보에서 Schema Objects까지_오라클교육/SQL기초교육/구로IT학원/구로디짙털단지역
#17.SQL초보에서 Schema Objects까지_오라클교육/SQL기초교육/구로IT학원/구로디짙털단지역
 
[오라클교육/닷넷교육/자바교육/SQL기초/스프링학원/국비지원학원/자마린교육]#16.SQL초보에서 Schema Objects까지
[오라클교육/닷넷교육/자바교육/SQL기초/스프링학원/국비지원학원/자마린교육]#16.SQL초보에서 Schema Objects까지[오라클교육/닷넷교육/자바교육/SQL기초/스프링학원/국비지원학원/자마린교육]#16.SQL초보에서 Schema Objects까지
[오라클교육/닷넷교육/자바교육/SQL기초/스프링학원/국비지원학원/자마린교육]#16.SQL초보에서 Schema Objects까지
 
#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
 
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
 
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
 
IT실무교육학원/자바학원/오라클학원/SQL기초학원추천_#11.SQL초보에서 Schema Objects까지
IT실무교육학원/자바학원/오라클학원/SQL기초학원추천_#11.SQL초보에서 Schema Objects까지IT실무교육학원/자바학원/오라클학원/SQL기초학원추천_#11.SQL초보에서 Schema Objects까지
IT실무교육학원/자바학원/오라클학원/SQL기초학원추천_#11.SQL초보에서 Schema Objects까지
 
Business profile cis-latest-jan'17
Business profile cis-latest-jan'17Business profile cis-latest-jan'17
Business profile cis-latest-jan'17
 
Tarea 3 hernandez ramirez jose guadalupe
Tarea 3 hernandez ramirez jose guadalupeTarea 3 hernandez ramirez jose guadalupe
Tarea 3 hernandez ramirez jose guadalupe
 

Similar a [구로국비지원IT학원/재직자환급/오라클교육/SQL기초]#21.SQL초보에서 Schema Objects까지

Similar a [구로국비지원IT학원/재직자환급/오라클교육/SQL기초]#21.SQL초보에서 Schema Objects까지 (9)

3.2 실행계획 sql 연산 (concatenation)
3.2 실행계획 sql 연산 (concatenation)3.2 실행계획 sql 연산 (concatenation)
3.2 실행계획 sql 연산 (concatenation)
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
 
5.1 비트리 인덱스
5.1 비트리 인덱스5.1 비트리 인덱스
5.1 비트리 인덱스
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQL
 
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
 
MySQL JOIN
MySQL JOINMySQL JOIN
MySQL JOIN
 
7.데이터수정
7.데이터수정7.데이터수정
7.데이터수정
 
제10장 데이터 무결성과 제약 조건
제10장 데이터 무결성과 제약 조건제10장 데이터 무결성과 제약 조건
제10장 데이터 무결성과 제약 조건
 
NLJ BATCH와 부분범위 처리_Wh oracle
NLJ BATCH와 부분범위 처리_Wh oracleNLJ BATCH와 부분범위 처리_Wh oracle
NLJ BATCH와 부분범위 처리_Wh oracle
 

Más de 탑크리에듀(구로디지털단지역3번출구 2분거리)

(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 

Más de 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
 
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
 
[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육
 
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
 
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
 

Último

Último (6)

바리스타이론기초-1 수정 후 111111111111111111111111
바리스타이론기초-1 수정 후 111111111111111111111111바리스타이론기초-1 수정 후 111111111111111111111111
바리스타이론기초-1 수정 후 111111111111111111111111
 
친환경, 그린, 탄소저감 미래 교육 공간 디자인의 이해와 사례들에 대한 강의 자료
친환경, 그린, 탄소저감  미래 교육 공간 디자인의 이해와 사례들에 대한 강의 자료친환경, 그린, 탄소저감  미래 교육 공간 디자인의 이해와 사례들에 대한 강의 자료
친환경, 그린, 탄소저감 미래 교육 공간 디자인의 이해와 사례들에 대한 강의 자료
 
TDM(Text Data Mining) Studio manual(2024)
TDM(Text Data Mining) Studio manual(2024)TDM(Text Data Mining) Studio manual(2024)
TDM(Text Data Mining) Studio manual(2024)
 
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
 
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
 
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
 

[구로국비지원IT학원/재직자환급/오라클교육/SQL기초]#21.SQL초보에서 Schema Objects까지

  • 1. SQL초보에서 Schema Objects까지 8.1.5 FlashBack Drop 및 Recycle Bin 리사이클빈(Recycle Bin)이란? Oracle10g 이후 생긴 기능으로 테이블이 삭제되면 완전히 삭제되지 않고 테이블의 이름을 변경한 후 테이블스페이스 내의 리사이클 빈 영역(윈도우 휴지통 같은 곳)으로 이동 시킨다. 오브젝트가 삭제되면 삭제되는 오브젝트의 정보를 포함하고 있는 데이터 딕셔너리에 존재하는 테이블로써 윈 도우의 휴지통과 비슷한 개념으로 이기능을 이용하여 DROP TABLE 후 복구가 가능하다.  리사이클 빈으로 옮겨가는 테이블을 FLASHBACK TABLE이라고 한다.  리사이클 빈안에 만들어지는 FLASHBACK TABLE의 이름은 “BIN$unique_id$version” 형태를 가 진다.(unique_id는 26자의 오브젝트에 대한 유일한 문자열이다) --세션 레벨에서 리사이클빈 기능의 활성화, 비활성화(기본은 Enabled 이다) --alter session, alter system 명령으로 가능하며 기능이 꺼져있는 경우 테이블 삭제시 복구 불가능 하다. SQL> alter session set recyclebin = off; 세션이 변경되었습니다. SQL> alter session set recyclebin = on; 세션이 변경되었습니다. --리사이클빈은 아래 명령으로 확인 가능하다. SQL>drop table sales; SQL> select object_name, original_name from recyclebin; OBJECT_NAME ORIGINAL_NAME ------------------------------ -------------------------------- BIN$Taaxs2vjQAS14g+08tU/dg==$0 SALES
  • 2. SQL> show recyclebin; ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME ---------------- ------------------------------ ------------ ------------------- SALES BIN$Taaxs2vjQAS14g+08tU/dg==$0 TABLE 2014-09-10:12:45:02 --DROP TABLE 명령어 사용시 뒤부분에 PURGE하고 하면 테이블은 영구히 삭제되며 리사이클 빈 으로 이동되지 않는다. SQL> create table t1 ( id number); 테이블이 생성되었습니다. SQL> drop table t1; 테이블이 삭제되었습니다. SQL> desc t1; ERROR: ORA-04043: t1 객체는 존재하지 않습니다. SQL> show recyclebin; ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME ---------------- ------------------------------ ------------ ------------------- T1 BIN$TcAMYpDbS8SAUlBQ8kfwVQ==$0 TABLE 2014-09-10:13:30:49 -- flashback table명령어로 복구 SQL> flashback table t1 to before drop; 플래시백이 완료되었습니다. -- purge 옵션으로 drop하면 리사이클빈에 저장되지 않는다. SQL> drop table t1 purge; 테이블이 삭제되었습니다. -- 리사이클빈에는 아무것도 없다. SQL> show recyclebin; SQL> -- T1 테이블을 리사이클빈에서 영구히 삭제하려면 아래처럼 purge를 사용한다. SQL> purge table t1; 테이블이 지워졌습니다. SQL> -- 리사이클빈 전체를 purge하면 현재 USER의 리사이클빈이 삭제된다. SQL> purge recyclebin; 휴지통이 지워졌습니다.
  • 3. SQL> flashback table t1 to before drop; flashback table t1 to before drop * 1행에 오류: ORA-38305: 객체가 RECYCLE BIN에 없음 SQL> conn scott/tiger 연결되었습니다. SQL> create table t1 ( id number); 테이블이 생성되었습니다. SQL> create table t2 ( id number); 테이블이 생성되었습니다. SQL> -- 현재 테이블스페이스는 USERS이다. SQL> select default_tablespace from user_users; DEFAULT_TABLESPACE ------------------------------ USERS SQL> purge tablespace users; 테이블스페이스가 지워졌습니다. SQL> purge tablespace users user scott; 테이블스페이스가 지워졌습니다.  다음과 같이 테이블을 만들고 삭제를 반복했다면 리사이클빈에 오리지널 테이블 이름이 EMP 인 것이 여러개 존재할 것이다. CREATE TABLE EMP ( ...columns ); # EMP version 1 DROP TABLE EMP; CREATE TABLE EMP ( ...columns ); # EMP version 2 DROP TABLE EMP;
  • 4. CREATE TABLE EMP ( ...columns ); # EMP version 3 DROP TABLE EMP; ...... ...... SQL> SHOW RECYCLEBIN; ORIGINAL_NAME RECYCLEBIN_NAME OBJECT_TYPE DROP_TIME -------------------------------------------------------------- EMP BIN$TaaaXccddd+ee$0 TABLE 2016-01-01 EMP BIN$TaaaXccd3d+ee$1 TABLE 2016-02-01 EMP BIN$TaaaXccdyd+ee$2 TABLE 2016-03-01  아래와 같이 복구하는 경우 가장 최근에 삭제된 테이블이 복구된다. FLASHBACK TABLE EMP TO BEFORE DROP;  물론 아래처럼 최근의 EMP 테이블을 복구하면서 RENAME 명령으로 이름을 바꾸는 것도 한 방법이다. FLASHBACK TABLE EMP TO BEFORE DROP RENAME TO EMP_VERSION_3; FLASHBACK TABLE EMP TO BEFORE DROP RENAME TO EMP_VERSION_2; FLASHBACK TABLE EMP TO BEFORE DROP RENAME TO EMP_VERSION_1; 또한 플래시백 테이블의 이름으로 복구도 가능하다. FLASHBACK TABLE " BIN$TaaaXccddd+ee$0" TO BEFORE DROP; 8.1.6 데이터 무결성(Data Integrity) 제약조건(Constraints) 무결성 제약조건이란?  IC(Integrity Constraints)는 하나의 테이블내의 칼럼 값에 대해 제약을 가하는 조건으로 데이터 값의 무결함, 정확성, 일관성을 보장하기 위한 방법이다.  무결성 제약조건에 맞지 않는 데이터가 입력되면 DML(INSERT, UPDATE, DELETE, MERGE)은 롤
  • 5. 백된다.  테이블 생성시 또는 생성 후 무결성 제약조건 추가 가능 하다.  테이블의 모든 무결성 제약조건은 데이터 딕셔너리에 저장된다.  제약조건을 지정할 때 이름을 부여하지 않으면 오라클 내부적으로 SYS_Cn 형태로 이름이 부 여된다 무결성 제약조건(IC) Description NOT NULL 칼럼값은 NULL 을 가질 수 없다. PRIMARY KEY(기본키) 테이블의 행을 유일하게 구별하기 위한 키 Unique Constrinats, NOT NULL Constraints 를 결합한 형태 FOREIGN KEY(외래키) 같거나/다른 테이블의 PK/UK 값을 참조하기 위한 제약조건 (EMP 테이블에서 DEPTNO 칼럼은 값이 입력된다면 반드시 DEPT 테이블의 DEPTNO 칼럼 값이 입력되어야 한다.) UNIQUE 칼럼 값은 유일해야 한다. CHECK 칼럼에 입력되는 값을 지정하거나 그 범위를 지정 무결성 제약조건 정의 컬럼 레벨(Column Constraints Level) : 단일 칼럼에 정의하는것으로 칼럼의 정의가 끝나기 전에 제 약조건을 정의하며 모든 무결성 제약조건을 지정 가능하다. 테이블 레벨(Table Constraints Level) : 칼럼에 대한 정의가 모든 끝난 후 콤마(,)을 찍고 그 다음에 제약조건을 기술하는 것으로 한 개 또는 여러 칼럼에 대해 정의가 가능하며, NOT NULL 제약조건 은 칼럼레벵에서만 정의가 가능하다. [기본 형식] 칼럼 레벨 :column_name [CONSTRAINT constraint_name] constraint_type 테이블 레벨 : column,,, [CONSTRAINT constraint_name]constraint_type(column_name,,,) SQL> drop table t1; 테이블이 삭제되었습니다. --칼럼레벨로 PK 제약조건 정의, constraint 키워드를 사용한다면 반드시 다음에 이름을 기술해야 한다. 기술하지 않으면 SYS_CnXXX 형태로 오라클이 임의로 부여한다. SQL> create table t1 ( id number constraint pk_t1 primary key, name varchar2(10)); 테이블이 생성되었습니다.
  • 6. -- user_constraints 딕셔너리뷰를 통해 만든 Primary Key 제약조건을 확인하자. SQL> desc user_constraints; 이름 널? 유형 ----------------------------------------- -------- ---------------------------- OWNER VARCHAR2(30) CONSTRAINT_NAME NOT NULL VARCHAR2(30) CONSTRAINT_TYPE VARCHAR2(1) TABLE_NAME NOT NULL VARCHAR2(30) …… -- Primary Key인 경우 CONSTRAINT_TYPE이 ‘P’ SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from user_constraints where TABLE_NAME = 'T1'; CONSTRAINT_NAME C TABLE_NAME ------------------------------ - ------------------------------ PK_T1 P T1 --테이블 레벨로 제약조건을 정의해 보자. PK인 경우 자동으로 NOT NULL, Unique KEY 제약조건이 붙으므로 칼럼에 별도로 기술 안해도 된다. SQL> drop table t1; 테이블이 삭제되었습니다. SQL> create table t1 ( id number , name varchar2(20), constraint pk_t1 primary key (id)); 테이블이 생성되었습니다. NOT NULL 제약조건  칼럼의 값이 NULL 일 수 없다는 제약조건 이다.(반드시 NULL이 아닌 값을 가져야 한다)  칼럼 레벨로만 정의가 가능하며 NOT NULL 같이 DEFAULT 값도 지정 가능하다.  테이블에 값을 INSERT할 경우 NOT NULL 칼럼은 반드시 기술해야 한다.(DEFAULT로 정의한 경우는 제외) SQL> drop table t1; 테이블이 삭제되었습니다.
  • 7. --id칼럼은 Primary Key이므로 자동으로 NOT NULL, Unique Key 제약조건을 가진다. SQL> create table t1 ( id number , name varchar2(20) default '오라클자바커뮤니티' not null, constraint pk_t1 primary key (id)); 테이블이 생성되었습니다. SQL> insert into t1 (id) values (1); 1 개의 행이 만들어졌습니다. SQL> commit; 커밋이 완료되었습니다. SQL> select * from t1; ID NAME ---------- -------------------- 1 오라클자바커뮤니티 Unique Key 제약조건  칼럼의 값은 유일해야 한다는 제약조건으로 하나의 칼럼 또는 여러 칼럼(32개이내)으로 정의 가능하다.  NULL값은 항상 유일하므로 입력이 가능 하다.  칼럼 레벨, 테이블 레벨(주로 복합칼럼으로 제약조건을 만드는 경우) 모두 정의 가능하다.  Unique Key 제약조건이 지정되면 제약조건과 같은 이름의 인덱스가 자동으로 생성된다. SQL> drop table t1; 테이블이 삭제되었습니다. SQL> create table t1 ( id number unique not null, name varchar2(20) ); 테이블이 생성되었습니다. SQL> insert into t1 values (1, '1길동'); 1 개의 행이 만들어졌습니다.
  • 8. SQL> insert into t1 values (2, '2길동'); 1 개의 행이 만들어졌습니다. SQL> insert into t1 values (1, '1길동'); insert into t1 values (1, '1길동')* 1행에 오류: ORA-00001: 무결성 제약 조건(SCOTT.SYS_C0011528)에 위배됩니다 SQL> commit; 커밋이 완료되었습니다. --사용자가 작성한 제약조건을 확인하는 딕셔너리뷰에서 확인, Unique Key 제약조건은 제약조건 타입이 ‘U’ 이다. SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from user_constraints 2 where TABLE_NAME = 'T1'; CONSTRAINT_NAME C TABLE_NAME ------------------------------ - ------------------------------ SYS_C0011527 C T1 SYS_C0011528 U T1 -- 사용자가 작성한 인덱스를 user_indexes 딕셔너리 뷰에서 확인하자. 제약조건의 이름으로 인덱 스가 만들어져 있음을 알 수 있다. SQL> select index_name, table_name from user_indexes where table_name = 'T1'; INDEX_NAME TABLE_NAME ------------------------------ ------------------------------ SYS_C0011528 T1 Primary Key 제약조건  한 테이블에서 레코드를 유일하게 구별하기 위한 키로써 주키 또는 기본키라고 부른다.  한 테이블당 하나의 PK만 가질 수 있다.  PK로 지정된 칼럼은 NULL값을 가질 수 없다.  PK로 지정된 칼럼은 자동 NOT NULL이고 Unique Key 제약조건을 가지고 제약조건의 이름으 로 Unique Key Index를 생성한다.
  • 9.  칼럼 레벨 또는 테이블 레벨로 정의 가능하며 PK칼럼이 여러 개인 경우 테이블 레벨로 정의 해야 한다. SQL> drop table t1; 테이블이 삭제되었습니다. SQL> create table t1 ( id number constraint pk_t1 primary key, name varchar2(20)); 테이블이 생성되었습니다. SQL> drop table t1; 테이블이 삭제되었습니다. SQL> create table t1 ( id number , name varchar2(20), constraint pk_t1 primary key (id) ); 테이블이 생성되었습니다. 외래키(Foreign Key) 제약 조건  외래키 제약조건은 한 테이블의 칼럼 값이 참조되는 테이블의 PK, UK 값만 오도록 할 때 지 정하는 제약조건 이다. 즉 외래키로 지정할 때 참조되는 테이블의 칼럼은 Primary Key 또는 Unique Key 이어야 한다.  외래키를 포함한 테이블을 자식테이블(Detail/Child Table)이라 하며 참조되는 키(Referencial Key)를 가지는 테이블을 부모 테이블(Master/Parent Table) 이라고 한다.  부모 테이블의 PK, UK를 참조하는 자식테이블의 칼럼을 외래키 칼럼이라 하고 부모 테이블 의 칼럼을 참조 키라고 한다.  외래키와 참조되는 키가 하나의 테이블에 존재할 수 있으며 이를 자기참조(Self Reference)라 고 하고 이 경우 부모테이블과 자식테이블이 동일하다.(EMP 테이블에서 mgr 칼럼은 외래키 칼럼으로 empno 컬럼을 참조한다.) --제약조건을 확인 할 수 있는 딕셔너리 뷰에서 EMP 테이블에 생성된 제약조건을 조회 SQL> select constraint_name, constraint_type from user_constraints where table_name = 'EMP'; CONSTRAINT_NAME C ------------------------------ -
  • 10. PK_EMP P FK_DEPTNO R  외래키를 의미한다. -- DEPT 테이블의 deptno 칼럼을 참조하는 EMP 테이블에 생성된 외래키를 삭제 SQL> alter table emp drop constraint fk_deptno; 테이블이 변경되었습니다. --다시 생성 SQL> alter table emp add constraint fk_deptno foreign key(deptno) references dept(deptno); 테이블이 변경되었습니다. SQL> drop table t1; 테이블이 삭제되었습니다. SQL> drop table t2; 테이블이 삭제되었습니다. --부모테이블을 먼저 생성, 외래키로 내려 줄 칼럼은 PK 또는 UK 칼럼만 가능 하다. SQL> create table t1 ( id number primary key, name varchar2(20)); 테이블이 생성되었습니다. --Number 칼럼은 NULL도 가능하지만 값이 들어올 때는 t1 테이블의 id 칼럼의 값이 와야 한다. SQL> create table t2 ( sale_date date, id number references t1(id), amount number ); 테이블이 생성되었습니다. SQL> insert into t1 values (1, '1길동'); 1 개의 행이 만들어졌습니다. SQL> insert into t2 values (sysdate, 1, 2000); 1 개의 행이 만들어졌습니다. SQL> insert into t2 values (sysdate, 2, 4000); insert into t2 values (sysdate, 2, 4000) *
  • 11. 1행에 오류: ORA-02291: 무결성 제약조건(SCOTT.SYS_C0011535)이 위배되었습니다- 부모 키가 없습니다 --자식테이블이 존재 하므로 부모테이블의 삭제를 막는다. SQL> drop table t1; drop table t1 * 1행에 오류: ORA-02449: 외래 키에 의해 참조되는 고유/기본 키가 테이블에 있습니다 --테이블 삭제시 먼저 관련 참조무결성 제약조건을 삭제 후 테이블을 삭제한다. SQL> drop table t1 cascade constraint; 테이블이 삭제되었습니다. 아래 부모테이블과 자식테이블에서 가능한 DML을 표로 만들었다. DELETE, UPDATE시 참조 무결성 규칙 규칙 설 명 Restrict 부모테이블의 참조되는 값(Referenced Value)에 대해 delete 나 update 를 허락하지 않는다 Set to Null 부모테이블의 참조되는 값(Referenced Value)에 delete 나 update 를 할 때 모든 자식테이블의 외래키값을 NULL 로 만든다. Set to Default 부모테이블의 참조되는 값(Referenced Value)에 delete 나 update 를 할 때 모든 자식테이블의 외래키값을 기본값으로 만든다. EMP TABLE(자식테이블) DEPT TABLE(부모테이블) EMPNO ENAME DEPTNO DEPTNO DNAME 7369 SMITH 20 10 ACCOUNTING 7499 ALLEN 20 20 RESERCH 7521 WARD 30 30 SALES 7566 JONES 20 40 OPERATIONS 7788 CLARK 10 참조키 외래키 INSERT 부모테이블의 DEPTNO 또는 NULL만입력 가능 UPDATE 부모테이블의 DEPTNO 또는 NULL로 변경 가능 DELETE DELETE CASCADE DEPTNO만 충돌나지 않으면 입력 가능 가능 가능 가능 삭제를 원하는 DEPTNO가 자식테이블에 없을 때 가능 변경을 원하는 DEPTNO가 자식테이블에 없을 때 가능
  • 12. Cascade 부모테이블의 참조되는 값(Referenced Value)에 delete 나 update 를 할 때 delete 될 때는 그 값을 가지는 자식레코드를 모두 삭제하고, update 인 경우 해당 값으로 모두 변경 함 No Action 부모테이블의 참조되는 값(Referenced Value)에 대해 delete 나 update 를 허락하지 않음 SQL> drop table t2; 테이블이 삭제되었습니다. SQL> drop table t1; 테이블이 삭제되었습니다. SQL> create table t1 ( id number primary key, name varchar2(20)); 테이블이 생성되었습니다. --id 컬럼에 외래키를 생성했으며 기본적으로 Restrict Mode이므로 자식데이터가 있는 레코드는 삭제 불가하다. SQL> create table t2 ( sale_date date, id number references t1(id), amount number ); 테이블이 생성되었습니다. SQL> insert into t1 values (1, '1길동'); 1 개의 행이 만들어졌습니다. SQL> insert into t1 values (2, '2길동'); 1 개의 행이 만들어졌습니다. SQL> insert into t2 values (sysdate, 1, 2000); 1 개의 행이 만들어졌습니다. SQL> insert into t2 values (sysdate, 2, 4000); 1 개의 행이 만들어졌습니다. SQL> commit;
  • 13. 커밋이 완료되었습니다. -- t1의 id 값을 부모로 하는 자식데이터 t1의 id가 있으므로 기본적으로 삭제 불가 SQL> delete from t1 where id=1; delete from t1 where id=1 * 1행에 오류: ORA-02292: 무결성 제약조건(SCOTT.SYS_C0011537)이 위배되었습니다- 자식 레코드가 발견되었습니다 SQL> drop table t2; 테이블이 삭제되었습니다. --부모테이블의 값이 삭제될 때 자식테이블의 해당 값을 NULL로 바꾸기 위해 on delete set null을 사용했다. SQL> create table t2 ( sale_date date, id number references t1(id) on delete set null, amount number ); 테이블이 생성되었습니다. SQL> insert into t2 values (sysdate, 1, 2000); SQL>insert into t2 values (sysdate, 2, 4000); SQL> commit; SQL> select * from t1; ID NAME ---------- -------------------- 1 1길동 2 2길동 SQL> select * from t2; SALE_DAT ID AMOUNT -------- ---------- ---------- 14/09/10 1 2000 14/09/10 2 4000 SQL> delete from t1 where id=1;
  • 14. 1 행이 삭제되었습니다. SQL> select * from t2; SALE_DAT ID AMOUNT -------- ---------- ---------- 14/09/10 2000  id값이 NULL로 되었다. 14/09/10 2 4000 SQL> drop table t2; 테이블이 삭제되었습니다. --set default는 아직 구현되어 있지 않다. SQL> create table t2 ( sale_date date, id number references t1(id) on delete set default, amount number ); id number references t1(id) on delete set default, * 3행에 오류: ORA-03001: 현재에는 구현되어 있지 않은 기능입니다 --부모테이블 레코드삭제시 자식 테이블의 데이터를 삭제하는 옵션 on delete cascade 이용 SQL> create table t2 ( sale_date date, id number references t1(id) on delete cascade, amount number ); 테이블이 생성되었습니다. SQL> insert into t2 values (sysdate, 2, 4000); 1 개의 행이 만들어졌습니다. SQL> commit; 커밋이 완료되었습니다. SQL> select * from t1;
  • 15. ID NAME ---------- -------------------- 2 2길동 SQL> select * from t2; SALE_DAT ID AMOUNT -------- ---------- ---------- 14/09/10 2 4000 SQL> delete from t1 ; 1 행이 삭제되었습니다. SQL> select * from t2; 선택된 레코드가 없습니다. CHECK 제약조건 칼럼에 입력되는 값의 범위를 지정하거나 특정한값만 입력 받고자 할 때 사용하는 제약조건 ( 예 : myemp1 테이블의 성별 칼럼에는 ‘M’ or ‘F’ 만 입력 가능하도록 설정하고자 할 때) SQL> create table mystudent ( id number, grade number not null check (grade in (1,2,3,4))); 테이블이 생성되었습니다. SQL> insert into mystudent values (1,1); 1 개의 행이 만들어졌습니다. --7학년은 CHECK 제약조건으로 인해 입력되지 않는다. SQL> insert into mystudent values (1,7); insert into student values (1,7) * 1행에 오류: ORA-02290: 체크 제약조건(SCOTT.SYS_C0011542)이 위배되었습니다
  • 16. 무결성 제약 조건의 삭제 ALTER TABLE table_name DROP CONSTRAINT constraint_name [CASCADE] 만약 부모테이블의 PK를 삭제하는 경우 자식테이블에 외래키가 형성되어 있다면 오류가 발생한 다. 이 경우 자식테이블의 외래키를 먼저 삭제하거나 제약조건 삭제시 CASCADE 옵션으로 삭제가 가능하다. SQL> drop table t1; SQL> drop table t2; SQL> create table t1 ( id number primary key, name varchar2(20)); 테이블이 생성되었습니다. SQL> create table t2 ( sale_date date, id number references t1(id), amount number); 테이블이 생성되었습니다. SQL> alter table t1 drop primary key; alter table t1 drop primary key * 1행에 오류: ORA-02273: 고유/기본 키가 외부 키에 의해 참조되었습니다 --아래의 경우 t1의 PK뿐 아니라 t1 테이블에 생성된 외래키도 함께 삭제된다. SQL> alter table t1 drop primary key cascade; 테이블이 변경되었습니다. --이제 T11 T2 테이블에는 제약조건이 남아 있지 않다. SQL> select constraint_name, constraint_type from user_constraints
  • 17. where table_name = 'T2'; 선택된 레코드가 없습니다. SQL> select constraint_name, constraint_type from user_constraints where table_name = 'T1'; 선택된 레코드가 없습니다. SQL> create table t1 ( id number constraint pk_t1 primary key, name varchar2(20)); 테이블이 생성되었습니다. --drop constraint 구문으로 제약조건 삭제 SQL> alter table t1 drop constraints pk_t1; 테이블이 변경되었습니다. 무결성 제약조건의 활성화, 비활성화 가끔은 대량의 데이터를 입력하는 경우 제약조건 검사로 인해 시간이 오래 걸리거나 일부 데이 터 오류로 인해 무결성 제약조건을 비활성화 해야 될 경우가 있다. 이러한 경우 제약조건을 비활 성화 한 후 다시 활성화 하면 된다. [기본 형식] ALTER TABLE table_name ENABLE[NOVALIDATE] CONSTRAINT constraint_name ALTER TABLE table_name DISABLE CONSTRAINT constraint_name SQL> drop table t2; SQL> drop table t1; SQL> create table t1 ( id number constraint pk_t1 primary key, name varchar2(20)); 테이블이 생성되었습니다. SQL> alter table t1 disable constraint pk_t1 ; 테이블이 변경되었습니다. SQL> alter table t1 enable constraint pk_t1 ; 테이블이 변경되었습니다.
  • 18. 무결성 제약조건 조회 USER_CONSTRAINTS 또는 USER_CONS_COLUMNS를 이용하여 테이블에 생성된 제약조건을 검사 또는 제약조건이 생성된 칼럼을 조회 할 수 있다. --EMP테이블과 T1 테이블에 생성된 제약조건과 그 상태를 조회하시오. SQL> desc user_constraints; 이름 널? 유형 ----------------------------------------- -------- ----------------------- OWNER VARCHAR2(30) CONSTRAINT_NAME NOT NULL VARCHAR2(30) CONSTRAINT_TYPE VARCHAR2(1) TABLE_NAME NOT NULL VARCHAR2(30) SEARCH_CONDITION LONG R_OWNER VARCHAR2(30) R_CONSTRAINT_NAME VARCHAR2(30) DELETE_RULE VARCHAR2(9) STATUS VARCHAR2(8) SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME, STATUS from user_constraints where table_name in ('EMP','T1'); CONSTRAINT_NAME C TABLE_NAME STATUS ------------------------------ - ------------------------------ -------- PK_EMP P EMP ENABLED SYS_C0011531 R EMP ENABLED PK_T1 P T1 DISABLED --제약조건 PK_EMP이 적용된(EMP TABLE의 PK) 칼럼을 조회하시오. SQL> column constraint_name format a10 SQL> select CONSTRAINT_NAME,TABLE_NAME,COLUMN_NAME, POSITION from user_cons_columns where constraint_name = 'PK_EMP'; CONSTRAINT TABLE_NAME COLUMN_NAM POSITION ---------- ------------------------------ ---------- ----------