13장 무결성 제약조건.

Slides:



Advertisements
Similar presentations
강사: 이종인 다우 교육원 전임강사 / 온디멘드 수석 컨설턴트 / FMG 수석 컨설턴트
Advertisements

SQL 언어 SQL.
데이터베이스 9주차 : 데이터베이스 설계 2교시 : 데이터베이스 설계(3)
Allow reverse scans allow reverse scnas. allow reverse scans allow reverse scnas.
Nested Queries CSED421: Database Systems Labs.
오라클 데이터베이스 성능 튜닝.
You YOungseok 데이터베이스 테이블 및 인덱스 You YOungseok.
12 프로젝트 실습.
데이터 모델링 방법론 2003년 03월.
PL/SQL.
실전 데이터모델링 & 데이터베이스 설계와 구축
질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL
관계 대수와 SQL.
오라클 데이터베이스 성능 튜닝.
DataBase 기본 교육 신입사원용 최지철.
Database & Internet Computing Laboratory 한 양 대 학 교
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
Chapter 5 SQL: 확장된 질의, 주장, 트리거, 뷰.
제 5 장 인덱스 생성 및 관리.
SQL*Plus - Oracle ISQL -
SELECT 문 사원 테이블의 모든 정보를 출력하는 예제 1. 비교 연산자 SELECT 문의 형태
4장. 관계 대수와 SQL SQL 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
SQL-99: 스키마 정의, 기본제약조건, 질의어 충북대학교 구조시스템공학과 시스템공학연구실
7장 조인.
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
SQL 개요 SQL 개요 - SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나
10장. 데이터베이스 보안과 권한 관리 데이터베이스 보안과 권한 관리
데이터베이스 담당교수 신정식 Chapter 4 SQL(1).
8장 서브 쿼리.
SQL SQL 불펌하지 마세요!!!!!!!! 불펌 금지.
데이터베이스 와 JDBC 1.데이터베이스와 데이터베이스 관리 시스템은? 2.데이터베이스 장점?
관계 데이터 모델과 제약조건 개념, 특성, 키, 무결성 제약조건.
11장. 데이터베이스 서버 구축과 운영.
오라클 데이터베이스 성능 튜닝.
kHS 데이터베이스 테이블 및 인덱스 kHS.
14장 뷰.
4.2 SQL 개요 SQL 개요 SQL은 IBM 연구소에서 1974년에 System R이라는 관계 DBMS 시제품을 연구할 때 관계 대수와 관계 해석을 기반으로, 집단 함수, 그룹화, 갱신 연산 등을 추가하여 개발된 언어 1986년에 ANSI(미국 표준 기구)에서 SQL.
2장. 관계 데이터 모델과 제약조건 관계 데이터 모델은 지금까지 제안된 데이터 모델들 중에서 가장 개념이 단순한 데이터 모델의 하나 IBM 연구소에 근무하던 E.F. Codd가 1970년에 관계 데이터 모델을 제안함 관계 데이터 모델을 최초로 구현한 가장 중요한 관계 DBMS.
단일 테이블 조회를 위한 SELECT 문을 이해한다. 열 제약조건과 행 제약조건을 이해한다. 결과 집합 변경 방법을 이해한다.
14 뷰(View) 뷰의 개념 뷰 관리.
뷰와 저장 프로시저 뷰의 개념을 이해한다. 뷰의 정의와 관리 방법을 이해한다. 뷰를 사용함으로써 생기는 장점을 알아본다.
SELECT empno, ename, job, sal, dname FROM emp, dept
16장. 테이블의 변경 새로운 행 삽입 테이블에서 테이블로 행을 복사 행 값의 변경 테이블에서 행 삭제
3장 SQL*Plus 명령어.
9장 테이블 생성 및 변경, 삭제하기(DDL).
SQL.
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
Chapter 3: Introduction to SQL
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
고급 T-SQL.
CHAPTER 06. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
정보처리기사 8조 신원철 양진원 유민호 이기목 김다연 윤현경 임수빈 조현진.
SQL Query in the SSMS : DB, Table
JSP 게시판 구현.
View(뷰) 1 가상 테이블(Virtual Relation)
2장. 관계 데이터 모델과 제약조건 관계 데이터 모델은 지금까지 제안된 데이터 모델들 중에서 가장 개념이 단순한 데이터 모델의 하나 IBM 연구소에 근무하던 E.F. Codd가 1970년에 관계 데이터 모델을 제안함 관계 데이터 모델을 최초로 구현한 가장 중요한 관계 DBMS.
오라클 쿼리 문제 EMP (사원 테이블) DEPT (부서 테이블) 컬럼명 설명 EMPNO 사원번호 ENAME 사원명 JOB
기본적인 SELECT문 작성.
8장 테이블의 생성 및 변경 정인기.
                              데이터베이스 설계 및 실습 #4 - loadcompany 만들기 한국외국어대학교 DaPS 연구실                              
