首页 > 数据库 >mysql锁

mysql锁

时间:2024-01-29 11:35:19浏览次数:32  
标签:事务 场景 乐观 mysql table 表锁 select

锁分类

读锁(共享锁)
写锁(排他锁)

按照锁的粒度划分

全局锁  锁整个数据库,一般用于数据迁移、数据备份
表锁  一般用于alter table、drop table、trunck table、lock table
行所  select...for udpate、insert、update、delete
间隙锁  select ... from student where id >= 10 and id <= 20;   会锁住(10~20的区间)
临键锁  select ... from student where age = 10; 会锁住(10,下一个值],左开右闭。age不能是唯一索引,临键锁只能作用在非唯一索引上

意向锁

意向共享锁(表锁)
意向排他锁(表锁)

意向锁的作用

一个事务在数据上加表锁之前,直接检查意向锁即可确定是否可以加表锁

乐观锁

适用场景:读多写少,冲突少的场景。合适使用乐观锁可以提高吞吐量

悲观锁

适用场景:事务并发冲突多的场景,避免使用乐观锁时由于冲突多导致的大量回滚

不适合使用乐观锁的场景

如果事务并发修改同一行的概率很高,就不适合使用乐观锁
如果需要长时间锁定某些数据,也不适合使用乐观锁
因为这种场景很可能造成大量事务的冲突或回滚,此时悲观锁是很好的选择

乐观锁的劣势:

需要我们来管理版本号
需要额外的代码控制
事务冲突多的时候,开销比较大

悲观锁的劣势:

并发度降低    
死锁
锁超时

何时加读锁,何时加写锁?

select .... for update  会添加排他锁(对选定的行)
select .... in share mode 会添加共享锁(对选定的行)

insert 会添加排他锁(对选定的行)
update 会添加排他锁(对选定的行)
delete 会添加排他锁(对选定的行)

行锁的缺点

死锁
  两个以上的事务在执行过程中因为争夺资源互相等待,没有外力作用的情况下,会一直等待下去
锁升级
  如果需要锁定很多行,但是锁定这些行开销很大,甚至大过表锁的开销,此时会升级为表锁
锁等待
  如果一个事务锁定了某行,其他事务就必须等待,如果等待的事务多了,会造成额外的开销,甚至出现性能瓶颈
资源消耗

标签:事务,场景,乐观,mysql,table,表锁,select
From: https://www.cnblogs.com/jis121/p/17994095

相关文章

  • Windows 安装 MySQL 5.8 -- 输入3次 密码错误锁定账户
    安装下载地址:https://downloads.mysql.com/archives/installer/需要有.netframework4.5.2及以上版本才能安装MySQL5.8选择自定义安装选择要安装的服务修改安装路径设置ROOT密码,测试错误锁定帐号MySQL8.0.19版本之后,新增了一个功能,支持了输入3次......
  • Linux环境安装MYSQL
    一、卸载MariaDB##查看是否安装rpm-qa|grepmariadb##卸载rpm-e--nodepsmariadb-libs 二、资源包准备2.1官网下载https://dev.mysql.com/downloads/mysql/ 2.2上传安装包,并解压#.tar.gz后缀:tar-zxvf文件名#.tar.xz后缀:tar-Jxvf文件名tar-xvf......
  • 【Lazy ORM 整合druid 实现mysql监控】
    LazyORM整合druid实现mysql监控JDK17LazyORM框架地址up、up欢迎start、issues当前项目案例地址框架版本描述spring-boot3.0.7springboot框架wu-framework-web1.2.2-JDK17-SNAPSHOTweb容器Lazy-ORM1.2.2-JDK17-SNAPSHOTORMmysql-connector-j8.0.33mysql驱动druid-spring-boo......
  • MySQL数据库连接报错1130 - Host 'xxx' is not allowed to connect to this MySQL ser
    目录现象描述原因分析解决办法:本文解决MySQL数据库连接报错1130-Host'xxx'isnotallowedtoconnecttothisMySQLserver。返回目录返回目录现象描述MySQL数据库,使用Navicat、root用户连接报错:原因分析这个报错原因是权限问题,需要修改连接权限。进入mysql......
  • MySQL查看默认密码和修改密码
    目录查看默认密码1.查找日志目录2.vim查看3.搜索password关键字修改密码1.使用默认密码登陆2.修改密码3.立即生效查看默认密码1.查找日志目录find/-namemysqld.log2.vim查看3.搜索password关键字修改密码1.使用默认密码登陆2.修改密码......
  • 【亲测管用】Linux环境下MySQL 8.0重置密码
    这个问题折磨了我有两三个小时了,看了一大堆博客,大多数都不好用,真的怀疑有没有亲自试用过。本文使用的服务器为阿里云的服务器Linux系统,MySQL的版本为8.0。修改密码操作如下,供大家参考:在/etc/my.cnf中添加如下代码,使其支持免密登录[mysqld]skip-grant-tables重启MySQL服......
  • MySQL必知必会 pdf下载
    《MySQL必知必会》MySQL是世界上最受欢迎的数据库管理系统之一。书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。通过重点突出的章节,条理清晰、系统而扼要地讲述了读者应该掌握......
  • MySQL批量修改数据表编码及字符集为utf8mb4
    utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。更改数据库的编码为utf8mb4:1.MySQL的版本utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。2.MySQL......
  • MySQL导入数据小技巧:在不影响业务的前提下,如何平稳迁移数据?
    MySQL导入数据小技巧:在不影响业务的前提下,如何平稳迁移数据?生产案例:产品经理要求把B库里的表迁移到A库里。问:在不影响业务的前提下,如何平稳迁移数据?答:可以做限速,以每秒1MB的速度导入数据,这样CPU和磁盘IO不受影响。shell>pv-a-q-t-L1mtest1.sql|mysql-S/tmp/mysql.sock-......
  • mysqldump备份
     mysql备份:backup_dir='/data/backup/mysql'database_name='dbname'bak_save_days=7dd=`date+%Y-%m-%d-%H-%M-%S`if[!-d$backup_dir];thenmkdir-p$backup_dirfimysqldump--defaults-extra-file=/etc/mypass.txt--flush-logs--single......