ITPub博客

首页 > 数据库 > > MYSQL事务

MYSQL事务

作者:yellowduck007 时间:2019-09-17 15:50:13 0 删除 编辑

定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

事务具有ACID特性:原子性(A,atomicity)、一致性(C,consistency)、隔离性(I,isolation)、持久性(D,durabulity)。

事务广泛的运用于订单系统、银行系统等多种场景

例如:A用户和B用户是银行的储户,现在A要给B转账500元,那么需要做以下几件事:

检查A的账户余额>500元;

A 账户中扣除500元;

B 账户中增加500元;

上述3个步骤的操作必须打包在一个事物中,任何一个步骤失败,则必须回滚所有步骤

可以用start transaction语句开始一个事物,然后要么使用commit提交将修改的数据持久保存,要么使用rollback撤销所有修改,事物sql的样本如下:

start transation; 

select balance from checking where customer_id=1024232;

update checking set balance=balance-200.00 where customer_id=1024232;

update savings set balance=balance+200.00 where customer_id=1024232;

commit;

原子性:事务内的所有操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

一致性:数据库总是从一个一致性的状态转换到另一个一致性的状态(在前面的例子当中,一致性确保了,即使在执行第三、四条语句之间系统崩溃,支票账户也不会损失200美元,因为事物最终没有被提交,所以事物中所做的修改也不会保存到数据库中)。一致状态的含义是数据库中的数据应满足完整性约束,也就是说在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏

隔离性:一个事物所做的修改在最终提交之前,对其他事物是不可见的(在前面的例子中,当执行完第三条语句、第四条语句还未开始时,此时有另外一个账户汇总程序开始运行,则其看到的支票账户的余额并没有被减去200美元。)

持久性:事务完成后,该事务内涉及的数据必须持久性的写入磁盘保证其持久性。当然,这是从事务的角度来考虑的的持久性,从操作系统故障或硬件故障来说,这是不一定的。

事务命令

要求:表的引擎类型必须是innodb类型才可以使用事务,这是mysql表的默认引擎

查看表的创建语句,可以看到engine=innodb

show create table students; 

修改数据的命令会触发事务,包括insert、update、delete

开启事务,命令如下:

开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表中

begin;

提交事务,命令如下

           将缓存中的数据变更维护到物理表中

 commit;

回滚事务,命令如下:

放弃缓存中变更的数据

rollback;测试: 开启两个终端,终端1插入数据,终端2查看

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2611/viewspace-3153892/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: React 表单与事件
请登录后发表评论 登录
全部评论

注册时间:2019-08-16

  • 博文量
    88
  • 访问量
    983