1、mysql事務(wù)是什么?
事務(wù),一般是指要做的或所做的事情。在計(jì)算機(jī)術(shù)語中是指訪問并可能mysql數(shù)據(jù)庫中各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元(unit)。
2、mysql事務(wù)什么情況下使用?
? ?事物一般用在并發(fā)操作多張表的時(shí)候使用,用于保證用戶的數(shù)據(jù)完整性~
3、mysql事務(wù)怎么用?
MYSQL的事務(wù)處理主要有兩種方法
1.用begin,rollback,commit來實(shí)現(xiàn)
? ? begin開始一個(gè)事務(wù)
? ? rollback事務(wù)回滾
? ? commit 事務(wù)確認(rèn)
2.直接用mysql來改變mysql的自動(dòng)提交模式
? ? mysql默認(rèn)是自動(dòng)提交的,也就是你提交一個(gè)query,就直接執(zhí)行!可以通過
? ? set autocommit = 0 禁止自動(dòng)提交
? ? set autocommit = 1 開啟自動(dòng)提交
? ? 來實(shí)現(xiàn)事務(wù)的處理。
但要注意當(dāng)用set autocommit = 0 的時(shí)候,你以后所有的sql都將作為事務(wù)處理,直到你用commit確認(rèn)或 rollback結(jié)束,注意當(dāng)你結(jié)束這個(gè)事務(wù)的同時(shí)也開啟了新的事務(wù)!按第一種方法只將當(dāng)前的做為一個(gè)事務(wù)!
MYSQL只有 INNODB和BDB類型的數(shù)據(jù)表才支持事務(wù)處理,其他的類型是不支持的!
package?shiwu; import?java.sql.Connection; import?java.sql.DriverManager; import?java.sql.PreparedStatement; import?java.sql.SQLException; public?class?test?{ ?public?static?void?main(String[]?args)?{?? ????????Connection?conn?=?null;?? ????????PreparedStatement?ps1?=?null;?? ????????PreparedStatement?ps2?=?null;?? ????????try?{?? ????????????//加載驅(qū)動(dòng)類?? ??????????/*??Class.forName("com.mysql.jdbc.Driver");?? ????????????conn?=?DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","bjpowernode");??*/ ???????? ???????? ?String?myDriver="com.mysql.jdbc.Driver"; ?????????????String?url="jdbc:mysql://127.0.0.1:3306/test"; ?????????????Class.forName(myDriver); ????????????? ?????????????conn=?DriverManager.getConnection(url,"root","bjpowernode"); ????????????? ?????????????//?將自動(dòng)提交設(shè)置為?false, ?????????????//若設(shè)置為?true?則數(shù)據(jù)庫將會(huì)把每一次數(shù)據(jù)更新認(rèn)定為一個(gè)事務(wù)并自動(dòng)提交 ?????????????conn.setAutoCommit(false); ?????????????? ?????????????? ????????????ps1?=?conn.prepareStatement("insert?into?t_user?(username,pwd)?values?(?,?)");//?是占位符?? ????????????ps1.setObject(1,?"張三");?? ????????????ps1.setObject(2,?"666666");?? ????????????ps1.execute();?? ????????????System.out.println("插入一個(gè)用戶張三");?? ?????????????? ????????????try?{?? ???????????? ??//?發(fā)生異常,回滾在本事務(wù)中的操做 ????????????????conn.rollback(); ?????????????????//?事務(wù)回滾:轉(zhuǎn)賬的兩步操作完全撤銷 ?????????????????conn.close();? ???????????? ????????????????Thread.sleep(3000);?? ????????????}?catch?(InterruptedException?e)?{?? ????????????????e.printStackTrace();?? ????????????}?? ?????????????? ????????????ps2?=?conn.prepareStatement("insert?into?t_user?(username,pwd)?values?(?)");?? ????????????ps2.setObject(1,?"李四");?? ????????????ps2.setObject(2,?"123456");?? ????????????ps2.execute();???????????? ????????????System.out.println("插入一個(gè)用戶李四");?? ?????????????? ????????//???conn.commit();//提交事務(wù)?? ????? ????????}?catch?(ClassNotFoundException?e)?{?? ????????????e.printStackTrace();?? ????????????try?{?? ????????????}?catch?(Exception?e1)?{?? ????????????????e1.printStackTrace();?? ????????????}?? ????????}?catch?(SQLException?e)?{?? ????????????e.printStackTrace();?? ????????}finally{?? ????????????try?{?? ????????????????if(ps1!=null){?? ????????????????????ps1.close();?? ????????????????}?? ????????????}?catch?(SQLException?e)?{?? ????????????????e.printStackTrace();?? ????????????}?? ????????????try?{?? ????????????????if(conn!=null){?? ????????????????????conn.close();?? ????????????????}?? ????????????}?catch?(SQLException?e)?{?? ????????????????e.printStackTrace();?? ????????????}?? ????????}?? ????}?? }注意:需要引入mysql-connector-java-5.6-bin.jar