复习三

触发器:
是一个特殊的存储过程,没有参数,没有返回值;
通过对表的动作来触发执行;

创建格式:
create trigger 触发器名称(命名规范:动作_表名称)--动作:insert,delect,update
on 哪个表 --on 针对哪个表
for 哪个动作/ after 哪个动作--for是命令执行完毕之后再触发,after与for意思一样。
as
select *from 哪个表

create trigger 触发器名称(命名规范:动作_表名称)
on 表名
instead of delect --instead of是替换命令
as
select *from deleted --deleted要删除的信息

delect from 表名 --执行受到触发器阻拦,执行select *from 哪个表,不会删除

修改:
alter trigger 触发器名称(命名规范:动作_表名称)
on 哪个表
for 哪个动作
as
update 表名 set 列名=''where 列名=''

级联删除:
create trigger 触发器名称(命名规范:动作_表名称)
on 表名
instead of delect
as
declare @a varchar(max); --声明变量
select @a =列名2 from deleted;--要删除的信息赋值到变量里
delete from 表1 where 列名1=@a; --相关的列
delete from 表2 where 列名2=@a;

视图:create view 表1_表2
as
select *from 表1,表2 where 列1=列2 (列1和列2 是主外键关系)
select *from 表1_表2
防止误删
create trigger delete_表名
on 表名
instead of delete
as
declare @a nvarchar(max);
select @a =列名 from deleted;
if @a='数据'
begin
print'内容' ;--在消息框中打印出来
end
else
begin
delete from 表名 where 列名=@a;
end

delete from 表名 where 列名='数据' --只要有不让删的数据,整个动作都是错误的,所有让删除的都不会删除

自增列:identity
create table 表名
(
列名 int primary key identity (1,1), --identity(从几开始递增,每次增几个)列自增,
列名 nvarchar (50),
列名 int
)
select *from 表名
注意:identity一直处于自增状态,序号不管删除不删除,都是占用状态,只出现一次

原文地址:https://www.cnblogs.com/sunshuping/p/5690387.html