1. 程式人生 > >MySQL錯誤: could not retrieve transation read-only status server

MySQL錯誤: could not retrieve transation read-only status server

查看 sys 而且 could upd 開始 問題分析 事物 就會

問題描述: java代碼在開始事務後,先做了一個查詢,再insert,此時會報: java.sql.SQLException: could not retrieve transation read-only status server

解決過程:

查看mysql的事物隔離級別 SHOW VARIABLES LIKE ‘%iso%‘;

返回結果: REPEATABLE-READ

把這個改成:READ-COMMITTED 就好了: SET GLOBAL tx_isolation=‘READ-COMMITTED‘;

(記得java重啟應用,要永久生效的就改my.ini配置文件)

問題分析:

當數據庫隔離級別為REPEATABLE-READ時,查詢一個select語句也算是事物的開始,而且在hibernate裏會把以select語句開頭的事務標記為只讀事務,此時在這個事務裏再執行insert、update、delete等DML語句就會報錯。

http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_tx_read_only

MySQL錯誤: could not retrieve transation read-only status server