《数据库原理及应用教程-MySQL8.0》课件 第10章 事务与并发控制.ppt
10.2.4锁的分类2.InnoDB的锁InnoDB的行锁有两种:共享锁(S)和排他锁(X)。为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁:意向共享锁(IS锁)和意向排他锁(IX锁),这两种意向锁(IntentLock)都是表锁。一个事务在给数据行加锁之前必须先取得对应表对应的意向锁。10.2.4锁的分类(1)IS锁IS锁表示某事务有读取低层次资源的意向,把S锁放在这些低层次的单个资源上。也就是说,如果对一个数据对象加IS锁,表示它的后裔资源拟(意向)加S锁。例如,要对某个元组加S锁,则要首先对包含该元组的表加IS锁。(2)IX锁IX锁表示某事务有修改低层次资源的意向,把X锁放在这些低层次的单个资源上。也就是说,如果对一个数据对象加IX锁,表示它的后裔资源拟(意向)加X锁。例如,要对某个元组加X锁,则要首先对包含该元组的表加IX锁。10.2.4锁的分类对于InnoDB表,在绝大部分情况下都应该使用行级锁,但在个别特殊事务中,也可以考虑使用表级锁,主要有以下两种情况:(1)事务需要更新大部分或全部数据,表又比较大,如果使用默认的行锁,不仅这个事务执行效率低,而且可能造成其他事务长时间锁等待和锁冲突,这种情况下可以考虑使用表锁来提高该事务的执行速度。(2)事务涉及多个表,比较复杂,很可能引起死锁,造成大量事务回滚。这种情况也可以考虑一次性锁定事务涉及的表,从而避免死锁、减少数据库因事务回滚带来的开销。10.2.4锁的分类3.锁的兼容性在一个事务已经对某个对象锁定的情况下,另一个事务请求对同一个对象的锁定,此时就会出现锁定兼容性问题。锁A锁BISSIXXIS是是是否S是是否否IX是否是否X否否否否10.2.5死锁封锁机制的引入能解决并发用户的数据不一致性问题,但也会引起事务间的死锁问题。在数据库系统中,死锁是指多个用户分别锁定了一个资源,并又试图请求锁定对方已经锁定的资源,这就产生了一个锁定请求环,导致多个用户都处于等待对方释放所锁定资源的状态。通常,根据用户的操作需求使用不同的锁类型锁定资源,然而当某组资源的两个或多个事务之间有循环相关性时,就会发生死锁现象。10.2.5死锁MyISAM表锁是deadlockfree的,这是因为MyISAM总是一次获得所需的全部锁,要么全部满足,要么等待,因此不会出现死锁。但在InnoDB中,除单个SQL组成的事务外,锁是逐步获得的,这就决定了在InnoDB中发生死锁是可能的。发生死锁后,InnoDB一般都能自动检测到,并使一个事务释放锁并回退,另一个事务获得锁,继续完成事务。但在涉及外部锁,或涉及表锁的情况下,InnoDB并不能完全自动检测到死锁,这需要通过设置锁等待超时参数innodb_lock_wait_timeout来解决。第10章事务与并发控制第10章事务与并发控制关系型数据库有四个显著的特征,即安全性、完整性、并发性和监测性。数据库的安全性就是要保证数据库中数据的安全,防止未授权用户随意修改数据库中的数据,确保数据的安全。完整性是数据库的一个重要特征,也是保证数据库中的数据切实有效、防止错误、实现商业规则的一种重要机制。对任何系统都可以这样说,没有监测,就没有优化。只有通过对数据库进行全面的性能监测,也才能发现影响系统性能的因素和瓶颈,才能针对瓶颈因素,采取切合实际的策略,解决问题,提高系统的性能。第10章事务与并发控制为了充分利用数据库资源,发挥数据库共享资源的特点,应该允许多个用户并行地存取数据库。但这样就会产生多个用户程序并发存取同一数据的情况,若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性,所以数据库管理系统必须提供并发控制机制。并发控制机制的好坏是衡量一个数据库管理系统性能的重要标志之一。MySQL以事务为单位通常使用锁来实现并发控制。当用户对数据库并发访问时,为了确保事务完整性和数据库一致性,需要使用锁定。这样,就可以保证任何时候都可以有多个正在运行的用户程序,但是所有用户程序都在彼此完全隔离的环境中运行。。10.1事务事务处理是数据库的主要工作,事务由一系列的数据操作组成,是数据库应用程序的基本逻辑单元,用来保证数据的一致性。事务和存储过程类似,由一系列SQL语句组成,是MySQL系统的执行单元。在数据库处理数据的时候,有一些操作是不可分割的整体,例如,用银行卡消费时首先要在账户扣除资金,然后再增加资金到商家账户。这些操作是不可分割的,不能只扣除不增加,也不能只增加不扣除。事务可以解决上面的问题,即把这些操作放在一个容器里