《《数据库事务锁》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《数据库事务锁》PPT课件.ppt(19页珍藏版)》请在三一办公上搜索。
1、第8章事务、锁及索引,主要内容,事务的概念和特性事务的种类锁的概念和类别事务的隔离级别索引及全文索引,事务,事务的概念 1、事务是一种机制,是一个操作序列;2、事务是一个不可分割的工作逻辑单元;3、在数据库系统上执行并发操作时,事务是作为最小的控制单元来使用的。,事务的基本特性,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。,事务的种类,显式事物隐性事务 自动提交事务,显式事务,使用关键字BEGIN TRANSACTION和ROLLBACK TRANSACTION或COMMIT TRANSACTION来显示地定义事
2、物的开始和结束。,删除后勤部DECLARE transaction_name varchar(32)SELECT transaction_name=my_transaction_delete BEGIN TRANSACTION transaction_nameGODELETE FROM departmentWHERE dept_id=1012GODELETE FROM employeeWHERE dept_id=1012GOCOMMIT TRANSACTION my_transaction_deleteGO,显示的开始事务,显示的提交事务,隐性事务,通过T-SQL语句:SET IMPLICIT
3、_TRANSACTIONS ON,将隐性事务模式设置为打开。SQL Server 2000将在提交或回滚当前事务后自动启动新事务。无需描述事务的开始,只需提交或回滚每个事务,当SQL Server首次执行下列任何语句时,都会自动启动一个事务。,自动提交事务,所有T-SQL语句在完成时,都会提交或回滚。如果一条语句成功完成,则将其提交,如果遇到任何错误,则将其回滚。只要没有用显式或隐性替代自动提交模式,SQL Server连接就以自动提交模式为默认模式进行操作。,锁,锁的概念锁(Lock)是在多用户环境下对资源访问的一种限制。,可以对以下的对象进行锁定:,数据行(Row):数据页中的单行数据;索
4、引行(Key):索引页中的单行数据,即索引的键值;页(Page):页是SQL Server 存取数据的基本单位,其大小为8KB;盘区(Extent):一个盘区由8 个连续的页组成;表(Table);数据库(Database)。,锁有两种分类方法。,从数据库系统的角度来看,独占锁(Exclusive Lock)不允许其他任何操作 执行数据更新命令 如insert update delete时 sqlserver自动使用独占锁 一直到事务结束才释放 共享锁(Shared Lock)其它用户可以读取但不能修改它 select执行时候采用该方式 更新锁(Update Lock)当sqlserver准备
5、更新数据时候首先进行更新锁,这样其它用户可以读取但不能修改 更新数据时 该成独占锁,从程序员的角度看,乐观锁(Optimistic Lock)悲观锁(Pessimistic Lock),事务隔离级别,提交读(READ COMMITTED)未提交读(READ UNCOMMITTED)可重复读(REPEATABLE READ)可串行读(SERIALIZABLE),索引,特点,索引可以加快数据库的检索速度 索引降低了数据库插入、修改、删除等维护任务的速度 索引有两种类型,即聚簇索引和非聚簇索引 聚簇索引与基表的物理顺序相同,非聚簇索引与基表的物理顺序不相同 索引既可以直接创建,也可以间接创建 可以在
6、优化隐藏中,使用索引 使用查询处理器执行SQL语句,在一个表上,一次只能使用一个索引 使用索引调整向导,在一个表上,一次可以使用多个索引 使用索引调整向导,需要提供工作量作为调整的对象,为什么要创建索引?,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。可以大大加快数据的检索速度,这也是创建索引的最主要的原因。可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。,索引 的缺点,创建索引和维护索引要耗费时间,这种时间随着数据量的
7、增加而增加。索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。,在哪些列上创建索引,在经常需要搜索的列上,可以加快搜索的速度;在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;在经常使用在
8、WHERE子句中的列上面创建索引,加快条件的判断速度。,不应该在哪些列上创建索引,对于那些在查询中很少使用或者参考的列不应该创建索引。对于那些只有很少数据值的列也不应该增加索引。对于那些定义为text,image和bit数据类型的列不应该增加索引。当修改性能远远大于检索性能时,不应该创建索引。,创建索引的方法,CREATE INDEX语句的语法:CREATE UNIQUE CLUSTERED|NONCLUSTERED INDEX index_nameON table_name(column_name,.n)WITH PAD_INDEX,FILLFACTOR=x,DROP_EXISTING,指定任意两行记录都不能具有相同的索引值,索引的两种类型,指定索引的中间级中的各个页上的空白空间,指定一个0到100之间的值,该值指示索引页填满的空间所占的百分比。,删除任何相同名称的现有索引,索引的类型,聚集索引 数据表的物理顺序与索引顺序相同 非聚簇索引 数据表的物理顺序与索引顺序不相同,