--1.触发器的概念 trigger

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6buR54yr55qE54yr,size_20,color_FFFFFF,t_70,g_se,x_16

--2.触发器的分类

--(1)DDL型触发器 create ,alter,drop

--(2)DML型触发器 

---a.Insert插入型触发器

---b.update修改型触发器

---c.delete删除型触发器

---d.以上的任意混合型触发器

--3.特点

--没有参数也没有返回值,事件驱动,自动引发

--4.语法

--create trigger 触发器名称

--on 表名

--for insert/update/delete

--as

-- sql语句

--5.注:

每个触发器都有两张特殊表 Inserted表,Deleted表 

--当触发器执行完成之后,会自动消失(临时表)

--6.案例

--对于类别表添加触发器,当插入数据的时候,

--提示 '插入完成'

go

create trigger t_insertcate

on Category

for insert

as

print '插入完成'

go

create trigger t_insertcate1

on Category

for insert

as

select * from inserted

go

--1.修改型的触发器

create trigger t_updatecate

on Category

for update

as

select *from deleted 

select * from inserted

go

update Category set CategoryName='触发器2' 

where CategoryID=1018insert into Category values('触发器1')

go

--2.插入型的触发器

create trigger t_insert1

on product

for insert

as

begin

--查询临时表中刚刚插入的数据

select ProductID,ProductName,ProductPrice from inserted

end

--插入一条商品数据,引发insert型触发器

insert into Product values('aa',100,1000,'aaaa',1)

go

--3.删除型触发器

create trigger t_delete

on product

for delete

as

--查询临时表deleted,里面刚刚删除的那条数据

select ProductID,ProductName,ProductPrice from deleted

--从商品表中删除一条数据,出发删除型的触发器

delete from Product where ProductID=26

select * from Product

--创建一个触发器,完成删除类别的时候,自动把该

--类别下的所有商品删除

go

create trigger t_delete1

on category

for delete

as

--声明一个变量,存储刚刚删除的类别编号

declare @cid int

--1.获取刚刚删除的商品类别 -->编号

select @cid=CategoryID from deleted

--2.判断该类别下是否存在商品

if exists(select * from Product where CategoryID=@cid)

begin 

--3.如果条件为true,也就意味着该类别下有商品

delete from Product where CategoryID=@cid 

print '该类别下的商品已被删除成功' 

end

else 

print '该类别下没有商品'

--删除类别中的一条数据,引发删除型的触发器

delete from Category

where CategoryID=3

delete from Category 

where CategoryID=1006

go

--使用触发器实现,在Product表中删除商品信息时,

--在OrderDetails中删除相应的商品订购信息。

create trigger t_update1

on product

for update

as

--update(指定列) 返回bool类型,如果指定列被更新,则返回true

--否则返回false

if update(store)

print 'store列被更新了'

else 

print '没有被更新'

update Product set ProductPrice=100 where ProductID=16

update Product set Store=12 where ProductID=16

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