主页 > 手机  > 

【SQL实验】触发器

【SQL实验】触发器

下载素材文件”tsgl”、“成绩管理”,将tsgl.bak和成绩管理.bak数据库还原到库中【导入操作在之前的文章中详细讲过】

触发器 1、为图书表设置更新触发器,根据总编号来更新书名、作者、出版社、分类号和单价(根据总编号找到相应记录,然后更新书名、作者等信息),更新完毕后提示“图书表更新成功”;编写测试语句进行测试。

被触发事件就是一个print语句

after (for)触发器“触发事件”和“被 触发事件”都执行

----------创建ts更新触发器2---------- --create trigger ts更新触发器2 --on ts --after update --as -- print '图书表更新成功' ----------测试ts更新触发器---------- --update ts set 书名 = 'ceshi_2' --where 总编号 = 999999

2、为dz表插入触发器dz_insert,在插入记录后提示“借书证号为XXXX的读者记录已被插入”,其中XXXX为插入的具体字段值;

--use 图书管理 ----------创建dz的插入触发器---------- --create trigger dz插入触发器 --on dz --after insert --as --begin -- declare @x nvarchar(10) -- select @x = 借书证号 -- from inserted -- print '借书证号为' + @x + '的读者记录已被插入' --end ----------dz插入触发器的测试---------- --insert into dz --values('999','信息系','ceshi','男',1999-07-01,'教授','1号楼424')

 声明变量 @x,用于存储借书证号

从 inserted 表中获取插入记录的 借书证号

   

3、为图书表设置更新触发器,根据总编号来更新书名(根据图书编号找到相应记录,更新书名),更新完毕后提示“更新后的总编号为:XX,书名为:XX”(其中XX代表相应字段的值);

   输入update语句,例如将总编号为J007的图书名改为网络安全基础,测试更新触发器。

----------创建ts更新触发器---------- --create trigger ts更新触发器 --on ts --after update --as --begin ------声明变量 -- declare @x nvarchar(10) --总编号 -- declare @a nvarchar(10) --书名 ------从inserted表中找出修改的编号 -- select @x = 总编号,@a = 书名 -- from inserted ------输出结果 -- print '更新后的总编号为:'+@x+',书名为:'+@a --end ----------测试ts更新触发器---------- --update ts set 书名 = 'ceshi_1' --where 总编号 = 999999

 变量需要先声明再赋值

赋值 

select语句不能同时完成赋值和查询两种操作

4、为ts设置删除触发器,若删除ts记录,则jy表中的相关书籍的记录也应删除,并提示“ts表和jy表相关记录已一并删除” ;编写测试语句进行测试。

---------创建ts删除触发器---------- --create trigger ts删除触发器 --on ts --after delete --as --begin -- declare @x nvarchar(10) -- select @x = 总编号 -- from deleted -- delete from jy -- where 总编号 = @x -- print 'ts表和jy表相关记录已一并删除' --end ----------测试ts删除触发器---------- --delete from ts --where 总编号 = 445501

5、为ts创建instead of 触发器,当删除某条记录时,显示“对不起,不允许删除操作” ;编写测试语句进行测试。

  

----------创建ts禁止删除触发器---------- --create trigger ts禁止删除 --on ts --instead of delete --as --print '对不起,不允许删除操作' ----------测试ts删除触发器---------- --delete from ts --where 总编号 = 999999

6、为“成绩管理”数据库中的tscore表设置触发器,限制“数据库”课程选课人数不超过3人,若选满,则提示“对不起,已选满!”

