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
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