MySql之锁
MySql之锁
一、全局锁
对整个数据库加锁
应用:数据库所有表备份
二、表级锁
1.表锁
分为两类: 表共享读锁read lock 表独占写锁write lock
2.元数据锁
避免DML语句和DDL语句的冲突问题
3.意向锁:
作用:针对行锁和表锁,当表中有行锁时,会同时加一把意向锁,表锁不用去逐行遍历是否加了行锁,而是通过判断意向锁
的情况去决定能否加锁
意向共享锁 select 与表锁中的读锁兼容,与写锁互斥
意向排他锁 增删改 与表锁的读锁写锁都互,意向锁之间不会互斥
三、行级锁
1.行锁
锁住对应行数据,锁粒度最小,发生锁冲突概率最低,并发度最高
在RC(读已提交)、RR(可重复读)隔离级别下都支持
类型:
共享锁:和共享锁兼容,和排他锁互斥
排他锁:都互斥(增删改的行锁默认都是排他锁,读默认不加锁,使用 lock in share mode加共享锁和意向共享锁)
行锁是针对索引加的锁,字段没有索引会导致行锁升级为表锁
2.间隙锁
锁住索引记录间隙,防止其他事务在这个间隙进行insert,产生幻读
在RR隔离级别下支持
3.临键锁
行锁和间隙锁的组合,同时锁住数据及其前面所有的间隙Gap
在RR隔离级别下支持
MySql之锁的更多相关文章
- mysql乐观锁总结和实践--转
原文地址:http://chenzhou123520.iteye.com/blog/1863407 上一篇文章<MySQL悲观锁总结和实践>谈到了MySQL悲观锁,但是悲观锁并不是适用于任 ...
- 【MySQL】锁入门
要做的完全掌握MySQL/InnoDB的加锁规则,甚至是其他任何数据库的加锁规则,需要具备以下的一些知识点 了解数据库的一些基本理论知识:数据的存储格式 (堆组织表 vs 聚簇索引表):并发控制协议 ...
- mysql行锁和表锁
mysql innodb支持行锁和表锁,但是MyIsam只支持表锁.现在我们说说mysql innodb的行锁和 有如下表id为主键 为了出现演示效果,我们将mysql的autocommit设置为0 ...
- MYSQL的锁介绍,以及死锁发生情况-带例子
mysql锁能在并发情况下的mysql进行更好的优化 MySQL有三种锁的级别:页级.表级.行级,这3种锁的特性可大致归纳如下: 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高 ...
- 《MySQL悲观锁总结和实践》乐观锁
mysql乐观锁总结和实践 博客分类: MyBatis 数据库 mysql数据库乐观锁悲观锁 上一篇文章<MySQL悲观锁总结和实践>谈到了MySQL悲观锁,但是悲观锁并不是适用于任何场景 ...
- [转]关于MYSQL Innodb 锁行还是锁表
关于mysql的锁行还是锁表,这个问题,今天算是有了一点头绪,mysql 中 innodb是锁行的,但是项目中居然出现了死锁,锁表的情况.为什么呢?先看一下这篇文章. 目时由于业务逻辑的需要,必须对数 ...
- mysql myisam 锁表问题<转>
转自http://yafei001.iteye.com/blog/1841258 锁是计算机协调多个进程或线程并发访问某一资源的机制 .在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用 ...
- mysql的锁--行锁,表锁,乐观锁,悲观锁
一 引言--为什么mysql提供了锁 最近看到了mysql有行锁和表锁两个概念,越想越疑惑.为什么mysql要提供锁机制,而且这种机制不是一个摆设,还有很多人在用.在现代数据库里几乎有事务机制,aci ...
- MySQL- 锁机制及MyISAM表锁
锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许 多用户 共享的资源.如何保证数据并发访问的一致性.有效性是所 ...
- MySQL 行锁 表锁机制
MySQL 表锁和行锁机制 行锁变表锁,是福还是坑?如果你不清楚MySQL加锁的原理,你会被它整的很惨!不知坑在何方?没事,我来给你们标记几个坑.遇到了可别乱踩.通过本章内容,带你学习MySQL的行锁 ...
随机推荐
- 我自己写了一个波场(Tron)本地网页版钱包
最近由于项目需要,需要给每个用户分配一个充币地址,考虑到钱包安全性和方便管理,于是自己动手写了一个本地网页版的钱包,附上源代码跟大家交流下. Github 源代码地址 钱包和项目是分离的,项目通过鉴权 ...
- Feign踩坑源码分析--@FeignClient注入容器
一. @EnableFeignClients 1.1.类介绍 从上面注释可以看出是扫描声明了@FeignClient接口的类,还引入了 FeignClientsRegistrar类,从字面意思可以看出 ...
- 【从0开始编写webserver·基础篇#01】为什么需要线程池?写一个线程池吧
线程池 参考: 1.游双Linux高性能服务器编程 2.TinyWebServer 注:虽然是"从0开始",但最好对(多)线程.线程同步等知识点有所了解再看,不然可能有些地方会理解 ...
- Django4全栈进阶之路19 项目实战(用户管理):user_delete.html用户删除画面设计
1.user_list.html删除按钮链接设置: <td> <a class="btn btn-danger btn-xs" href="{% url ...
- EL表达式访问JavaBean
前景提要 刚才有个朋友问我,赵大哥这个实验怎么做?我说哪个实验,给我发了几张截图.我一看,嗷,原来是今天,有个Java实验啊,他说大哥,能不能教教我,我说可以.我一说 他 啪的就站起来了, 很快啊 , ...
- ODOO13之七:Odoo 13开发之记录集 – 使用模型数据
在上一篇文章中,我们概览了模型创建以及如何从模型中载入和导出数据.现在我们已有数据模型和相关数据,是时候学习如何编程与其进行交互 了.模型的 ORM(Object-Relational Mapping ...
- 案例分享-被*队友的mybatis蠢哭的一天
昨晚加班的时候被队友拉着看一个mybatis的问题,耗费了我一个小时时间,最后差点没被我打死,实在是觉得滑稽,今天回家写下来跟大伙分享一下. 问题现象 Invalid bound statement ...
- Python获取系统当前时间并进行类型转换
# 1.使用Python获取系统当前时间print('---------下面是方法1-----------')import timeprint(time.strftime('%Y-%m-%d %H:% ...
- 使用CNI网络插件(calico)实现docker容器跨主机互联
目录 一.系统环境 二.前言 三.CNI网络插件简介 四.常见的几种CNI网络插件对比 五.Calico网络之间是如何通信的 六.配置calico让物理机A上的docker容器c1可以访问物理机B上的 ...
- 通过安装GVM 安装GO 操作步骤
转载请注明出处: 1.GVM GVM是Go Version Manager的缩写,是一个用于管理Go语言版本的工具.通过GVM,我们可以轻松地安装.切换和卸载不同版本的Go语言.GVM会在用户的hom ...