共計 6088 個字符,預計需要花費 16 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章將為大家詳細講解有關 MySQL 和 JDBC 事務控制的示例分析,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
一、MySQL 的事務控制(Transaction Control Language)
(1)事務的特性(ACID)
事務指的是邏輯上的一組操作,組成這組操作的邏輯單元要么一起成功,要么一起失敗。
原子性(atomicity):強調事務不可分割。
一致性(consistency):強調的是事務的執行的前后,數據的完整性要保持一直。
隔離性(isolation):一個事務的執行不應該受到其他事務的干擾。
持久性 (durability):事務一旦結束(提交 / 回滾) 數據就持久保持到了數據庫。
(2)MySQL 的事務控制
設置手動提交:set autocommit = false;
回滾 rollback;
提交 commit ;
(3)mysql 事務演示
☆查看已經存在的 emp 表:
mysql select * from emp;+-------+--------+--------+------+------------+----------+--------+--------+| empno | ename | job | mgr | hiredate | sal | commit | deptno |+-------+--------+--------+------+------------+----------+--------+--------+| 1002 | 白展堂 | clerk | 1001 | 1983-05-09 | 7000.00 | 200.00 | 10 || 1003 | 李大嘴 | clerk | 1002 | 1980-07-08 | 8000.00 | 100.00 | 10 || 1004 | 呂秀才 | clerk | 1002 | 1985-11-12 | 4000.00 | NULL | 10 || 1005 | 郭芙蓉 | clerk | 1002 | 1985-03-04 | 4000.00 | NULL | 10 || 1007 | 小白 | clerk | 1001 | 2019-11-25 | 5555.00 | 500.00 | NULL || 2001 | 胡一菲 | leader | NULL | 1994-03-04 | 15000.00 | NULL | 20 || 2002 | 陳美嘉 | manger | 2001 | 1993-05-24 | 10000.00 | 300.00 | 20 || 2003 | 呂子喬 | clerk | 2002 | 1995-05-19 | 7300.00 | 100.00 | 20 || 2004 | 張偉 | clerk | 2002 | 1994-10-12 | 8000.00 | 500.00 | 20 || 2005 | 曾小賢 | clerk | 2002 | 1993-05-10 | 9000.00 | 700.00 | 20 || 3001 | 劉梅 | leader | NULL | 1968-08-08 | 13000.00 | NULL | 30 || 3002 | 夏冬梅 | manger | 3001 | 1968-09-21 | 10000.00 | 600.00 | 30 || 3003 | 夏雪 | clerk | 3002 | 1989-09-21 | 8000.00 | 300.00 | 30 || 3004 | 張一山 | clerk | 3002 | 1991-06-16 | 8000.00 | 200.00 | 30 || 3007 | 嫦娥 | clerk | NULL | NULL | NULL | NULL | 10 |+-------+--------+--------+------+------------+----------+--------+--------+15 rows in set (0.00 sec)
①設置手動提交:
mysql set autocommit=false;Query OK, 0 rows affected (0.03 sec)
②在 emp 表中插入一條 ename 為 mary 的語句:
mysql insert into emp(ename,job,commit)
- values(mary , clerk ,300);Query OK, 1 row affected (0.02 sec)mysql select * from emp;+-------+--------+--------+------+------------+----------+--------+--------+| empno | ename | job | mgr | hiredate | sal | commit | deptno |+-------+--------+--------+------+------------+----------+--------+--------+| 1002 | 白展堂 | clerk | 1001 | 1983-05-09 | 7000.00 | 200.00 | 10 || 1003 | 李大嘴 | clerk | 1002 | 1980-07-08 | 8000.00 | 100.00 | 10 || 1004 | 呂秀才 | clerk | 1002 | 1985-11-12 | 4000.00 | NULL | 10 || 1005 | 郭芙蓉 | clerk | 1002 | 1985-03-04 | 4000.00 | NULL | 10 || 1007 | 小白 | clerk | 1001 | 2019-11-25 | 5555.00 | 500.00 | NULL || 2001 | 胡一菲 | leader | NULL | 1994-03-04 | 15000.00 | NULL | 20 || 2002 | 陳美嘉 | manger | 2001 | 1993-05-24 | 10000.00 | 300.00 | 20 || 2003 | 呂子喬 | clerk | 2002 | 1995-05-19 | 7300.00 | 100.00 | 20 || 2004 | 張偉 | clerk | 2002 | 1994-10-12 | 8000.00 | 500.00 | 20 || 2005 | 曾小賢 | clerk | 2002 | 1993-05-10 | 9000.00 | 700.00 | 20 || 3001 | 劉梅 | leader | NULL | 1968-08-08 | 13000.00 | NULL | 30 || 3002 | 夏冬梅 | manger | 3001 | 1968-09-21 | 10000.00 | 600.00 | 30 || 3003 | 夏雪 | clerk | 3002 | 1989-09-21 | 8000.00 | 300.00 | 30 || 3004 | 張一山 | clerk | 3002 | 1991-06-16 | 8000.00 | 200.00 | 30 || 3007 | 嫦娥 | clerk | NULL | NULL | NULL | NULL | 10 || 4008 | mary | clerk | NULL | NULL | NULL | 300.00 | NULL |+-------+--------+--------+------+------------+----------+--------+--------+16 rows in set (0.00 sec)
③使用 rollback 回滾
mysql rollback;Query OK, 0 rows affected (0.00 sec)mysql select * from emp;+-------+--------+--------+------+------------+----------+--------+--------+| empno | ename | job | mgr | hiredate | sal | commit | deptno |+-------+--------+--------+------+------------+----------+--------+--------+| 1002 | 白展堂 | clerk | 1001 | 1983-05-09 | 7000.00 | 200.00 | 10 || 1003 | 李大嘴 | clerk | 1002 | 1980-07-08 | 8000.00 | 100.00 | 10 || 1004 | 呂秀才 | clerk | 1002 | 1985-11-12 | 4000.00 | NULL | 10 || 1005 | 郭芙蓉 | clerk | 1002 | 1985-03-04 | 4000.00 | NULL | 10 || 1007 | 小白 | clerk | 1001 | 2019-11-25 | 5555.00 | 500.00 | NULL || 2001 | 胡一菲 | leader | NULL | 1994-03-04 | 15000.00 | NULL | 20 || 2002 | 陳美嘉 | manger | 2001 | 1993-05-24 | 10000.00 | 300.00 | 20 || 2003 | 呂子喬 | clerk | 2002 | 1995-05-19 | 7300.00 | 100.00 | 20 || 2004 | 張偉 | clerk | 2002 | 1994-10-12 | 8000.00 | 500.00 | 20 || 2005 | 曾小賢 | clerk | 2002 | 1993-05-10 | 9000.00 | 700.00 | 20 || 3001 | 劉梅 | leader | NULL | 1968-08-08 | 13000.00 | NULL | 30 || 3002 | 夏冬梅 | manger | 3001 | 1968-09-21 | 10000.00 | 600.00 | 30 || 3003 | 夏雪 | clerk | 3002 | 1989-09-21 | 8000.00 | 300.00 | 30 || 3004 | 張一山 | clerk | 3002 | 1991-06-16 | 8000.00 | 200.00 | 30 || 3007 | 嫦娥 | clerk | NULL | NULL | NULL | NULL | 10 |+-------+--------+--------+------+------------+----------+--------+--------+15 rows in set (0.00 sec)
發現 mary 沒有插入成功,因為手動提交后進行和回滾;如果使用 commit 進行提交就無法回滾成功,因為直接插入進數據庫中了。
二、JDBC 的事務控制
(1)JDBC 事務簡介
默認事務提交策略:一條命令自成一個完整事務。
需求:各個邏輯單元要么一起成功,要么一起失敗。(如轉賬)
(2)JDBC 事務的 API
conn.setAutoCommit(false);// 將 JDBC 事務設置手動提交 conn.commit();conn.rollback();
(3)JDBC 事務控制模擬
在 emp 表中修改 ename 名為 hellen 的記錄, 將其 job 從 leader 修改為 clerk, 獎金 commit 從 600 降低至 300。
(模擬交易)TrasactionDemo:
package jdbc;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import util.JdbcUtil;/**
* JDBC 事務控制
*
* @author Administrator
*
*/public class TestTrasaction {public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstm = null;
PreparedStatement pstm1 = null;
try {
// 獲得連接
conn = JdbcUtil.getConnection();
// 將 JDBC 事務設置手動提交
conn.setAutoCommit(false);
// ①降職操作
String sql = updata emp set job = clerk where ename = hellen
pstm = conn.prepareStatement(sql);
pstm.executeUpdate();
// ②降獎金操作
String sql1 = updata emp set commit= 3000 where ename = hellen
pstm1 = conn.prepareStatement(sql1);
pstm1.executeUpdate();
// 提交事務
conn.commit();} catch (Exception e) {
// 事務回滾
try {conn.rollback();
} catch (SQLException e1) {e1.printStackTrace();
} finally {
try {JdbcUtil.release(null, pstm, null);
JdbcUtil.release(null, pstm1, conn);
} catch (Exception e) {e.printStackTrace();
}}
代碼中添加了 JDBC 事務來處理兩條 sql 語句(一條正確, 一條錯誤),兩條 sql 語句都沒有執行。如果不添加 JDBC 事務處理,那么其中一條正確的 sql 語句就會單獨執行。
關于“MySQL 和 JDBC 事務控制的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
向 AI 問一下細節