iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL事务与锁 - Mr
  • 856
分享到

MySQL事务与锁 - Mr

MySQL事务与锁-Mr 2016-11-14 23:11:44 856人浏览 绘本
摘要

一、事务与事务特性 在关系型数据库内,事务是由一个sql或一组SQL语句组成的逻辑处理单元。也就是说事务就相当于一个盛放SQL的容器,事务中的SQL要么全部执行成功,要么所有已经修改的操作都回滚到原来的操作,即一条SQL也不能执行成功。

MySQL事务与锁 - Mr

一、事务与事务特性

在关系型数据库内,事务是由一个sql或一组SQL语句组成的逻辑处理单元。也就是说事务就相当于一个盛放SQL的容器,事务中的SQL要么全部执行成功,要么所有已经修改的操作都回滚到原来的操作,即一条SQL也不能执行成功。

事务的四大特性(ACID):

  1. 原子性:

    事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行,当在执行过程中出现错误,就会回滚到事务开始前的状态。

  2. 一致性:

    事务的执行结果必须是从一个一致性状态向另一个一致性状态的变更。比如,A和B两人共有100元,那么不管A转钱给B,或者B转钱给A,A+B的金额永远是100。

  3. 隔离性:

    多个事务并发执行时,一个事务的执行不应影响其他事务的执行。

  4. 持久性:

    一个事务一旦提交,他对数据库的修改应该永久保存在数据库中,任何事务或故障都不应导致数据丢失。

二、Mysql事务的3种运行模式

隐式==自动

显式==手动

  1. 自动提交事务(隐式开启、隐式提交)

    mysql默认的事务运行模式,在每条SQL执行完毕之后自动commit提交。

  2. 隐式事务(隐式开启、显式提交)

    由于在MySQL中是默认每条SQL都开启了事务的,并且每条SQL执行完毕之后都会自动提交,这样的话就只需要将自动提交关闭就可以了。

    # 零时关闭		(关闭当前数据库连接在从新连接就恢复了)
    set autocommit = 0;
    
    # 永久关闭		(修改配置文件my.cnf)
    autocommit = 0
    
    
  3. 显示事务(显示开启、显示提交)

    这就是我们手动开启事务,将SQL语句放在我们手动开启的事务中。

    start transaction;
    
    SQL语句;
    
    commit;		# 提交、或rollback回滚
    

    当使用了commit或者rollback后事务就结束了,在此进入需要从新开始。

三、数据库读现象

高并发场景下,并发的多个事务去操作同一份数据,而产生的一些奇怪的现象,是数据不安全的一种体现。

  1. 脏读

    一个事务在对一条数据进行了修改,在这个事务还没有提交时,另一个事务也读取了这条数据,如果没有控制,那么第二个事务读到的就是一条脏数据,如果第二个事务还需要对这条数据进行操作,那么这两个事务之间就存在依赖关系,这就叫脏读。总结一句话就是事务A读取到了事务B已经修改了但未提交的数据。

  2. 不可重复读

    同一个事务在读取某个数据后,隔一段时间再次读取该条数据,在这中间该数据被另一个事务给修改,导致两次读取的数据不一致。

  3. 幻读

    幻读就是不可重复读的一种现象,同一个事务使用相同的查询条件读取以前检索的数据,却查询到了其他事务插入的符合条件的数据,这种现象叫做幻读。也就是说事务A读取到了事务B提交的新增数据。

四、机制

锁是一种保障数据安全的机制,也就是协调多个进程或线程并发访问某一资源的机制。

以互斥锁为例,让多个并发的任务同一时间只能有一个可以运行,牺牲了效率换来了数据安全。

锁的优缺点:

  • 优点:保障并发场景下数据的安全。
  • 缺点:降低了效率。

所以在使用锁的时候应该尽可能的缩小锁的范围,也就是锁住的数据越小越好,并发能力越高。

锁的分类:

按照粒度分类:行级锁、表级锁、页级锁。

按照级别分类:共享锁、排他锁。

按照使用方式分类:乐观锁(我在改数据的时候没有人在跟我修改同一份数据,也可以说其实它本身并不是一种锁,因为它是程序角度的一种写程序的套路,本质来说并没有加任何锁)、悲观锁(在我的事务里面,我在改数据的时候我总认为一定有人在跟我抢,悲观锁通常使用数据自带锁机制实现的)

行级锁:

行级锁它分为共享锁,排他锁,是MySQL中粒度最细的一种锁,所以它的并发能力也是最高的。

对于insert、update、delete语句、innodb会自动给涉及的数据加锁,而且是排他锁;

对于普通的select语句,innodb不会加任何锁,需要手动自己加,可以加两种类型的锁;

--共享锁(s):能同时加到锁和抢到锁的是多个,保障读的一致性
select * from 表名 where ... lock in share mode;
--排他锁(x):同一时间只能有一个能抢到,保障写数据的安全
select * from 表名 where ... for update;

锁的使用:例如

事务A对id=3的行加了互斥锁后,其他事务对id=3的行不能加任何锁(写不行,但是可以读)

事务A对id=3的行加了共享锁后,其他事务对id=3的行只能加共享锁,或者不加锁(写不行,但可以读)

表级锁:

表级锁是MySQL中粒度最大的一种锁,整张表都被加锁,当然并发能力也是最低的。

lock table 表名 read(write),表名 read(write),.........;

--SQL语句

unlock tables;	-->释放当前会话持有的任何锁

页级锁:

页锁是取于表锁和行锁之间的一种锁,粒度界于表锁和行锁之间的,并发能力一般。

