2021-04-25

8893 단어 sql
제5 장 예제
실체 완전 성
관계 모델 의 실체 완전 성 은 CREATE TABLE 에서 PRIMARY KEY 로 정의 합 니 다.단일 속성 으로 구 성 된 코드 에 대해 두 가지 설명 방법 이 있 는데 하 나 는 열 급 제약 조건 으로 정의 되 고 다른 하 나 는 표 급 제약 조건 으로 정의 된다.여러 속성 으로 구 성 된 코드 는 하나의 설명 방법 만 있 는데 그것 이 바로 표 급 제약 조건 으로 정의 된다.
예제 5.1 Student 표 의 Sno 속성 을 코드 로 정의 합 니 다.
 create table Student
 (Sno CHAR(9) PRIMARY KEY,
 	Sname CHAR(20) NOT NULL,
 	Ssex CHAR(2),
 	Sage SMALLINT,
 	Sdept CHAR(20)
 	);
  
 	CREATE TABLE Student
(Sno CHAR(9),
Sname CHAR(20) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20),PRIMARY KEY (Sno));

예 5.2 SC 표 의 Sno, Cno 속성 그룹 을 코드 로 정의 합 니 다.
CREATE TABLE SC
( Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY (Sno,Cno)); --         

실체 완전 성 검사 와 위약 처리 (1) 메 인 코드 값 이 유일 한 지, 유일 하지 않 으 면 삽입 이나 수정 을 거부 합 니 다.(2) 메 인 코드 의 각 속성 이 비어 있 는 지 확인 하고 하나 가 비어 있 으 면 삽입 이나 수정 을 거부 합 니 다.
완전 성 관계 모델 의 참조 완전 성 을 참조 하여 CREATE TABLE 에서 FOREIGN KEY 구문 으로 어떤 것 을 외부 코드 로 정의 하 는 지, REFERENCES 구문 으로 이러한 외부 코드 가 어떤 표 의 메 인 코드 를 참조 하 는 지 알려 줍 니 다.예 를 들 어 관계 SC 의 한 원 조 는 한 학생 이 선택 과목 의 성적 을 나타 내 는데 (Sno, Cno) 는 메 인 코드 이다.Sno, Cno 는 각각 Student 표를 인용 한 메 인 코드 와 Course 표 의 메 인 코드 를 참조 했다.
예 5.3 SC 의 참조 완전 성 을 정의 합 니 다.
CREATE TABLE SC
(Sno CHAR(9)NOT NULL,Cno CHAR(4) NOT NULL,Grade SMALLINT,
PRIMARY KEY (Sno, Cno),--          
FOREIGN KEY (Sno) REFERENCES Student(Sno),--          
FOREIGN KEY (Cno)REFERENCES Course(Cno));--          

일반적으로 참조 표 와 참조 표 의 조작 이 참조 완전 성 을 위반 할 때 시스템 은 기본 정책 을 선택 하여 실행 을 거부 합 니 다.시스템 이 다른 정책 을 사용 하려 면 참조 표를 만 들 때 명시 적 으로 설명해 야 합 니 다.
예 5.4 현식 설명 은 완전 성의 위약 처리 예 시 를 참조한다.
create table SC
(Sno char(9) not null,
Cno char(4) not null,
Grade smallint,
primary key(Sno,Cno),
foreign key(Sno) references Studen(Sno)
on delete cascade --    SC3       
on update cascade --    SC3       
foreign key (Cno) references Course(Cno)
on delete on action --   course          SC         
on update cascade --   course   cno ,    SC       
);
   DELETE   UPDATE        。  , 5.4        Course     ,      (SC )    ,           ;               。
                            ,         、       ,               。

