MySQL 事务(Transaction)
1.什么是事务?
事务(Transaction)
是访问和更新数据库的程序执行单元;
是一个最小的不可分割的工作单元,能保证一个业务的完整性。
事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行。
题目:
银行转帐,a 账户向 b 账户转100元。
分析:
a 账户减少100元,同时,b 账户增加100元。
a账户 ➡ -100
update
b账户 ➡ +100
update
以上两条sql语句,在实际执行中,需要要么同时成功,要么同时失败。
若只有一条执行成功、一条执行失败,则会出现数据前后不一致的问题。
update
多条sql语句,可能有同时成功的要求。或者同时失败。
mysql如何控制事务?
1.mysql默认是开启事务,即 autocommit = 1,自动提交事务。
select
![fc9370694f299969a2a7d90ef0814d96.png](https://i-blog.csdnimg.cn/blog_migrate/3452107b98ab86714902c19575612bf4.png)
2.默认事务开启的作用:
执行sql语句时,效果会立即体现出来,且不能回滚。
例如:
查看数据库列表:
show
![3222c0a540d1d87d9d77fdd2d265c21a.png](https://i-blog.csdnimg.cn/blog_migrate/ddf3b9c9c3d1fd639fbeece332bd5344.png)
创建bank数据库:
create database bank;
![a6197652169bf4ef6ef3b889f83c5fa7.png](https://i-blog.csdnimg.cn/blog_migrate/8ad741115bfa851d23e604dcba1711f9.png)
选中bank数据库:
use bank
![203dd8f5387c8fb7b99c7fe542afef6b.png](https://i-blog.csdnimg.cn/blog_migrate/62566cbf34cca93c04cfec10d03f660e.png)
创建user表格,
create
和添加user表格中的 a 数据:
insert
![dd59c5baee126e10901359d52bca2e2a.png](https://i-blog.csdnimg.cn/blog_migrate/74c75b045569a46279dc62c5d0b6b6cb.png)
查看user表格数据:
select
![5e0bb06251c4292ceeae6a7ff87fbe39.png](https://i-blog.csdnimg.cn/blog_migrate/09d67242c58630dfe935297b1d122f27.png)
事务回滚:即撤销sql语句执行效果。
rollback
![49405c865ba88e4c7de6013ac7c6f099.png](https://i-blog.csdnimg.cn/blog_migrate/c4461475d1b2043671fddcdafb40076a.jpeg)
显示无法回滚。
3.关闭mysql事务自动提交。设置mysql自动提交为false,即autocommit = 0。
set
开启回滚状态。
插入user表格中 b 数据:
insert
![1e63bf60547c3264577091b4dfbc1b9f.png](https://i-blog.csdnimg.cn/blog_migrate/90ac68725079baa9d060b894d54f3a0a.png)
查看user表格数据:
select * from user;
![7f4cb782f1328128d935d7dd4890b666.png](https://i-blog.csdnimg.cn/blog_migrate/fc6aef61e1fc3099d93754792341f567.png)
事务回滚:
rollback
![cde3e8f8f1816267eb2f48c11dce46f6.png](https://i-blog.csdnimg.cn/blog_migrate/aaa21019d8d3b6ef291942d4f6bf7fb3.png)
插入user表格中 b 数据消失,事务成功回滚。
再次插入user表格中 b 数据:
insert
![2ecc52cb4d60a358aefa4ebac4fbedc5.png](https://i-blog.csdnimg.cn/blog_migrate/9be10ec61dcf950f43f92265d841ac2f.jpeg)
4.手动提交事务:
commit
![4bad37d7308d35c5e79885b38b8c3128.png](https://i-blog.csdnimg.cn/blog_migrate/56850dafc9b2bfcfe97eb55854f29ffa.png)
事务回滚:
rollback
![26b0e2da7155b506052ca330278ff116.png](https://i-blog.csdnimg.cn/blog_migrate/be029719133b93c3c168704d668643d5.jpeg)
事务回滚失败,是无法撤销的。(持久性)
总结:
1.事务自动提交:
@@
提交后,事务无法回滚,无法撤销上一步操作。
2.手动提交:
commit
提交后,无法回滚撤销。
3.事务回滚:
rollback
开始的转账语句:
update
![84646467a510c417fa80c7c778f6e5c5.png](https://i-blog.csdnimg.cn/blog_migrate/b529bc8c22b02a54f2d80e99db10a7fb.jpeg)
查看user表格中数据:
select
![38be7c2f401266de2bcbbba31bd34b1d.png](https://i-blog.csdnimg.cn/blog_migrate/11483e33ccc6a7f2223691efde3c5dc6.png)
事务回滚成功:
rollback
![b36806be3fa19f6daeb7c997c64fa236.png](https://i-blog.csdnimg.cn/blog_migrate/0ac78cf81bdfa7e4cceb0a4890610e9b.jpeg)
事务提供了一个返回、撤销的机会。
保证一组数据要么全部执行,要么全部都不执行。