Maison > base de données > tutoriel mysql > 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
Libérer: 2021-03-30 10:20:40
avant
2057 Les gens l'ont consulté

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)
Copier après la connexion

①Définir le manuel soumission :

mysql> set autocommit=false;Query OK, 0 rows affected (0.03 sec)
Copier après la connexion

②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)
Copier après la connexion

③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)
Copier après la connexion

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();
Copier après la connexion

(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();
			}
		}
	}}
Copier après la connexion

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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal