首页 > 数据库 >数据库中的锁

数据库中的锁

时间:2024-06-14 22:21:31浏览次数:26  
标签:数据库 update trx 读锁 session where id

一、 MySQL 中的锁
 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发
度最低。
 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发
度也最高。
 页面锁(gap 锁,间隙锁):开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度
界于表锁和行锁之间,并发度一般。

二、MyISAM引擎中的锁:
1、共享读锁
语法:lock table 表名 read

2.独占写锁
1.lock table testmysam WRITE

读锁,对 MyISAM 表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一 表的写请求
 读锁,对 MyISAM 表的读操作,不会阻塞当前 session 对表读,当对表进行修改 会报错
 读锁,一个 session 使用 LOCK TABLE 命令给表 f 加了读锁,这个 session 可以查询锁定表 中的记录,但更新或访问其他表都会提示错误;
 写锁,对 MyISAM 表的写操作,则会阻塞其他用户对同一表的读和写操作;
 写锁,对 MyISAM 表的写操作,当前 session 可以对本表做 CRUD,但对其他表进行操作 会报错

三、InnoDB引擎中的锁
在 mysql 的 InnoDB 引擎支持行锁
共享锁又称:读锁。当一个事务对某几行上读锁时,允许其他事务对这几行进行读操作,但
不允许其进行写操作,也不允许其他事务给这几行上排它锁,但允许上读锁。
排它锁又称:写锁。当一个事务对某几个上写锁时,不允许其他事务写,但允许读。更不允
许其他事务给这几行上任何锁。包括写锁

1、上共享锁的写法:lock in share mode
例如: select * from 表 where 条件 lock in share mode
2、上排它锁的写法:for update
例如:select * from 表 where 条件 for update;

3.示例

  1. BEGIN
    select * from testdemo where id =1 for update
    在另外一个 session 中
    update testdemo set c1 = '1' where id = 2 成功
    update testdemo set c1 = '1' where id = 1 等待
    2.BEGIN
    update testdemo set c1 = '1' where id = 1
    在另外一个 session 中
    update testdemo set c1 = '1' where id = 1 等待

四、查看数据库中的锁
查询数据库中的所列表

  1. select * from information_schema.INNODB_LOCKS;
    查询数据库中等待锁的,查询语句
    2.select * from sys.innodb_lock_waits

五、杀死kill锁定的session回话

SELECT
r.trx_id waiting_trx_id,
r.trx_mysql_thread_id waiting_thread, r.trx_query waiting_query, b.trx_id blocking_trx_id, b.trx_mysql_thread_id blocking_thread
FROM
information_schema.innodb_lock_waits w
INNER JOIN
information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id
INNER JOIN
information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id;


kill 29,杀死查询线程

标签:数据库,update,trx,读锁,session,where,id
From: https://www.cnblogs.com/velloLei/p/18248755

相关文章

  • Java与数据库连接技术JDBC关键核心之PreparedStatement以及SQL注入演示解决和原理
    PreparedStatementSQL注入执行预编译的SQL对象这样也能登录成功模拟SQL注入是这个原因现在基本上不存在SQL注入的问题解决SQL注入就是传一些语句导致原来的SQL语句改变了修改代码通过设置参数的方式就能防止SQL注入实际上我们进行了一个转化将字符和关......
  • 数据库原理前三章
    第一章1. 试说明数据、数据库、数据库管理系统和数据库系统的概念。答:数据是数据库中存储的基本对象,数据库是存放数据的场所,数据库管理系统是管理数据库数据以及其功能的系统软件,数据库系统是由数据库、数据库管理系统、数据库管理员和数据库应用程序共同构成的系统。5. 比较......
  • MySQL数据库管理
    目录1.MySQL数据库管理1.1常用的数据类型​编辑1.2char和varchar区别2.增删改查命令操作2.1查看数据库结构2.2SQL语言2.3创建及删除数据库和表2.4 管理表中的数据记录2.5修改表名和表结构3.MySQL的6大约束属性1.MySQL数据库管理1.1常用的数据类型1.2c......
  • 数据库SQL优化
    数据库SQL优化通常涉及以下方面:1.查询优化:确保使用正确的索引来优化查询。2.避免全表扫描:避免不必要的全表扫描,使用索引就是为了避免全表扫描。3.使用EXPLAIN分析查询:检查SQL查询的执行计划,判断sql语句存在的问题。4.使用JOIN代替子查询:适当情况下,使用JOIN来合并表。5.使用视......
  • 数据库之SQL语法大全
    DISTINCTcolumn_name去除字段的重复WHERE条件筛选操作AND、OR用于where条件后的多条件连接如果第一个条件和第二个条件都成立,则用AND运算符连接这两个条件。如果第一个条件和第二个条件中只要有一个成立,则用OR运算符连接这两个条件。如:SELECT*FROMWebsitesWHER......
  • golang与数据库报错解决
    在这里插入图片描述提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、前言......
  • 数据库之理解SQL
    初识SQL结构化查询语言(StructuredQueryLanguage)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库管理系统(RelationalDatabaseManagementSystem:RDBMS)的语言,和我们所熟悉的Java、php、python等程序语言一样,也是......
  • 18.9k star!一个高性能的嵌入式分析型数据库,主要用于数据分析和数据处理任务。
    大家好,今天给大家分享的是一个开源的面向列的关系数据库管理系统(RDBMS)。DuckDB是一个嵌入式的分析型数据库,它提供了高性能的数据分析和数据处理能力。DuckDB的设计目标是为数据科学家、分析师和数据工程师提供一个快速、灵活且易于使用的数据分析工具。它支持SQL查询语言,并提......
  • 强大的网页数据库管理工具Adminer
    老苏折腾过的项目,数据库主要是MySQL,其次是MongoDB、PostgreSQL和SQLite,最近还用到了Elasticsearch,但是数据库管理软件phpMyAdmin只能管理MySQL,老苏一直在找一个全能的数据库管理器,似乎Adminer可以满足要求。什么是Adminer?Adminer(原phpMinAdmin)是一个用PHP编......
  • 数据库4
    第四章1.select*fromsc2.selectsname,sagefromstudentwheresdept='计算机系'3.selectsno,cno,gradefromscwheregradebetween70and804.selectsname,sagefromstudent wheresdept='计算机系'andsagebetween18and205.selectma......