第14章事务与MySQL的多用户并发控制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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