SQL server高级应用(二)
transaction
提交事务:commit transaction
回滚事务:rollback transaction
事务分类
显式事务:用begin transaction 明确指定事务的开始。
隐性事务:通过设置set implicit_transactions on语句,将陷性事务模式设置为打开。当以隐性事务操作时,SQL server将在提交或回滚事务后扑克动启动新事务。无法描述事务的开始,只需提交或回滚每个事务.
自动提交事务:这是SQL server的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交。如果错误,则自动回滚。
示例:
Begin transaction--开始事务
Declare @errorsum int
Set @errorsum=0
Update ……………………….
Set @errorsum=@errorsum+@@error
Update………………………..
Set @errorsum=@errorsum+@@error
If @errorsum<>0
Begin
Rollback transaction--回滚事务
End
Else
Begin www.2cto.com
Commit transaction--提交事务
End
Go
4.2索引
索引是SQL server编排数据的内部方法。它为SQL server提供一种方法来编排查询数据的路由
索引页:
数据库中的存储索引的数据页。索引页存放检索数据行的关键字页以及该数据行的地址指针。索引页类似于汉语字典中按拼音或笔画排序的目录页。
唯一索引:
唯一索引不允许两行具有相同的索引值.
主键索引:
在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。
聚集索引:
在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同。表只能包含一个聚集索引。
创建索引
If exists (select name from sysindexes where name=’myindex’)
Drop index 表名.myindex
Create nonclustered index myindex
on
student(id) with fillfactor=30
go
myindex为索引名,with fillfactor=30,指定填充因子为30%
使用索引
Select * from stumarks (myindex) where writtenExam between 60 and 90
Stumarks为表名,myindex为索引名,writtenexam为列名,between 60 and 90 指定查询出writtenexam字段60至90之间的值
建立索引的条件
该列用于频繁搜索
该列用于对数据进行排序
禁止使用索引的情况
列中仅包含几个不同的值
表中数据仅包含几行,为小型表创建索引可能不太划算,因为SQL server在索引中搜索数据所花的时间比在表中逐行搜索所花的时间更长
4.3视图
视图的用处
筛选表中的行
防止未经许可的用户访问敏感数据
降低数据库的复杂程度
将多个物理数据表抽象为一个逻辑数据表
使用视图的好处 www.2cto.com
ü 对最终用户的好处
l 结果更容易理解。创建视图时,可以将列名改为有意义的名称,使用户更容易理解列所代表的内容。在视图中修改列名不会影响基表的列名
l 获得数据更容易。很多人对SQL不太了解,因此对他们来说创建对多个表的复杂查询很困难。因而可以通过创建视图来方便用户访问多个表中的数据。
ü 对开发人员的好处
l 限制数据检索更容易。开发人员有时需要隐藏某些行或列中的信息。通过使用视图,用户可以灵活地访问他们需要的数据,同时保证同一个表或其他表的其他数据库的安全性。要实现这一目标,可以在创建视图时将要对用户保密码的列排除在外。
l 维护应用程序更方便。调试视图比调试查询更容易。跟踪视图中过程的各个步骤中的错误更为容易,这是因为所有的步骤都是视图的组成部分。
创建视图
If exists (select * from sysobjects where name-‘myview’)
Drop view myview
Go
Create view myview
As
Select 姓名=stuName,学员=sutInfo from stuInfo left join stuMarks
on stuInfo.stuNO=stuMarks.stuNo
Go
使用视图
Select * from myview
五.存储过程
5.1系统存储过程
常用系统存储过程
Sp_datadases 列出服务器上的所有数据库
Sp_helpdb 报告有关指定数据库或所有数据库的信息
Sp_renamedb 更改数据库的名称
Sp_tables 返回当前环境下可查询的对象的列表
Sp_columns 返回某个表列的信息
Sp_help 查看某个表的所有信息
Sq_helpconstraint 查看某个表的约束
Sq_helpindex 查看某个表的索引
Sq_stored_procedures 列出当前环境中的所有存储过程
Sp_password 添加或修改登录帐户的密码
Sp_helptext 显示默认值、未
加密的存储过程、用户定义的存储过程、触发器或视图的实际文本 www.2cto.com
5.2自定义存储过程
不带参存储过程
带输入参数的存储过程
带输出参数的存储过程
5.2.1不带参数的存储过程
Create proc procedureName
As
SQL 语句
Go
调用语法
Exec procedureName
5.2.2带输入参数的存储过程
Create proc procedureName
@number int =默认值,
@n varchar(20)
As
SQL 语句
Go
调用语法: www.2cto.com
Exec procedureName 200,’lyh’
Exec procedureName @n=’lyh’
5.2.3带输出参数的存储过程
Create proc procedureName
@number int output,
@name char(20)
As
SQL 语句
Set @number=1000
Go
调用语法