mysql——事务

事务简介

  • 数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令
  • 事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败
  • 事务是一个不可分割的工作单元

语法

-- 开启事务
start transaction;
或者 begin;

-- 提交事务
commit;

-- 回滚事务
rollback;

应用场景

比如在银行转账系统account中有两个人A和B,他们初始都有1000元,此时场景是A要给B转账500元。

在正确的情况下,A和B最终各自会有500和1500元。

但是如果在更新account表的数据的时候出错了,比如:

update account set money=money-500 where name='A';

随便一个错误

update account set money=money+500 where name='B';

在这种情况下,A和B查自己的账户就会发现,A确实少了500,但是B却没有加上500。

解决这种情况的方法就是在更新两个人的账户之前用begin或者start transaction开启事务,这样在出现错误的时候只要rollback就可以回滚到执行这两个语句之前的状态。

begin;
update account set money=money-500 where name='A';

随便一个错误

update account set money=money+500 where name='B';

rollback;-- 执行rollback后回到之前的状态

但是执行了begin之后,如果没有报错,在这个查询内,A和B的账户确实已经变为了500元和1500元,但是在别的柜台,也就是别的查询的结果并没有显示A和B分别为500元和1500元的情况,而是A和B还是1000元的状态。这是因为事务开启了,如果执行成功,就应该调用commit方法提交,这样更改的结果才会真正作用在表account中,所有的查询才能保证出现一样的结果。

begin; -- 开启事务
update account set money=money-500 where name='A';
update account set money=money+500 where name='B';
commit; -- 提交事务

事务的四大特征

  • 原子性(Atomicity):事务是不可分割的最小操作单位,要么同时成功,要么同时失败
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致的状态
  • 隔离性(Isolation):多个事务之间,操作的可见性
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

MySQL环境下事务的特点

  1. 事务自动提交
    默认情况下,mysql的一条语句都是自动提交的,可以查询事务的自动查询状态
select @@autocommit;

查询的结果是1,说明是自动提交。也可以设置为0,变成手动提交,手动提交的结果就是执行完一条语句之后,如果没有commit,其他的事务是无法看到这道语句带来的更改的。

posted @ 2022-05-09 22:02  ShaunY  阅读(14)  评论(0编辑  收藏  举报