赞
踩
事务是mysql Innodb引擎的一大特点,可以说,在日常开发中,对于mysql事务的使用无处不在,因此深入了解并掌握mysql的事务原理很有必要。
比如 : 张三给李四转账1000块钱,张三银行账户减少1000元,而李四银行账户的钱要增加1000元。 这一组操作就必须在一个事务的范围内,要么都成功,要么都失败
是事务的四大特性,简称ACID
下面来模拟一个事务操作,准备如下一张表,并初始化两条数据,来模拟转账的事务操作;
1) 测试一个正常的操作
-- 1. 查询张三余额
select * from account where name = '张三';
-- 2. 张三余额减1000
update account set money = money - 1000 where name = '张三';
-- 3. 李四余额加1000
update account set money = money + 1000 where name = '李四';
执行完成后,可以看到效果是预期的;
2)测试异常情况
-- 1. 查询张三余额
select * from account where name = '张三';
-- 2. 张三余额减1000
update account set money = money - 1000 where name = '张三';
1/0
-- 3. 李四余额加1000
update account set money = money + 1000 where name = '李四';
由于这个语句中出现了一个不符合sql语法的错误,执行到1/0的时候报错,导致第三步无法正常执行,最终的结果如下,即张三扣减了1000,但是李四并没有加1000,即数据在操作前后不一致了;
基于上面产生的异常情况,在实际开发过程中,假如是运行在程序中的,为了避免出现这样的问题,就需要通过事务来进行控制;
在操作之前,我们需要了解下面两个命令
1、查看当前的事务提交方式
SELECT @@autocommit ;
“1”表示自动提交,即在默认情况下,事务是自动提交的,为了模拟事务的效果,我们需要修改下这个事务的自动提交方式;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。