为了账号安全,请及时绑定邮箱和手机立即绑定

Mysql 事务

标签:
MySQL

一个sql语句就是一个事务,事务可以保证一组sql语句要么都成功,要么都失败,默认自动提交,可以设置set autocommit=0关闭自动提交。

1.场景举例

比如有两个数据库1和2,分别代表2个人的存款,当其中一个人转钱给另一个人时,步骤一般是数据库1中扣除金额A,数据库2中增加金额A。假如在扣除数据库1中金额后立刻断电了,那么数据库2中还没来得及加金额,这就造成数据出问题,所以这里就需要将这一组操作都添加到事务当中。即要么扣款和增款都完成,要么都失败,从而保证了数据不会出错。

2.DTL

事务控制语言

(1)基本格式
start transaction;#事务开始...
中间是执行语句
...#rollback;#在事务没结束前如果出错可以通过这句回滚commit;#如果事务正常结束,则最后通过这句提交,否则数据不会真正的更新
(2)事务失败例子
mysql> start transaction;
mysql> update food set number=number-10 where id=1;
mysql> update food set number=number-15 where id=2;
mysql> update food set number=number-10 where id=100;#sql语句出错mysql> rollback;#回滚,会发现所有数据都回到第一句之前的样子

(3)事务成功例子

mysql> start transaction;
mysql> update food set number=number-10 where id=1;
mysql> update food set number=number-15 where id=2;
mysql> commit;#成功提交,数据修改完成,此时会发现数据已经真的更新了
(4)满足特性

(1)原子性:一个事务中的语句要么全做,要么全不做
(2)一致性:数据库的数据更改应该合理,即对应上面的转账例子(总钱数应该不变)
(3)隔离性:如果多个事务并发执行,但每个就像独立执行一样
(4)持久性:数据执行成功应该是明确的硬盘数据更改,而不仅是内存中的变化(通过commit提交实现)



作者:dawsonenjoy
链接:https://www.jianshu.com/p/5e7bb6b05e07


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消