사용자 정의 완전 성
1. 속성 상 제약 조건 의 정 의 는 CREATE TABLE 에서 속성 을 정의 하 는 동시에 응용 요구 에 따라 속성 상의 제약, 즉 속성 값 제약 을 정의 할 수 있 습 니 다. 이 는 열 값 이 비어 있 지 않 고 열 값 이 유일 하 며 열 값 이 하나의 조건 표현 식 에 만족 하 는 지 확인 하 는 것 을 포함 합 니 다.(1) 빈 값 을 가 져 올 수 없습니다. 5.5 는 SC 를 정의 할 때 Sno, Cno, Grade 속성 에서 빈 값 을 가 져 올 수 없습니다.
CREATE TABLE SC
Sno CHAR(9) NOT NULL,Cno CHAR(4) NOT NULL,Grade SMALLINT NOT NULL,
PRIMARY KEY (Sno, Cno),
…
);

(2) 열 값 의 유일한 예 5.6 은 부서 표 DEPT 를 만 들 고 부서 명 Dname 열 에서 유일 하 게 값 을 추출 하도록 요구 하 며 부서 번호 Deptno 열 주 코드 를 요구한다.
create table Dept
(Deptno numeric(2)
 Dname char(9) unique not null,
 --Dname            
 location char(10),
 primary lkey(Deptno)
 );

(3) 해당 요건 에 해당 하 는 5.7 Student 표 의 Ssex 는 CHECK 구문 으로 열 값 을 지정 합 니 다.
create char(9)primary key
Sname char(8) not null,
Ssex char(2) check(Ssex in(' ',' ')),
Sage smallint,
Sdept char(20)
);

예 5.8 SC 표 의 Grade 값 은 0 과 100 사이 여야 합 니 다.
create table SC
(Sno char(9),
Cno char(4),
grade smallint check (Grade>=0 and Grade<=100),
--Grade      0-100
primary key (Sno,Cno),
foreign key (Sno) references Student(Sno),
foreign key(Cno)references Course(Cno)
);

2. 속성 상 제약 조건 의 검사 와 위약 처 리 는 표 에 땀 을 닦 거나 속성 값 을 수정 할 때 관계 데이터 베이스 관리 시스템 은 속성 상의 제약 조건 이 만족 하 는 지 확인 하고 만족 하지 않 으 면 실행 을 거부 합 니 다.
모듈 의 제약 조건
예 5.9 학생 의 성별 이 남자 일 때 그 이름 은 Ms 로 시작 할 수 없다.표 에 원 그룹 을 삽입 하거나 속성 값 을 수정 할 때 관계 데이터 베이스 관리 시스템 은 속성 상의 제약 조건 이 만족 하 는 지 확인 하고 만족 하지 않 으 면 작업 이 거부 된다.속성 상 제약 조건 의 정의 와 유사 하 며, CREATE TABLE 구문 에 서 는 모듈 의 제약 조건, 즉 모듈 급 의 제한 을 CHECK 구문 으로 정의 할 수 있 습 니 다.속성 값 제한 에 비해 원 그룹 급 의 제한 은 서로 다른 속성 간 의 수치 에 대한 상호 제약 조건 을 설정 할 수 있 습 니 다.
create table Student4
( Sno char(9),
  Sname char(8) not null,
  Ssex char(2),
  Sage smallint,
  Sdept char(20),
  primary key(Sno),
  check (Ssex=' 'or Sname not like 'Ms.%')
  --      Sname   Ssex              
  );

표 에 원 그룹 을 삽입 하거나 속성 값 을 수정 할 때 관계 데이터 베이스 관리 시스템 은 원 그룹의 제약 조건 이 만족 하 는 지 확인 하고 만족 하지 않 으 면 실행 을 거부 합 니 다.
완전 성 제약 조건 명명 자구
CONSTRAINT 완전 성 제약 조건 은 NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK 구문 등 을 포함한다.
예 5.10 학생 등록 표 를 작성 한 학생 은 학 번 이 90000 - 99999 사이 이 고 이름 은 빈 값 을 찾 을 수 없 으 며 연령 이 30 보다 적 으 며 성별 은 '남' 또는 '여' 만 있 을 수 있다.
create table Student
( Sno numeric(6)
constraint C1 check(Sno between 90000 and 99999),
Sname char(20)
constraint C2 not null,
Sage numeric C3 check (Sage<30),
Ssex char(2)
constraint C4 check(Ssex in(' ',' ')),
constraint StudentKey primary e=key(Sno)
);

