mysql 事务

一个事务是一个连续的一组数据库操作,如果在事务中的任意一条语句执行失败,那么整个事务就失败。 比如银行转账,你给你老爸转了100万将会执行下面操作

1、检测你账户是否有100万 2、在你账号扣除100万 3、在你老爸账户增加100万

正常情况转账成功你的账号少100万,而你老爸的账户多一百万。但是如果在转账过程系统突然崩溃,你账户上的钱被扣除了100万,你老爸的账号却没有增加100万,那这不是亏大了。这转账就两种情况,你账号扣钱,你老爸账号增加钱。只能同时成功,或者同时失败,不能存在一边扣钱成功,另外一边没有增加账户金额的情况,事务正好解决了这一问题,整个转账过程看成一个事务,如果在事务的任何操作失败,则整个事务将失败,回退到执行事务之前保证数据的有效性。

MSYQL是支持事务的,跟使用的引擎相关。

mysql中支持多种引擎

1、MyISAM:不支持事务,用于只读程序提高性能

2、InnoDB:支持ACID事务、支持行级锁

3、Berkeley DB:支持事务

msyql默认使用Innodb引擎支持事务。

事务的特性(ACID)

原子性(Atomicity):确保事务内的所有操作都成功完成,否则事务将被中止在故障点,以前的操作将回滚到执行事务前的状态。

一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致

隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的

持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障

查看数据库使用的引擎类型

show create table 表名

engine=InnoDB 就是数据库引擎,mysql默认使用InnoDB

开启事务

1.用begin,rollback,commit来实现

begin开始一个事务
rollback事务回滚
commit 提交事务

开启事务后在没有commit提交之前执行修改命令,变更会维护到本地缓存中,而不维护到务理表中,只有在commit提交后才会更新到务理表中。

如果中间执行错误,那么用rollback回滚事务,恢复到执行事务前的状态。

开启事务 begin;

commit 提交事务

rollback事务回滚

执行rollback回滚

数据库基础 all right reserved,powered by Gitbook文件修订时间: 2018-04-18 10:57:19