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