ホームページ  >  記事  >  データベース  >  MySQL および JDBC のトランザクション制御 (TCL) の導入

MySQL および JDBC のトランザクション制御 (TCL) の導入

coldplay.xixi
coldplay.xixi転載
2021-03-30 10:20:401956ブラウズ

MySQL および JDBC のトランザクション制御 (TCL) の導入

#記事ディレクトリ

##1. MySQL トランザクション制御言語
  • (1)トランザクション特性 (ACID)
  • #(2)MySQL トランザクション制御
      ##(3)mysql トランザクションのデモンストレーション
    • ## 2. JDBC トランザクション制御
    • ##(1)JDBC トランザクションの概要
    (2)JDBC トランザクション API
  • (3)JDBC トランザクション制御シミュレーション
    • 関連する無料学習の推奨事項:
    • mysql ビデオ チュートリアル

# #1. MySQL のトランザクション制御 (トランザクション制御言語) (1) トランザクション特性 (ACID)


トランザクションは、操作のグループを構成する論理ユニットが含まれる論理的な操作のグループを指します。一緒に成功するか、一緒に失敗するかのどちらかです。

原子性: トランザクションの分割不可能性を強調します。

Consistency (一貫性): トランザクションの実行前後でデータの整合性が維持される必要があることを強調します。 分離: トランザクションの実行は、他のトランザクションによって干渉されるべきではありません。

耐久性 (永続性): トランザクションが終了すると (コミット/ロールバック)、データはデータベースに保存されます。

  • #(2)MySQL トランザクション制御
  • 手動送信を設定します:
  • set autocommit = false;
  • #Rollback
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)
    ②ename を mary とするステートメントを emp テーブルに挿入します:
    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

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)
メアリーは手動で送信されてロールバックされたため、正常に挿入されなかったことがわかりました。送信に commit を使用した場合、データベースに直接挿入されるため、ロールバックは成功しません。 .ビンゴ。

2. JDBC トランザクション制御

(1)JDBC トランザクションの概要

デフォルト トランザクションのコミット戦略: コマンドはそれ自体で完全なトランザクションを構成します。

要件: 各論理ユニットは同時に成功するか、一緒に失敗します。 (転送など)

(2)JDBCトランザクションAPI

conn.setAutoCommit(false);//将JDBC事务设置手动提交conn.commit();conn.rollback();

(3)JDBCトランザクション制御シミュレーション
  • emp テーブル内のエナ名が hellen であるレコードを変更し、そのジョブをリーダーからクラークに変更し、ボーナス コミットを 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 トランザクションがコードに追加され、2 つの SQL ステートメント (1 つは正解、1 つは間違い)、2 つはなしを処理します。の SQL ステートメントが実行されました。 JDBC トランザクション処理を追加しない場合は、正しい SQL ステートメントの 1 つが単独で実行されます。

関連する無料学習の推奨事項:


MySQL および JDBC のトランザクション制御 (TCL) の導入mysql データベース

(ビデオ)MySQL および JDBC のトランザクション制御 (TCL) の導入

以上がMySQL および JDBC のトランザクション制御 (TCL) の導入の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。