学习之旅
您可能感兴趣的文档:

--结束END--

本文标题: MySQL事务与锁 - Mr

本文链接: https://www.lsjlt.com/news/9120.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL中什么是事务与锁
    这篇文章给大家介绍MySQL中什么是事务与锁,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  MySQL 中事务的实现  在关系型数据库中,事务的重要性不言而喻,只要对数据库稍有了解的...
    99+
    2024-04-02
  • MySQL的中事务与锁的实现
    本篇内容主要讲解“MySQL的中事务与锁的实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL的中事务与锁的实现”吧!MySQL 中事务的实现在关系型数...
    99+
    2024-04-02
  • MySQL InnoDB事务与锁的详细讲解
    这篇文章主要介绍“MySQL InnoDB事务与锁的详细讲解”,在日常操作中,相信很多人在MySQL InnoDB事务与锁的详细讲解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • MySQL事务与锁的知识点总结
    这篇文章主要介绍“MySQL事务与锁的知识点总结”,在日常操作中,相信很多人在MySQL事务与锁的知识点总结问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL事务与锁的...
    99+
    2024-04-02
  • MySQL事务与锁实例教程详解
    目录mysql事务和锁事务事务的控制语句事务隔离级别设置脏读不可重复读幻读锁机制InnoDB的行级锁锁实战死锁总结MySQL事务和锁 事务 说到关系型的数据库的事务,相信大家对四大特性都不陌生,分别是原子性、一致性、隔离...
    99+
    2024-04-02
  • MySQL中有哪些锁与事务隔离级别
    本篇文章为大家展示了MySQL中有哪些锁与事务隔离级别,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  1、概述  (1)锁的定义  锁是计算机协调多个进程或线程并...
    99+
    2024-04-02
  • MySQL 锁、事务隔离级别与应用的关系
    MySQL 锁的事务隔离级别与应用在数据库中,事务隔离级别是非常重要的概念,它决定了并发事务之间的隔离程度。MySQL 提供了四种事务隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ ...
    99+
    2023-12-21
    应用 MySql锁 事务隔离级别
  • mysql与事务
    什么是事务 事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务 一、事务的特性(ACID) ...
    99+
    2024-04-02
  • MySQL锁、事务、MVCC是什么
    这篇文章将为大家详细讲解有关MySQL锁、事务、MVCC是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。单条SQL语句执行时,会被当成一个事务提交吗?以下内容摘自 《...
    99+
    2024-04-02
  • Mysql表锁与行锁
    Mysql锁实战 前言:什么是锁一:全局锁1.1 概念1.2 作用1.3 使用1.4 特点 二:表级锁2.1 概念2.2 分类2.2.1 表锁2.2.2 元数据锁 MDL2.2.3 意向锁...
    99+
    2023-09-09
    mysql 数据库
  • MySQL 4.1.0 中文参考手册 --- 6.7 MySQL 事务与锁定命令 (转)
    MySQL 4.1.0 中文参考手册 --- 6.7 MySQL 事务与锁定命令 (转)[@more@] code {color:purple} tt {color:green} samp {color:n...
    99+
    2024-04-02
  • MySQL锁与事物隔离级别是什么
    小编给大家分享一下MySQL锁与事物隔离级别是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!前言MySQL索引底层数据结构与算法MySQL性能优化原理-前篇MySQL性能优化-实践篇1My...
    99+
    2024-04-02
  • MySQL InnoDB 事务锁源码分析
    目录1. Lock 与 Latch2. Repeatable Read3. Insert加锁流程3.1 lock mode3.2 加锁流程3.3 隐式锁4. Select 加锁流程本...
    99+
    2024-04-02
  • 如何避免mysql事务锁表
    避免mysql事务锁表的方法保持事务的轻量事务越轻量,占有越少的锁资源,发生锁表的几率就越小。提高运行的速度避免使用子查询,尽量使用主键等,从而提高mysql的运行速度。减少持有锁的时间尽量快提交事务,从而减少持有锁的时间,越早提交事务,锁...
    99+
    2024-04-02
  • day 59 MySQL之锁、事务、优化
        本节目录 一 锁的分类及特性 二 表级锁定(MyISAM举例) 三 行级锁定 四 查看死锁、解除锁 五 事务 六 慢日志、执行计划、sql优化 七 OLTP与OLAP的介绍和对比 八 关于auto...
    99+
    2023-01-31
    事务 day MySQL
  • 深入理解Mysql事务隔离级别与锁机制问题
    概述 数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能导致脏读、脏写、不可重复度和幻读。这些问题的本质都是数据库的多事务并发问题,为了解决事...
    99+
    2024-04-02
  • MySql 知识点之事务、索引、锁原理与用法解析
    本文实例讲述了MySql 知识点之事务、索引、锁原理与用法。分享给大家供大家参考,具体如下: 事务 事务概念 事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎执行一组操作语句...
    99+
    2024-04-02
  • MySQL锁机制详解-表锁与行锁
    文章目录 1. 数据库锁理论2. 锁的分类2.1 按数据操作的类型分类2.2 按数据操作的颗粒度分类 3. 表锁的应用3.1 表锁相关命令3.2 给表加表共享读锁3.3 给表加表独占写锁...
    99+
    2023-09-11
    mysql 数据库
  • MySQL中事务和锁的示例分析
    小编给大家分享一下MySQL中事务和锁的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! My...
    99+
    2024-04-02
  • Mysql事务以及加锁机制详解
    这篇文章主要讲解了“Mysql事务以及加锁机制详解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mysql事务以及加锁机制详解”吧!事务的特征ACID,即原...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作