데이터 무결성
이라고 한다.① 기본 키 제약 조건
UNIQUE + NOT NULL
을 만족해야 한다. 또한, 테이블 대표하여 각 행을 유일하게 식별하는② 외래 키 제약 조건
③ 유일 키: 중복된 값을 허용하지 않는다. 유일한 값으로 존재해야 한다.(NULL 가능)
④ NOT NULL
⑤ CHECK : 범위나 조건 등 지정된 값만 허용한다.
DB의 데이터 무결성이 보장되는 상태에서, DML 작업을 완수하기 위한 기본 작업 단위이다.
일반적으로 DML의 실행과 실행에 대한 커밋/롤백 단계까지를 트랜잭션
이라고 부르지만,
실무에서는 데이터베이스에서 SELECT문으로 데이터를 조회하고,
DML을 실행하여 종료하는 과정까지를 트랜잭션이라고 부릅니다.
조회: SELECT -> 실행: DML(INSERT, UPDATE, DELETE) -> 종료: COMMIT -> 결과: 성공 또는 철회
동시성 제어 실패로 인한 오류 현상:
갱신 손실, 불일치 현상, 연쇄 복귀 등
종류 | 설명 | 비고 |
---|---|---|
심플 뷰(simple view) | 하나의 테이블에서 데이터를 생성한다. | CREATE VIEW 명령어로 생성 |
컴플렉스 뷰(complex view) | 여러 개의 테이블을 조인하여 데이터를 생성한다. | CREATE VIEW 명령어로 생성한다. |
인라인 뷰(inline view) | SELECT 문의 FROM 절에 기술한 SELECT문 | 1회용 뷰로 권한을 제어할 수 없다. |
테이블 생성 쿼리문 (복붙해서 사용)
-- 학생 테이블을 생성한다.
create table student(
stu_no char(9),
stu_name varchar2(12),
stu_dept varchar2(20),
stu_grade number(1),
stu_class char(1),
stu_gender char(1),
stu_height number(5,2),
stu_weight number(5,2),
constraint p_stu_no primary key(stu_no)
);
-- 학생(student) 테이블에 데이터를 삽입한다.
insert into student values(20153075, '옥한빛','기계',1,'C','M',177,80);
insert into student values(20153088, '이태연','기계',1,'C','F',162,50);
insert into student values(20143054, '유가인','기계',2,'C','F',154,47);
insert into student values(20152088, '조민우','전기전자',1,'C','M',188,90);
insert into student values(20142021, '심수정','전기전자', 2,'A','F', 168,45);
insert into student values(20132003, '박희철','전기전자',3,'B','M',null,63);
insert into student values(20151062, '김인중','컴퓨터정보',1,'B','M',166,67);
insert into student values(20141007, '진현무','컴퓨터정보',2,'A','M',174,64);
insert into student values(20131001, '김종헌','컴퓨터정보',3,'C','M',null,72);
insert into student values(20131025, '옥성우','컴퓨터정보',3,'A','F',172,63);
-- 과목 테이블을 생성한다.
create table subject(
sub_no char(3),
sub_name varchar2(40),
sub_prof varchar2(12),
sub_grade number(1),
sub_dept varchar2(40),
constraint p_sub_no primary key(sub_no)
);
-- 과목(subject) 테이블에 데이터를 삽입한다.
insert into subject values('111', '데이터베이스','이재영',2,'컴퓨터정보');
insert into subject values('110', '자동제어','정순정', 2, '전기전자');
insert into subject values('109', '자동화설계','박민영',3, '기계');
insert into subject values('101', '컴퓨터개론','강종영', 3, '컴퓨터정보');
insert into subject values('102', '기계공작법','김태영',1,'기계');
insert into subject values('103', '기초전자실','김유석', 1,'전기전자');
insert into subject values('104', '시스템분석설계','강석현', 3,'컴퓨터정보');
insert into subject values('105', '기계요소설계', '김명성', 1,'기계');
insert into subject values('106', '전자회로실험','최영민',3,'전기전자');
insert into subject values('107', 'CAD용실습','구봉규',2,'기계');
insert into subject values('108', '소프트웨어공학','권민성', 1,'컴퓨터정보');
-- 수강 테이블
create table enrol(
sub_no char(3),
stu_no char(9),
enr_grade number(3),
constraint p_course primary key(sub_no, stu_no)
);
-- 수강(enrol) 테이블에 다음과 같이 데이터를 입력한다.
insert into enrol values('101', '20131001',80);
insert into enrol values('104', '20131001',56);
insert into enrol values('106', '20132003',72);
insert into enrol values('103', '20152088',45);
insert into enrol values('101', '20131025',65);
insert into enrol values('104', '20131025',65);
insert into enrol values('108', '20151062',81);
insert into enrol values('107', '20143054',41);
insert into enrol values('102', '20153075',66);
insert into enrol values('105', '20153075',56);
insert into enrol values('102', '20153088',61);
insert into enrol values('105', '20153088',78);
-- 부서 테이블 생성
create table dept(
deptno number(2),
contraint pk_dept primary key,
dname varchar2(14),
loc varchar2(13)
);
-- 부서 데이터 삽입한다
insert into dept values (10, 'ACCOUNTING', 'NEW YORK');
insert into dept values (20, 'RESEARCH', 'DALLAS');
insert into dept values (30,'SALES', 'CHICAGO');
insert into dept values (40,'OPERATIONS', 'BOSTON');
-- 사원(emp) 테이블을 생성한다.
create table emp(
empno number(4)
constraint pk_emp primary key,
ename varchar2(10),
job varchar2(9),
mgr number(4),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(2)
);
alter table emp
add constraint fk_mgr
foreign key(mgr)
references emp(empno);
alter table emp
add constraint fk_deptno
foreign key(deptno)
references emp(empno);
--alter table emp drop constraint fk_deptno;
--사원(emp) 테이블에 데이터를 입력한다.
insert into emp values (7839,'KING', 'PRESIDENT',NULL, to_date ('17-11-1981', 'dd-mm-yyyy'),5000,NULL,10);
insert into emp values (7566, 'JONES', 'MANAGER', 7839, to_date ('2-4-1981', 'dd-mm-yyyy'), 2975,NULL,20);
insert into emp values (7698, 'BLAKE', 'MANAGER', 7839, to_date ('1-5-1981', 'dd-mm-yyyy'), 2850,NULL,30);
insert into emp values (7782,'CLARK', 'MANAGER', 7839, to_date ('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
insert into emp values (7788, 'SCOTT','ANALYST', 7566, to_date ('13-07-1987', 'dd-mm-yyyy'),3000,NULL, 20);
insert into emp values (7902, 'FORD', 'ANALYST',7566, to_date ('3-12-1981','dd-mm-yyyy'), 3000,NULL, 20);
insert into emp values (7499,'ALLEN', 'SALESMAN', 7698, to_date ('20-2-1981', 'dd-mm-yyyy'),1600,300,30);
insert into emp values (7521, 'WARD', 'SALESMAN', 7698, to_date ('22-2-1981', 'dd-mm-yyyy'), 1250,500,30);
insert into emp values (7654, 'MARTIN', 'SALESMAN',7698, to_date ('28-9-1981', 'dd-mm-yyyy'),1250,1400,30);
insert into emp values (7844, 'TURNER','SALESMAN', 7698, to_date ('8-9-1981', 'dd-mm-yyyy'), 1500,0,30);
insert into emp values (7900,'JAMES', 'CLERK', 7698, to_date ('3-12-1981', 'dd-mm-yyyy'), 950,NULL,30);
insert into emp values (7934, 'MILLER', 'CLERK',7782, to_date ('23-1-1982', 'dd-mm-yyyy'),1300,NULL,10);
insert into emp values (7369, 'SMITH','CLERK', 7902, to_date ('17-12-1980', 'dd-mm-yyyy'), 800,NULL,20);
insert into emp values (7876,'ADAMS', 'CLERK', 7788, to_date ('13-07-1987', 'dd-mm-yyyy'),1100,NULL, 20);
-- 급여 테이블 생성
create table salgrade(
grade number(7,2),
losal number(7,2), -- 최저급여
hisal number(7,2) -- 최고급여
);
-- 급여 테이블에 데이터 생성
insert into salgrade values(1, 700,1200);
insert into salgrade values(2, 1201,1400);
insert into salgrade values(3, 1401,2000);
insert into salgrade values(4, 2001,3000);
insert into salgrade values(5, 3001,9999);