MySQL的事物级别以及MySQL的锁机制
一、事物级别
1.read uncommitted(未提交读)
可以看到未提交的数据(脏读),举个例子:别人说的话你都已经做好了,但是可能只是说说,并不要求你实际去做。
2.reda committed(提交读)
读取提交的数据。但是,可能多次读取的数据结果不一致(不可重复读、幻读)。用读写的观点就是:读取的行数据,可以写。
3.repeatable read(重复读是MYSQL默认的隔离级别)
可以重复读取,但有幻读。读写观点:读取的数据行不可写,但是可以往表中新增数据。在MYSQL中,其他事物新增的数据,看不到,不会产生幻读。采用多版本(MVCC)机制解决幻读问题。
4.serializable(串行化)
可读,不可写。像java中的锁,写数据必须等待另一个事物结束。
二、锁机制
1.表级锁
表级锁的锁定是MySQL各存储引擎中最大粒度的锁定机制。该锁定机制最大的特点是实现逻辑简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以很好的避免死锁问题。
当然,锁定颗粒度大所带来最大的负面影响就是出现锁定资源争用的概率也会最高,致使并发量较低。
2.页级锁
页级锁的特点是锁定颗粒度介于行级锁与表级锁之间,所以获取锁定所需要的资源开销以及所能提供并发处理能力也同样介于上面二则之间。另外,页级锁和行级锁一样,会发生死锁。
在MySQL数据库中,使用表级锁定主要是MYISAM,Memory,CSV等一些非事物性存储引擎,而使用行级锁定的主要是Innodb存储引擎和NDBCluster存储引擎,页级锁定主要是BerkeleyDB存储引擎的锁定方式。
3.行级锁
行级锁定是目前各大数据库管理软件所实现的锁定颗粒度最小的,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能。
但是由于锁定资源的颗粒度很小,所以每次获取锁和释放锁消耗的资源也更多,带来的消耗自然也就更大了。此外,行级锁也最容易发生死锁。
总的来说,Innodb的锁定机制和Oracle数据库有不少相似之处。Innodb的行级锁定同样分为两种类型,共享锁和排它锁。而在锁定机制的实现过程中为了让行级锁定和表级锁定共存,Innodb也同样使用了意向锁(表级锁定)的概念,也就是意向共享锁和意向排它锁这两种。
当对某个资源加锁时,如果:
1)、有共享锁,可以再加一个共享锁,不过不能加排它锁。这个很好理解,就是多个事物只能读数据。不能同时改数据了。MySQL Innodb默认对select是不加锁的,如果想加共享锁,则需要select * from table lock in share mode
2)、有排它锁,就在表上添加意向共享锁或意向排它锁。而对于排他锁并不是对数据加锁后,其他事物不能读或则改数据,而是不能对其加其他锁。MySQL中innodb的insert update delete 是默认加排它锁的,如果想对查询语句加排他锁可以:select * from table for update
意向共享锁可以同时并存多个,但是意向排它锁同时只能有一个存在。所以,可以说Innodb的锁定模式实际上可以分为四种:共享锁(S),排它锁(X),意向共享锁(IS)和意向排它锁(IX)
转载于:https://www.cnblogs.com/chewing-gum/p/11242729.html
MySQL的事物级别以及MySQL的锁机制相关推荐
- MySQL的存储引擎、事务和锁机制
1.什么存储引擎 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧,锁定水平等功能,使用不同的存储引 ...
- MySQL并发 共享锁目的_mysql并发与锁机制
在InnoDB中,锁是逐步获得的,因此发生死锁是可能的.发生死锁后,InnoDB一般都能自动检测到,并使一个事务释放锁并回退,另外一个事务获得锁,并继续完成事务.但在涉及外部锁,或涉及表锁的情况下,I ...
- MySQL数据库InnoDB存储引擎中的锁机制--转载
原文地址:http://www.uml.org.cn/sjjm/201205302.asp 00 – 基本概念 当并发事务同时访问一个资源的时候,有可能导致数据不一致.因此需要一种致机制来将访问顺序化 ...
- MySQL高级:(十三)数据库锁
笔记来源:MySQL数据库教程天花板,mysql安装到mysql高级,强!硬! 文章目录 13.1 数据库锁概述 13.2 MySQL并发事务问题 读-读 写-写 读-写 13.3 并发问题解决方案 ...
- 说说@Transactional(readOnly = true),和mysql事务隔离级别;
1.首先说说注解@Transactional(readOnly = true) (1)这里使用readOnly=true后,直观会给我们的体现就是,在该事务中,我们只能做查询,不能做更改等操作,否则报 ...
- c mysql 批量插入_c#之mysql四种带事务批量插入
前言 对于像我这样的业务程序员开发一些表单内容是家常便饭的事情,说道表单 我们都避免不了多行内容的提交,多行内容保存,自然要用到数据库,如果循环打扰我数据库,数据库也会觉得很累,从而增加数据库服务器压 ...
- 【转】事务和锁机制是什么关系? 开启事务就自动加锁了吗?
数据库锁 因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对同一张表进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作进行控制,因此就有了 ...
- 数据库事务及锁机制介绍
2019独角兽企业重金招聘Python工程师标准>>> 事务介绍 因为一直使用Spring这种声明式的事务管理,一直以为事务的主要作用是对一个业务方法中多次执行数据库操作的最终提交. ...
- Mysql 的隔离级别与锁
1.MySQL参数autocommit生产环境设1还是0?为什么? 在生产环境中,为了事务一致性,需要把autocommit 设置为 0 这样可以进行事务全部成功后,在最后一次性提交,如果某一 ...
最新文章
- win10下Anaconda如何查看PyTorch版本
- 辨别 Windows CE, Windows XP Embedded 和 Windows Mobile
- C/C++多线程编程之一】VC6.0安装pthread
- JavaWeb(十)——jetty服务器、创建jsp项目、servlet生命周期及url的匹配规则
- 兰州2021高考一诊成绩查询,2021兰州中考"一诊"成绩分析结果查询
- 网页登陆验证之图片验证码
- CodeForces - 1334C Circle of Monsters(贪心)
- mysql中用来取余数的函数是_MySQL常用函数-单行处理函数-字符串处理函数(更新中...)...
- WPF TextBox 正则验证 大于等于0 小于等于1 的两位小数
- machine learning for hacker记录(3) 贝叶斯分类器
- Spark的动态资源分配ExecutorAllocationManager
- Jmeter_模板设置默认请求参数
- 64qam带宽计算_信道带宽计算参考
- 手机“入殓师”,你之前有听过吗?
- 个计算机语言使用人数排行,语言使用人数排行_世界语言使用人数排名
- 台式电脑添加共享计算机,台式电脑怎么设置wifi共享
- windows 10 vs2017 x264的编译和使用测试
- 这些线上峰会为何不约而同选择亿联视讯方案?云端协同、流畅安全是关键!
- 醉梦尘缘,花落为谁伤
- xshell常用命令