12 데이터 무결성 제약조건 데이터 무결성 제약조건의 개념 데이터 무결성 제약조건의 종류 무결성 제약조건의 생성 방법.
컬럼 대칭키 암호화 작업(SQL 2008) ① 마스터 키 생성 ② 인증서 생성 초기 한번만 실행 ③ 대칭키 생성
MS-SQL7.0 Implementation 강의 노트
06. SQL 명지대학교 ICT 융합대학 김정호.
테이블 관리 테이블 생성,수정,삭제 데이터 입력 수정, 삭제 2010학년도 2학기.
Stored program 장종원
Data Base Mysql.
제 5 장 MariaDB인덱스 생성 및 관리.
GB ridge 웹 모바일및 빅데이터 응용과정 3주차: 데이터베이스 프로그래밍 [경기도형 대학생 취업브리지 사업]
Presentation transcript:

13장 무결성 제약조건

목 차 무결성 제약조건의 개념 기본키 제약조건 외래키 제약조건과 참조 무결성 unique 제약조건 Check 제약조건 컬럼레벨 제약조건 지정 제약조건 확인 제약조건명으로 제약조건 지정 테이블레벨 제약조건 지정 제약조건 변경 외래키 제약조건과 참조 무결성 unique 제약조건 Check 제약조건 Not null 제약조건 제약조건의 비활성화

무결성 제약 조건 데이터 무결성 기본키는 null 값을 가지지 않는다. 부서번호(deptno)는 유일한 값을 가져야 하고 null 값은 안됨.

무결성 제약 조건 무결성 제약 조건 역할 NOT NULL NULL을 허용하지 않는다 UNIQUE 해당 컬럼 값은 항상 유일해야 한다. PRIMARY KEY - 값이 반드시 존재해야 하고 유일해야 한다 - NOT NULL 과 UNIQUE 조건을 결합 FOREIGN KEY 참조되는 테이블의 PK컬럼에 하나 이상과 일치또는 null 값을 가지는 조건 CHECK 저장 가능한 데이터 값의 범위나 조건 지정

접속 SQL>conn scott_y/tiger 기본 키 제약 조건/컬럼 레벨 정의 방법 컬럼 레벨 정의 방법 접속 SQL>conn scott_y/tiger SQL>DROP TABLE dept01; SQL>CREATE TABLE dept01        (deptno   NUMBER(2) ,           dname   VARCHAR2(15),         loc      VARCHAR2(15)); SQL> INSERT INTO dept01 VALUES(1, ’A’, ’AA’); VALUES(1, ’B’, ’BB’); VALUES(null, ’C’, ’CC’); SQL> select * from dept01; Deptno 에 같은 번호 추가 가능 Deptno 에 null 값 추가 가능

