MySQL-事务

事务

事务的本质就是把多个 SQL 语句给打包成一个整体,要么全部执行,要么一个都不执行(atom原子性)

--开启事务
START TRANSACTION;
--阿里巴巴账户减少100
UPDATE account SET money = money - 100 WHERE name = '阿里巴巴';
--四十大盗账户增加100
UPDATE account SET money = money + 100 WHERE name = '四十大盗';
提交事务
COMMIT;
事务的四个特性:
  • 原子性
  • 一致性 事务修改前后,数据得是靠谱的
  • 持久性 事务修改的内容是写到硬盘上的,持久存在,重启也不消失
  • 隔离性 解决并发执行事务引起的问题
并发执行事务产生的问题:
问题描述
脏读一个事务读取到另外一个事务还没有提交的数据
不可重复读一个事务先后读取同一条记录,但两次读取的数据不同
幻读一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在了,好像出现了”幻影“
  • 脏读:是指在数据库事务中,一个事务读取了另一个未提交事务中的数据。当一个事务修改数据但还没有提交时,另一个事务读取了这个未提交的数据。如果未提交的事务最终被回滚,那么另一个事务读取到的数据实际上是无效的或错误的,称作脏数据。脏读可能导致不一致的数据状态和不正确的结果。
MySQL引入了”写操作加锁“(read committed)机制来解决脏读问题,降低了并发程度,提高了隔离性
  • 不可重复读:是指在数据库事务中,一个事务在相同的查询中多次读取同一行数据,但在这个过程中,另一个事务修改或删除了该行数据,导致两次读取的结果不一致。这种情况下,事务在多次读取之间发生了不一致的变化,从而产生了不可重复的结果。
MySQL引入了”读操作加锁“,读和写都锁(reeatable committed)机制来解决不可重复读问题,降低了并发程度,提高了隔离性
  • 幻读:是指在数据库事务中,一个事务在相同的查询条件下多次执行查询,但在这个过程中,另一个事务插入、修改或删除了符合该查询条件的数据,导致多次查询的结果集发生变化。这种情况下,事务发现了一些之前不存在的行或丢失了一些之前存在的行,就好像发生了幻觉一样。
数据库使用”串行化“(serializable)这样的方法解决幻读彻底放弃并发处理事务,一个接一个的串行处理事务。这样做并发程度是最低的,隔离性是最高的
事务隔离级别
隔离级别脏读不可重复读幻读
Read uncommitted
Read committed×
Repeatable Read××
Serializable×××
查看事务隔离级别

SELECT @@ TRANSACTION——ISOLATION;

设置事务的隔离级别

SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL

[READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值