中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL和JDBC事務控制的示例分析

發布時間:2021-03-30 13:48:31 來源:億速云 閱讀:370 作者:小新 欄目:MySQL數據庫

這篇文章將為大家詳細講解有關MySQL和JDBC事務控制的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

  • 一、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。
MySQL和JDBC事務控制的示例分析
(模擬交易)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();
			}
		}
	}}

MySQL和JDBC事務控制的示例分析
代碼中添加了JDBC事務來處理兩條sql語句(一條正確,一條錯誤),兩條sql語句都沒有執行。如果不添加JDBC事務處理,那么其中一條正確的sql語句就會單獨執行。

關于“MySQL和JDBC事務控制的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

忻城县| 灯塔市| 泰宁县| 轮台县| 桦甸市| 林州市| 杭州市| 阿拉善左旗| 法库县| 那坡县| 巢湖市| 民丰县| 阳江市| 依安县| 小金县| 木兰县| 岳阳市| 织金县| 高雄市| 乐安县| 新安县| 剑阁县| 南华县| 湾仔区| 乐亭县| 孝义市| 无锡市| 鄂托克前旗| 通榆县| 巴东县| 宝山区| 甘泉县| 冷水江市| 平舆县| 张北县| 石河子市| 大邑县| 万安县| 碌曲县| 秦皇岛市| 哈巴河县|