MYSQL事务

事务:

  • 原子性 : 要么都执行,要么都不执行。

  • 一致性: 结果要么都成功 ,要么都失败。

  • 隔离性: 事务之间是互不干扰的

  • 持久性: 事务一旦被提交,对数据库的改变是永久性的。

事务的隔离级别:

  • 未提交读: 脏读

    • 一个事务读取了别的事务修改了但未提交的数据

  • 提交读:不可重复读

    • 同一个事务读取到的数据不同 ,可能是被别的事务把数据修改了

  • 可重复读:幻读 (mysql默认的事务隔离级别)

    • 分配一个版本号 ,只读这一个版本号 ,解决了提交读的问题 但可能读取到的数据跟库里面不一致

  • 可串行读

    • 事务的最高隔离级别,强制事务排序 ,加共享锁

    • 可以解决脏读、不可重复读、幻读问题,但会导致大量的超时和锁竞争关系,一般不推荐使用

mysql中的锁

MyISAM和InnoDB支持的锁类型**(mysql的两种最常用数据库引擎)

乐观锁悲观锁作用
  • 在并发访问情况下,很有可能出现不可重复读等等读现象。

  • 为了更好的应对高并发,封锁、时间戳、乐观并发控制(乐观锁)、  悲观并发控制(悲观锁)都是并发控制采用的主要技术方式。

悲观锁(读取数据就加锁)
  • 总是假设最坏的情况,每次去读数据的时候都认为别人会修改,所以每次读取数据的时候就加上一把锁

    在读取之前就加锁,期间其他用户阻塞等待访问该记录。

乐观锁(读取数据不加锁,修改数据加锁)
  • 总是假设最好的情况,每次去读数据的时候认为别人不会修改,所以每次读取数据的时候不用加锁

    在更新数据在加一把锁

  • 在更新数据的时候需要比较程序中的库存量与数据库中的库存量是否相等,如果相等则进行更新

    反之程序重新获取库存量,再次进行比较,直到两个库存量的数值相等才进行数据更新。

使用场景

  • 乐观锁适用于写比较少的情况下(多读场景),即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。

  • 悲观锁适用于读比较少的情况下(多写场景),如果是多写的情况,一般会经常产生冲突,这就会导致上层应用会不断的进行retry,这样反倒是降低了性能,所以一般多写的场景下用悲观锁就比较合适。

共享锁
  • 共享锁又叫读锁,如果事务T对A加上共享锁,则其它事务只能对A再加共享锁,不能加其它锁。

  • 获准共享锁的事务只能读数据,不能写数据。

排它锁

  • 排它锁又叫写锁,如果事务T对A加上排它锁,则其它事务都不能对A加任何类型的锁。获准排它锁的事务既能读数据,又能写数据。

MYSQL事务、锁的更多相关文章

  1. mysql 事务锁超时时间 innodb_lock_wait_timeout

    mysql 事务锁超时时间 innodb_lock_wait_timeout: # 查询全局等待事务锁超时时间 SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait ...

  2. MySQL事务锁等待超时 Lock wait timeout exceeded; try restarting transaction

    工作中处理定时任务分发消息时出现的问题,在查找并解决问题的时候,将相关的问题博客收集整理,在此记录下,以便之后再遇到相同的问题,方便查阅. 问题场景 问题出现的场景: 在消息队列处理消息时,同一事务内 ...

  3. MySQL事务锁问题-Lock wait timeout exceeded

    转载:https://cloud.tencent.com/developer/article/1356959 问题现象:   接口响应时间超长,耗时几十秒才返回错误提示,后台日志中出现Lock wai ...

  4. Lock wait timeout exceeded; try restarting transaction(mysql事务锁)

    现场环境客户要求删数据(界面没法直接操作),于是直接在数据库进行查询删除了,删完发现界面依然能查到删除后的数据,又用sql语句进行删除,发现报了错:Lock wait timeout exceeded ...

  5. 设置mysql 事务锁超时时间 innodb_lock_wait_timeout

    Mysql数据库采用InnoDB模式,默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,一旦数据库锁超过这个时间就会报错. mysql> SHOW GLOBAL ...

  6. mysql事务锁表

    -- 查看被锁住的SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; -- 等待锁定SELECT * FROM INFORMATION_SCHEMA.INNO ...

  7. MySQL · 引擎特性 · InnoDB 事务锁简介

    https://yq.aliyun.com/articles/4270# zhaiwx_yinfeng 2016-02-02 19:00:43 浏览2194 评论0 mysql innodb lock ...

  8. MYSQL事务和锁

    mysql事务(一)—转载 2012年12月20日 ⁄ Mysql数据库, 技术交流 ⁄ 暂无评论 一. 什么是事务 事务就是一段sql 语句的批处理,但是这个批处理是一个atom(原子) ,不可分割 ...

  9. MySql 事务与锁

    事务介绍 首先,什么是事务?事务就是一段sql 语句的批处理,但是这个批处理是一个atom(原子),不可分割,要么都执行,要么回滚(rollback)都不执行. MySQL 事务主要用于处理操作量大, ...

  10. MySQL事务与锁

    MySQL事务与锁 锁的基本概念 锁是计算机协调多个进程或线程并发访问某一资源的机制. 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISA ...

随机推荐

  1. [PHP7.0-PHP7.2]的新特性和新变更

    php7发布已经升级到7.2.里面发生了很多的变化.本文整理php7.0至php7.2的新特性和一些变化. 参考资料: http://php.net/manual/zh/migration70.new ...

  2. javascript高程笔记-------第四章 变量、作用域和内存问题

    首先JavaScript中的变量分为基本类型和引用类型. 基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象. 1.参数传递 javascript中所有参数的传递都是值传 ...

  3. js 动态操作元素

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  4. C/C++ static用法

    这篇文章没有太多的实际内容,简单记录下static的用法.顺便试一下用markdown来写文章. 1. 在函数中使用 我们都知道在一个函数中的变量是存储在栈区中,函数的每一次调用都伴随着变量的重新定义 ...

  5. 利用winIO3.0进行windows10 64bit端口读取

    一.winIO介绍 WinIO程序库允许在32位的Windows应用程序中直接对I/O端口和物理内存进行存取操作.通过使用一种内核模式的设备驱动器和其它几种底层编程技巧,它绕过了Windows系统的保 ...

  6. Gralde 网络代理

    Gralde 网络代理 Gradle在编译项目的时候,需要下载一些依赖.墙外的网络就需要设置代理了. 设置的方法,见文档: Accessing the web through a HTTP proxy ...

  7. Win8 Metro(C#)数字图像处理--2.36角点检测算法

    原文:Win8 Metro(C#)数字图像处理--2.36角点检测算法  [函数名称] Harris角点检测函数    HarrisDetect(WriteableBitmap src, int  ...

  8. vs2015未能正确加载“ProviderPackage”包。

    原文:vs2015未能正确加载“ProviderPackage”包. 出现以下错误的解决方案 --------------------------- Microsoft Visual Studio - ...

  9. ArcGIS 10.3 for Server 在windows下的安装教程

    原文:ArcGIS 10.3 for Server 在windows下的安装教程 以下是10.2的教程,10.3同样适用. 许可文件: ArcGIS For Server10.3许可文件 - 下载频道 ...

  10. So Good They Can't Ignore You

    总体而言,这本书的作者的观点就是,你只有做好了,才会有兴趣,而不是一开始就找可能并不存在的所谓兴趣——好多人就败在不停地找这么一个根本就不存在的兴趣.这个观点简直就是拯救那些乔布斯的粉丝:Follow ...