一般都是資料庫事務未提交,導致update或delete卡死。
執行完更新或刪除後,記得將交易提交commit;
找到資料庫用戶端,執行commit操作。
如果還不行。當資料庫執行資料操作失敗或交易未提交時,它會鎖定需要執行的SQL語句。
透過以下指令查看資料庫的自動提交狀態
show variables like 'autocommit';
透過SQL設定資料庫自動自動提交關閉
-- on为开启,off为关闭 set autocommit=off; -- 或者1为开启,0为关闭 set autocommit=0;
表中資料如下:
開啟兩個視窗分別執行update操作
update car set color ='银色' where id = 1; update car set color ='红色' where id = 1;
#查詢正在執行的交易:##
SELECT * FROM information_schema.INNODB_TRX;
可以使用mysql指令殺掉執行緒:kill 執行緒id
kill 1089;
期間如果並未殺掉持有鎖的執行緒:則第二個update語句會提示等待鎖定逾時。
相關指令:
-- 查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; -- 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; -- 查询mysql数据库中存在的进程 select * from information_schema.`PROCESSLIST`(show processlist;)
oracle的操作方式:
查詢鎖定記錄SELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;
ALTER system KILL session 'SID,serial#';
以上是MySQL資料庫執行Update卡死問題怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!