定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
事务具有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
-
提交事务,命令如下
-
将缓存中的数据变更维护到物理表中
-
commit;
rollback;
测试: 开启两个终端,终端1插入数据,终端2查看
阅读(3049) | 评论(0) | 转发(0) |