锁表和解锁

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来加锁,提交可释放锁

猜你喜欢

转载自blog.csdn.net/qq_15764943/article/details/114634577