4 创建事务
--借书的事务
begin transaction
declare @error int
set @error = 0
insert into borrows(rid,bid,borrowdate) values
(5,10,2008-6-11)
set @error = @error + @@error
update books set bstate=1
where bid=10
set @error = @error + @@error
if @error <> 0
rollback transaction
else
commit transaction
事物三步曲:begin transaction,rollback transaction,commit transaction。在这里我们还看到了@error和@@error两个变量,前者是我们定义的局部变量,后者是sql server定义好的int型全局变量。定义变量的方式为:declare @error int 。而设置局部变量的方式为set @error = 0,还有一种方式为 select @error = 字段名称 from 表。顺便说一下,在sql server 种输出方式也有两种,一种是print,另一种是select 语句。前者打印的是文本,后者打印的是表格。
关于事务,就的提到事务的隔离级别了,分别为:读未提交,读已提交,可重复读和序列化。sql server默认的隔离级别为读已提交。不同的隔离级别产生的问题有:丢失修改(写写冲突),胀读,不可重复读和幻读。读未提交隔离级别会产生所有问题,而序列化不会产生任何问题。另外,幻读和不可重复读的概念也是不一样的哦,一个是对象的集合,一个是对象的状态。
5 索引
--索引
create clustered index IX_Books_Name
on Books(Bname)
with fillfactor 30
select * from books (index=IX_Books_Name)
where bname='计算方法'
看到了吧,创建索引很简单的,当然索引有四个类型(主键索引,唯一索引,聚集索引和非聚集索引),主键索引是为一个不同创建方式的索引,我们在创建主键的时候她就创建了,同时还设定为聚集索引。关于聚集索引和非聚集索引的概念也非常简单,使用字典就是很好的比喻,如果还不知到这两个概念,那赶紧查一下资料吧。使用它就更简单了,只要在查询的表名称后面加上index = 索引名称 就可以了。
6 视图
--借阅视图
create view V_Borrow
as
select 图书编号=books.bid, 图书名=books.bname,
读者编号=readers.rid,读者姓名=readers.rname,
借阅日期=borrows.borrowdate,归还日期=borrows.returndate
from books
inner join borrows on books.bid=borrows.bid
inner join readers on readers.rid=borrows.rid
这个就没有什么说的了,太简单了。
7 存储过程
sql server中的存储过程就像编程语言中的方法。他是一系列操作的封装。当然他也有名称,参数,方法体。对于参数的写法,和其他语言非常不一样的。
@lianxi int [= 0] [output]
名称 类型 默认值 输入/输出
output代表的是输出参数。在这里输入输出参数是写在一起的,这也是和其他编程语言不一样的地方。下面是创建的方法:
create procedure xxx
@lianxi int [= 0] [output]
as
xxxx
调用使用的是 exec 存储过程名称。
在sql server中存储过程又分为系统存储过程和用户自定义存储过程。上面讲的都是用户自定义存储过程。对于系统存储过程,sql server都把他们放到master系统数据库中的,在那里我们可以看到他的详细代码。另外还有的概念就是扩展系统存储过程。