视图
1. 视图不占物理存储空间,它只是一种逻辑对象。可将其看成一个"虚表 "
视图是一个由select 语句指定,用以检索数据库表中某些行或列数据的语句存储定义
注:创建视图语句中,不能包括order by、compute或者compute by 子句,也不能出现into关键字
2.创建水平视图
视图的常见用法是限制用户只能够存取表中的某些数据行,用这种方法产生的视图称为水平视图,即表中行的子集
create
view
student_view1
as
select
*
from
student
where
(class_id
=
'
0903
'
)
3.创建投影视图
如果限制用户只能存取表中的部分列的数据,那么,使用这种方法创建的视图就称为投影视图,即表中列的子集
create
view
student_view2
as
select
student_id
as
'
学号
'
,student_name
as
'
姓名
'
,sex
as
'
性别
'
from
student
where
sex
=
1
with
check
option
/*
强制视图上执行的所有修改语句必须符合由select 语句设置的准则
*/
4.创建联合视图
用户可以生成从多个表中提取数据的联合视图,把查询结果表示为一个单独的"可见表"
索引
5.索引是数据库的对象之一, 索引是为了加速对表中数据行的检索而创建的一种分散的一种存储结构。
索引是针对一个表而建立的,它是由数据页面以外的索引页面组成的
6.索引的分类
聚簇索引
数据表的物理顺序和索引表的顺序相同,它根据表中的一列或多列值的组合排列记录
create
unique
clustered
index
book_id_index
--
惟一性聚簇索引
on
book(book_id
asc
)
with
fillfactor
=
50 /*
填充因子50%*/
非聚簇索引
create
nonclustered
index
student_course_index
on
student_course(student_id
asc
,course_id
asc
)
with
fillfactor
=
50
存储过程
存储过程是一系列预先编辑好的、能实现特定数据操作功能的 SQL代码集 。它与特定的数据库相关联,存储在SQL Server 服务器上
存储过程的好处:
(1)重复使用。存储过程可以重复使用,从而减少数据库开发人员的工作量
(2)提高性能。存储过程在创建的时候就进行了编译,将来使用的时候就不用再编译。一般的SQL语句使用一次就编译一次,所以使用存储过程提高了效率
(3)减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此减低了网络传输的运输量
(4)安全性。参数化的存储过程可以防止SQL注入攻击,而且可以将Grant、Deny、以及Revoke权限应用于存储过程
定义一个存储过程:
create
proc
spAddStudents
@name
nvarchar
(
50
)
=
null
as
begin
transaction
--
事务
insert
into
[
StudentInfo
]
.
[
dbo
]
.
[
Students
]
(Name)
values
(
@name
)
if
@@ERROR
<>
0
begin
rollback
tran
return
end
commit
transaction
--
提交事务
创建一个实现加法计算并将运算结果作为输出参数的存储过程
create
proc
spAdd
@value1
int
,
@value2
int
,
@result
int
output
as
select
@result
=
@value1
+
@value2
go
执行spAdd存储过程
declare
@value1
int
declare
@value2
int
declare
@result
int
set
@value1
=
1
set
@value2
=
1
exec
spAdd
@value1
,
@value2
,
@result
output
print
convert
(
char
(
5
),
@value1
)
+
'
+
'
+
convert
(
char
(
5
),
@value2
)
+
'
=
'
+
convert
(
char
(
5
),
@result
)
触发器
触发器是一种实施复杂数据完整性的特殊存储过程,在对表或视图执行update、insert或delete语句时自动触发执行,以防止对数据进行不正确、未授权或不一致的参数
/*
创建update触发器
*/
create
trigger
[
dbo
]
.
[
TaocanType_update
]
on
[
dbo
]
.
[
Table_TaocanType
]
for
update
as
update
[
dbo
]
.
[
Table_ChoseTaocanType
]
set
Taocan
=
inserted.Taocan
from
[
dbo
]
.
[
Table_ChoseTaocanType
]
,inserted
where
[
dbo
]
.
[
Table_ChoseTaocanType
]
.TaocanId
=
inserted.TaocanId
触发器能够维持两个表间的参照完整性,就像外键一样。外键执行这个任务的效率更高,因为它们在数据改变之前被测试,而不像触发器在数据改变后才触发
游标
游标是一种处理数据的方法,为了查看或者处理结果集中的数据,游标提供了在结果集中向前或者向后浏览数据的能力
(1)创建游标
(2)打开游标
(3)读取数据
(4)数据操作
(5)关闭和释放游标
declare
@taocan
nvarchar
(
50
),
@youhui
nvarchar
(
50
)
declare
taocan_cursor scroll
cursor
--
声明游标
for
select
Taocan,youhui
from
[
189Shop
]
.
[
dbo
]
.
[
Table_TaocanType
]
for
read
only
open
taocan_cursor
--
-打开游标
fetch
from
taocan_cursor
into
@taocan
,
@youhui
--
从游标中提取行
while
@@FETCH_STATUS
=
0
--
表示成功完成FETCH 语句
begin
print
'
套餐:
'
+
@taocan
+
'
,优惠:
'
+
@youhui
fetch
from
taocan_cursor
into
@taocan
,
@youhui
end
close
taocan_cursor
--
关闭游标
deallocate
taocan_cursor
--
释放游标
事务
所谓事务,是指一个操作序列,这些操作序列要么都被执行,要么都不被执行,它是一个不可分割的工作单元

