第10章 事务和多用户1

第10章 事务和多用户1

ID:45135392

大小:189.00 KB

页数:21页

时间:2019-11-10

第10章 事务和多用户1_第1页
第10章 事务和多用户1_第2页
第10章 事务和多用户1_第3页
第10章 事务和多用户1_第4页
第10章 事务和多用户1_第5页
资源描述:

《第10章 事务和多用户1》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第10章事务和多用户10.1事务10.2锁定10.3多用户使用的问题10.1事务从MySQL4.1开始支持事务,事务是构成多用户使用数据库的基础。在MySQL环境中,事务由作为一个单独单元的一个或多个SQL语句组成。这个单元中的每个SQL语句是互相依赖的,而且单元作为一个整体是不可分割的。如果单元中的一个语句不能完成,整个单元就会回滚(撤销),所有影响到的数据将返回到事务开始以前的状态。因而,只有事务中的所有语句都成功地执行才能说这个事务被成功地执行。使用一个简单的例子来帮助理解事务:向公司添加一名新的雇员(见图10.1)。这里的过程由三个基本步骤组成:在雇员数据库中为雇员创建一条记录;为

2、雇员分配部门;建立雇员的工资记录。如果这三步中的任何一步失败,如为新成员分配的雇员ID已经被其他人使用或者输入到工资系统中的值太大,系统就必须撤销在失败之前所有的变化,删除所有不完整记录的踪迹,避免以后的不一致和计算失误。前面的三项任务构成了一个事务。任何一个任务的失败都会导致整个事务被撤销,系统返回到以前的状态。10.1事务图10.1添加雇员事务10.1.1事务和ACID属性并不是所有的存储引擎都支持事务,如InnoDB和BDB支持,但MyISAM和MEMORY不支持,本章假设使用了一个支持事务的存储引擎来创建表。通过InnoDB和BDB表类型,MySQL事务系统能够完全满足事务安全的A

3、CID测试。旧的表类型,如MyISAM类型,不支持事务。因此,这种系统中的事务只能通过直接的表锁定实现。术语“ACID”是一个简称,每个事务的处理必须满足ACID原则,即原子性(A)、一致性(C)、隔离性(I)和持久性(D)。(1)原子性原子性意味着每个事务都必须被认为是一个不可分割的单元。假设一个事务由两个或者多个任务组成,其中的语句必须同时成功才能认为事务是成功的。如果事务失败,系统将会返回到事务以前的状态。在添加雇员这个例子中,原子性指如果没有创建雇员相应的工资表和部门记录,就不可能向雇员数据库添加雇员。原子的执行是一个或者全部发生或者什么也没有发生的命题。在一个原子操作中,如果事务

4、中的任何一个语句失败,前面执行的语句都将返回,以保证数据的整体性没有受到影响。这在一些关键系统中尤其重要,现实世界的应用程序(如金融系统)执行数据输入或更新,必须保证不出现数据丢失或数据错误,以保证数据安全性。10.1.1事务和ACID属性(2)一致性不管事务是完全成功完成还是中途失败,当事务使系统处于一致的状态时存在一致性。参照前面的例子,一致性是指如果从系统中删除了一个雇员,则所有和该雇员相关的数据,包括工资数据和组的成员资格也要被删除。在MySQL中,一致性主要由MySQL的日志机制处理,它记录了数据库的所有变化,为事务恢复提供了跟踪记录。如果系统在事务处理中间发生错误,MySQL恢

5、复过程将使用这些日志来发现事务是否已经完全成功地执行,是否需要返回。因而一致性属性保证了数据库从不返回一个未处理完的事务。(3)隔离性隔离性是指每个事务在它自己的空间发生,和其他发生在系统中的事务隔离,而且事务的结果只有在它完全被执行时才能看到。即使在这样的一个系统中同时发生了多个事务,隔离性原则保证某个特定事务在完全完成之前,其结果是看不见的。当系统支持多个同时存在的用户和连接时(如MySQL),这就尤其重要。如果系统不遵循这个基本规则,就可能导致大量数据的破坏,如每个事务的各自空间的完整性很快地被其他冲突事务所侵犯。10.1.1事务和ACID属性获得绝对隔离性的唯一方法是保证在任意时刻

6、只能有一个用户访问数据库。当处理像MySQL这样多用户的RDBMS时,这不是一个实际的解决方法。但是,大多数事务系统使用页级锁定或行级锁定隔离不同事务之间的变化,这是要以降低性能为代价的。例如,MySQL的BDB表处理程序使用页级锁定来保证处理多个同时发生的事务的安全,InnoDB表处理程序使用更好的行级锁定。(4)持久性持久性是指即使系统崩溃,一个提交的事务仍然存在。当一个事务完成,数据库的日志已经被更新时,持久性就开始发生作用。大多数RDBMS产品通过保存所有行为的日志来保证数据的持久性,这些行为是指在数据库中以任何方法更改数据。数据库日志记录了所有对于表的更新、查询、报表等。如果系统

7、崩溃或者数据存储介质被破坏,通过使用日志,系统能够恢复在重启前进行的最后一次成功的更新,反映了在崩溃时处于过程的事务的变化。MySQL通过保存一条记录事务过程中系统变化的二进制事务日志文件来实现持久性。如果遇到硬件破坏或者突然的系统关机,在系统重启时,通过使用最后的备份和日志就可以很容易地恢复丢失的数据。默认情况下,InnDB表是100%持久的(所有在崩溃前系统所进行的事务在恢复过程中都可以可靠地恢复)。MyISAM表提

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。