create trigger trigger8 on tScore after insert as if ((select count(*) from tCourse,tScore where tCourse.课程编号 =tScore.课程编号 and 课程名='数据库')>3) begin delete from tScore where 学号 in (select 学号 from inserted) and 课程编号=(select 课程编号 from tCourse where 课程名=‘ 数据库') print'对不起,已选满!' end

完整代码:

--一、触发器 --1、为dz表和ts表设计分别在插入记录后提示“借书证号为XXXX的读者记录已被插入”或“总编号为XXXX的图书记录已被插入”, --其中XXXX为插入的具体字段值;写一条insert语句,插入记录,对插入触发器进行测试。 --use 图书管理 ----------创建dz的插入触发器---------- --create trigger dz插入触发器 --on dz --after insert --as --begin -- declare @x nvarchar(10) -- select @x = 借书证号 -- from inserted -- print '借书证号为' + @x + '的读者记录已被插入' --end ----------dz插入触发器的测试---------- --insert into dz --values('999','信息系','ceshi','男',1999-07-01,'教授','1号楼424') ----------创建ts的插入触发器---------- --create trigger ts插入触发器 --on ts --after insert --as --begin -- declare @x nvarchar(10) -- select @x = 总编号 -- from inserted -- print '总编号为' + @x + '的图书记录已被插入' --end ----------ts插入触发器的测试---------- --insert into ts --values('999999','ceshi','张三','电子工业出版社','TP',24) --2、为图书表设置更新触发器,根据图书编号来更新书名、作者、出版社、分类号和单价 --(根据图书编号找到相应记录,然后更新书名、作者等信息), --更新完毕后提示“更新后的总编号为:XX,书名为:XX” --(其中XX代表相应字段的值);输入update语句,例如将图书编号为J007的图书名改为网络安全基础,测试更新触发器。 --use 图书管理 ----------创建ts更新触发器---------- --create trigger ts更新触发器 --on ts --after update --as --begin ------声明变量 -- declare @x nvarchar(10) --总编号 -- declare @a nvarchar(10) --书名 ------从inserted表中找出修改的编号 -- select @x = 总编号,@a = 书名 -- from inserted ------输出结果 -- print '更新后的总编号为:'+@x+',书名为:'+@a --end ----------测试ts更新触发器---------- --update ts set 书名 = 'ceshi_1' --where 总编号 = 999999 --3、为图书表设置更新触发器,根据总编号来更新书名、作者、出版社、分类号和单价(根据总编号找到相应记录, --然后更新书名、作者等信息),更新完毕后提示“图书表更新成功”;编写测试语句进行测试。 ----------创建ts更新触发器2---------- --create trigger ts更新触发器2 --on ts --after update --as -- print '图书表更新成功' ----------测试ts更新触发器---------- --update ts set 书名 = 'ceshi_2' --where 总编号 = 999999 --4、为dz表设置删除触发器,若删除dz记录,则jy表中相关记录也应删除, --并提示“dz表和jy表相关记录已一并删除” ;编写测试语句进行测试。 ----------创建ts删除触发器---------- --create trigger ts删除触发器 --on ts --after delete --as --begin -- declare @x nvarchar(10) -- select @x = 总编号 -- from deleted -- delete from jy -- where 总编号 = @x -- print 'ts表和jy表相关记录已一并删除' --end ----------测试ts删除触发器---------- --delete from ts --where 总编号 = 445501 --5、为ts创建instead of 触发器,当删除某条记录时,显示“对不起,不允许删除操作” ;编写测试语句进行测试。 ----------创建ts禁止删除触发器---------- --create trigger ts禁止删除 --on ts --instead of delete --as --print '对不起,不允许删除操作' ----------测试ts删除触发器---------- --delete from ts --where 总编号 = 999999 --6、使用查看命令查看dz表中已创建的触发器;使用命令查看某各触发器代码。 --sp_helptrigger @tabname = ts --sp_helptext ts插入触发器 --7、修改某触发器的名称。 --sp_rename ts删除触发器, ts删除 --8、方法一、替换触发器 --create trigger 触发器1 on tScore --instead of insert --as --begin -- declare @sum nvarchar(50) -- select @sum=COUNT(课程编号) from tScore -- where 课程编号=(select 课程编号 from tCourse where 课程名='数据库') -- if @sum>3 -- print '对不起,已选满' -- else -- insert into tScore select * from inserted --end --方法二:后触发器 --create trigger trigger8 --on tScore --after insert --as -- if ((select count(*) from tCourse,tScore where tCourse.课程编号 -- =tScore.课程编号 and 课程名='数据库')>3) -- begin -- delete from tScore where 学号 in (select 学号 from inserted) -- and 课程编号=(select 课程编号 from tCourse where 课程名=‘ -- 数据库') -- print'对不起,已选满!' -- end

标签:

【SQL实验】触发器由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【SQL实验】触发器