mysqlcrud语句
MySQL的基本操作可以包括两个方面:MySQL常用语句如高频率使用的增删改查(CRUD)语句和MySQL高级功能,如存储过程,触发器,事务处理等。而这两个方面又可以细分如下:MySQL常用语句表(或...
2024.11.15在可重复读(REPEATABLE READS)隔离级别中,基于锁机制并发控制的DBMS需要对选定对象的读锁(read locks)和写锁(write locks)一直保持到事务结束,但不要求“范围锁(range-locks)”,因此可能会发生“幻影读(phantom reads)”在该事务级别下,保证同一个事务从开始到结束获取到的数据一致。
设置数据库事务为该级别:
SETSESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;SETGLOBAL TRANSACTION ISOLATION LEVELREPEATABLE READ;场景事务1,在我们数据库中对student表修改,事务不提交
start TRANSACTION;select * from student;update student set name = ‘a2‘ where id = 1;select * from student;事务2,查询student表数据,事务不提交
start TRANSACTION;select * from student;提交事务1后,事务2中继续查询
start TRANSACTION;select * from student;update student set name = ‘a2‘ where id = 1;select * from student;COMMIT;查询发现未获取到事务1的数据。
此事务级别保证了同一个事务获取数据一致。
幻读(phantom read)前提条件InnoDB引擎,可重复读隔离级别,使用当前读时
表现一个事务(同一个read view)在前后两次查询同一范围的时候,后一次查询看到了前一次查询没有看到的行两点需要说明:1、在可重复读隔离级别下,普通查询是快照读,是不会看到别的事务插入的数据的,幻读只在当前读下才会出现2、幻读专指新插入的行,读到原本存在行的更新结果不算。因为当前读的作用就是能读到所有已经提交记录的最新值
幻读的影响会造成一个事务中先产生的锁,无法锁住后加入的满足条件的行产生数据一致性问题,在一个事务中,先对符合条件的目标行做变更,而在事务提交前有新的符合目标条件的行加入这样通过binlog恢复的数据是会将所有符合条件的目标行都进行变更的
幻读产生的原因行锁只能锁住行,即使把所有的行记录都上锁,也阻止不了新插入的记录
如何解决幻读将两行记录间的空隙加上锁,阻止新记录的插入;这个锁称为间隙锁间隙锁与间隙锁之间没有冲突关系跟间隙锁存在冲突关系的,是往这个间隙中插入一个记录这个操作
MySQL的基本操作可以包括两个方面:MySQL常用语句如高频率使用的增删改查(CRUD)语句和MySQL高级功能,如存储过程,触发器,事务处理等。而这两个方面又可以细分如下:MySQL常用语句表(或...
2024.11.15概述binlog2sql是一个开源的Python开发的MySQL Binlog解析工具,能够将Binlog解析为原始的SQL,也支持将Binlog解析为回滚的SQL,以便做数据恢复。gihub:htt...
2024.11.15目录1.redo 日志1.1.为什么需要 REDO 日志?1.2.REDO 日志的好处与特点1.3.redo 的组成1.4.redo 的整体流程1.5.redo log 的刷盘策略1.6.不同刷盘策略...
2024.11.14SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。mysql的4种事务隔离级别,如下所示...
2024.11.15作者:古时的风筝经常提到数据库的事务,那你知道数据库还有事务隔离的说法吗,事务隔离还有隔离级别,那什么是事务隔离,隔离级别又是什么呢?本文就帮大家梳理一下。MySQL 事务本文所说的 MySQL 事务...
2024.11.12