기본 키 제약 조건/컬럼 레벨 정의 방법 컬럼 레벨 정의 방법 SQL>CREATE TABLE dept02        (deptno   NUMBER(2)   PRIMARY KEY,         dname   VARCHAR2(15),         loc      VARCHAR2(15)); SQL> INSERT INTO dept02 VALUES(1, ’A’, ’AA’); VALUES(1, ’B’, ’BB’); VALUES(null, ’C’, ’CC’); SQL> select * from dept02; 컬럼명 데이터형 제약조건 PK(기본키) 지정 컬럼에 중복 값 오류 PK(기본키) 지정 컬럼에 null 값 오류 PRIMARY KEY = NOT NULL + UNIQUE

user_constraints 데이터 딕셔너리 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약 조건 확인 user_constraints 데이터 딕셔너리 owner 제약 조건을 소유한 사용자명 constraint_name 제약 조건 명 constraint_type 제약 조건 유형 - P, R, U, C 4가지 constraint_type 의미 P PRIMARY KEY R FOREIGN KEY U UNIQUE C CHECK, NOT NULL

제약 조건 확인 SQL> DESC dept02; SQL> DESC user_constraints; 사용자명 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약 조건 확인 SQL> DESC dept02; SQL> DESC user_constraints;        사용자명 제약조건명 제약조건 타입 테이블명 Check 검색조건 외래키의 경우 참조하는 PK

user_constraints 데이터 딕셔너리 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약 조건 확인 user_constraints 데이터 딕셔너리 SQL>SELECT constraint_name, constraint_type, table_name FROM user_constraints; SYS_CXXXXXX : 제약조건명을 지정하지 않았을 경우 오라클이 자동으로 지정 CREATE TABLE dept02 (deptno   NUMBER(2)   PRIMARY KEY);

제약 조건명 지정하기 컬럼 레벨 정의 방법 조건명 SYS_CXXXXX 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약 조건명 지정하기 컬럼 레벨 정의 방법 조건명 SYS_CXXXXX 컬럼명 데이터형 CONSTRAINT 제약조건명 제약조건형태 제약조건명 : dept03_deptno_pk [테이블명]_[컬럼명]_[제약조건유형] SQL>CREATE TABLE dept03 ( deptno   NUMBER(2)      CONSTRAINT dept03_deptno_pk  PRIMARY KEY dname   VARCHAR2(15) ); SQL>SELECT table_name, constraint_name FROM user_constraints WHERE table_name=‘DEPT03’;

제약 조건명 명명 규칙 [테이블명]_[컬럼명]_[제약조건유형] CREATE TABLE dept03 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약 조건명 명명 규칙 [테이블명]_[컬럼명]_[제약조건유형] CREATE TABLE dept03 ( deptno   NUMBER(2)      CONSTRAINT dept03_deptno_pk  PRIMARY KEY ); [테이블명]_[컬럼명]_[제약조건유형]

테이블 레벨 정의 방법 CREATE TABLE table_name ( column_name1 datatype1,   . . . column_nameN  datatypeN, CONSTRAINT constraint_name constraint_type ( column_name ) ) ; 마지막 컬럼 정의 다음에 컴마(,) 하고 테이블레벨 정의 어느 컬럼의 제약조건인지 괄호안에 컬럼명 명시

테이블 레벨 정의 방법 –cont’d SQL>CREATE TABLE dept04 (deptno NUMBER(2),         dname   VARCHAR2(15),         loc      VARCHAR2(15),      CONSTRAINT dept04_deptno_pk  PRIMARY KEY ( deptno ));

컬럼 레벨과 테이블 레벨 비교 조건명 기술하지 않은 경우 컬럼 레벨 deptno NUMBER(2) PRIMARY KEY deptno NUMBER(2), PRIMARY KEY(deptno) 조건명 기술하는 경우 컬럼 레벨 deptno NUMBER(2) CONSTRAINT dept_deptno_pk PRIMARY KEY 테이블레벨 deptno NUMBER(2), CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno)

