首页 > 数据库 >MYSQL锁机制行锁、表锁、死锁的实现

MYSQL锁机制行锁、表锁、死锁的实现

时间:2022-09-25 00:22:23浏览次数:48  
标签:行锁 update 死锁 读锁 MYSQL 表锁

一、MYSQL锁是什么?有什么类别

锁定义 :

  同一时间同一个资源只能被一个线程访问

 

乐观锁和悲观锁

乐观锁用的最多的就是数据库中的表加了一个标识字段 version 

例如 update text set  a=a+1 where id=100 and a>0

锁发分类

 

 

表锁和行锁

行锁必须要有索引才可以实现,否则会自动锁全表,那么就不是行锁了

两个事务不能锁同一个索引

insert delete  update 在事务中默认都会加上排它锁

表锁

不会出现死锁,发生冲突的几率高并发低

 

 

从对数据的操作类型分法(读或者写)

读锁(共享锁):针对同一分数据,可以多个读的操作可以同事进行

写锁(排它锁): 当前操作没有完成前,它会阻断其他的其他读锁和写锁;

 

什么是死锁?

 

产生场景:两个事务都有 select  for  update , a先锁记录1 ,再锁记录2 ;而b先锁记录2在锁记录1 

写锁 for update ,读锁 for my share mode show engine innodb status 

 

标签:行锁,update,死锁,读锁,MYSQL,表锁
From: https://www.cnblogs.com/kkds/p/16727052.html

相关文章

  • MySQL主从复制常见问题及解决方法
    在从节点清除信息前提:停止slave的相关线程:stopslaveRESETSLAVE#从服务器清除master.info,relay-log.info,relaylog,开始新的relaylogRESETSLAVE ALL#清除所......
  • 为什么MySQL 默认隔离级别是RR,又被阿里设置为RC
    我们知道,我们可以通过这个命令查看数据库当前的隔离级别,MySQL默认隔离级别是RR. select@@tx_isolation; ANSI/ISOSQL定义的标准隔离级别有四种,从高到底依次为:可序......
  • mysql将字符串类型字段后面的小数点和零去掉
    背景现有student表,表中的学生年龄student_age字段中的值,是通过读取excel中的信息后更新到数据库中,但是因为处理不当,导致年龄的均带有.0,如28.0实际上应该是28。我们需要将......
  • sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (2026, '
    sqlalchemy.exc.OperationalError:(MySQLdb._exceptions.OperationalError)(2026,'SSLconnectionerror:unknownerrornumber')问题:使用sqlalchemy查询mysql数据时......
  • MySQL面试题
    MySql项目中使用的存储引擎5.0之前默认存储引擎为MyISAM引擎索引只有一种,被索引的字段值作为索引数据,叶子节点还包含该记录数据页地址不支持事务没有undolog......
  • MySQL维护之连接数、线程等
    实际生产维护中可能还会查看如下内容:1、如何在MySQL中查询OS线程id(LWP轻量级线程)?OS系统提供ps-Lfpid命令查看LWP;在performance_schema.threads中有......
  • 老杜MySQL/days.01
    1.mysql数据库启动的时候,服务占有的默认端口号是3306;字符编码方式为UTF-8;2.mysql超级管理员用户名不改,一定是root,需要设置密码;3.mysql服务启动关闭指令:netstop/start......
  • Mysql小版本升级
    MySQL小版本升级操作步骤Bing@DBA于2020-11-2517:35:07发布2493收藏19分类专栏:MySQL版权MySQL专栏收录该内容38篇文章5订阅订阅专栏一、前言业务场景中需要......
  • 【MySQL】MySQL分区表
    本想整理一下MySQL分区表的内容。发现有人已经写了很详细了,这里整理一下链接第36期:MySQL原生水平拆表第37期:适当的使用MySQL原生表分区第38期:MySQL时间类分区具体实......
  • mysql 更换root密码简单操作
    usemysql;--切换数据库--更新密码updateusersetauthentication_string=password('123456')whereuser='root'; --刷新权限等信息flushprivileges; 执行......