`
lhc1986
  • 浏览: 161832 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论

Mysql事务以及加锁机制

阅读更多

事务的特征ACID,即原子性、一致性、隔离性、持久性。

原子性保证一个事务为一个最小的单元,内部不可分割;

一致性保证事务中的每个操作线程不可单独提交,成功则一起提交,不成功则事务回滚;

隔离性保证不同事务间看到的数据视图相互独立,相互隔离(隔离级别可设置);

持久性保证事务提交后数据会持久的保存下来;

 

sql规范定义的事务的隔离级别:

1.READ UNCOMMITTED(读取未提交内容)

    所有事务可以看到未提交事务的执行结果,本隔离级别很少用到实际应用中,读取未提交的数据,又称为“脏读”。

2.READ COMMITTED(读取提交内容)

    大多数数据库的默认隔离级别是此级别,但不是mysql默认的。一个事务在开始的时候只能看见已提交事务所做的改变。一个事务从开始到提交前所做的任何改变都是不可见的,除非提交。这种隔离级别也称为不可重复读。

3.REPEATABLE READ(可重复读)

    锁定查询中使用的所有数据以防止其他用户更新数据,但是其他用户可以将新的幻像行插入数据集,且幻像行包括在当前事务的后续读取中。此级别也称为“幻读”。

4.SERIALIZABLE(可串行化)

    可串行化是最高的隔离级别,它通过强制事务排序,使之不可重读,解决了幻读的问题。此隔离级别会在每个读的数据行上加共享锁,使用这种隔离级别会产生大量的超时现象,一般实际开发中不会用到。


mysql加锁机制 :

根据类型可分为共享锁(SHARED LOCK)和排他锁(EXCLUSIVE LOCK)或者叫读锁(READ LOCK)和写锁(WRITE LOCK)。

根据粒度划分又分表锁和行锁。表锁由数据库服务器实现,行锁由存储引擎实现。

 

mysql提供了3种事务型存储引擎,InnDB、NDB Cluster和Falcon。

一个事务执行的任何过程中都可以获得锁,但是只有事务提交或回滚的时候才释放这些锁。这些都是隐式锁定,也可以显式锁定,InnoDB支持显式锁定,例如:

SELECT .... LOCK IN SHARE MODE (加共享锁)

SELECT .....FOR UPDATE(加排他锁)

 

多版本并发控制(重要):

Mysql的事务存储引擎不是简单实用行加锁机制,而是叫多版本并发控制(MVCC)技术,和行加锁机制关联实用。以便应对更高的并发,当然是以消耗性能作为代价。

每种存储引擎对MVCC的实现方式不同,InnoDB引擎的简单实现方式如下:

InnoDB通过为每个数据航增加两个隐含值的方式来实现。这两个隐含值记录了行的创建时间,以及过期时间。每一行存储事件发生时的系统版本号。每一次开始一个新事务时版本号会自动加1,每个事务都会保存开始时的版本号,每个查询根据事务的版本号来查询结果。

 

 

分享到:
评论

相关推荐

    MySQL加锁处理分析@何登成1

    Isolation Level 是数据库事务的隔离级别,它对 MySQL 加锁机制的影响非常重要。常见的 Isolation Level 有四种:Read Uncommitted、Read Committed、Repeatable Read、Serializable。 六、一条简单 SQL 的加锁实现...

    MySQL DELETE 删除语句加锁分析1

    在MySQL中,DELETE语句的加锁行为是数据库事务处理的重要组成部分,尤其是在并发环境中,正确理解其加锁机制对于避免死锁和提高系统性能至关重要。本篇文章主要探讨了在不同隔离级别下,针对不同索引类型的DELETE...

    阿里大牛何sir 深入MySQL加锁处理分析

    总结来说,深入理解MySQL/InnoDB的加锁机制对于提高数据库性能、避免并发问题以及分析线上问题非常重要。通过掌握不同SQL语句在不同条件下的加锁行为,可以有效预测和解决锁相关的问题。何登成作为资深技术专家,...

    PHP+MySQL高并发加锁事务处理问题解决方法

    总结来说,解决PHP+MySQL在高并发下处理加锁事务的关键在于: 1. 使用事务来保证数据一致性,通过`BEGIN`、`COMMIT`或`ROLLBACK`来控制事务的生命周期。 2. 在查询中使用`FOR UPDATE`来锁定待检查的行,防止在事务...

    mysql加锁分析

    通过对MySQL/InnoDB加锁机制的深入分析,我们可以看到,不同的SQL语句组合、隔离级别以及索引类型都会影响加锁行为。掌握这些基础知识有助于我们在设计应用程序时做出更加合理的选择,避免潜在的并发问题,提高...

    06-VIP-深入理解Mysql事务隔离级别与锁机制.pdf

    深入理解Mysql事务隔离级别与锁机制 Mysql事务隔离级别与锁机制是数据库系统中非常重要的概念,它们都是为了解决多事务并发问题而设计的。下面我们将深入讲解这些机制,让大家彻底理解数据库内部的执行原理。 事务...

    mysql加锁分析_v1

    本文旨在深入探讨MySQL/InnoDB中的加锁机制,提供一套实用的方法论,帮助技术人员更好地理解和分析SQL语句的加锁行为及其可能带来的风险。 #### MVCC:快照读与当前读 在讨论加锁之前,我们需要先理解MySQL/InnoDB...

    4.5 mysql 加锁分析.pdf

    MySQL/InnoDB的加锁机制一直是数据库领域中一个复杂而重要的主题。本文旨在深入探讨MySQL/InnoDB的加锁原理及其应用场景,帮助读者更好地理解和掌握如何分析任意SQL语句的加锁行为及其可能带来的风险,甚至能够诊断...

    MySQL 加锁处理分析1

    MySQL/InnoDB的加锁分析是数据库管理中的一个重要话题,因为正确理解加锁机制对于优化查询性能和避免死锁至关重要。本文主要探讨了MySQL/InnoDB存储引擎中的锁机制,特别是MVCC(多版本并发控制)以及不同类型的读写...

    何登成的技术博客 » MySQL 加锁处理分析1

    MySQL的加锁处理是数据库并发控制的重要机制,尤其在InnoDB存储引擎中,它...通过深入分析SQL语句的加锁行为、事务隔离级别、索引类型以及MVCC的机制,我们可以更好地设计和调整数据库操作,以提高系统的稳定性和效率。

    mysql事务与锁机制(存储引擎和锁、MyISAM锁机制、InnoDB锁机制、Next-Key锁、Dead-Lock).docx

    ### MySQL事务与锁机制详解 #### 一、锁概念简介 **1、基础描述** 锁机制主要用于解决数据库中多线程或多个会话同时访问同一数据资源时出现的竞争问题。在MySQL中,锁机制是非常重要的组成部分之一,它与其他核心...

    深入理解Mysql事务隔离级别与锁机制.pdf

    "深入理解Mysql事务隔离级别与锁机制" 事务隔离级别是数据库系统中的一种机制,用于解决多事务并发问题,使得事务之间的执行不受影响。这种机制可以分为四个级别:Read Uncommitted、Read Committed、Repeatable ...

    MySQL语句加锁的实现分析

    MySQL数据库中的加锁机制是确保数据一致性与并发性能的关键技术之一。本文将深入探讨如何在SQL语句中实现加锁,以及不同情况下的锁行为。 首先,我们需要理解SQL语句加锁的基本原则。在MySQL中,加锁主要发生在事务...

    【课堂笔记】MySQL事务与锁详解.pdf

    MySQL事务与锁详解的知识点如下: 1. 事务的理解与应用场景: 事务是数据库管理系统(DBMS)执行过程中的逻辑单位,是一个不可分割的工作单元,可以包含一条或多条DML语句。在实际应用中,事务常见的使用场景包括:当...

    mysql insert 加锁流程1

    MySQL中的插入操作(INSERT)涉及一系列的加锁机制,确保数据的一致性和并发安全性。在开始插入行之前,系统会设定一种特殊的间隙锁,称为插入意向间隙锁(Insert Intention Gap Lock)。这种锁的主要目的是避免在同...

    Mysql事务以及锁原理讲解

    ### MySQL事务及锁原理详解 #### 一、事务的基本概念 事务(Transaction)是数据库操作的基本单位,一组逻辑上完整的工作单元。在事务中,一系列的操作要么全部完成,要么都不进行,确保了数据的一致性和可靠性。...

    MySQL的并发控制与加锁分析1

    MySQL的并发控制与加锁机制复杂而高效,通过MVCC和不同的隔离级别,确保了数据的一致性和并发性能。了解这些机制对于优化数据库性能和解决并发问题至关重要。在实际应用中,根据业务需求选择合适的隔离级别,并理解...

    MySQL:锁机制.pdf

    本知识点详细解读了MySQL锁机制的定义、分类、特点以及具体的应用案例。 1. 锁的定义和分类 在数据库系统中,锁是用来控制多个用户或进程对同一数据资源进行访问的同步机制。它解决的是多个操作同时对同一资源进行...

    何登成 - 管中窥豹——MySQL(InnoDB)死锁分析之道

    也涉及加锁机制。 #### 锁模式 InnoDB的锁模式包括共享锁(S)和排它锁(X)。共享锁允许多个事务同时读取同一个资源,而排它锁则不允许其他事务读取或写入锁定的资源。除此之外,InnoDB还存在一些特殊的锁模式,...

    mysql insert锁机制1

    当进行插入操作时,InnoDB会根据查询条件和隔离级别决定是否需要加锁以及加锁的类型。如果在索引上进行插入,InnoDB可能会使用Next-Key Locks来防止幻读。如果在已存在索引记录的插入操作,通常只用到行锁。但如果...

Global site tag (gtag.js) - Google Analytics