SQL学习笔记8 ---触发器
2013-03-22 20:37
344 查看
创建触发器
create trigger deleteNewClass //在表NewClass中创建触发器deleteNewClass ,表中有数据删除时执行删除表News中Classid=3的数据
on NewClass
after delete
as
delete News from News,deleted whereNews.Classid=deleted.ID
Alter trigger newscount
on News
after update
as
begin
declare @rownum int--存储当前是哪一行
declare @titalcount int --总共有多少行
declare @tempid int--保存当前行的newsid
declare @countnews int
declare @tab table(indexid int Identity(1,1) not null,newsid int)--定义一个临时表
insert into @tab select ID from News--把News中的ID插入表中的newsid里
-- select *from @tab
set @titalcount=@@ROWCOUNT--统计临时表有多少行
set @rownum=1
while @rownum<@titalcount--遍历临时表中的数据
begin
select @tempid=newsid from @tab where indexid=@rownum--把每一行的indexid赋给变量@tempid
select @countnews=COUNT(*) from NewClass where
ID=@tempid--NewClass中ID=@tempid的总共数据
update NewClass
set countnews=@countnews
where ID=@tempid
set @rownum+=1
end
end
deleted与inserted数据的差异
Inserted 存放进行insert和update操作后的数据
deleted存放进行delete和update操作前的数据
二者结构与触发器作用的表结构是一样的,只是存放的数据有差异
update操作相当于先进行delete再进行insert,所以在进行update操作时,修改前的数据拷贝一条道delete表中,修改后的数据存到触发器作用的表中,同时还要拷贝一条到inserted表中
create trigger deleteNewClass //在表NewClass中创建触发器deleteNewClass ,表中有数据删除时执行删除表News中Classid=3的数据
on NewClass
after delete
as
delete News from News,deleted whereNews.Classid=deleted.ID
Alter trigger newscount
on News
after update
as
begin
declare @rownum int--存储当前是哪一行
declare @titalcount int --总共有多少行
declare @tempid int--保存当前行的newsid
declare @countnews int
declare @tab table(indexid int Identity(1,1) not null,newsid int)--定义一个临时表
insert into @tab select ID from News--把News中的ID插入表中的newsid里
-- select *from @tab
set @titalcount=@@ROWCOUNT--统计临时表有多少行
set @rownum=1
while @rownum<@titalcount--遍历临时表中的数据
begin
select @tempid=newsid from @tab where indexid=@rownum--把每一行的indexid赋给变量@tempid
select @countnews=COUNT(*) from NewClass where
ID=@tempid--NewClass中ID=@tempid的总共数据
update NewClass
set countnews=@countnews
where ID=@tempid
set @rownum+=1
end
end
deleted与inserted数据的差异
Inserted 存放进行insert和update操作后的数据
deleted存放进行delete和update操作前的数据
二者结构与触发器作用的表结构是一样的,只是存放的数据有差异
update操作相当于先进行delete再进行insert,所以在进行update操作时,修改前的数据拷贝一条道delete表中,修改后的数据存到触发器作用的表中,同时还要拷贝一条到inserted表中
相关文章推荐
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<SQL_Server_视图_函数_存储过程_触发器等>(二十三)
- java 从零开始,学习笔记之基础入门<SQL_Server_视图_函数_存储过程_触发器等>(二十三)
- PL/SQL学习笔记之触发器
- pl/sql学习笔记——触发器
- SQL学习笔记7 游标 约束 索引 触发器
- PL/SQL学习笔记-触发器
- ORACLE PL/SQL 触发器(trigger)学习笔记
- Oracle 学习笔记 19 -- 触发器和包浅析(PL/SQL)
- SQl学习笔记7--触发器
- Oracle 学习笔记 19 -- 触发器和包浅析(PL/SQL)
- SQL 学习笔记<六> MySQL存储过程/存储函数/触发器
- sql 触发器学习笔记
- SQL SERVER 学习笔记(触发器)
- 学习笔记-mysql_触发器
- T-SQL 游标学习笔记
- MySql学习笔记—数据库简介及SQL语句的分类
- 转载:提高DB2数据库SQL存储过程性能学习笔记
- T-SQL学习笔记-程序设计基础-自定义函数
- sql 入门经典(第五版) Ryan Stephens 学习笔记 第五部分: 性能调整
- 触发器学习笔记