diff --git "a/06\344\275\225\347\235\277/\344\275\234\344\270\232/2022-9-27/.keep" "b/06\344\275\225\347\235\277/\344\275\234\344\270\232/2022-9-27/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/06\344\275\225\347\235\277/\344\275\234\344\270\232/2022-9-27/2022-09-27\344\275\234\344\270\232.md" "b/06\344\275\225\347\235\277/\344\275\234\344\270\232/2022-9-27/2022-09-27\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..7fcce7b3e22db110bcc823eb91cc65facde17c61 --- /dev/null +++ "b/06\344\275\225\347\235\277/\344\275\234\344\270\232/2022-9-27/2022-09-27\344\275\234\344\270\232.md" @@ -0,0 +1,99 @@ +```SQL +create database bumen +go +use bumen +go +--部门 +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 + + +--(1)假设有部门表和员工表,在添加员工的时候,该员工的部门编号如果在部门表中找不到,则自动添加部门信息,部门名称为"新部门"。 +go +create trigger tr_tianjia +on People after insert +as +begin + declare @e varchar(20)=(select DepartmentId from inserted) + if @e not in (select DepartmentId from Department) + begin + insert into Department values(@e,'新部门') + end +end +go +insert into People values('005','猴子','男',2000) +drop trigger tr_tianjia +--(2)触发器实现,删除一个部门的时候将部门下所有员工全部删除。 +go +create trigger tr_sc +on Department after delete +as +begin + declare @e varchar(20)=(select DepartmentId from deleted) + delete People where DepartmentId=@e +end +go +drop trigger tr_sc + delete Department where DepartmentId='005' +--(3)创建一个触发器,删除一个部门的时候判断该部门下是否有员工,有则不删除,没有则删除。 +go +create trigger t3 +on Department instead of delete +as +begin +if (select count(*) from People where DepartmentId = (select DepartmentId from deleted)) = 0 +begin + delete Department where DepartmentId =(select DepartmentId from deleted) +end +end +go +delete Department where DepartmentId ='006' +insert into Department values('006','新新部门') +--(4)修改一个部门编号之后,将该部门下所有员工的部门编号同步进行修改 +go +create trigger t4 +on Department instead of update +as +begin + +update People set DepartmentId = (select DepartmentId from inserted) +where DepartmentId = (select DepartmentId from Department where DepartmentName = '新部门') + +update Department set DepartmentId =(select DepartmentId from inserted) +where DepartmentName = '新部门' + +end +go +update Department set DepartmentId ='007' where DepartmentName = '新部门' +``` + diff --git "a/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-27\350\247\246\345\217\221\345\231\250/.keep" "b/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-27\350\247\246\345\217\221\345\231\250/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-27\350\247\246\345\217\221\345\231\250/2022-9-27\347\254\224\350\256\260.md" "b/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-27\350\247\246\345\217\221\345\231\250/2022-9-27\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..57c22f8810c96c0985c27f418f3c9982cffe61ee --- /dev/null +++ "b/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-27\350\247\246\345\217\221\345\231\250/2022-9-27\347\254\224\350\256\260.md" @@ -0,0 +1,54 @@ +## 触发器(trigger) + +#### 什么是触发器 + + **触发器**( trigger )是作为**对数据库修改的连带效果**而**由系统自动执行**的一条语句。它是一种特殊的**存储过程**。也是一个**事务**(可以回滚)。为了定义一个[触发器](https://so.csdn.net/so/search?q=触发器&spm=1001.2101.3001.7020),我们必须: + +- 指明**什么时候执行触发器**。这被拆分为**引起触发器被检测的一个\*事件\***和**触发器继续执行所必须满足的一个条件**。 +- 指明**当触发器执行时所采取的动作**。 + +#### 触发器分类 + +分为 DML触发器和DDL触发器 + +#### DML触发器 : 增删改 + +##### after触发器: + +after触发器主要用于:insert,update,delete + +##### instead of 触发器 + +#### 创建触发器的语句 + +```sql +CREATE TRIGGER <触发器名称> + +ON table_name + +[WITH ENCRYPTION] + +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 表\****有数据(旧数据) + +