기본키를 복합키로 지정하기 SQL>CREATE TABLE dept06 ( deptno NUMBER(2),     dname   VARCHAR2(15),     loc      VARCHAR2(15),    CONSTRAINT dept06_deptno_pk PRIMARY KEY(deptno, dname)); SQL> DESC user_cons_columns SQL> col column_name format a20 SQL> col constraint_name format a20 SQL> SELECT table_name, column_name, constraint_name FROM user_cons_columns; 제약조건뷰의 구조 검색

제약 조건 변경하기 테이블에 새로운 제약조건 추가 ALTER TABLE table_name 테이블에서 제약조건 삭제 ADD CONSTRAINT constraint_name constraint_type (column_name); 테이블에서 제약조건 삭제 ALTER TABLE  table_name DROP CONSTRAINT constraint_name;

제약 조건 변경하기 SQL>CREATE TABLE dept05 ( deptno NUMBER(2), SQL> ALTER TABLE  dept05 ADD CONSTRAINT dept05_deptno_pk PRIMARY KEY(deptno)); SQL> SELECT constraint_name, table_name FROM user_constraints; SQL>CREATE TABLE dept05   ( deptno   NUMBER(2),       dname   VARCHAR2(15),     loc      VARCHAR2(15));    DROP CONSTRAINT dept05_deptno_pk ; > Drop table dept05; PK 제약조건 추가 PK 제약조건 삭제

부서테이블에 있는 부서만이 사원테이블에 존재해야함 외래 키 제약 조건/참조 무결성 해당 회사에는 4개의 부서가 존재(부서테이블) 부서테이블에 있는 부서만이 사원테이블에 존재해야함 참조의 무결성 외래키 기본키 사원(emp) 테이블이 부서(dept) 테이블을 참조하는 종속관계가 설정

부모, 자식 테이블/기본키, 외래키 주종 관계에 있는 테이블에 대해서 부모 테이블의 기본키(Primary Key)가 자식 테이블의 외래 키(Foreign Key)가 된다. 기본키(Primary Key)와 외래 키(Foreign Key)설정에 의해서 주종관계가 성립되며 참조 무결성이 성립된다.

기본키/외래키 부서(dept) 테이블 사원(emp) 테이블 소 속 사원 테이블이 부서 테이블을 참조하는 종속관계 성립 사원은 회사 내에 존재하는 부서에 소속되어 있어야 한다. 부서(dept) 테이블 사원(emp) 테이블 소 속 부모 부서번호 : 기본키 자식 부서번호 : 외래키 사원 테이블이 부서 테이블을 참조하는 종속관계 성립 부서 테이블이 부모, 사원 테이블이 자식 테이블 소속 관계에서 참조 무결성은 부서번호(deptno) 컬럼에 의해서 설정 부서 테이블의 부서번호 (deptno) 컬럼은 기본키(부모키), 사원 테이블의 부서번호 (deptno) 컬럼은 외래키

참조 무결성 제약 조건 (DEPTNO) 컬럼이 부모 키가 되려면 기본 키/ UNIQUE 제약 조건이 지정되어 있어야 함 사원 테이블의 부서 번호 컬럼은 부서 테이블의 부서 번호 컬럼 값을 참조 없는 부서 번호가 입력되면 에러

참조 무결성 제약 조건 사원 테이블의 부서 번호는 부서 테이블의 부서 번호 중의 하나이거나 NULL만 가능 참조 무결성 제약 조건 : FOREIGN KEY

참조 무결성 제약 조건 - cont’d SQL> SELECT * FROM dept; SQL> INSERT INTO emp(empid, empname, deptid) VALUES(8000, ‘SYJ’, 50); SQL> SELECT table_name, constraint_type, constraint_name, r_ constraint_name FROM user_constraints WHERE table_name IN (‘DEPT’, ‘EMP’); 오류 : 무결성 제약조건위배 FK인 경우 참조하는 제약조건명(PK)

