From 76c7918d652ab0b2111efa69411ac61451eb2c52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=9D=BF?= <2476310189@qq.com> Date: Wed, 28 Sep 2022 03:14:27 +0000 Subject: [PATCH 1/4] =?UTF-8?q?=E6=96=B0=E5=BB=BA=202022-9-27=E8=A7=A6?= =?UTF-8?q?=E5=8F=91=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2022-9-27\350\247\246\345\217\221\345\231\250/.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "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" 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 0000000..e69de29 -- Gitee From 5bd698468e3c52408284015927f399dc3cc9fe7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=9D=BF?= <2476310189@qq.com> Date: Wed, 28 Sep 2022 03:16:00 +0000 Subject: [PATCH 2/4] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 何睿 <2476310189@qq.com> --- .../2022-9-27\347\254\224\350\256\260.md" | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 "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" 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 0000000..57c22f8 --- /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 表\****有数据(旧数据) + + -- Gitee From b8e5ad2a610cad33a967a9b3716620d3b5cb767f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=9D=BF?= <2476310189@qq.com> Date: Wed, 28 Sep 2022 03:16:16 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=E6=96=B0=E5=BB=BA=202022-9-27?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\344\275\234\344\270\232/2022-9-27/.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "06\344\275\225\347\235\277/\344\275\234\344\270\232/2022-9-27/.keep" 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 0000000..e69de29 -- Gitee From c36d3724d63376855fee96ed04b2696b0b55a53a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=9D=BF?= <2476310189@qq.com> Date: Wed, 28 Sep 2022 03:16:37 +0000 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 何睿 <2476310189@qq.com> --- .../2022-09-27\344\275\234\344\270\232.md" | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 "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" 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 0000000..7fcce7b --- /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 = '新部门' +``` + -- Gitee