mysql有一条sql语句导致一直锁表,怎么解决?
-- 查看那些表锁到了show OPEN TABLES where In_use > 0;-- 查看进程号show processlist;--删除进程kill 1085850;
MYSQL数据库怎么查看哪些表被锁了?
SELECTDATABASE();列出当前所选择的数据库,如果未选择数据库则显示NULL;SHOWDATABASES;列出服务器上当前存在的MySQL数据库;USEdatabasename;选择访问某个数据库;SHOWtables;找出当前的MySQL数据库包含什么表;DESCRIBEtablename;列出一个表的结构;SHOWINDEXFROMtablename;显示表中的索引信息。
锁表原因及如何处理?
锁表的原因 :
1)、A程序执行了对 tableA 的 insert ,并还未 commite时,B程序也对tableA 进行insert 则此时会发生资源正忙的异常 就是锁表;
2)、锁表常发生于并发而不是并行(并行时,一个线程操作数据库时,另一个线程是不能操作数据库的,cpu 和i/o 分配原
。
二、mysql锁表的解决
#查看进程id,然后用kill id杀掉进程
show processlist;
SELECT * FROM information_schema.PROCESSLIST;
#查询正在执行的进程
SELECT * FROM information_schema.PROCESSLIST where length(info) >0 ;
#查询是否锁表
show OPEN TABLES where In_use > 0;
#查看被锁住的
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
#等待锁定
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
#杀掉锁表进程
mysql如何锁库?用什么命令?
第一步,创建数据库表writer和查看表结构,利用SQL语句:create table writer(wid int(10),wno int(10),wname varchar(20),wsex varchar(2),wage int(2)第二步,向数据库表writer插入五条数据,插入后查看表里数据第三步,利用锁定语句锁定数据库表writer,利用SQL语句:lock table writer read;让数据库表只读不能进行写第四步,为了验证锁定效果,可以查看数据库表数据,利用SQL语句:select * from writer;第五步,利用update语句对id=5进行更新,SQL语句为:update writer set wname = '胡思思' where id = 5;第六步,利用unlock进行解锁,SQL语句为:unlock tables;

