简述一下你对mysql事物的理解_MySQL事务及隔离级别概述

事务

在事务的概念产生之前的很长一段时间内.人们都无法利用到数据库的更多先进待征。事务是一组原子性的SQL查询语句,也可以被看做一个工作单元。如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,但是,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都不会执行。也就是说,事务内的语句要么全部执行,要么一句也不执行。

银行应用是一个经典实例,可以解释事务应用的必要性。假设:银行数据库有两张表,checking 表和saving表。

现在要从Jane的支票账户(Cheking Accoumn)里转账200美元到她的存款账户 (Savings Account)。那么,需要至少完成3步操作:

1检查支票存款账户的余额是否大于200$。

2.从支票存款账户余额中减去200.

3.在存款账户余额中增加200$

所有的操作被打包在一个事务里,如果某一步失败,就回滚所有已完成步骤。

可以用START TRANSACTION 语句开始一个事务,用COOMIT语句提交整个事务,永久地修改数据,或者用ROLLBACK语句回滚整个事务,取消已做的修改。

事务SQL样本如下:

START TRANSACTION;

SELECT balance FROM checking WHERE customer_id = 10233276;

UPDATE checking SET balance=balanse - 200.00 WHERE customer_id = 10233276;

UPDATE savinge SET balance = balaice + 200.00 WHERE customer_id = 10233276;

COMMIT;

单纯的事务概念不是全部的主题。试想一下,如果数据库服务器在执行第4条语句时突然崩溃,会发生什么事? 没人知道,但用户可能会损失200美元。再假如,在执行第3和第4条语句之间时,另一个进程同时运行,它的目的是要先删除支票存款账户的全部余额,那么结果可能是,银行根本不知道有这个逻辑先发事件,白白给用户增加了200元存款。

除非系统通过ACID测试,否则空谈事务概念是不够的。ACID代表了原子性(Atomicity)、一致性(Consistency)、隔离性(solation) 和特久性(Durability)。 这些概念与事务的处理标准密切关联,一 个有效的事务处理系统必须满足相关标准。

原子性(Atomicaty)

一个事务必须被视为一个单独的内部“不可分”的工作单元,以确保整个事务要么全部执行,要么全部回滚。当一个事务具有原子性时,该事务绝对不会被部分执行,要么完全执行,要么根本不执行。

一致性(Consistency)

数据库总是从一种致性状态转换到另一种一致性状态。 在上述例子中,一致性确保了,即使数据库系统在执行第3、4条语句时崩溃了,支票存款账户也不会损失200美元。因为最终事务根本没有被提交,任何事务处理过程中所做的数据改变,也不会影响到数据库的内容。

隔离性(lsolation)

某个事务的结果只有在完成之后才对其他事务可见。在上述例子中,当数据库执行完第3条语句,还未执行第4条语句时,如果此时银行汇总程序也同时运行,它将仍视转账的200美元仍在支票存款账户内。当后文讨论隔离级时,读者就会理解为什么我们所说的通常是“不可见”(Invisible) 的。

持久性(Durability)

一旦一个事务提交,事务所做的数据改变将是永久的。这意味若数据改变已被记录,即使系统崩溃,数据也不会因此丢失。持久性是个有点模糊的概念,因为实际上持久性也分很多级别。有些持久性策略提供一种强壮的安全保证,另一些则未必。 另外,也没有什么东西是100%永远持久的。在本章的后续章节,将会讨论MySQL中持久性的真正含义,特别是在第283页"InoDBIO调优”一节。

ACID事务确保了银行不会弄丢你的钱,而这种特性在应用逻辑设计中是很难实现的,甚至不可能实现。一个ACID兼容的数据库服务器,要为事务处理做大量的复杂工作,确保ACID特性的实现,而这也许是用户未能察觉的。

正像锁粒度的增加会导致锁开销的增长一样, 这种事务处理中的额外安全措施,也导致数据库服务器要完成更多的额外工作。通常,一个支持ACID特性的数据库,相对于不支持这种特性的数据库,需要更强的CPU处理能力、更大的内存和更多的磁盘空间。正如本章不断重复的,这正是选用MySQL存储引擎架构的有利之处。用户可以根据应用是否需要事务处理,选择相应的存储引擎。如果对于某些类型的数据查询,用户不需要真正的事务处理,他可以选择一个非事务处理型的存储引擎来实现查询,以获得更高的处理性能。用户也可以使用LOCK TABLES 语句,为应用提供某种级别的数据保护,而这些选择完全由用户自主决定。——《高性能MySQL》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值