一、事务的基本介绍

  • 1. 概念:

如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。

  • 2. 操作:

1. 开启事务: start transaction;

2. 回滚:rollback;

3. 提交:commit;

  • 3. 例子:张三给李四转账500元的事务
       CREATE TABLE account (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(10),balance DOUBLE);-- 添加数据INSERT INTO account (NAME, balance) VALUES ('zhangsan', 1000), ('lisi', 1000);SELECT * FROM account;UPDATE account SET balance = 1000;-- 张三给李四转账 500 元-- 0. 开启事务START TRANSACTION;-- 1. 张三账户 -500UPDATE account SET balance = balance - 500 WHERE NAME = 'zhangsan';-- 2. 李四账户 +500UPDATE account SET balance = balance + 500 WHERE NAME = 'lisi';-- 发现执行没有问题,提交事务COMMIT;-- 发现出问题了,回滚事务ROLLBACK;

  • 4. MySQL数据库中事务默认自动提交

事务提交的两种方式:

  • 自动提交:

mysql就是自动提交的

一条DML(增删改)语句会自动提交一次事务。

  • 手动提交:

Oracle 数据库默认是手动提交事务

需要先开启事务,再提交

查看事务的默认提交方式:SELECT @@autocommit; -- 1 代表自动提交 0 代表手动提交

修改默认提交方式: set @@autocommit = 0;

二、事务的四大特征:

1. 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。

2. 持久性:当事务提交或回滚后,数据库会持久化的保存数据。

3. 隔离性:多个事务之间。相互独立。

4. 一致性:事务操作前后,数据总量不变

三、 事务的隔离级别(了解)

概念:多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。

  • 存在问题:

1. 脏读:一个事务,读取到另一个事务中没有提交的数据

2. 不可重复读(虚读):在同一个事务中,两次读取到的数据不一样。

3. 幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。

  • 隔离级别:

1. read uncommitted:读未提交

产生的问题:脏读、不可重复读、幻读

2. read committed:读已提交 (Oracle默认)

产生的问题:不可重复读、幻读

3. repeatable read:可重复读 (MySQL默认)

产生的问题:幻读

4. serializable:串行化

可以解决所有的问题

注意:隔离级别从小到大安全性越来越高,但是效率越来越低

数据库查询隔离级别:

select @@tx_isolation;

数据库设置隔离级别:

set global transaction isolation level 级别字符串;

比如:

set global transaction isolation level read uncommitted;

四、 java操作mysql事务

这里我们使用java来进行mysql的事务操作,注意事务回滚要放在catch代码块中

