diff --git "a/27\345\217\267\350\265\265\346\265\251\346\225\217/\347\254\25412\344\275\234\344\270\232/10-10 sqlserver \350\247\246\345\217\221\345\231\250.md" "b/27\345\217\267\350\265\265\346\265\251\346\225\217/\347\254\25412\344\275\234\344\270\232/10-10 sqlserver \350\247\246\345\217\221\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..c111cc5fae42c0a46c93ea329df40baf5af994b2 --- /dev/null +++ "b/27\345\217\267\350\265\265\346\265\251\346\225\217/\347\254\25412\344\275\234\344\270\232/10-10 sqlserver \350\247\246\345\217\221\345\231\250.md" @@ -0,0 +1,74 @@ +# 1. 10-10 sqlserver 触发器 + +## 1.1什么是触发器 + +自己理解:通俗的来讲就是一个连锁反应效果比如要实现一个功能用户要注销账号触发器的效果就是把与用户账号相关的全部删除 + +老师笔记定义的: **触发器**( trigger )是作为**对数据库修改的连带效果**而**由系统自动执行**的一条语句。它是一种特殊的**存储过程**。也是一个**事务**(可以回滚)。为了定义一个[触发器](https://so.csdn.net/so/search?q=触发器&spm=1001.2101.3001.7020),我们必须: + +- 指明**什么时候执行触发器**。这被拆分为**引起触发器被检测的一个\*事件\***和**触发器继续执行所必须满足的一个条件**。 + +- 指明**当触发器执行时所采取的动作**。 + + + +## 1.2触发器分类 + +目前只知道DML触发器(就是今天学的增删改触发器) + +## 创建触发器的语句 + +```sql +--增的触发器 +go +create trigger 名称 +on 表名 for insert +as +里面可以定义变量 +可以写sql语句 +例如: +declare @DepId varchar(10) =(select DepartmentId from inserted) +insert into Department values(@DepId,'新部门') +insert into People values('006','赵云','男',10000) + +--删的触发器 +-- +create trigger 名称 +on People for delete +as +delete from People where DepartmentId=(select DepartmentId from deleted) + +--第一步先删除部门表中数据 +delete from Department where DepartmentId ='001' +--改的触发器 + +create trigger tri_update +on Department for update +as +declare @oldmon varchar(20), @newmon varchar(20) + --老的结果集会存到deleted + select @oldmon=DepartmentId from deleted + --新的结果集会存到inserted + select @newmon=DepartmentId from inserted + print '旧的:'+@oldmon + char(9) + '新:'+@newmon + update People set DepartmentId=@newmon where DepartmentId=@oldmon + +--第一步先修改部门编号 +update Department set DepartmentId ='005' where DepartmentName='新部门' + + + + + + + + + + + + + + + +``` + diff --git "a/27\345\217\267\350\265\265\346\265\251\346\225\217/\347\254\25412\344\275\234\344\270\232/10-10\350\247\246\345\217\221\345\231\250.sql" "b/27\345\217\267\350\265\265\346\265\251\346\225\217/\347\254\25412\344\275\234\344\270\232/10-10\350\247\246\345\217\221\345\231\250.sql" new file mode 100644 index 0000000000000000000000000000000000000000..d555c305152b5c79d63e5b4e9ab8a45e2af33d41 --- /dev/null +++ "b/27\345\217\267\350\265\265\346\265\251\346\225\217/\347\254\25412\344\275\234\344\270\232/10-10\350\247\246\345\217\221\345\231\250.sql" @@ -0,0 +1,91 @@ +-- +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) +select * from Department +select * from People +/* +#### ϰ + + + + + + +**3һɾһŵʱжϸòǷԱɾûɾ** + +4޸һű֮󣬽òԱIJűͬ޸*/ + + +--1вűԱԱʱ򣬸ԱIJűڲűҲ +--ԶӲϢΪ"²" +go +create trigger tri_inset +on People for insert +as +declare @DepId varchar(10) =(select DepartmentId from inserted) +insert into Department values(@DepId,'²') +insert into People values('006','','',10000) + + +--drop trigger tri_update +--delete from People where DepartmentId='005' + +go +--2ʵ֣ɾһŵʱ򽫲Աȫɾ +create trigger tri_delete +on Department for delete +as +delete from People where DepartmentId=(select DepartmentId from deleted) + +--һɾű +delete from Department where DepartmentId ='001' +select * from Department +select * from People + +--4޸һű֮󣬽òԱIJűͬ޸ +--ڶ崥 +go +create trigger tri_update +on Department for update +as +declare @oldmon varchar(20), @newmon varchar(20) + --ϵĽ浽deleted + select @oldmon=DepartmentId from deleted + --µĽ浽inserted + select @newmon=DepartmentId from inserted + print 'ɵ:'+@oldmon + char(9) + ':'+@newmon + update People set DepartmentId=@newmon where DepartmentId=@oldmon + +--һ޸IJű +update Department set DepartmentId ='005' where DepartmentName='²' + +go + +