《Mysql必讀Mysql事務(wù)操作失敗如何解決》要點:
本文介紹了Mysql必讀Mysql事務(wù)操作失敗如何解決,希望對您有用。如果有疑問,可以聯(lián)系我們。
Mysql事務(wù)操作失敗如何解決MYSQL實例
事務(wù)的原子性 :事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中包含的各操作要么都做,要么都不做 .MYSQL實例
要實現(xiàn)事務(wù)的原子性,單單靠一條commit或是rollback命令還是不行的,因為例如commit命令它只是將一個事務(wù)中執(zhí)行成功的DML語句提交給數(shù)據(jù)庫里.如果要實現(xiàn)事務(wù)的原子性,則就需要commit和rollback命令配合上程序上的一個業(yè)務(wù)邏輯才能可以,具體業(yè)務(wù)邏輯代碼如下示例代碼:MYSQL實例
1.現(xiàn)象
MYSQL實例
???? 程序中打開了事務(wù)進行插入,但是沒有commit,表中的數(shù)據(jù)已經(jīng)存在,就是回滾也不能刪除插入的數(shù)據(jù)MYSQL實例
2.原因
MYSQL實例
??? 本表的Storage Engine 為myisam,不是innoDB,不支持事務(wù)處理 rollback()MYSQL實例
3.解決方法
MYSQL實例
??? 使用 alter table xxxx engine = innoDB ; 將表改為 InnoDB 引擎,結(jié)果回滾正常.MYSQL實例
4.代碼MYSQL實例
private void testCrud() { Connection conn = null; //連接對象 PreparedStatement pstmt = null; //預(yù)編譯的SQL語句對象 try{ //加載MySQL驅(qū)動程序 Class.forName("com.mysql.jdbc.Driver"); //連接字符串 String url = "jdbc:mysql://localhost:3306/test"; //建立數(shù)據(jù)庫連接 conn = DriverManager.getConnection(url,"root",""); //設(shè)置事務(wù)的隔離級別 // conn.setTransactionIsolation(Connection. TRANSACTION_REPEATABLE_READ); //設(shè)置自動提交為false,開始事務(wù) conn.setAutoCommit(false); //帶參數(shù)的更新語句 String sql = "INSERT INTO user_info (username ,password ,age )values(?,?,?)"; //準(zhǔn)備語句 pstmt = conn.prepareStatement(sql); //綁定參數(shù),執(zhí)行更新語句,將張三的賬戶金額減去1000元 pstmt.setString(1, "zhangui"); pstmt.setString(2, "1111"); pstmt.setInt(3, 300); pstmt.execute(); //綁定參數(shù),執(zhí)行更新語句,將李四的賬戶金額增加1000元 // pstmt.setString(1, "zzzzzzzzzzzzzzzzz"); //綁定了非法參數(shù) //pstmt.setString(2, "1111111111"); //pstmt.setInt(3, 500); //pstmt.execute(); //將拋出SQL異常 //提交事務(wù) //conn.commit(); System.out.println("事務(wù)已提交,轉(zhuǎn)賬成功!"); //關(guān)閉語句、連接 pstmt.close(); conn.close(); }catch(Exception e){ try{ conn.rollback(); //回滾事務(wù) System.out.println("事務(wù)回滾成功,沒有任何記錄被更新!"); }catch(Exception re){ System.out.println("回滾事務(wù)失敗!"); } e.printStackTrace(); }finally{ if(pstmt!=null) try{pstmt.close();}catch(Exception ignore){} if(conn!=null) try{conn.close();}catch(Exception ignore){} } }
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
MYSQL實例
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/1026.html