오라클에서 제공하는 테이블의 제약 조건 FK인 경우 참조하는 테이블의 PK

참조 무결성 제약 조건 지정하기 1. deptno 컬럼을 기본 키로 하는 부서테이블 먼저 생성 CREATE TABLE dept07 ( deptno   NUMBER(2), dname   VARCHAR2(15), loc      VARCHAR2(15), CONSTRAINT dept07_deptno_pk PRIMARY KEY(deptno)); (부모) 2. dept07 (deptno) 컬럼을 참조하는 외래 키를 갖는 사원테이블 생성 (자식) CREATE TABLE emp07 ( empno   NUMBER(4) PRIMARY KEY, deptno  NUMBER(2) REFERENCES dept07 (deptno));

참조 무결성 제약 조건 - cont’d SQL>CREATE TABLE dept07 ( deptno NUMBER(2),     dname   VARCHAR2(15),     loc      VARCHAR2(15),    CONSTRAINT dept07_deptno_pk PRIMARY KEY(deptno)); SQL>CREATE TABLE emp07   (empno   NUMBER(4) PRIMARY KEY,       ename   VARCHAR2(15),     deptno NUMBER(2)     REFERENCES dept07(deptno)); SQL> SELECT table_name, constraint_type, constraint_name, r_ constraint_name FROM user_constraints WHERE table_name IN (‘DEPT07’, ‘EMP07’); 컬럼레벨 외래키 지정

제약 조건명 지정하기 컬럼 레벨 정의 방법 조건명 SYS_XXXXX CREATE TABLE emp07 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약 조건명 지정하기 컬럼 레벨 정의 방법 조건명 SYS_XXXXX CREATE TABLE emp07 ( empno   NUMBER(4) CONSTRAINT  emp07_empno_pk PRIMARY KEY, ename   VARCHAR2(15), deptno   NUMBER(2)    CONSTRAINT emp07_deptno_fk REFERENCES dept07 (deptno));

참조 무결성 제약 조건 - cont’d SQL>DROP TABLE emp07 ; SQL>CREATE TABLE emp07   ( empno   NUMBER(4) constraint emp07_empno_pk PRIMARY KEY,       ename   VARCHAR2(15),     deptno NUMBER(2)     constraint emp07_deptno_fk REFERENCES dept07(deptno)); SQL> SELECT table_name, constraint_type, constraint_name, r_constraint_name FROM user_constraints WHERE table_name IN (‘DEPT07’, ‘EMP07’); 컬럼레벨 기본키 지정 컬럼레벨 외래키 지정