package demo.jdbcTest;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class JdbcCommitTest {public static void main(String[] args) {Connection conn = null;PreparedStatement pstmt1 = null;PreparedStatement pstmt2 = null;try {//1.获取连接conn = JDBCUtils.getConnection();//开启事务conn.setAutoCommit(false);//2.定义sql//2.1 张三 - 500String sql1 = "update account set balance = balance - ? where id = ?";//2.2 李四 + 500String sql2 = "update account set balance = balance + ? where id = ?";//3.获取执行sql对象pstmt1 = conn.prepareStatement(sql1);pstmt2 = conn.prepareStatement(sql2);//4. 设置参数pstmt1.setDouble(1,500);pstmt1.setInt(2,1);pstmt2.setDouble(1,500);pstmt2.setInt(2,2);//5.执行sqlpstmt1.executeUpdate();// 手动制造异常//int i = 3/0;pstmt2.executeUpdate();//提交事务conn.commit();} catch (Exception e) {//事务回滚try {if(conn != null) {conn.rollback();}} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}finally {JDBCUtils.close(pstmt1,conn);JDBCUtils.close(pstmt2,null);}}
}

在操作之前,我们在数据库中设置余额都为1000

如果事务的两步都成功,那么将提交事务,则转账正确

我们再次设置余额都为1000,如果我们在张三余额减500后手动制造异常,事务将会回滚到原始状态,即两人余额还为1000

我们再次设置余额都为1000,现在我们不开启事务,但是制造异常后会出现,张三的余额减了500,但李四的余额没有加500的现象,正体现了开启事务的重要性。

oracle 开启事务_javaSE第十四部分 JDBC(2)mysql事务和JDBC实现事务相关推荐

  1. Oracle数据库管理每周一例-第十四期 19c需要调整的参数及操作

    Oracle数据库管理每周一例(12.2,18c,19c) 2020-09-13 第十四期 19c需要调整的参数及操作 1.说明 2.需要调整的参数 3.补丁 下期预告: 第十四期 19c需要调整的参 ...

  2. 第五十四期:MongoDB与MySQL:如何选择

    MongoDB和MySQL分别是领先的开源NoSQL和关系数据库.哪个最适合您的应用程序? 作者:XEyes行走的CODE来源 MongoDB和MySQL分别是领先的开源NoSQL和关系数据库.哪个最 ...

  3. MYSQL第十四次作业---电子商城数据库搭建

    安装并配置MySQL 1.打开控制台 Win+r键 2.登录MYSQL 数据库.表的基本操作 创建电子商城数据库"mall_姓名全拼" create database mall_t ...

  4. 通向架构师的道路(第二十四天)之Oracle性能调优-朝拜先知之旅

    前言 这次,我们将在Linux下来动手完成Oracle数据库的安装与使用. Oracle本身是可以免费下载的包括 它的企业版以及被它收购的Weblogic和Sun中的几乎任何东西你都可以拿来下载和使用 ...

  5. 数据库系统概念总结:第十四章 事务

    周末无事水文章,期末备考的总结资料 第十四章 事务 14.1 事务概念 事务是访问并可能更新各种数据项的一个程序执行单元 ACID特性 –原子性(Atomicity):事务的所有操作都在数据库中正确反 ...

  6. Oracle入门(十四)之PL/SQL

    一.PL/SQL 基本语法 PL/SQL语言是模块式的过程化SQL,是oracle公司对SQL的扩展. (1) (2) (3) (5) (6) (7)数据类型 Number 数字型 Varchar2 ...

  7. laravel框架连接Oracle,laravel5.8(十四)连接oracle数据库

    首先确定你的PHP已经支持oracle数据库的链接.PHP需要安装OCI8扩展. 确定PHP可以链接ORACLE数据库之后.我们使用composer安装laravel支持oracle链接的插件 yaj ...

  8. Oracle 11g数据库基础教程(第2版)-课后习题-第十四章

    --第十四章 --1.对HUMAN_RESOURCE数据库进行冷备份--1.启动sqlplus,以sysdba身份登录数据库--2.查询当前数据库所有数据文件.控制文件.联机重做日志文件的位置sele ...

  9. 计算机科学丛书数据库系统,计算机科学丛书:数据库系统概念 读书笔记(十四)--事务(示例代码)...

    构成单一逻辑工作单元的操作集合称作事务(transaction). 即使有故障,数据库系统也必须保证事务的正确执行--要么执行整个事务,要么属于该事务的操作一个也不执行. 1. 事务概念 事务通常由高 ...

最新文章

  1. 我们是在搞学术,还是被学术搞?
  2. php扩展swoole安装,php 安装swoole扩展
  3. JdbcTemplate中的query方法(代码)
  4. php5.3.*编译出现make: *** [ext/gd/libgd/gd_compat.lo] Error 1 解决方法
  5. LeetCode 1631. 最小体力消耗路径(DFS + 二分查找)
  6. mysql 命令行可以连接 php不能,mysql连接命令行可以php竟然不可以
  7. python的property用法_Python的@property使用方法详解
  8. php中unset函数是在哪一章_PHP引用(amp;)使用详解
  9. 服务器远程桌面一直正在配置,关于远程桌面一直显示正在配置远程会话
  10. 《Netty实战》总结
  11. 移动硬盘与电脑连接后 计算机中找不到,移动硬盘连接电脑后不显示盘符怎么办...
  12. LSF集群基本概念介绍
  13. CSS mix-blend-mode滤色screen混合模式
  14. 【100%通过率】华为OD机试真题 C++ 实现【农场施肥】【2023 Q1 | 100分】
  15. AutoJs学习-动态解密
  16. HIT校园网ps4联机教程
  17. 多张图带你彻底搞懂DNS域名解析过程
  18. 囚徒健身 - 暂时就这个水平,自己看的。。
  19. html设置gif为透明,使用GIF动图和CSS3背景裁剪(background-clip)特性实现的透明文本烟雾特效...
  20. ubuntu18.04(Bionic Beave)更换国内163源

热门文章

  1. [学习笔记]后缀平衡树
  2. matlab学习笔记杂项一
  3. Tomcat下中文乱码的解决方法
  4. [转载] 玩转python中with的使用与上下文管理器
  5. JetBrains系列IDE创建文件模板
  6. Spring浅入浅出——不吹牛逼不装逼
  7. webuploader
  8. C#使用NPOI导出excel设置单元格背景颜色
  9. js进阶正则表达式10-分组-多行匹配-正则对象的属性(小括号作用:分组,将小括号里面的东西看成一个整体,因为量词只对前一个字符有效)(多行匹配:m)(属性使用:reg.global)...
  10. 关于org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor的队列