Mysql之事务

一.事务

1.什么是事务

  • 事务是由一条或多条SQL语句组成的逻辑执行单元, 可以比喻成一个容器, 里面放的就是一堆SQL语句, 这些语句要么全部执行成功, 要么一个都无法执行成功(原子性)

2.为什么使用事务

  • 对数据进行一系列的操作的时候, 为了防止这些操作中部分操作成功而另一些操作失败, 从而造成数据的不正确性, 这个时候我们就需要使用事务将其回滚到原来的状态

3.事务的四大特征 (ACID)

  • 原子性(Atomicity) : 事务是一段程序的最小执行单元, 不可再分(就如同自然界的原子不可再分), 所以事务中的操作要么都成功, 要么都失败
  • 一致性(Consistency) : 事务的执行, 必须使数据库从一个一致性状态, 变成另一个一致性状态, 一致性是通过原子性来保证的
  • 隔离性(Lsolation) : 各个事务的执行互不干扰, 任意一个事务的内部操作对其他并发的事务, 都是隔离的; 也就是说 : 并发执行的事务之间不能看到对方的中间状态, 并发执行的事务之间不能相互影响
  • 持续性(Durability) : 也叫"持久性", 指事务一旦提交, 对数据的任何改变都记录到永久存储器中, 通常是物理数据库

4.如何使用事务

  • 关键字
🍎开启事务
begin;  # 或者下面的语句  
start transaction;

🍎事务回滚(回滚到之前的状态,并关闭事务)
rollback;  # 回滚 + 关闭

🍎事务提交(将修改提交,并关闭事务)
commit;    # 提交 + 关闭

由上面关键字可以看出, 一个事务的开始对应一个回滚或者提交, 之后就需要重新开启事务

  • 银行余额示例
🍎先创建一个用户余额表并插入记录
create table user(
    id int primary key auto_increment,
    name varchar(16) not null,
    balance int not null
);

insert user(name,balance) value
    ("shawn",150000),
    ("song",20000),
    ("xing",520022),
    ("hai",10000);

select * from user;  # 查看一下所有记录

🍎开启事务
begin;  # 或者 start transaction;

🍎更新记录
update user set balance=100 where name="shawn";
update user set balance=100 where name="song";
update user set balance=100 where name="xing";
update user set balance=200 where name="hai";

select * from user;  # 查看一下是否修改成功

🍎事务回滚
rollback;  # 回滚之后, 该事务就关闭了
select * from user;  # 查看一下是否回滚到原来的数据

🍎再开启一个事务
begin;

🍎再次对数据进行更新
update user set balance=200 where name="shawn";
update user set balance=200 where name="song";
commit;  # 事务提交, 并关闭了该事务
select * from user;  # 查看数据的变化

rollback;  # 再次使用事务回滚将不在起作用, 因为事务已经关闭了 
select * from user;

image-20210214124605661

image-20210214124833697

image-20210214125609578

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给你骨质唱疏松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值