제약 조건명 지정하기 테이블 레벨 정의 방법 CREATE TABLE emp07 ( empno NUMBER(4), 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약 조건명 지정하기 테이블 레벨 정의 방법 CREATE TABLE emp07 ( empno   NUMBER(4), ename   VARCHAR2(15), deptno  NUMBER(2), CONSTRAINT emp07_empno_pk PRIMARY KEY(empno), CONSTRAINT emp07_deptno_fk FOREIGN KEY(deptno) REFERENCES dept07(deptno));

참조 무결성 제약 조건 - cont’d SQL>DROP TABLE emp07 ; SQL>CREATE TABLE emp07   (empno   NUMBER(4),       ename   VARCHAR2(15),     deptno NUMBER(2),     constraint emp07_empno_pk PRIMARY KEY(empno), constraint emp07_deptno_fk FOREIGN KEY(deptno) REFERENCES dept07(deptno)); SQL> SELECT table_name, constraint_type, constraint_name, r_constraint_name FROM user_constraints WHERE table_name IN (‘DEPT07’, ‘EMP07’); 테이블레벨 기본키, 외래키 지정

Unique 제약조건 UNIQUE : 컬럼의 모든 값이 유일 SQL> CREATE TABLE dept08 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. Unique 제약조건 UNIQUE : 컬럼의 모든 값이 유일 SQL> CREATE TABLE dept08 ( deptno  NUMBER  PRIMARY KEY,   dname   VARCHAR2(15)  UNIQUE,   loc     VARCHAR2(15)); SQL> SELECT table_name, constraint_type, constraint_name, FROM user_constraints WHERE table_name = ‘DEPT08’;

Unique 제약조건명 지정하기 SQL> DROP TABLE dept08; 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. Unique 제약조건명 지정하기 SQL> DROP TABLE dept08; SQL> CREATE TABLE dept08 (deptno NUMBER CONSTRAINT dept08_deptno_pk PRIMARY KEY,   dname VARCHAR2(15) CONSTRAINT dept08_dname_uq UNIQUE,   loc VARCHAR2(15),     CONSTRAINT dept08_loc_uq UNIQUE(loc)); SQL> SELECT table_name, constraint_type, constraint_name, FROM user_constraints WHERE table_name = ‘DEPT08’;

기존 테이블에 Unique 지정하기 SQL>ALTER TABLE dept07 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 기존 테이블에 Unique 지정하기 SQL>ALTER TABLE dept07 ADD CONSTRAINT dept07_dname_uq UNIQUE(dname); SQL> SELECT table_name, constraint_type, constraint_name, FROM user_constraints WHERE table_name = ‘DEPT07’; SQL>INSERT INTO dept07 VALUES (1, ‘A’, ‘AA’); VALUES (2, ‘A’, ‘AA’); VALUES (2, NULL, ‘AA’); VALUES (3, NULL, ‘AA’); SQL> SELECT * FROM dept07; PK 만 지정한 상태 Unique 으로 지정된 부서명에 동일 이름 입력시 오류 NULL 값은 상관없음

CHECK 제약조건 SQL>CREATE TABLE emp08 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. CHECK 제약조건 입력 데이터가 조건에 맞는지 검사하여 입력되도록 함. SQL>CREATE TABLE emp08 (empno  number(4) constraint  emp08_empno_pk primary key, ename   VARCHAR2(15), sal     NUMBER(7, 2) Constraint emp08_sal_ck CHECK(sal BETWEEN 500 AND 5000), deptno  NUMBER(2) CONSTRAINT emp08_deptno_fk REFERENCES dept08 (deptno));  SQL> SELECT table_name, constraint_type, constraint_name, search_condition FROM user_constraints WHERE table_name = ‘EMP08’;   

NOT NULL 제약조건 SQL> CREATE TABLE dept09 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. NOT NULL 제약조건 컬럼에 NULL 값을 허용하지 않음 SQL> CREATE TABLE dept09 (deptno   number(4) constraint  dept09_deptno_pk PRIMARY KEY, dname  VARCHAR2(15)   constraint  dept09_dname_nn NOT NULL, loc     VARCHAR2(15)); SQL> SELECT table_name, constraint_type, constraint_name, search_condition FROM user_constraints WHERE table_name = ‘DEPT09’; SQL>ALTER TABLE dept09 MODIFY loc CONSTRAINT dept09_loc_nn NOT NULL; Not NULL은 alter table ~ modify 구문으로 추가 됨

NOT NULL 제약조건 SQL>ALTER TABLE dept09 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. NOT NULL 제약조건 Not NULL제약조건 추가는 modify 사용 (add constraint 가 아님) SQL>ALTER TABLE dept09 MODIFY loc CONSTRAINT dept09_loc_nn NOT NULL; SQL> SELECT table_name, constraint_type, constraint_name, search_condition FROM user_constraints WHERE table_name = ‘DEPT09’; SQL>ALTER TABLE dept09 DROP CONSTRAINT dept09_loc_nn; SQL>ALTER TABLE dept09 ADD CONSTRAINT dept09_loc_nn NOT NULL; 오류 : Not null 은 add 로 추가못함

제약조건의 비활성화 자식테이블이 부모테이블을 참조하는 경우 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약조건의 비활성화 자식테이블이 부모테이블을 참조하는 경우 참조되는(부모)컬럼의 삭제, 테이블 제거, 기본키 제약조건 제거는 불가 사원테이블이 참조시 부서번호 컬럼 삭제 불가 DROP TABLE DEPT 불가 DROP CONSTRAINT Dept_deptno_pk 불가 제약 조건을 삭제할 때 CASCADE 옵션을 지정하면 제거됨 user_constraints 데이터 딕셔너리에서 부모키와 외래키 삭제 확인

제약조건의 비활성화 SQL> CREATE TABLE dept10 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약조건의 비활성화 부모테이블 생성 SQL> CREATE TABLE dept10 (deptno   number(4) constraint  dept10_deptno_pk PRIMARY KEY, dname  VARCHAR2(15), loc     VARCHAR2(15)); SQL>CREATE TABLE emp10 (empno  number(4), ename   VARCHAR2(15), deptno    NUMBER(4), constraint  emp10_empno_pk primary key(empno), constraint emp10_deptno_fk FOREIGN KEY(deptno) REFERENCES dept10 (deptno));  자식테이블 생성

제약조건의 비활성화 SQL>INSERT INTO dept10 VALUES (1, ‘A’, ‘AA’); VALUES (2, ‘B’, ‘BB’); SQL>INSERT INTO emp10 VALUES (1111, ‘EA’, 1); VALUES (2222, ‘EB’, 2); VALUES (3333, ‘EC’, 3); SQL>DELETE dept10 WHERE deptno=1; SQL> SELECT table_name, constraint_type, constraint_name, search_condition FROM user_constraints WHERE table_name IN( ‘DEPT10’, ‘EMP10’); SQL> DROP TABLE dept10; 무결성 제약조건 위배-부모키 없음 무결성 제약조건 위배-자식레코드 발견 오류 : 무결성 제약조건 위배

Cascade 옵션 : 참조하는 제약조건이 있으면 그것과 함께 무조건 삭제 제약조건의 비활성화 SQL> ALTER TABLE dept10 DROP CONSTRAINT dept10_deptno_pk; 참조하는 제약조건을 무조건 삭제함 DROP CONSTRAINT dept10_deptno_pk CASCADE; SQL> SELECT table_name, constraint_type, constraint_name, FROM user_constraints WHERE table_name IN ( ‘DEPT10’, ‘EMP10’); SQL>DELETE dept10 WHERE deptno=1; SQL>SELECT * FROM dept10; SQL>SELECT * FROM emp10; 오류 : 외부키에 의해 참조됨 Cascade 옵션 : 참조하는 제약조건이 있으면 그것과 함께 무조건 삭제 외래키가 삭제되었으므로 삭제됨

제약조건의 비활성화 제약 조건을 삭제하지 않고 활성화하지 않도록 DISABLE 사용. 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약조건의 비활성화 제약 조건을 삭제하지 않고 활성화하지 않도록 DISABLE 사용. ALTER TABLE emp10 DISABLE CONSTRAINT emp10_empno_pk; 비 활성화된 제약 조건을 다시 살리려면 ENABLE 사용. ALTER TABLE emp10 ENABLE CONSTRAINT emp10_empno_pk;

Emp10(deptno) FK 에 의해 참조되더라도 그 것과 함께 무조건 비 활성화 자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약조건의 비활성화 외래 키로 참조하는 부모키의 제약 비활성화하려면 CASCADE 옵션이 사용됨. 다른테이블에서 참조되는 기본키를 비활성화하려면 disable~~~~ cascade를 꼭 사용해야 함 ALTER TABLE dept10 DISABLE CONSTRAINT dept10_deptno_pk CASCADE; Emp10(deptno) FK 에 의해 참조되더라도 그 것과 함께 무조건 비 활성화