并不是所有的引擎都支持事务处理,常见的引擎有:InnoDB和MyISAM。InnoDB支持事务处理,而MyISAM不支持。这里我们可以回顾一下:MyISAM是支持全文本搜索的,而InnoDB是不支持全文不搜索的。因此,在选择引擎的时候,我们首先明白,我们准备干什么,如果我们需要进行全文本搜索,则我们就选择MyISAM引擎。如果我们需要进行事务处理,则我们就选择InnoDB引擎。
哪什么是事务处理呢?
事务处理是用来维护数据库的完整性的,它保证成批的MySQL操作要么完全执行,要么完成不执行。
举一个例子来进行说明,
例如:你去银行取钱,你取钱和银行卡上扣钱必须要满足要么这两者全部执行,要么都不执行,你总不能你在银行取了200块钱,而银行卡上的的钱还是原来的那么多,是吧?虽然你可能希望这个事情发生。如果你希望这件事发生,但是也有可能是你银行卡上的钱扣了,但是,自动取款机出现故障,没有吐钱,这样你是不是比较郁闷。
事务处理在各种管理系统中都有着广泛的应用,比如人员管理系统,很多同步数据库操作大都需要用到事务处理。
如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
如果没有事务处理,在你删除的过程中,假设出错了,只执行了第一句,那么其后果是难以想象的!
但用事务处理。如果删除出错,你只要rollback就可以取消删除操作(其实是只要你没有commit你就没有确实的执行该删除操作)
因此,像这样类似的一系列操作,要么全部正确执行,要么全部不执行。事务处理就是来做这个事情的。
事务
事务是DBMS的执行单位。它由有限个数据库操作语句组成。但不是任意的数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID)
- 原子性(Autmic):事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!
- 一致性(Consistency):事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态!就拿网上购物来说吧,你只有即让商品出库,又让商品进入顾客得购物篮才能构成事务!
- 隔离性(Isolation):如果多个事务并发执行,应象各个事务独立执行一样!
- 持久性(Durability):一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!
控制事务处理
管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。
MySQL使用如下的语句来标识事务的开始:
start tracsaction;
使用rollback命令进行回退MySQL语句,看如下的例子:start transaction;//事务开始
delete from ticket;//删除表中的数据
select * from ticket;//查看表中的数据,此时表中应该没有数据
rollback;//回退,即取消上面所有的操作。
select * from ticket;//查询表中的数据,此时表中应该有数据
到底哪些语句可以回退,哪些不可以呢?
在MySQL中,insert、update、delete这些操作是可以回退的,而像create、drop是不可以回退的,即使你执行了回退,它们也不会被撤销。