MYSQL事务特性


直到最近,MySQL才以处理事务的能力而出名。然而在版本3.23以后,MySQL就提供表处理程序,比如InnoDB表和BDB表,它们使用与其商业RDBMS产品相同的方式管理事务。
一个安全事务数据库系统必须通过知名的ACID测试才有遵守标准的资格。一个适应ACID的数据库必须支持下面的特性:

原子性
一致性
分离性
持久性

1.原子性

事务被定义为一个或者一系列可以访问或改变数据库内容的动作。在SQL术语中,当一个或更多的SQL语句作为一个单元运行时,一个事务就发生了。在这样一个单元中,每一个SQL语句斗鱼其他的SQL语句相互依赖。换句话说,如果一个语句没有完成,则整个的单元就会回滚,所有改变了的数据都要返回到事务开始以前的状态。把SQL语句分组作为一个单元(或者事务)的一部分将指示MySQL:整个单元将会被原子性地执行。
原子执行时一个要么全做要么全不做的命题。所有SQL语句必须被完成,才能使数据库维持一个数据完整性状态,否则就没有语句被执行且提交给磁盘。在MySQL中,事务的开始标记为一个BEGIN语句。直到发布一个COMMIT命令来指示MySQL完成这个动作,我们才认为完成了一个事务(或工作单元)。必要时,ROKKBACK命令会把所有的改变初始化到BEGIN命令执行之前的状态。
在银行业务中可以找到这样一个日常现实世界中的例子。通过在银行账户上取款和存款,银行就可以在一个事务之内增加和减少账户上资金的数目。这些更新通常涉及到多个表。只有保证整个事务发生,而不是仅仅事务的一部分发生,银行才能够维持数据的完整性。
事务管理对执行数据输入的客户--服务器系统,以及必须能够保证高度安全以防无法觉察的数据丢失的应用程序都是非常重要的,比如上面描述的银行业务。

2.一致性

当每一个事务使得系统处于一致状态时,不管事务是成功完成还是中途失败,一致性都会存在。
例如,设想银行使用一个事务,它支持把钱从一个银行账户转移到另一个。如果事务从一个银行账户取出需要的数目,而没有把相应的数目存入另一个银行账户,这时系统将不再处于一致性状态。在这种情况下,事务违反了一致性约束条件,系统将不再适应ACID标准。
在MySQL中,一致性主要由MySQL日志机制来处理,它记录了对数据库所做的所有改变,并且为事务恢复提供检查跟踪依据。如果系统在事务执行中途关机了,MySQL恢复程序将使用这些日志来检查事务是否顺利完成,必要时要执行回滚。
 除了日志程序以外,MySQL还提供了锁定机制,保证组成事务的所有表、行和索引由初始化程序锁定足够长的时间,以便提交事务或者回滚事务。

3.分离性

分离性意味着每个事务在各自的空间内发生,与系统内可能发生的其他事务相互独立,而且还意味着只有组成事务的全部事件序列完全被执行后,事务的结果才可见。在这样的系统中,即使有很多个事务同时发生,分离性原则也会保证只有在事务完全完成之后,单个事务的结果才是可见的。
当系统支持多个同步用户和连接时(像MySQL那样),分离性是非常重要的。当一个事务在执行过程中被其他竞争的、常常是相互矛盾的事物迅速侵犯时,不支持这个基本原则的系统会导致严重的数据破坏。
有趣的是,MySQL提供了服务器端信号变量的使用,这些信号变量充当通信管理器,有助于程序管理它们自己的分离机制。在不希望引起事务管理器系统开销的情况下,或当一个恢复计划在日志恢复范围外就可能进行时,这些变量是很有用的。MySQL InnoDB表在包含多个查询的事务中提供分离性,而MyISAM表运行我们通过LOCK TABLES命令来模拟分离性。

4.持久性

持久性意味着即使在系统奔溃时,也要保存已提交的事务做的改表。当一个事务完成并且数据库的日志被更新时,持久性就开始起作用了。通过对在数据库中以任何方式改变了数据的所有活动保存了一个日志的方法,大多数RDBMS产品能保证数据的一致性。这个数据库日志追踪每一个对表、查询、报告等所做的更新。如果打开数据库日志文件,我们就会知道当它开始写数据时,使用它会使数据库的执行速度减慢(但是它不会影响查询速度)
在MySQL中,根据应用程序的特点,通过选择适当的表处理程序,我们可以指定是否使用事物。InnoDB表处理程序执行日志文件与BDB不同,而MyISAM不支持保证持久数据库的日志类型。默认情况下,InnoDB表对奔溃前最后1秒的数据变化情况有100%的持久性。MyISAM表提供部分持久性(最后一个FLUSH TABLES命令之前提交给系统的所有改变能保存到磁盘)。
从本质来说,通过修复一个以前的备份数据库,"重新执行"所有后来的事务直到失败点,SQL Server和Oeacle 能够把数据库恢复到以前的一个状态。这些数据库产品不支持对日志文件的直接使用(也不显示日志文件的内部数据结构),因此这些文件是数据库引擎恢复机制的一部分。
MySQL还以连续的顺序为所有的数据操作行为保持一个二进制日志。然而,与其他数据库中的日志不同,这个日志容易阅读,因此根据这个日志使用最近的备份来恢复丢失的数据是意见比较简单的事情。

5.可扩展性

在大部分RDBMS产品中,可以通过使用存储过程;来扩展数据库的能力,其方法通常是通过提高包含控制流语句和条件逻辑的SQL来进一步扩展编程能力,像带着T-SQL的SQL Server和带有PL/SQL 的Oracle那样。
至今,MySQL不包含多存储过程的支持,但是这个RDBMS的优点之一是它的可扩展性。	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值