【MySQL面试题pro版-4】

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。

Mysql的事务隔离级别

read uncommitted:读未提交

产生的问题:脏读、不可重复读、幻读

read committed:读已提交(Oracle)

产生的问题:不可重复读、幻读

repeatable read:可重复读(MySQL默认)

产生的问题:幻读

serializable:串行化

可以解决所有的问题

注意:隔离级别从小到大安全性越来越高,但是效率越来越低,并发性越来越低 数据库查询隔离级别:select @@tx_isolation;

数据库设置隔离级别:set global transaction isolation level 级别字符串;

Mysql事务隔离时的锁表和锁行操作

MySQL在事务隔离时会使用锁表和锁行操作来保证数据的一致性

在MySQL中,为了解决多事务并发操作带来的问题,如脏读、不可重复读和幻读,数据库设计了事务隔离机制。这个机制通过使用不同类型的锁来实现,主要包括表级锁和行级锁。具体如下:

  • 表级锁:表级锁可以分为表锁、元数据锁和意向锁。表锁是锁住整张表,而元数据锁则用于锁住表的元数据,比如表结构。意向锁则是表级锁的变种,它标志着事务打算对表中的某些行加上排他锁或共享锁。
  • 行级锁:行级锁是更细粒度的锁,只锁住影响的行而不是整张表。InnoDB引擎支持行锁,这使得多个事务可以同时操作不同的行,从而提高并发性能。行锁通常与事务隔离级别一起工作,确保事务的隔离性和一致性。

此外,MySQL还支持读写锁,即允许多个事务同时读取同一数据,但在写入时会限制其他事务的访问。这种锁机制可以提高数据库的并发性能,因为它允许多个事务在不影响彼此的情况下进行读取操作。

综上所述,MySQL通过使用表级锁和行级锁等机制来实现事务隔离,防止并发操作导致的数据不一致性问题。这些锁机制在不同的存储引擎中有不同的实现方式,但它们的目标都是为了确保数据库的稳定性和可靠性。

MySql脏读、幻读、不可重复读是什么玩意?

  1. 事务隔离级别为读提交时,写数据只会锁住相应的行
  2. 事务隔离级别为可重复读时,如果检索条件有索引(包括主键索引)的时候,默认加锁方式是next-key 锁;如果 检索条件没有索引,更新数据时会锁住整张表。一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这 样可以防止幻读。
  3. 事务隔离级别为串行化时,读写数据都会锁住整张表

不可重复读和幻读有什么区别

不可重复读的重点是修改:同样的条件,你读取过的数据,再次读取出来发现值不一样了幻读的重点在于新增或者 删除:同样的条件,第 1 次和第 2 次读出来的记录数不一样

MySql默认隔离级别

MySQL的默认事务隔离级别是可重复读(Repeatable Read)

MySQL中的事务隔离级别用于解决并发事务可能引发的问题,如脏读、不可重复读和幻读。每种隔离级别都有其特定的应用场景和权衡考虑。以下是对MySQL默认隔离级别的具体分析:

  • 可重复读(Repeatable Read):这是MySQL的默认事务隔离级别。它确保在一个事务的生命周期内,对于同一个查询,多次执行返回的结果集是一致的,除非被显式地修改。在InnoDB存储引擎下,即使在SQL标准中,可重复读隔离级别通常无法防止幻读,但因为InnoDB使用Next-Key Lock锁算法,它实际上可以防止幻读的发生。
  • 设置隔离级别 :可以通过特定的SQL命令来查看或设置事务隔离级别。例如,使用SELECT @@tx_isolation;可以查看当前的隔离级别。如果需要改变隔离级别,可以使用SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL命令。
  • 背后的原因:MySQL选择可重复读作为默认隔离级别,部分原因是它在主从复制的过程中通过binlog进行数据同步。在早期的版本中,因为只有statement格式的binlog,当出现事务乱序时,备库在回放SQL后可能导致与主库内容不一致。而可重复读隔离级别通过增加记录锁和间隙锁,可以避免这种情况发生。

此外,不同的隔离级别对数据库性能和并发控制的影响是不同的。较低的隔离级别(如读未提交)允许更高的并发性,但牺牲了一致性。较高的隔离级别(如串行化)则提供了最严格的一致性保证,但可能会降低性能。

总的来说,了解并正确设置事务隔离级别对于维护数据库的一致性和性能至关重要。

相关推荐
likangbinlxa9 分钟前
【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
数据库·sql
r i c k37 分钟前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦1 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL2 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·2 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德2 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫2 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i2 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.3 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn3 小时前
【Redis】渐进式遍历
数据库·redis·缓存