视图、触发器
一、视图:
【是由一个或多个表的数据拼接而成,是一个虚拟的表;
只能用来查询显示,不可以增删改操作;
如果要增删改操作,需要去对应的基础表进行操作;
每一次查询视图,都会先去基础表中调取数据,再拼接成视图虚拟表;】
1、创建格式:
create view 虚拟表名称
as
要执行的代码
【注意!!!:视图中,不允许出现重复的列!!!
解决方式:
表名称.重复的字段名
】
例如下图:
2、修改格式:
alter view 要修改的虚拟表的名称
as
修改后要执行的代码
3、使用方式:
数据库—视图—视图名称—右击“设计”—改“别名”
select *from虚拟表名称
二、触发器
触发器是一个特殊的存储过程,没有参数,没有返回值
通过对表的动作来触发执行
1、创建格式:
create trigger 触发动作_要操作的表名称 insert/update/delete
on 要操作的表名称
for/after 触发动作
as
要执行的代码
例如:select *from 要操作的表名称
for/after 是在动作执行完毕之后再触发
instead of 是替换命令
【如果要修改触发器的书写格式:
alter trigger 触发动作_要操作的表名称 insert/update/delete
on 要操作的表名称
for/after 触发动作
as
修改后要执行的代码
】
每个表里的增、删、改三种触发器,一种只能有一个
2、存储位置:
数据库—表—触发器—右击‘修改’
3、级联删除:
用来删除不同表里有约束的数据
create trigger 触发动作_要操作的表名称
on 要操作的表名称
instead of 触发动作
as
要执行操作的代码
4、防止误删数据
create trigger delete_students
on students
instead of delete
as
declare @a nvarchar(max)
select @a = name from deleted;
declare @b nvarchar(max)
select @b = code from deleted;
if @a = 'XXX'
begin
print 'XXXXX,XXXX';
end
else
begin
delete from students where name = @a;
end
delete *from students where code = 'XXX';