SQL语言的基础操作--(4)
来源:互联网 发布:js pdf在线阅读 编辑:程序博客网 时间:2024/05/21 09:34
事务、索引和游标
事务
-- 事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作
-- 这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行
-- 事务是一个不可分割的工作逻辑单元
-- 事务必须具备以下四个属性,简称ACID 属性:
-- 原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行
-- 一致性(Consistency):当事务完成时,数据必须处于一致状态
-- 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖 -- 于或影响其他事务
-- 永久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性
-- =========================================================================================================================
-- T-SQL使用下列语句来管理事务:
-- 开始事务:BEGIN TRANSACTION
-- 提交事务:COMMIT TRANSACTION
-- 回滚(撤销)事务:ROLLBACK TRANSACTION
-- 一旦事务提交或回滚,则事务结束。
-- ==============================================
--判断某条语句执行是否出错:
--使用全局变量@@ERROR;
-- @@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计
-- 如:
SET @errorSum=@errorSum+@@error
-- =========================================================================================================================
-- 事务的分类:
-- 显示事务:用BEGIN TRANSACTION明确指定事务的开始,这是最常用的事务类型
-- 隐性事务:通过设置SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置为打开,下一个语句自动启动一个新事务。 -- 当该事务完成时,再下一个T-SQL 语句又将启动一个新事务
-- 自动提交事务:这是SQL Server 的默认模式,它将每条单独的T-SQL 语句视为一个事务,如果成功执行,则自动提交;如果 -- 错误,则自动回滚
-- =================================================================================================================
-- 下面举一个银行转账的实例。银行余额不能小于1元,否则视为销户,假定从张三的账户直接转1000元到李四的账户。
-- 如果不采用事务,那么将会导致张三中的余额不变,而李四中的多出1000元。具体代码如下:
-- 建表
create table bank
(
currentMoney money,
customerName varchar(50) primary key
)
-- 添加约束
alter table bank
add constraint CK_currentMoney
check(currentMoney>=1)
insert into bank values(1000.00, 'zhangsan')
insert into bank values(1.00, 'lisi')
-- 开始事务
begin transaction
declare @errorSum int
set @errorSum=0
update bank set currentMoney = currentMoney-1000
where customerName ='zhangsan'
set @errorSum = @errorSum+ @@error
update bank set currentMoney = currentMoney+1000
where customerName ='lisi'
set @errorSum = @errorSum+ @@error
-- 检查错误信息,只有上述两个操作都成功,才提交事务
if @errorSum<>0
begin
print '交易失败,回滚事务'
rollback transaction
end
else
begin
print '交易成功,提交事务'
commit transaction
end
print '转账事务后的余额'
select * from bank
go
-- ==================================================================================================================
索引
--SQL Server中的数据也是按页(4KB )存放
--索引:是SQL Server编排数据的内部方法。它为SQL Server提供一种方法来编排查询数据。
--索引页:数据库中存储索引的数据页;索引页类似于汉语字(词)典中按拼音或笔画排序的目录页。
--索引的作用:通过使用索引,可以大大提高数据库的检索速度,改善数据库性能。
--索引的分类:
--唯一索引:唯一索引不允许两行具有相同的索引值
--主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空
--聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个
--非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于个
--优点:
--加快访问速度,加强行的唯一性
--缺点:
--带索引的表在数据库中需要更多的存储空间
--操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新
--=================================================================================================
-- create [UNIQUE] [CLUSTER] index <索引名> ON <表名> (<列名>[<次序>][,<列名>[<次序>]]...);
-- 其中,<表名>指定要建索引的基本表的名字。
-- 索引可以建在该表的一列或多列上,各列名之间用逗号分隔。
-- 每个<列名>后面还可以用<次序>指定索引值的排列次序,包括ASC(升序)和DESC(降序)两种,缺省值为ASC。
-- =========================== =====================================================================
-- 例:
-- 为学生-课程数据库中的Student、Couse、SC三个表建立索引。
-- 其中Student表按学号升序建唯一索引,Couse表按课程号升序建唯一索引,
-- Sno、Cno表按学号升序和课程号降序建唯一索引。
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Couse(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
-- ====================================================================================
-- 删除索引
-- drop index <索引名>
-- 索引一经建立,就由系统使用和维护它,不需用户干预。
-- 建立索引是为了减少查询操作的时间,但如果数据增删改频繁,系统会花费许多时间来维护索引。
-- 这时,可以删除一些不必要的索引。
-- 删除索引时,系统会同时从数据字典中删去有关该索引的描述。
-- ======================================================================================
游标
--定义一个游标,游标名称为:usertb_cursor
declare usertb_cursor cursor for
select * from usertb
-- ================================
-- 游标使用流程
-- 声明->开启->取数据->关闭->删除
-- ================================
--开启游标
open usertb_cursor
--从游标中取数据
fetch next from usertb_cursor
--关闭游标
close usertb_cursor
--删除游标
deallocate usertb_cursor
-- ================================
- SQL语言的基础操作--(4)
- SQL语言的基础操作
- SQL语言的基础操作--(3)
- SQL语言的基础操作--(5)
- SQL语言的基础操作(二)
- 弦月下的SQL<4> SQL语言基础
- SQL语言的基本操作
- SQL语言基础(4)
- 第二章 sql语言基础 查询与操作数据
- Oracle的SQL语言基础(二)
- java语言基础-方法的递归操作
- R语言的基础函数操作
- SQL语言的基本操作--(2)
- SQL语言对MySQL的操作总结
- SQL数据操作语言的使用
- 数据的操作 标准语言SQL
- SQL基础(二)视图的操作
- SQL基础(三)数据的操作
- 发展路线图
- poj 题目分类
- IOS开发UI篇之──自定义UIActionSheet
- 20110805组队赛d题
- Visual C++获取程序当前路径
- SQL语言的基础操作--(4)
- zoj 1259 Rails
- Java Swing中两种设置背景图(容器图片)
- 对XML Publisher使用的XML数据文件中的element的值的判断
- CDialog 模态对话框 非模态
- Android 2.2完全退出程序, 使用广播机制
- 用eXeScope个性化自己的Win7
- C++ 条件编译
- 20110805 组队赛 f题