介绍MySQL和JDBC的事务控制(TCL)

介绍MySQL和JDBC的事务控制(TCL),第1张

概述介绍MySQL和JDBC的事务控制(TCL)

文章目录

一、MysqL的事务控制(Transaction Control Language)(1)事务的特性(ACID)(2)MysqL的事务控制(3)MysqL事务演示二、JDBC的事务控制(1)JDBC事务简介(2)JDBC事务的API(3)JDBC事务控制模拟

相关免费学习推荐:mysql视频教程


一、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。


(模拟交易)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事务来处理两条SQL语句(一条正确,一条错误),两条SQL语句都没有执行。如果不添加JDBC事务处理,那么其中一条正确的SQL语句就会单独执行。

相关免费学习推荐:mysql数据库(视频)

总结

以上是内存溢出为你收集整理的介绍MySQL和JDBC的事务控制(TCL)全部内容,希望文章能够帮你解决介绍MySQL和JDBC的事务控制(TCL)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1150134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存