数据库中的锁

一、 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,杀死查询线程

posted @   vello  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示