本文摘自PHP中文网,作者coldplay.xixi,侵删。

文章目录
- 一、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表:
1 | 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)
|
①设置手动提交:
1 | mysql> set autocommit=false;Query OK, 0 rows affected (0.03 sec)
|
②在emp表中插入一条ename为mary的语句:
1 2 | 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
回滚
1 | 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
1 | conn.setAutoCommit(false);
|
(3)JDBC事务控制模拟
在emp表中修改ename名为hellen的记录,将其job从leader修改为clerk,奖金commit从600降低至300。

(模拟交易)TrasactionDemo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package jdbc;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import util.JdbcUtil;
public class TestTrasaction {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstm = null;
PreparedStatement pstm1 = null;
try {
conn = JdbcUtil.getConnection();
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)的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
myeclipse怎么连接mysql数据库?(详细步骤)
mysql日期怎么加一年
mysql执行sql脚本文件
mysql如何配置及mysql服务无法启动
详细讲解mysql全局变量与局部变量
mysql 权限控制细节分析
mysql中的索引类型有哪些
实例详解阿里云下配置mysql远程连接步骤
mysql递归查询的3种实现方式实例
linux服务器中mysql远程连接方法详解
更多相关阅读请进入《mysql》频道 >>
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » 介绍MySQL和JDBC的事务控制(TCL)