diff --git "a/08\345\273\226\346\237\217\346\210\220/\347\254\254\345\215\201\344\272\214\346\254\241\344\275\234\344\270\232/2022-10-10\347\254\224\350\256\260.txt" "b/08\345\273\226\346\237\217\346\210\220/\347\254\254\345\215\201\344\272\214\346\254\241\344\275\234\344\270\232/2022-10-10\347\254\224\350\256\260.txt" new file mode 100644 index 0000000000000000000000000000000000000000..390da9b7814de819c8ce01c67611fbff09c583d4 --- /dev/null +++ "b/08\345\273\226\346\237\217\346\210\220/\347\254\254\345\215\201\344\272\214\346\254\241\344\275\234\344\270\232/2022-10-10\347\254\224\350\256\260.txt" @@ -0,0 +1,54 @@ + 触发器(trigger) + + 什么是触发器: + insert --》 一系列随着插入操作自动执行的sql语句集合 + + 触发器( trigger )是作为 对数据库修改的连带效果 而 由系统自动执行 的一条语句。它是一种特殊的 存储过程。也是一个事务(可以回滚)。 +为了定义一个触发器我们必须: + +指明什么时候执行触发器 这被拆分为引起触发器被检测的一个事件和触发器继续执行所必须满足的一个条件。 +指明当触发器执行时所采取的动作。 + + + +触发器分类 + +分为 DML触发器 +DML触发器 : 增删改 + + after触发器: 增删改 之后执行的 + +after触发器主要用于:insert,update,delete + + instead of 触发器 : 增删改 之前检查的 + + +CREATE TRIGGER <触发器名称> + +ON table_name +FOR [DELETE, INSERT, UPDATE] + +AS + + T-SQL语句 + +GO +--WITH ENCRYPTION表示加密触发器定义的SQL文本 + +--DELETE, INSERT, UPDATE指定触发器的类型 + + + +1.插入操作(Insert) +inserted 表 有数据,deleted 表 无数据 + +2.删除操作(Delete) +inserted 表 无数据,deleted 表 有数据 + +3.更新操作(Update) +inserted 表 有数据(新数据),deleted 表 有数据(旧数据) + + + + + diff --git "a/08\345\273\226\346\237\217\346\210\220/\347\254\254\345\215\201\344\272\214\346\254\241\344\275\234\344\270\232/SQLQuery2022-10-10.sql" "b/08\345\273\226\346\237\217\346\210\220/\347\254\254\345\215\201\344\272\214\346\254\241\344\275\234\344\270\232/SQLQuery2022-10-10.sql" new file mode 100644 index 0000000000000000000000000000000000000000..77813aa0ee9d52871d7fd4704c01ecb585ae98f3 --- /dev/null +++ "b/08\345\273\226\346\237\217\346\210\220/\347\254\254\345\215\201\344\272\214\346\254\241\344\275\234\344\270\232/SQLQuery2022-10-10.sql" @@ -0,0 +1,79 @@ +-- +create table Department +( + DepartmentId varchar(10) primary key , --Զ + DepartmentName nvarchar(50), -- +) +--ԱϢ +create table People +( + PeopleId int primary key identity(1,1), --,Զ + DepartmentId varchar(10), --ű,,벿ű + PeopleName nvarchar(20), --Ա + PeopleSex nvarchar(2), --ԱԱ + PeopleSalary money, --нˮ +) +insert into Department(DepartmentId,DepartmentName) +values('001','ܾ') +insert into Department(DepartmentId,DepartmentName) +values('002','г') +insert into Department(DepartmentId,DepartmentName) +values('003','²') +insert into Department(DepartmentId,DepartmentName) +values('004','') + +insert into People(DepartmentId,PeopleName,PeopleSex,PeopleSalary) +values('001','','',8000) +insert into People(DepartmentId,PeopleName,PeopleSex,PeopleSalary) +values('001','','',5000) +insert into People(DepartmentId,PeopleName,PeopleSex,PeopleSalary) +values('002','ŷ','',3000) + +--1вűԱԱʱ򣬸ԱIJűڲűҲԶӲϢΪ"²" + select * from People + select * from Department + + create trigger xxx + on People for insert + as + declare @xid varchar(50) + set @xid=(select DepartmentId from inserted) + if not exists(select * from Department where DepartmentId=@xid) + begin + insert into Department values(@xid,'²') + end; + + insert into People values ('009','Աɽ','',1000); + insert into People values ('029','ɽ','',8000); + +--2ʵ֣ɾһŵʱ򽫲Աȫɾ + + create trigger shan + on Department for delete + as + delete from People where DepartmentId = (select DepartmentId from deleted); + + delete from Department where DepartmentId='001'; + + select * from People + select * from Department + +--3һɾһŵʱжϸòǷԱɾûɾ** + +--4޸һű֮󣬽òԱIJűͬ޸ + + create trigger gai + on Department for update + as + declare @cid varchar(20),@sid varchar(20) + select @cid =DepartmentId from deleted + select @sid =DepartmentId from inserted + + update People set DepartmentId = (select DepartmentId from deleted) + update People set DepartmentId = (select DepartmentId from inserted) + + update Department set DepartmentId=010 where DepartmentId=001 + + select * from People + select * from Department + \ No newline at end of file