锁表和解锁

本文详细介绍了MySQL和Oracle数据库中的锁机制,包括不同类型的锁、如何查询锁定状态、解锁方法以及数据库层面的加锁和解锁操作。对于MySQL,特别讨论了INNODB、MyISAM等引擎的锁特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL

1、行级的典型代表引擎为INNODB(常用)
2、表级的典型代表引擎为MyISAM,MEMORY
3、页级的典型代表引擎为BDB

查询

查询是否锁表
show OPEN TABLES where In_use > 0;

查询连接进程
show processlist

查看当前的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

查看当前等锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

查看当前锁定的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

解锁

杀掉连接进程
kill id

杀掉锁定的事务
kill trx_mysql_thread_id

数据库层面的加锁和解锁

给表tb_user加读锁
lock table tb_user read;

给表tb_user加写入锁(适用于备份表)
lock table tb_user write;

释放锁
unlock tables;

Oracle

查询

查询被锁定的表

SELECT object_name, machine, s.sid, s.serial#
FROM gv$locked_object l, dba_objects o, gv$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid;

查询正在执行的sql

SELECT b.sid oracleID,
       b.username 登录Oracle用户名,
       b.serial#,
       spid 操作系统ID,
       paddr,
       sql_text 正在执行的SQL,
       b.machine 计算机名
FROM v$process a, v$session b, v$sqlarea c
WHERE a.addr = b.paddr
   AND b.sql_hash_value = c.hash_value

解锁

杀掉被锁定的表进程

ALTER SYSTEM KILL SESSION 'sid,serial#';

加锁

查询时加上for update来加锁,提交可释放锁

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值