第14章事务与MySQL的多用户并发控制

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据库系统原理及MySQL应用教程(第2版)

课后习题参考答案

第14章事务与MySQL的多用户并发控制

1、事务是DB的逻辑工作单位,由用户定义的一组操作序列组成,序列中的操作要么全做要么全不做。

2、InnoDB和BDB存储引擎支持事务。

3、每个事务的处理必须满足ACID原则,即原子性(A):原子性意味着每个事务都必须被认为是一个不可分割的单元。一致性(C):不管事务是完全成功完成还是中途失败,当事务使系统处于一致的状态时存在一致性。隔离性(I):隔离性是指每个事务在它自己的空间发生,和其他发生在系统中的事务隔离,而且事务的结果只有在它完全被执行时才能看到。持久性(D):持久性是指即使系统崩溃,一个提交的事务仍然存在。

4、MySQL中可以使用begin开始事务,使用commint结束事务。

5、每一个事务都有一个所谓的隔离级,它定义了用户彼此之间隔离和交互的程度。

MySQL提供了下面4种隔离级:序列化(serializable)、可重复读(repeatable read)、提交读(read committed)、未提交读(read uncommitted) 。

6、若对并发操作不加控制可能会存取和存储不正确的数据,就会出现数据的不一致问题。

(1)丢失更新(lost update) 问题

(2)脏读(dirty read)问题

(3)不可重复读( unrepeatableread) 问题

(4)幻读(phantom read) 问题

7、MySQL中可以使用begin开始事务,使用commint结束事务,中间可以使用rollback回滚事务。MySQL通过set autocommint 、start transaction 、

commit和rollback等语句支持本地事务。具体格式如下:

start transaction | begin [work] commit [work] [and [no] chain] [[no] release] rollback [work] [and [no] chain] [[no] release] set autocommit = {0 | 1}

8、查询表级锁争用情况:show status like’table%’

查看系统上的行锁的争夺情况:show status like ‘innoDB_rowiock%’;

9、避免死锁的常用方法:

◆在应用中,如果不同的程序会并发存取多个表,应尽量约定以相同的顺序

来访表,这样可以大大降低产生死锁的机会:

◆在程序以批量方式处理数据的时候,如果事先对数据排序,保证每个线程

按固定的顺序来处理记录,也可以大大降低出现死锁的可能。

◆在事务中,如果要更新记录,应该直接申请足够级别的锁,即排他锁,而

不应先申请共享锁,更新时再申请排他锁。

◆在repeatabie-read隔离级别下,如果两个线程同时对相同条件记录用

select...for update加排他锁,在没有符合该条件记录情况下,两个线程都会

加锁成功。

◆当隔离级别为read committed时,如果两个线程都先执行select..for

update,判断是否存在符合条件的记录,如果没有,就插入记录。

10 C 11 B 12 D 13 C 14 D 15 C 16 A 17 B 18 D

相关文档
最新文档