(1)直接在mysql命令行执行:show engine innodb statusG。

(2)查看造成死锁的sql语句,分析索引情况,然后优化sql。
(3)然后show processlist,查看造成死锁占用时间长的sql语句。
(4)show status like ‘%lock%。 2.查看表被锁状态和结束死锁步骤:
(1)查看表被锁状态:show OPEN TABLES where In_use > 0; 这个语句记录当前锁表状态 。
(2)查询进程:show processlist查询表被锁进程;查询到相应进程killid。
(3)分析锁表的SQL:分析相应SQL,给表加索引,常用字段加索引,表关联字段加索引。
(4)查看正在锁的事物:SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS。
(5)查看等待锁的事物:SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS。
乐观锁:假设并发操作时不会发生冲突,只在提交事务时检查数据是否被其他事务修改过。常用于读多写少的场景。
悲观锁:假设并发操作时会发生冲突,因此在操作期间持有锁来避免冲突。常用于写多读少的场景。
全局锁:对整个数据库实例加锁,限制除了超级用户外的所有查询和修改操作。一般用于备份、恢复等操作。
表级锁:对整个表加锁,其他连接无法修改或读取该表的数据,但可以对其他表进行操作。
页级锁:对数据页(通常是连续的几个数据块)加锁,其他连接可以读取该表的数据,但是不能修改。
行级锁:对某一行加锁,阻止其他连接对该行的读取和修改操作。
共享锁:多个事务可以同时读取某一条记录,但是不能进行修改。
排他锁:也称为独占锁,只有一个事务能读取或修改数据记录。
第一步,创建数据库表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;
-- 查看那些表锁到了show OPEN TABLES where In_use > 0;-- 查看进程号show processlist;--删除进程kill 1085850;