MySQL事务

MySQL事务

MySQL事务

img

什么是事务

  • 事务用于保证数据的一致性,它由一组相关的dml操作语句组成,该组的dml语句要么全部成功要么全部失败。

事务和锁

  • 当执行事务操作时(dml语句),mysql会在表上加锁,防止其它用户该表的数据。
# 事务操作

// 1.start transaction -- 开始一个事务
// 2.savepoint 保存点名 --设置保存点
// 3.rollback to 保存点名 -- 回退事务
// 4.rollback --回退全部事务
// 5.commit -- 提交事务,所有的操作生效,不能回退

事务细节

  • 如果不开启事务,默认情况下,dml自动提交,不能回滚
  • 如果开始一个事务,你没有创建保存点,你可以执行rollback,默认就是回退到开启事务的时候
  • 开启一个事务后,在提交前可以创建多个保存点,并在提交前可以回退到任意保存点的位置
  • mysql的事务需要innodb,myisam不好使
  • 开启一个事务 start transaction 或者 set autocommit = off
MySQL事务隔离级别
  • 多个连接开启各自事务操作数据库中的数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据时的准确性。

  • 如果不考虑隔离性,可能出现以下几个问题:

    • 脏读:当一个事务读取另一个事务尚未提交的修改时,产生脏读
    • 不可重复读:同一查询在同一事务中多次进行,由于其它提交事务所做的修改,会造成每次返回不同的结果,此时发生不可重复读。
    • 幻读:同一查询在同一事务中多次进行,由于其它提交事务所做的插入和删除操作,每次返回不同结果集,出现幻读。
MySQL隔离级别脏读不可重复读幻读加锁读
读未提交(Read uncommitted)不加锁
读已提交(Read committed)×不加锁
可重复读(Repeatable read)×××不加锁
可串行化(Serializable)×××加锁
  • 设置隔离
# 设置隔离

// MySQL8中
-- 查看当前会话隔离级别
select @@transaction_isolation;
-- 查看系统当前隔离级别
select @@global.transaction_isolation;

-- 设置当前会话的隔离级别
set session transaction isolation level [隔离级别]
-- 设置当前系统的隔离级别
set global transaction isolation level [隔离级别]
MySQL事务ACID
  • 原子性:数据库的事务是不可分割的工作单位,在同一个事务里的操作要么全部成功要么全部失败。
  • 一致性:事务必须从一个一致性转到另一个一致性。
  • 隔离性:对于多个用户同时操作数据库,数据库为每个用户开启一个事务,防止他们之间相互干扰。多个并发事务之间要相互隔离。
    转到另一个一致性。
  • 隔离性:对于多个用户同时操作数据库,数据库为每个用户开启一个事务,防止他们之间相互干扰。多个并发事务之间要相互隔离。
  • 持久性:持久性是指一个事务一旦被提交,它对数据库中的数据的改变就是永久的,接下来即使数据库发生故障也不应该由任何影响。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值