一、事务1.一组数据命令要么都执行,要么都不执行 (同生共死)。
2.事务的四大属性: 原子性(atomicity)、一致性(consistercy)、隔离性(isolation)及持久性(durability)
3.用T-SQL语句执行事务;
BEGIN TRANSACTION ----------开始事务
COMMIT TRANSACTION -----------提交事务
ROLLBACK TRANSACTION --------------回滚事务
4.事务分类:
a.显示事务:用begin transaction 明确指定事务的开始
b.隐式事务:通过设置 set implicit_transactions on语句,将隐式事务模式打开。
c.自动提交事务:这是SQL Server的默认模式,它将每条单独的T_SQL语句视为一个事务。
4.事务应用实例:银行转账
use master
if exists (select * from sysdatabases where name='Bank')
drop database Bank
create database Bank
on primary
(
name='Bank',
size=5mb,
filename='D:\Bank.mdf'
)
log on
(
name='Bank_log',
size=5mb,
filename='D:\Bank_log.ldf'
)
go
use Bank
create table bank
(
id int identity(1,1) primary key not null,
name nvarchar(32),
balance int
)
alter table bank
add constraint check_bank_balance check (balance>=1)
insert into bank values('徐小青',10000),('徐倩倩',1)
begin transaction --开始事务
declare @sumError int
set @sumError=0
--转账
update bank set balance-=10000
where id=1
set @sumError+=@@ERROR --累计是否有误
update bank set balance+=10000
where id=2
set @sumError+=@@ERROR
--根据是否有误,判断是提交还是回滚
if @sumError>0
begin
--回滚
rollback transaction
end
else
begin
--提交
commit transaction
end
go
select * from bank
二、视图
1.什么是视图?
视图是一种虚拟表。视图可以查询 一个表或多个表,根据不同需求,构建不同的视图。
2.创建和使用视图
创建:
方法一 使用Microsoft SQL Server Managerment Studio
展开数据库------选择“视图”右击----------选择“新建视图”----------单击“添加”----选择希望添加的列,自动生成T-SQL语句
方法二 T-SQL语句
create view vw_name
as
<select 语句>
3.使用T-SQL语句查看视图数据
select col_name1,col_name2,..... from vw_name
4.使用视图注意的事项
a.每个视图中可以使用多个表。
b.与查询 相似,一个视图可以嵌套另一个视图,但最好不要超过3层。
c.视图定义中的select语句不能包括以下内容:
group by 子句,除非在select语句的选择表中 也有一个top子句
into关键字
引用临时表或表变量
三、索引
1.什么是索引?
是某个表中一列或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引页是数据库中储存索引的数据页。
索引作用:大大提高数据库的检索速度,改善数据库性能。
2.索引分类
1).唯一索引:不允许出现两行具有相同的索引值。
2).主键索引
3).聚集索引:在一张表中,如果有主键列,那么主键列会被自动提升成聚集索引。
每张表中,聚集索引只能有一个(一般是主键列),它形成依据,与表中物理顺序是一致的。
物理顺序:每条记录被写到表中的先后顺序。
4).非聚集索引:建立在索引页上,当查询数据时可以从索引中找到记录存放的位置。
一张表中,非聚集索引最多有255个。
5).复合索引:将多个列组合成索引
6).全文索引
3.创建索引
方法一: 使用Microsoft SQL Server Managerment Studio
方法二:
create [unique] [clustered | nonclustered] index index_name
on table_name (column_name [ , column_name ] ......)
[with fillfactor=x]
4.删除索引
drop index table_name.index_name
删除索引是需要注意的:
a. 删除表时,该表的所有索引将同时被删除。
b.如果要删除表中的所有索引,则先要删除非聚集索引,再删除聚集索引。
5.查看索引
1). 用系统存储过程sp_helpindex查看
sp_helpindex table_name
例如: exec sp_helpindex result
2). 用视图sys.indexes查看
select * from sys.indexes