>데이터 베이스 >MySQL 튜토리얼 >MySQL 및 JDBC용 트랜잭션 제어(TCL) 소개

MySQL 및 JDBC용 트랜잭션 제어(TCL) 소개

coldplay.xixi
coldplay.xixi앞으로
2021-03-30 10:20:402070검색

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;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

rollbackrollback;


submit 커밋 ;

(3) mysql 트랜잭션 데모

☆기존 emp 테이블 보기:

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)
①수동 커밋 설정:
    conn.setAutoCommit(false);//将JDBC事务设置手动提交conn.commit();conn.rollback();
  • ②emp 테이블에 mary로 ename이 포함된 명령문 삽입 :
  • 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();
    			}
    		}
    	}}
  • ③사용 롤백하려면 롤백
  • rrreee Mary가 수동으로 제출되고 롤백되었기 때문에 성공적으로 삽입되지 않은 것을 발견했습니다. 커밋을 사용하여 제출한 경우 롤백이 에 직접 삽입되었기 때문에 성공할 수 없습니다. 데이터베이스.

    2. JDBC 트랜잭션 제어

    (1) JDBC 트랜잭션 소개


    MySQL 및 JDBC용 트랜잭션 제어(TCL) 소개
    기본 트랜잭션 제출 전략: 하나의 명령이 그 자체로 완전한 트랜잭션을 구성합니다.

    요구 사항: 각 논리 유닛은 함께 성공하거나 함께 실패합니다. (전송 등)MySQL 및 JDBC용 트랜잭션 제어(TCL) 소개

    (2) JDBC 트랜잭션 API

    rrreee(3) JDBC 트랜잭션 제어 시뮬레이션emp 테이블에서 ename이 hellen인 레코드를 수정하고 리더에서 사무원으로 직업을 변경합니다. ,커밋 보너스가 600에서 300으로 감소합니다.

    (시뮬레이션 거래) TrasactionDemo:
    rrreee🎜🎜🎜 두 개의 SQL 문(하나는 맞고 하나는 틀림)을 처리하기 위해 JDBC 트랜잭션이 코드에 추가되었으며 두 SQL 문 모두 실행되지 않았습니다. JDBC 트랜잭션 처리를 추가하지 않으면 올바른 SQL 문 중 하나가 단독으로 실행됩니다. 🎜🎜🎜🎜관련 무료 학습 권장 사항: 🎜🎜🎜mysql 데이터베이스🎜🎜🎜(동영상)🎜🎜🎜

    위 내용은 MySQL 및 JDBC용 트랜잭션 제어(TCL) 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제

    관련 기사

    더보기