Mysql事务的隔离级别(脏读+幻读+可重复读)
事务是由一组SQL语句组成的逻辑处理单元,是一组不可分割的操作序列。
(二)事务的特征 原子性(Actomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行 一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。 隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的 独立 环境执行。 持久性(Durable):事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。 (三)手动开启、提交、回滚事务 开启事务start transaction;
update user_count set balance = balance + 20 where id = 1;
update user_count set balance = balance 20 where id =2;
回滚事务
rollback;
提交事务
commit;
注意:在回滚和提交之前,数据库中的数据都是操作的缓存中的数据,而不是数据库中的真实数据。
二、脏读、幻读、可重复读 (一)脏读 read uncommit读取到了未提交的数据。
脏读对应的是read uncommitted读未提交的事务隔离级别,即从缓存中读取数据,而不是读取已经持久化的数据。
事务B在select的时候,读取到了被事务A更新在缓存的数据,但是该数据没有真正的持久化到数据库中,一旦事务A会滚,事务B就会读到错误的脏数据。
一个事务在读取某些数据已经发生了改变、或某些记录已经被删除了!这种现象叫做 不可重复读 。
不可重复读产生的场景对应的是read committed读已提交的事务隔离级别,即事务读取的数据都是已经完成持久化的数据。
同一事务内,同样的筛选条件,查询出来的数据条数发生了变化,(另一个事务抢到CPU进行了删除或者插入条件),这种现象就称为 幻读 。
幻读产生的场景对应的是repeatable read可重复读的事务隔离级别,事务读取的数据都是已经完成持久化的数据,并且为事务在修改的数据增加行锁,但是没有表锁。
不可重复读针对的是同一条数据,读的是别的事务修改之前的样子,一旦事务的隔离级别使用了unrepeatable read,加上行锁,就可以避免产生。
幻读针对的是满足筛选条件的一批数据,因为行锁不能阻止插入和删除数据,所以会导致查询到的条数是错误的,使用serializable可以避免。
(三)不可重复读 read repeatable
读可持久化的数据的数据,并且添加行级锁(一个事务在修改某行数据的时候,别的事务阻塞等待提交才能读到)
(四)序列化 serializable最安全但是并发效率最低,读持久化数据,并且加表锁,如果事务并发的多,需要一直阻塞,不建议使用。
事务的隔离级别从低到高依次是 read uncommitted , read committed, repeatable read , serializable 。隔离级别越低,越能支持高并发的数据操作,与此同时,也会带来越高的并发风险,Mysql数据库默认的隔离级别是repeatable read 。
到此这篇关于Mysql事务的隔离级别(脏读+幻读+可重复读)的文章就介绍到这了,更多相关Mysql事务隔离内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 Mysql事务的隔离级别(脏读+幻读+可重复读)
相关文章
- 数据库开启全球访问:连接MYSQL数据库的外网IP指南(外网ip连接mysql)
- MySQL事务:警惕未提交的风险(mysql事务未提交)
- PHP与MySQL数据库之间的连接(php链接mysql)
- Mysql 事务处理简介(mysql的事务)
- MySQL实现字段不重复功能(mysql字段不重复)
- MySQL事务中的锁机制(mysql锁事务)
- MySQL数据字典:记录表结构信息,查询数据类型、主键、索引等,便于管理和维护。(mysql数据字典)
- MySQL数据库:最佳报价攻略(mysql数据库报价)
- 行MySQL中删除重复行的查询策略(mysql查询去掉重复)
- MySQL自带的数据库助你快速完成任务(mysql 自带 数据库)
- MySQL表进行主键修改方法(mysql中修改为主键)
- 25字中文文章标题 MySQL事务提交语句的使用和注意事项(mysql中事物提交语句)
- MySQL事务操作详解解析事务的概念使用方法及注意事项(mysql中事务怎么用)
- MySQL主键重复怎么处理(mysql中主键重复)
- MySQL去重保证数据唯一性(mysql中不重复的数据)
- MySQL合并两个表的结果(mysql两表合并结果集)
- MySQL去重操作详解,实现不重复数据匹配(mysql中去除去重复)
- 如何去除MySQL中的重复数据(mysql中去掉重复数据)
- 如何在MySQL中实现检查约束(mysql不存在检查约束)
- 深入探究MySQL的不可重复读现象与处理方案李子提示(mysql不可重复读李子)
- MySQL取消事务日志功能的注意事项(mysql不要写事务日志)
- 无需语句简单备份 MySQL 数据库(mysql不用语句备份)