From 0ecb0c46ffb5980a8a9e3a57b48d0f244a939bcc Mon Sep 17 00:00:00 2001 From: GuanM <30427262+sxhoio@users.noreply.github.com.> Date: Tue, 19 Nov 2024 16:44:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A6=E5=8F=91=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../触发器的创建和使用/1. 触发器的创建和使用.sh | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 数据库/头歌/触发器的创建和使用/1. 触发器的创建和使用.sh diff --git a/数据库/头歌/触发器的创建和使用/1. 触发器的创建和使用.sh b/数据库/头歌/触发器的创建和使用/1. 触发器的创建和使用.sh new file mode 100644 index 0000000..9723156 --- /dev/null +++ b/数据库/头歌/触发器的创建和使用/1. 触发器的创建和使用.sh @@ -0,0 +1,70 @@ +USE studentdb +go + +SET NOCOUNT ON +go +--********** create trigger_insert_score  **********-- +--********** Begin **********-- +CREATE TRIGGER trigger_insert_score   +ON score   +INSTEAD OF INSERT   +AS   +BEGIN   +    IF EXISTS (SELECT * FROM inserted i WHERE NOT EXISTS (SELECT 1 FROM student s WHERE s.sno = i.sno))   +    BEGIN   +        RETURN   +    END   +    INSERT INTO score (sno, cno, grade)   +    SELECT sno, cno, grade FROM inserted   +END   +--********** End **********-- +go +delete from score +go +insert into score values('1001','2001','89.5') +go +insert into score values('1002','2001','95') +go +insert into score values('1011','2001','88') +go +select * from score +go + + +--********** create trigger_delete_student  **********-- +--********** Begin **********-- +CREATE TRIGGER trigger_delete_student   +ON student   +INSTEAD OF DELETE   +AS   +BEGIN   +    DELETE FROM score WHERE sno IN (SELECT sno FROM deleted)   +    DELETE FROM student WHERE sno IN (SELECT sno FROM deleted)   +END   +--********** End **********-- +go +delete from student where sno='1001' +go +select * from student +go + +--********** create trigger_protect_grade **********-- +--********** Begin **********-- +CREATE TRIGGER trigger_protect_grade   +ON score   +FOR UPDATE   +AS   +BEGIN   +    IF UPDATE(grade)   +    BEGIN   +        ROLLBACK TRANSACTION   +    END   +END   +--********** End **********-- +go +delete from score where sno='1001' +go +select * from score +go +select * from student +go