MySql优化(五)事务

事务是确保数据库操作完整性和一致性的关键机制。本文详细介绍了事务的定义、为何使用事务,以及事务的四大特性:原子性、隔离性、持久性和一致性。特别强调了不同隔离级别,包括未提交读、提交读、可重复读和可串行化,及其对并发操作的影响。还阐述了脏读和幻读现象,并提供了在MySQL中设置事务隔离级别的方法。
摘要由CSDN通过智能技术生成

事务是什么

事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
以上来自百度

为什么要用事务

事务在程序里很常见 当一个程序要执行多条SQL语句时无法保证都能成功 有可能出现插入一半出现了意外 导致下面无法进行 这就无法保证要么做要不都不做(原子性)也无法保证 数据的一致性
例子:如果你用手机进行银行转账 A 转给B A应该减少资产 B应该是增加资产 如果 只有一方成功 无法完成转账 这个时候就需要事务

事务的特性

原子性
原子性是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做
隔离性
隔离性是指多个事务并发执行的时候,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰
持久性
持久性是指事务一旦提交,它对数据库的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响
一致性
原子性关注状态,要么全部成功,要么全部失败,不存在部分成功的状态。而一致性关注数据的可见性,中间状态的数据对外部不可见,只有最初状态和最终状态的数据对外可见
上面就是事务的特性

隔离级别

事务是支持隔离级别的 上面说到了事务具有隔离性 多个事务是隔离的互不干扰 下面看下 个个隔离级别
未提交读( read uncommitted )
事务中修改即使没提交 别的事务也可读取到(会造成脏读)性能也一般 不常用
提交读 ( read committed )
只有提交别的事务才能看见 再此之前都不会被看见 (常用事务ps:mysql默认不是这种)
可重复读( repeatable read )
在一个事务中多次查询结果都是一致 解决了脏读问题 但范围查询会出现幻读 PS:mysql默认级别 用版本控制解决幻读(幻读 查不不到但是又插入不进去)
可串行化( serializable )
最高隔离级别 每次读数据都会加锁 所以也会导致大量超时和锁争用 非常需要数据一致性 并且没有并发的情况下可以使用

脏读是什么

A事物数据读取后,B事物回滚,导致A读取数据有误
在这里插入图片描述

幻读是什么

A事物第一次和第二次读取数据之间,B提交事物,导致A读取不同
在这里插入图片描述

如何更改隔离级别

Mysql如何更改事务级别 set session transaction isolation level + 级别区别:
在这里插入图片描述

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值