Student 표 에 5 개의 제약 조건 을 만 들 었 는데 메 인 코드 제약 (Student Key 라 고 명명) 과 C1, C2, C3, C4 네 개의 열 급 제약 을 포함한다.
예 5.11 교사 표 TEACHER 를 작성 하여 각 교사 의 급여 가 3000 위안 보다 낮 지 않도록 요구한다.지급 해 야 할 임금 은 급여 열 Sal 과 공제 항 Deduct 의 합 이다.
create table Teacher
( Eno numeric(4) primary key  --       
 Ename char(10)
 Job char(8)
 Sal numeric(7,2),
 Deduct numeric(7,2),
 Deptno numeric(2),
 constraint Teacherfkey foreign key(Deptno)
 references Dept(Deptno),
 constraint C1 check(Sal+Deduct>=3000)
 );

수정 표 의 완전 성 제한 예 5.12 제거 예 5.10 Student 표 에서 성별 에 대한 제한.
alter table Student
drop constraint C4;

예 5.13 표 Student 의 제약 조건 을 수정 하여 학 번 을 900000 ~ 999999 사이 로 바 꾸 고 나 이 는 30 미 만 에서 40 미 만 으로 바 꾸 면 원래 의 제약 조건 을 먼저 삭제 한 다음 에 새로운 제약 조건 을 추가 할 수 있다.
alter table Student
    drop constraint C1;
alter table Student
    add constraint C1 check (Sno between 900000 and 99999);
alter table Student
     drop constraint C3;
alter table Student
     add constraint C3 check (Sage<40);

단언 이 단언 을 만 드 는 구문 형식 CREATE ASSERTION 은 모든 단언 에 하나의 이름 을 부여 합 니 다. 제약 조건 은 WHERE 자구 의 조건 표현 식 과 유사 합 니 다. /(T - SQL 에는 이 기능 이 없 음) 예 5.18 데이터베이스 과정 을 최대 60 명의 학생 이 선택 과목 으로 제한 합 니 다.
CREATE ASSERTION ASSE_SC_DB_NUM
CHECK (60 >= (select count(*)
From Course,SC
Where SC.Cno=Course.Cno and   Course.Cname ='   ')
 );

예 5.19 한 과목 당 최대 60 명의 학생 선택 과목 을 제한한다.
 CREATE ASSERTION ASSE_SC_CNUM1
CHECK(60 >= ALL (SELECT count(*)             
FROM  SC
GROUP BY cno)
);

트리거 트리거 트리거 는 사용자 가 관계 표 에 정의 하 는 이벤트 로 구동 되 는 특수 한 과정 이다.정의 되면 트리거 는 데이터베이스 서버 에 저 장 됩 니 다.표 에 대한 모든 삭제 작업 은 서버 가 해당 하 는 트리거 를 자동 으로 활성화 시 키 고 관계 데이터 베이스 관리 시스템 의 핵심 층 에서 집중 적 인 완전 성 통 제 를 한다.
정의 트리거
트리거 는 사건 - 조건 - 동작 규칙 이 라 고도 부른다.SQL 은 CREATE TRIGGER 명령 으로 트리거 를 만 듭 니 다. 일반적인 형식 은 CREATE TRIGGER {BEFOR | AFTER} ON REFERENCING NEW | OLD ROW AS FOR EACH {ROW | STATEMENT} [WHEN] 입 니 다.
예 5.21 표 SC 의 grade 속성 을 수정 할 때 점수 가 10% 증가 하면 이번 조작 을 다른 표 SC 에 기록 합 니 다.U (Sno, Cno, Oldgrade, Newgrade) 중.
create trigger SC_T
after update of Grade on SC
referencing
	oldrow as OldTuple,
	newrow as NewTuple
