一、视图
1.1视图介绍
视图:虚拟表,不是实际存在的,由一个或多个表通过查询而定义的,将查询定义保存起来,实际不包含数据。
视图与表的区别:
- 表:存储数据的地方
- 视图:存储查询语句(索引视图除外,索引视图存储物理数据)
作用:简化数据查询,增加数据保密性
缺点:只是简化查询,并不提高查询速度,增加维护成本。
视图分类:
- 标准视图:存储查询语法定义,没有存储数据。
- 索引视图:【具体化视图,创建索引,显示提高查询性能,聚合了很多行的查询,不太适合经常更新基本数据集】删除索引视图,表的数据也会被删除。
- 分区视图:一台或多台服务器间水平链接一组成员表的分区数据。
1.2 T-SQL创建视图
1.2.1 标准视图语法
create view 视图名称
as
--T-SQL查询语句
select 列名,列名,列名,列名
from 表名 a
inner join 表名b --因为视图数据具有一定保密性,所以通常使用Inner join on
on a.列名=b.列名
--使用标准视图
select * from 视图名称
--修改视图
alter view 视图名
1.2.2 创建索引视图语法
create view 视图名称 WITH SCHEMABINDING
as
select 列名,列名,列名 from dbo.表名 --创建索引视图,不允许使用select * 需要写清字段名,表名需要规定所有者 dbo.表名
--索引视图创建唯一聚集索引
create unique clustered index 索引名
on 视图名(视图列)
1.2.3创建分区视图语法
create view 视图名
as
select 列名,列名,列名 from 表名 ---第一组服务器
union all / union --不去重/去重
select 列名,列名,列名 from 表名 --第二组服务器
二、存储过程
2.1存储过程介绍
定义:为了完成特定功能的一个或一组SQL语句的集合,经编译后存储在服务器段的数据库中,利用存储过程来加速我们对sql语句的执行。
执行逻辑:调用名称,传入参数,执行来完成特定功能。
存储过程分类:
- 系统存储过程: 记录在master数据库中,但是在其他数据库中也可以直接调用,并且不必在前面加上数据库名,创建数据库时,这些系统存储过程就会在新的数据库中自动创建。
- 自定义存储过程:用户自己创建的,用以完成特定的功能。可以传入参数,也可以有返回值(通常表明执行是否成功),可以只有一个操作,也可以包括多个。
执行语法: execute / exec 存储过程名,参数(多个参数以逗号隔开)
优点:
1.提高应用程序的通用性和可移植性,多次调用,而不必重新再去编写,维护人员可以随时修改。
2.可以更有效的管理数据库的权限
3.可以提高执行SQL的速度
4.减轻服务器负担。
缺点:需要专门维护,占用数据库空间。
2.2 存储过程语法
create proc 存储过程名称/alter proc修改/drop proc删除
@传入参数
AS
BEGIN
SQL语句集合
END
GO
三、触发器
3.1触发器介绍
触发器:是一种特殊类型的存储过程。【对表进行插入、更新、删除时,若定义了触发器,系统则会自动执行触发器】
调用:通过事件触发,自动调用执行。
触发器分类:
DML触发器的分类:
- after触发器 Insert update delete【操作之后触发 】
- instead of 触发器 insert updata delete【不执行定义的操作,而执行的是触发器的本身】
【定义了after触发器后,最好不要执行 Instead of】
inserted deleted:插入表 删除表,逻辑表/虚拟表,系统在内存中创建的,不会存储到数据库中,只读属性,可以读取但不能修改数据。结构与操作的表相同的。触发器执行过程中存在的,并且可以访问,工作完成之后,这两张表会自动删除。
对表的操作 | Inserted | deleted |
insert(插入) | 存放插入的数据 | 不会存储的数据 |
update(更新) | 存放更新后的数据 | 存放更新前的数据 |
delete(删除) | 不会存储数据 | 存放被删除的数据 |
Inserted表 存放插入或更新后的数据
deleted表 存放更新前或删除的数据
触发器执行过程中,都可以访问,提交之前,是不是都可以撤销---事务的回滚? 可以
触发器时一个特殊的事务,一些检查,设置条件,如何不满足,可以回滚
3.2 after触发器
3.2.1 after insert 触发器语法
--语法: declare定义变量 print打印
create/alter trigger 触发器名称
on 表名
for/after insert
as
--TSQL
go
print'定义操作:'+参数+','+参数+','+参数(其中参数拼接可能需要进行数据转换)
3.2.2 after update 触发器语法
以前执行updata语句后,能看到只是
修改后的数据
触发器能做到显示修改前后的数据对比。
--语法:
create/alter trigger 触发器名称
on 表名
for/after update
as
--TSQL
go
3.2.3 after delete 触发器语法
删除数据并备份的方法
after delete 在删除操作执行之后触发 在deleted表中可以查看删除后的数据。特殊的事务,可以通过事务回滚将进行数据恢复
create/alter trigger 触发器名称
on 表名
for/after delete
as
if (OBJECT_ID('UserInfos_Backup','U') is not null) --判断目标表是否存在 OBJECT_ID 返回数据库对象标识号
insert into 备份表 select 列名 from deleted --备份表,若表不存在则创建表
else
select 列名 into 备份表 from deleted --备份表,若表存在则插入数据
go
3.2.4 instead of insert 触发器语法
只执行触发器本身,不执行T-SQL的定义
语法:
create/alter trigger 触发器名称
on 表名
instead of insert
as
--TSQL
go
总结
以上就是SQL server 数据库基本命令的使用啦,让我们一起共同努力学习吧!