Day 9:(14) 触发器实训_参考答案
2015-11-23 00:04
591 查看
-- 触发器实训_参考答案
-- 1. 在tbl1表( create table tbl1(col1 char(10),col2 char(10)))上创建三个触发器
-- after insert 触发器(当执行insert语句时触发,并显示'after insert 触发器')
-- after update 触发器(当执行update语句时触发,并显示'after update 触发器')
-- after delete 触发器(当执行delete语句时触发,并显示'after delete 触发器')
-- 执行insert tbl1 values('a','b'),验证是否显示 'after insert 触发器',并使用select * from tbl1查看记录
-- 执行update tbl1 set col1 = 'c',col2= 'd',验证是否显示 'after update 触发器',并使用select * from tbl1查看记录
-- 执行delete from tbl1 ,验证是否显示 'after delete 触发器',并使用select * from tbl1查看记录
create table tbl1
(col1 char(10),
col2 char(10))
go
create trigger tr_insert
on tbl1
after insert
as
print 'after insert 触发器'
go
create trigger tr_update
on tbl1
after update
as
print 'after update 触发器'
go
create trigger tr_delete
on tbl1
after delete
as
print 'after delete 触发器'
go
insert tbl1 values('a','b')
go
update tbl1
set col1 = 'c',
col2= 'd'
go
delete from tbl1
go
select * from tbl1
go
drop trigger tr_insert
drop trigger tr_update
drop trigger tr_delete
go
-- 2. 在tbl2表( create table tbl2(col1 char(10),col2 char(10)))上创建三个触发器
-- instead of insert 触发器(当执行insert语句时触发,并显示'instead of insert 触发器')
-- instead of update 触发器(当执行update语句时触发,并显示'instead of update 触发器')
-- instead of delete 触发器(当执行delete语句时触发,并显示'instead of delete 触发器')
-- 执行insert tbl2 values('a','b'),验证是否显示 'instead of insert 触发器',并使用select * from tbl1查看记录
-- 执行update tbl2 set col1 = 'c',col2= 'd',验证是否显示 'instead of update 触发器',并使用select * from tbl1查看记录
-- 执行delete from tbl2 ,验证是否显示 'instead of delete 触发器',并使用select * from tbl1查看记录
create trigger tr_insert
on tbl2
instead of insert
as
print 'instead of insert 触发器'
go
create trigger tr_update
on tbl2
instead of update
as
print 'instead of update 触发器'
go
create trigger tr_delete
on tbl2
instead of delete
as
print 'instead of delete 触发器'
go
insert tbl2 values('a','b')
go
select * from tbl2
update tbl2
set col1 = 'c',
col2= 'd'
go
delete from tbl2
go
drop trigger tr_insert
drop trigger tr_update
drop trigger tr_delete
-- 3. 在test数据库的course表上创建一个INSERT触发器inse_c_data,
-- 如果插入的记录的c_hour字段值小于50,则提示'学时不能小于50',不做插入操作,并验证
create trigger inse_c_data on course after insert as
if(select c_hour from inserted)<50
begin
print '学时不能小于50'
rollback
end
insert into course values('100107','概率论',4,40,'宋佳')
select * from course
insert into course values('100107','概率论',4,60,'宋佳')
-- 4. 查看inse_c_data的定义信息
sp_helptext inse_c_data
-- 5. 修改触发器inse_c_data,加密定义文本,并验证
alter trigger inse_c_data on course with encryption after insert as
if(select c_hour from inserted)<50
begin
print '学时不能小于50'
rollback
end
sp_helptext inse_c_data
-- 6. 查看触发器inse_c_data的信息
sp_help inse_c_data
-- 7. 查看触发器inse_c_data的相关性
sp_depends inse_c_data
-- 8. 重命名触发器inse_c_data为inse_course_date
sp_rename inse_c_data,inse_course_data
-- 9. 删除触发器inse_course_data
drop trigger inse_course_data
-- 10. 在test数据库的course表上创建一个UPDATE触发器update_c_data,
-- 如果插入的记录的c_credit字段值大于10,则提示'学分不能大于10',不做插入操作,并验证
create trigger update_c_data on course after update as
if update(c_credit)
begin
if(select c_credit from inserted)>10
begin
print '学分不能大于 10'
rollback
end
end
update course set c_credit=19 where c_number='100101'
-- 11. 在test数据库的stu_info表上创建一个INSERT、UPDATE触发器tri_gender,使输入的性别只能为'男' 或 '女',并验证
create trigger tri_gender on stu_info
for insert,update as
if update(t_gender)
begin
if(select t_gender from inserted) not in('男','女')
print '性别错误'
rollback
end
-- 插入记录
insert into stu_info values('20040307','王静','王','1984-12-12')
-- 提示“性别错误”,不进行插入操作
select * from stu_info
-- 修改记录
update stu_info set t_gender='wn' where t_number='20040301'
select * from stu_info
-- 12. 在test数据库的course表上创建INSTEAD OF触发器not_dele_c,使不能删除course表的记录
create trigger not_dele_c on course instead of delete as print'不能删除course表的记录'
-- 删除一条记录
delete from course where c_number='100101'
-- 思考题:设计一个叫号功能,
--设计表并在该表上创建一个触发器,能自动生成编号,并且记录叫号的时间,编号从1开始,到10就重新从1开始
create table sss(seq int identity(1,1),s_name varchar(20),sdate datetime default(getdate()))
insert into sss(s_name) values('ss')
select * from sss
create trigger insert_sss on sss after insert as
if(@@identity)>10
begin
truncate table sss
insert into sss(s_name) values('ss')
end
-- 1. 在tbl1表( create table tbl1(col1 char(10),col2 char(10)))上创建三个触发器
-- after insert 触发器(当执行insert语句时触发,并显示'after insert 触发器')
-- after update 触发器(当执行update语句时触发,并显示'after update 触发器')
-- after delete 触发器(当执行delete语句时触发,并显示'after delete 触发器')
-- 执行insert tbl1 values('a','b'),验证是否显示 'after insert 触发器',并使用select * from tbl1查看记录
-- 执行update tbl1 set col1 = 'c',col2= 'd',验证是否显示 'after update 触发器',并使用select * from tbl1查看记录
-- 执行delete from tbl1 ,验证是否显示 'after delete 触发器',并使用select * from tbl1查看记录
create table tbl1
(col1 char(10),
col2 char(10))
go
create trigger tr_insert
on tbl1
after insert
as
print 'after insert 触发器'
go
create trigger tr_update
on tbl1
after update
as
print 'after update 触发器'
go
create trigger tr_delete
on tbl1
after delete
as
print 'after delete 触发器'
go
insert tbl1 values('a','b')
go
update tbl1
set col1 = 'c',
col2= 'd'
go
delete from tbl1
go
select * from tbl1
go
drop trigger tr_insert
drop trigger tr_update
drop trigger tr_delete
go
-- 2. 在tbl2表( create table tbl2(col1 char(10),col2 char(10)))上创建三个触发器
-- instead of insert 触发器(当执行insert语句时触发,并显示'instead of insert 触发器')
-- instead of update 触发器(当执行update语句时触发,并显示'instead of update 触发器')
-- instead of delete 触发器(当执行delete语句时触发,并显示'instead of delete 触发器')
-- 执行insert tbl2 values('a','b'),验证是否显示 'instead of insert 触发器',并使用select * from tbl1查看记录
-- 执行update tbl2 set col1 = 'c',col2= 'd',验证是否显示 'instead of update 触发器',并使用select * from tbl1查看记录
-- 执行delete from tbl2 ,验证是否显示 'instead of delete 触发器',并使用select * from tbl1查看记录
create trigger tr_insert
on tbl2
instead of insert
as
print 'instead of insert 触发器'
go
create trigger tr_update
on tbl2
instead of update
as
print 'instead of update 触发器'
go
create trigger tr_delete
on tbl2
instead of delete
as
print 'instead of delete 触发器'
go
insert tbl2 values('a','b')
go
select * from tbl2
update tbl2
set col1 = 'c',
col2= 'd'
go
delete from tbl2
go
drop trigger tr_insert
drop trigger tr_update
drop trigger tr_delete
-- 3. 在test数据库的course表上创建一个INSERT触发器inse_c_data,
-- 如果插入的记录的c_hour字段值小于50,则提示'学时不能小于50',不做插入操作,并验证
create trigger inse_c_data on course after insert as
if(select c_hour from inserted)<50
begin
print '学时不能小于50'
rollback
end
insert into course values('100107','概率论',4,40,'宋佳')
select * from course
insert into course values('100107','概率论',4,60,'宋佳')
-- 4. 查看inse_c_data的定义信息
sp_helptext inse_c_data
-- 5. 修改触发器inse_c_data,加密定义文本,并验证
alter trigger inse_c_data on course with encryption after insert as
if(select c_hour from inserted)<50
begin
print '学时不能小于50'
rollback
end
sp_helptext inse_c_data
-- 6. 查看触发器inse_c_data的信息
sp_help inse_c_data
-- 7. 查看触发器inse_c_data的相关性
sp_depends inse_c_data
-- 8. 重命名触发器inse_c_data为inse_course_date
sp_rename inse_c_data,inse_course_data
-- 9. 删除触发器inse_course_data
drop trigger inse_course_data
-- 10. 在test数据库的course表上创建一个UPDATE触发器update_c_data,
-- 如果插入的记录的c_credit字段值大于10,则提示'学分不能大于10',不做插入操作,并验证
create trigger update_c_data on course after update as
if update(c_credit)
begin
if(select c_credit from inserted)>10
begin
print '学分不能大于 10'
rollback
end
end
update course set c_credit=19 where c_number='100101'
-- 11. 在test数据库的stu_info表上创建一个INSERT、UPDATE触发器tri_gender,使输入的性别只能为'男' 或 '女',并验证
create trigger tri_gender on stu_info
for insert,update as
if update(t_gender)
begin
if(select t_gender from inserted) not in('男','女')
print '性别错误'
rollback
end
-- 插入记录
insert into stu_info values('20040307','王静','王','1984-12-12')
-- 提示“性别错误”,不进行插入操作
select * from stu_info
-- 修改记录
update stu_info set t_gender='wn' where t_number='20040301'
select * from stu_info
-- 12. 在test数据库的course表上创建INSTEAD OF触发器not_dele_c,使不能删除course表的记录
create trigger not_dele_c on course instead of delete as print'不能删除course表的记录'
-- 删除一条记录
delete from course where c_number='100101'
-- 思考题:设计一个叫号功能,
--设计表并在该表上创建一个触发器,能自动生成编号,并且记录叫号的时间,编号从1开始,到10就重新从1开始
create table sss(seq int identity(1,1),s_name varchar(20),sdate datetime default(getdate()))
insert into sss(s_name) values('ss')
select * from sss
create trigger insert_sss on sss after insert as
if(@@identity)>10
begin
truncate table sss
insert into sss(s_name) values('ss')
end
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马
- Oracle 手动创建数据库步骤详解
- 分割超大Redis数据库例子