데이터베이스 실험 - 데이터베이스의 무결성 제약 조건

1. 데이터의 무결성. 완료 후 T-SQL 문을 사용합니다.

1) 필드 정의 테이블 CNO 물론 데이터베이스 스투 기본 키 제약 조건 이름 cno_pk;
를 사용하는 학생
은 ALTER TABLE XSKC.course
추가 제약 cno_pk 기본 키 (CNO)
2) 필드 코스 CNAME 테이블에 고유 한 값을 추가 할 수 제한,
사용을 학생
테이블 변경은 XSKC.course
UNIQUE (CNAME) cname_pk 추가 CONSTRAINT
마스터 키 SNO 테이블 과정과 학생 테이블 CNO 마스터 키에 대응되도록. 3) 데이터 테이블 피하 SNO의를 CNO 필드가 외부 코드로 정의 된 상기 참조하여 다음 달성 무결성 :
기록 필드 값의 동일한 기록 삭제 SC SNO  동시에 테이블에 기록 학생 테이블을 삭제할
 수정 된 레코드 학생 테이블 SNO 때, 만약 복수의 레코드로 필드 값에 대응하는 테이블 SC, 다음의 변경을 거부;
L은 타임 코스 테이블 CNO 필드 값을 수정 SC 테이블의 값에 대응하는 필드가 수정되어야한다
L 필드는 SC 테이블에 존재하면, 기록 과정에 나타난 삭제 해당 필드를 삭제 레코드,
필드 SNO 레코드의 값이 학생에 존재하지 않는 경우  SC가 테이블에 레코드를 추가 할 때 삽입이 거부되고,

테이블 변경 XSKC.sc가
추가 CONSTRAINT는 FOREIGN KEY를 sc_fk (주석 o를)에 XSKC.student (SNO)를 참고 문헌 , 갱신없는 행동에 삭제 캐스케이드
주요 외국 (CNO) 삭제 캐스케이드 모두 업데이트 ON은 참조 XSKC.course (CNO)의
이동
점검 제한 조건 4) 정의, 학생 수는 9 개 SNO 숫자이어야하며, 0으로 시작할 수 없습니다 필요, 두 번째 셋은 모두 0이다 ;
표 변경 XSKC.student
sno_ck 추가 CONSTRAINT
같은 CHECK (SNO '[1-9] 00 [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] ')
25 ~ 16의 범위에서 나이 값 5) 데이터베이스 테이블 학생 STU 학생에 정의'를,
테이블 변경 XSKC.student가
추가 제약 조건이 sage_ck
30, 18) 사이의 CHECK (SAGE을
. 6) 스투 학생 데이터베이스 테이블을 정의 기본 값은 20 중학교 나이 값 ;
테이블 변경 XSKC.student
sage_df 추가 제약
초기 상태 (20)는 FOR SAGE이다
7) 학생의 나이 학생 테이블 값은 30 ~ 15의 범위에서 제한 될 수 있습니다 수정;.
테이블 변경 XSKC.student는
sage_ck 드롭 제약
이동
테이블 변경 XSKC.student에게
추가 구속 sage_ck을
CHECK (세이지> = 15 AND 세이지 <= 30)
고유 제한 조건 값이 8) 테이블 과정에서 CNAME 필드를 제거;
를 사용하는 학생
은 ALTER TABLE XSKC.course
드롭 제약 cname_pk

2. 데이터베이스는 실험 데이터를 기반으로하고 다음 트리거 테스트를 작성한다.

값이 학점 (ccredit의 1이 아닌 삽입 (6)에 새로운 행이있는 경우 1), 당신은, 출발 장치를 활성화 삽입 작업을 실행 취소) 과정에 대한 테이블 INSERT 트리거를 설정하고 오류 메시지를 반환 RAISERROR 문을 사용합니다.
TRIGGER tri_INSERT_course 온이 생성 XSKC.course
삽입 용을
는 AS
TINYINT DECLARE의 @ccredit
선택 (SELECT) @ ccredit = XSKC.course.ccredit
XSKC.course FROM 1, 삽입 된
WHERE XSKC.course.ccredit = inserted.ccredit
간 IF가를 @ccredit 아닌 AND. 제 1
선두
롤백 TRANSACTION
RAISERROR (16,10 '~. 코스 학점 사이에 6 삽입되지 않은')
최종
2) 및 과정의 과목의 수에 대한 정보를 업데이트 할 때 다음 업데이트 트리거 테이블의 과정을 만들고, 트리거는 계단식 업데이트를 활성화 SC-관련 테이블 번호 정보의 과정과는 PRINT 문이 메시지를 반환 사용합니다.
트리거가 ON이 생성 XSKC.course tri_UPDATE_course
갱신하기 위해를
는 AS
다인 경우 UPDATE (CNO)
선두
DECLARE을 @oldcno CHAR. (3), 숯의 newcno @. (3)
@ Oldcno = 선택 (SELECT) deleted.cno, @ newcno = inserted.cno
삭제에서이 삽입 된
WHERE deleted.cno = inserted.cno
인쇄 '준비 계단식 코스 번호 정보 XSKC.sc 테이블 ...... 업데이트'
UPDATE XSKC.sc
는 SET CNO를 @ newcno =
WHERE CNO = @ oldcno
인쇄 '계단식있다 업데이트 XSKC.sc 테이블 평야 코스 번호'+ @ oldcno + + @ newcno ' 에'
END
3) 학생 테이블, 동시에 삭제의 레코드에 대한 DELECT 트리거를 만들 표에 기록을 해당 사우스 캐롤라이나도 삭제됩니다.
XSKC.student ON 트리거 tri_student는 CREATE
(가) 삭제 후을
를 AS
(가) BEGIN
(가) (SC)에서 삭제
를 Where SNO =합니다 (SELECT SNO 삭제 FROM)
최종
기록 테이블 (SC)에 삽입 할 때, INSTEAD OF 트리거 생성한다. 4) 열 학생 SNO의 값을 확인 당신이 묻는 메시지가 존재하지 않는 경우 삽입 작업이 존재 수행하는 경우가 있는지, "학생들은 존재하지 않습니다."
tri_sc TRIGGER는 CREATE
ON XSKC.sc INSERT 애프터
AS
시작
은 IF합니다 (SELECT COUNT (*)가 삽입 된 inserted.sno JOIN에 XSKC.student를 ON = student.sno FROM) = 0
선두
ROLLBACK TRAN
인쇄 '학생이 존재하지 않습니다! '
단부

. 5)의 실행 순서의 제약 조건 및 트리거를 비교. (그리고 제약 조건을 충족하지 않는 레코드가 역할을해야하는 사람들의보기를 트리거 테이블에 테이블 점검 제한 조건 및 트리거에서 생성 한 다음 삽입.)
테이블 변경 XSKC.course에게
추가 구속 CK_ccredit의
CHECK (ccredit> =를. 1과 ccredit <= 6)

삽입 XSKC.course
값 ('10 ','데이터베이스 ','5 ', 7)
여기에 그림 삽입 설명
실험에서 볼 수있는,이 업데이트되기 전에 적용 할 수 또는 트리거 이후의 선행 제약 소요 업데이트 된 값은합니다 검사 규칙. 기존 규칙과 충돌을 선택하면, 시스템은 오류 메시지를 제공하고, 업데이트 작업을 취소 할 수 있습니다. 체크 아무 문제가없는 경우, 업데이트를 실행 한 다음 트리거를 활성화한다.

추천

출처blog.csdn.net/qq_43776450/article/details/95633712