Maison  >  Article  >  base de données  >  Présentation du contrôle des transactions (TCL) pour MySQL et JDBC

Présentation du contrôle des transactions (TCL) pour MySQL et JDBC

coldplay.xixi
coldplay.xixiavant
2021-03-30 10:20:402030parcourir

Présentation du contrôle des transactions (TCL) pour MySQL et JDBC

Table des matières de l'article

  • 1. Langage de contrôle de transactions MySQL (langage de contrôle de transactions)
    • (1) Caractéristiques des transactions (ACID)
    • (2) Contrôle des transactions MySQL
    • (3) Démonstration des transactions MySQL
  • 2. Contrôle des transactions JDBC
    • (1)Introduction aux transactions JDBC
    • (2)API de transaction JDBC
    • (3)Simulation du contrôle des transactions JDBC

Recommandations d'apprentissage gratuites associées : Tutoriel vidéo MySQL


1 . Langage de contrôle de transaction de MySQL (Transaction Control Language)

(1) Caractéristiques de transaction (ACID)

La transaction fait référence à un groupe logique d'opérations dans lequel. les unités logiques qui composent le groupe d'opérations réussissent ou échouent ensemble.

  • Atomicité : souligne l'indivisibilité des transactions.
  • Cohérence (cohérence) : Il souligne que l'intégrité des données doit être maintenue avant et après l'exécution de la transaction.
  • Isolement : L'exécution d'une transaction ne doit pas être interférée par d'autres transactions.
  • Durabilité : Une fois la transaction terminée (commit/rollback), les données sont conservées dans la base de données.

(2)Contrôle des transactions MySQL

  • Définir la validation manuelle : set autocommit = false;
  • Rollbackrollback;
  • Soumettrecommit ;

(3) Démonstration de transaction MySQL

☆Afficher la table emp existante :

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)

①Définir le manuel soumission :

mysql> set autocommit=false;Query OK, 0 rows affected (0.03 sec)

②Insérez une déclaration avec ename mary dans la table 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)

③Utilisez rollbackrollback

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)

pour constater que Mary n'est pas L'insertion est réussie car il est soumis et annulé manuellement ; si vous utilisez commit pour soumettre, l'annulation ne peut pas réussir car elle est directement insérée dans la base de données.

2. Contrôle des transactions JDBC

(1) Introduction aux transactions JDBC

  • Transaction par défaut Stratégie de validation : une commande constitue une transaction complète en elle-même.
  • Exigence : Chaque unité logique réussit ensemble ou échoue ensemble. (Comme le transfert)

(2) API de transaction JDBC

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

(3) Simulation de contrôle de transaction JDBC

Modifiez l'enregistrement dont le nom est hellen dans la table emp, changez son travail de leader en commis et réduisez le bonus d'engagement de 600 à 300.
Présentation du contrôle des transactions (TCL) pour MySQL et JDBC
(Transaction simulée) 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();
			}
		}
	}}

Présentation du contrôle des transactions (TCL) pour MySQL et JDBC
Les transactions JDBC sont ajoutées au code pour traiter deux instructions SQL (une correcte, une fausse), deux Aucune des instructions SQL ont été exécutées. Si vous n'ajoutez pas le traitement des transactions JDBC, alors l'une des instructions SQL correctes sera exécutée seule.

Recommandations d'apprentissage gratuites associées : base de données mysql(vidéo)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer