データベース原理と応用実験レポート
実験トピック 実験10 トリガー
10.1 実験の目的
学生は実験を通じてデータの整合性について理解を深め、トリガーの理解、作成、使用方法を学ぶことができます。
10.2 実験内容 (実験9のTeacherテーブルを使用)
(1) Teacherテーブルにトリガー T1 を作成し、テーブルにデータを挿入または更新する場合、操作対象レコードのTage値が 0 以上であることを確認してください。
(2) Teacherテーブルにトリガー T2 を作成し、番号 00001 の CEO の削除を禁止します。
(3) Teacherテーブル内の人物の番号は一意であり、変更不可能であるため、更新時に番号の不変性を実現するためにトリガー T3 を作成します。
(4) T1 フリップフロップの制約に違反する挿入操作を示します。
(5) T1 トリガーの制約に違反する更新操作をデモンストレーションします。
(6) T2 フリップフロップの制約に違反する挿入操作を示します。
(7) T2 トリガーの制約に違反する更新操作をデモンストレーションします。
10.3 実験手順
(1)カスタム整合性実験では引き続きTeacherテーブルを使用します。このテーブルにトリガー T1 を作成します。テーブルにデータを挿入または更新するときは、操作対象のレコードの Tage 値が 0 より大きいことを確認してください。
新しいクエリ ウィンドウに次の SQL ステートメントを入力します。
USE University_Mis
GO
CREATE TRIGGER T1 ON Teacher
FOR INSERT,UPDATE
AS
IF(SELECT Tage FROM INSERTED)<1
BEGIN
PRINT ‘职工年龄必须是大于0的整数! 操作失败!’
ROLLBACK TRANSACTION
END
以下の図 1 に示すように、コマンドは正常に実行されます。
図1
(2) Teacherテーブル にトリガ T2 を作成し、番号 S01 の CEO の削除を禁止します。
新しいクエリ ウィンドウに次の SQL ステートメントを入力します。
USE University_Mis
GO
CREATE TRIGGER T2 ON Teacher
FOR DELETE
AS
IF(SELECT Tno FROM DELETED)=’T01’
BEGIN
PRINT ‘此人是CEO! 删除操作失败!’
ROLLBACK TRANSACTION
END
図 2 に示すように、コマンドは成功しました。
図2
(3) Teacherテーブル内の人物の番号は一意であり、変更不可能であるため、更新時に番号の不変性を実現するためにトリガー T3 を作成します。
新しいクエリ ウィンドウに次の SQL ステートメントを入力します。
USE University_Mis
GO
CREATE TRIGGER T3 ON Teacher
FOR UPDATE
AS
IF UPDATE(Tno)
BEGIN
PRINT ‘职工编号不能修改!’
ROLLBACK TRANSACTION
END
図 3 に示すように、コマンドは成功しました。
画像3
(4)新しいクエリウィンドウに次の SQL ステートメントを入力します。
USE University_Mis
INSERT INTO Teacher VALUES(‘T03’,’ 李宏’,’F’,-10,’开发部’)
年齢制限は 0 より大きい必要があり、ここでは -10 であるため、タプルの挿入に失敗しました。図 4 に示すように
図4
間違った情報:
従業員の年齢は 0 より大きい整数である必要があります! 操作は失敗しました!
メッセージ 3609、レベル 16、状態 1、行 1 トランザクションは
トリガーで終了しました。バッチが中止されました
(5) 新しいクエリウィンドウに次の SQL ステートメントを入力します。
USE University_Mis
UPDATE Teacher SET Tage=-7 WHERE Tno=’T01’
以下の図 5 に示すように、年齢制限は 0 より大きい必要があり、ここでは -7 であるため、データを更新できませんでした。
図5
間違った情報:
従業員の年齢は 0 より大きい整数である必要があります! 操作は失敗しました!
メッセージ 3609、レベル 16、状態 1、行 1 トランザクションは
トリガーで終了しました。バッチ処理が中止されました。
(6)新しいクエリウィンドウに次の SQL ステートメントを入力します。
USE University_Mis
DELETE FROM Teacher WHERE Tname=’李用’
CEO の削除が制限されており、Li Yong が CEO であるため、削除は失敗し、図 6 に示すようにエラーが報告されます。
図6
間違った情報:
この人は CEO です! 削除操作に失敗しました!
メッセージ 3609、レベル 16、状態 1、行 1 トランザクションは
トリガーで終了しました。バッチ処理が中止されました。
(7)新しいクエリウィンドウに次の SQL ステートメントを入力します。
USE University_Mis
UPDATE Teacher SET Tno=’T07’ WHERE Tsex=’F’
制限により Tno 属性を変更できないため、タプルの更新に失敗しました。図 7 に示すように、エラーが報告されます。
図7
間違った情報:
従業員番号は変更できません。
メッセージ 3609、レベル 16、状態 1、行 1 トランザクションは
トリガーで終了しました。バッチ処理が中止されました。
10.4 実験要件
(1) 実験を行う前に、実験の一般条件および実験の指示書をよくお読みください。
(2) SQL Server 2005、2008、2014のSSMS環境で、上記実験の手順(1)~(7)のSQLデータ定義操作をすべて完了し、太字の手順の操作画面を実験レポートに貼り付けます。 。
10.5実験体験_
1) 実験の反省
なし
2) 実験的収穫
このトリガーは、システムがデータの整合性制約の違反を検出したときに、ユーザーに必要なプロンプト情報を提供します。また、システム内の特定の操作により、整合性の違反によって引き起こされる悪影響を自動的に排除します。拘束、安全な保護機能。
付録:
なし