データベースの実験 - データベースの整合性制約

1.データの整合性。終了後のT-SQLステートメントを使用します。

1)フィールド定義テーブルCNOコースデータベースSTUの主キー制約名cno_pk;
USE学生
ALTER TABLE XSKC.course
ADD制約はcno_pk PRIMARY KEY(CNO)
2)フィールドコースCNAMEテーブルに一意の値を追加するために、制約、
使用を学生
ALTERテーブルはXSKC.course
UNIQUE(CNAME)cname_pkのADD CONSTRAINT
マスターキーはSNOテーブルのコースと学生とのテーブルCNOマスターキーに対応するようになっている。3)データテーブルSCのSNOのを、CNOフィールドは、外符号として定義されている、を参照して以下達成します完全性:
同時にテーブルに記録された学生のテーブルを削除SC SNO記録フィールド値に同一の記録、削除、
は、変更されたレコードの学生テーブルをSNO場合、テーブルSCは複数のレコードのフィールド値に対応する場合、次に、変更を拒否;
lは時間経過テーブルCNOフィールド値を変更し、SCテーブルの値を、対応するフィールドは変更されるべきである;
Lは、フィールドは、SCテーブルに存在する場合、レコードコーステーブルを削除し、対応するフィールドを削除します記録;
ときSCフィールドSNOレコードの値が学生に存在しない場合、挿入は拒否され、テーブルにレコードを追加します。

ALTER TABLE XSKC.sc
ADD制約は、FOREIGN KEY(SNをsc_fk oは)上XSKC.student(SNO)を参照 、更新アクションなしに削除カスケード
KEY FOREIGN(CNO)削除カスケード連鎖更新ON REFERENCES XSKC.course(CNO)ON
ゴー
検査制約の4)の定義、学生数は9つのSNO数字でなければならない必要とし、0で始めることはできません、第2の3はすべて0です;
ALTER TABLE XSKC.student
sno_ckのADD CONSTRAINT
などCHECK(のSnO「[1-9] 00 [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] 「)
5)学生のデータベーステーブルに定義されている学生STU」25〜16の範囲内の年齢値に、
ALTER TABLE XSKC.student
ADD制約がsage_ck
30と18の間CHECK(SAGEをされる)
。6)に定義さSTU学生データベーステーブルには、デフォルト値は20中学校の年齢である値;
ALTER TABLE XSKC.studentが
sage_df ADD制約
DEFAULT 20がFOR SAGEである
7)学生の年齢の学生テーブルの値が30〜15の範囲に制約される可能性が修正すること;
ALTER TABLE XSKC.student
DROP制約sage_ck
行く
ALTER TABLE XSKC.student
ADD制約sage_ckを
CHECK(セージ> = 15 ANDセージ <= 30)
固有の制約値が8)表過程でCNAMEのフィールドを削除し、
USE学生
ALTER TABLE XSKC.course
DROP制約cname_pk

2.データベースは、実験データに基づいて、次のトリガ・テストを記述しています。

1)、値は1単位時間(ccredit)に新しい行を挿入6にないとき、あなたは出発装置を起動、コースのテーブルのINSERTトリガーを確立挿入操作を元に戻すと、RAISERROR文を使用し、エラーメッセージを返します。
TRIGGER tri_INSERT_course ONはCREATE XSKC.course
INSERT FOR
AS
tinyint型のDECLARE @ccredit
SELECT @ ccredit = XSKC.course.ccredit
XSKC.course FROM、挿入
WHERE XSKC.course.ccredit = inserted.ccredit
BETWEEN IFが@ccredit NOT AND。6. 1
BEGIN
ROLLBACK TRANSACTIONを
RAISERROR(「〜はもちろんクレジットの間に挿入されていません。6」、16,10)
END
2)、その後はもちろんのコース数についての情報を更新する際に、トリガが、更新をカスケード接続するアクティブ化された更新トリガテーブルのコースを作成し、テーブル番号情報でSC-関連のコース、およびPRINTステートメントを使用したメッセージを返します。
TRIGGERはON作成XSKC.course tri_UPDATE_course
UPDATE FOR
AS
IF UPDATE(CNO)
BEGIN
(3)、チャーnewcno @(3)DECLARE @oldcnoチャーを
@ Oldcno = deleted.cno SELECTは、newcno = inserted.cno @
から削除、挿入
WHERE deleted.cno = inserted.cno
'......準備カスケードコース番号情報XSKC.scテーブルを更新' PRINTが
UPDATE XSKC.sc
SET CNO @ newcno =
WHERE CNO = @ oldcno
PRINT「カスケードたアップデートXSKC.scテーブルプレーンズのコース番号」+ @ oldcno + + @ newcno 「 に」
END
3)学生テーブル、同時に削除でレコードのDELECTトリガーを作成します表中のSC対応するレコードも削除されます。
XSKC.student ON TRIGGERのtri_studentは、CREATE
削除した後
、AS
BEGIN
SC FROM DELETE
WHERE SNO =(SELECT SNO削除FROM)
END
、記録テーブルSCに挿入されたときは、代わりにトリガーOF作成する。4)カラム学生SNOの値を確認しますあなたが行う場合があるかどうか、挿入操作は、それが存在しない場合はプロンプトが表示され、存在している「学生が存在しません。」
CREATE TRIGGER tri_sc
ON XSKC.sc AN挿入した後
AS
BEGIN
IF(SELECT COUNT(*)FROM、JOIN XSKC.student ON = student.sno inserted.sno挿入)= 0
BEGIN
ROLLBACK TRANに
PRINT「を生徒が存在しません!
END
END
。5)実行順序の制約およびトリガーを比較します。(レコードが制約を満たすと役割を果たすべき者のビューをトリガしませんテーブルに挿入され、その後、テーブルのチェック制約とトリガーに作成された、と。)
ALTER TABLEはXSKC.course
ADD制約CK_ccreditの
CHECK(ccreditを> = 1、ccredit <= 6)

INSERTのXSKC.course
(、「5「」'10「」データベース7)の値を
ここに画像を挿入説明
それがために、更新前の更新された値を有効にするための実験から分かるように、トリガーまたは後に優先順位制約を取りルールチェック。既存のルールとの競合をチェックすると、システムはエラーメッセージを与え、更新操作をキャンセルします。チェックは問題ありません場合は、更新が実行され、その後、トリガーをアクティブにしています。

おすすめ

転載: blog.csdn.net/qq_43776450/article/details/95633712