for each row
when(NewTuple.Grade>1.1*OldTuple.Grade)
insert into SC_U (Sno,Cno,OldGrade,NewGrade)
values(OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade)

예 5.22 표 Student 의 삽입 작업 에 추 가 된 학생 개 수 를 표 Student - InsertLog 에 기록 합 니 다.
for each statement
	insert into StudentInsertLog(Numbers)
	select count(*) 
	from delta

이 예 에서 나타 난 for each statement 은 트리거 이벤트 인 INSERT 문 구 를 실행 한 후에 야 트리거 의 동작 을 한 번 수행 하 는 것 을 나타 내 는데 이 트리거 를 구문 급 트리거 라 고 합 니 다.5.21 의 트리거 시 행 급 트리거.기본 트리거
트리거 트리거 를 활성화 하 는 실행 은 트리거 이벤트 에 의 해 활성화 되 고 데이터베이스 서버 에서 자동 으로 실 행 됩 니 다.하나의 데이터 시트 에 여러 개의 트리거 가 있 을 수 있 습 니 다. 같은 표 의 트리거 가 활성화 되 었 을 때 다음 과 같은 실행 순 서 를 따 릅 니 다. (1) 이 표 의 BEFORE 트리거 (2) 트리거 SQL 문 구 를 활성화 합 니 다 (3) 이 표 의 AFTER 트리거 를 실행 하여 트리거 SQL 문 구 를 DROP TRIGGER ON 으로 삭제 합 니 다.트리거 는 만 든 트리거 여야 하 며 권한 이 있 는 사용자 만 삭제 할 수 있 습 니 다.
저장 프로 세 스 저장 프로 세 스 는 프로 세 스 화 된 SQL 문 구 를 작성 하 는 과정 으로 이 과정 은 컴 파일 과 최적화 를 거 쳐 데이터베이스 서버 에 저장 되 기 때문에 저장 프로 세 스 라 고 부 르 며 사용 할 때 호출 하면 된다.1. 저장 과정의 약간 (1) 저장 과정 이 실 행 된 SQL 문 구 를 해석 하 는 것 처럼 조작 요 구 를 할 때 문법 분석 과 최적화 작업 을 하지 않 기 때문에 효율 이 높다.(2) 저장 과정 은 클 라 이언 트 와 서버 간 의 통 신 량 을 낮 춘 다.(3) 기업 규칙 을 실시 하 는 데 편리 하 다.2. 저장 프로 세 스 의 사용자 인터페이스 (1) 생 성 저장 프로 세 스 CREATE OR REPLACE PROCEDURE 프로 세 스 이름 ([매개 변수 1, 매개 변수 2,...] AS;(2) 저장 프로 세 스 CALL / PERFORM PROCEDURE 프로 세 스 명 ([매개 변수 명 1, 매개 변수 명 2...]) 을 실행 합 니 다.CALL 이나 PERFORM 등 방식 으로 저장 과정의 실행 을 활성화 합 니 다.프로 세 스 화 SQL 에서 데이터베이스 서버 는 프로 세 스에 서 다른 저장 프로 세 스 를 호출 하 는 것 을 지원 합 니 다.(3) 저장 과정 을 수정 하면 ALTER PROCEDURE 를 사용 하여 저장 과정 이름 을 바 꿀 수 있 습 니 다.ALTER PROCEDURE 프로 세 스 명 1 RENAME to 프로 세 스 명 2;ALTER PROCEDURE 를 사용 하여 저장 과정 을 다시 컴 파일 할 수 있 습 니 다.ALTER PROCEDURE 프로 세 스 이름 COMPILE;(4) 저장 프로시저 DROP PROCEDURE 프로 세 스 이름 삭제 ();

좋은 웹페이지 즐겨찾기