一、MYSQL事务

1、事务

概念:事务是一个用户定义的数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。事务可以是一条sql语句,一组sqi语句或者整个程序。

特性(ACDI):

(1)原子性:一个事务中的操作要么全做,要么全不做。

(2)一致性:事务执行的结果必须使数据库从一个一致性状态转换为另一个一致性状态。

(3)隔离性:并发执行的事务之间互不干扰。

(4)持久性:一个事务一旦提交对数据库的操作就是永久性的。(已经存储到了磁盘)

2、MYSQL的事务:

(1)如果用户不对数据库进行操作,默认情况下事务直接开始并提交(将对数据库的更新写到磁盘)。

例如:在login数据表中执行以下插入操作后:

INSERT login VALUES('mysql','事务')

执行查询语句后,数据库中已经存在数据。

(2)手动操作事务的开始和提交:

先开启事务:

START TRANSACTION

执行插入语句:

INSERT login VALUES('星期一','Monday')

此时执行查询语句,依旧能够查询到插入的数据:

但是,此时并未对事务进行提交操作,数据并未进入磁盘。

如果执行回滚语句,插入的数据将会消失(从事务开启到回滚之间的操作均被撤销):

ROLLBACK

但是,如果执行的是提交语句,数据将会被写入磁盘。

二、JDBC事务

1、自动提交方式,即不手动操作,只适用于对数据库的更新操作

创建JavaBean:

package pers.zhb.domain;

public classStudent {

privateString studentno;

privateString sname;

privateString sex; privateString birthday; privateString classno; privateString point; privateString phone; privateString email; publicString getStudentno() { returnstudentno; } public voidsetStudentno(String studentno) { this.studentno =studentno; } publicString getSname() { returnsname; } public voidsetSname(String sname) { this.sname =sname; } publicString getSex() { returnsex; } public voidsetSex(String sex) { this.sex =sex; } publicString getBirthday() { returnbirthday; } public voidsetBirthday(String birthday) { this.birthday =birthday; } @Override publicString toString() { return "Student [studentno=" + studentno + ", sname=" + sname + ", sex=" + sex + ", birthday=" + birthday + ", classno=" +classno + ", point=" + point + ", phone=" + phone + ", email=" +email + "]"; } publicString getClassno() { returnclassno; } public voidsetClassno(String classno) { this.classno =classno; } publicString getPoint() { returnpoint; } public voidsetPoint(String point) { this.point =point; } publicString getPhone() { returnphone; } public voidsetPhone(String phone) { this.phone =phone; } publicString getEmail() { returnemail; } public voidsetEmail(String email) { this.email =email; } }

不设置对事务的提交方式:

package pers.zhb.test;

import org.apache.commons.dbutils.QueryRunner;

import pers.zhb.dbutils.*;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

public classTest{

public static voidmain(String[] args){

Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try{ con = c3p0Utiils.getConnection();//从连接池中获取连接 //con.setAutoCommit(false);//设置为手动提交事务的方式 QueryRunner qr = newQueryRunner(); String sql = "INSERT INTO student(studentno,sname,sex,birthday,classno,point,phone,email) VALUES(?,?,?,?,?,?,?,?)"; Object[] params = { "20191813", "huab", "男", "1988-12-01", "201901", "239", "16623540978", "Tom.@3218n.com"}; int num = qr.update(con, sql, params); //con.commit(); } catch(Exception e) { e.printStackTrace(); } finally{ c3p0Utiils.close(con, null, rs); } } }

2、手动提交方式:

package pers.zhb.test;

import org.apache.commons.dbutils.QueryRunner;

import pers.zhb.dbutils.*;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

public classTest{

public static voidmain(String[] args){

Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try{ con = c3p0Utiils.getConnection();//从连接池中获取连接 con.setAutoCommit(false);//设置为手动提交事务的方式 QueryRunner qr = newQueryRunner(); String sql = "INSERT INTO student(studentno,sname,sex,birthday,classno,point,phone,email) VALUES(?,?,?,?,?,?,?,?)"; Object[] params = { "20191815", "huab", "男", "1988-12-01", "201901", "239", "16623540978", "Tom.@3218n.com"}; int num = qr.update(con, sql, params); con.commit(); } catch(Exception e) { e.printStackTrace(); } finally{ c3p0Utiils.close(con, null, rs); } } }

不提交的话,数据库中是没有数据的。

mysql事务与jdbc事务_事务(mysql事务、jdbc事务)相关推荐

  1. mysql 事件里定义事物_聊一聊 MySQL 中的事务及其实现原理

    说到数据库,那就一定会聊到事务,事务也是面试中常问的问题,我们先来一个面试场景: 面试官:"事务的四大特性是什么?" 我:"ACID,即原子性(Atomicity).隔离 ...

  2. mysql 回滚之后抛出异常_在PHP中 开始事务后,程序抛出异常 没有执行commit也没有执行rollback mysql事务会回滚吗?...

    网上有人说开启事务后 sql语句执行错误或程序出错 没有执行rollback的情况下,下一次运行就会自动commit 程序出错不会回滚rollback 但是也有人说抛出异常等 程序如果MySQL存在没 ...

  3. mysql 复合索引 悲观锁_对MySQL索引、锁及事务的简单分析

    一.索引的数据结构 1.二叉搜索树实现的索引 二叉搜索树如下图,它查找元素的时间复杂度为O(logn) 但如果经常出现增删操作,最后导致二叉搜索树变成线性的二叉树,这样它查找元素的时间复杂度就会变成O ...

  4. mysql支持事务的储存引擎_「mysql事务与mysql储存引擎」- 海风纷飞Blog

    事务概念及存储引擎 1.0 为何要事务? 先来看一个场景,银行转账汇款: 李彦宏和周鸿祎天天打架,现在让李彦宏给周鸿祎转款1000 元 设计如下表 account表 编号(id)用户名(user)金额 ...

  5. mysql getconnection 如何关闭连接_【MySQL】使用连接池获取Connection执行sql以及mybatis事务注意事项...

    注意: 使用DataSourceUtils.getConnection(dataSource);方式获取连接,而不是dataSource.getConnection(). dataSource.get ...

  6. springboot 事务手动回滚_来,讲讲Spring事务有哪些坑?

    来自公众号:孤独烟 引言 今天,我们接上文<面试官:谈谈你对mysql事务的认识>的内容,来讲spring中和事务有关的考题! 因为事务这块,面试的出现几率很高.而大家工作中CRUD的比较 ...

  7. mysql和python的关系_八MySQL与Python

    <1>数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. ...

  8. MySQL数据库实用教程考核_《MySQL数据库实用教程》郑明秋,蒙连超,赵海侠【pdf】...

    内容简介 郑明秋.蒙连超.赵海侠主编的<MySQL数据库实用教程>是作者在多年的数据库开发实践与教学经验的基础上,根据计算机相关专业的职业岗位能力需求及学生的认知规律倾心组织编写的.本教材 ...

  9. mysql innodb 设置详解_【mysql】mysql innodb 配置详解

    MySQLinnodb 配置详解 innodb_buffer_pool_size:这是InnoDB最重要的设置,对InnoDB性能有决定性的影响.默认的设置只有8M,所以默认的数据库设置下面InnoD ...

  10. mysql隐式锁定辅助索引_当Mysql - InnoDB行锁遇到复合主键和多列索引-Go语言中文社区...

    背景 今天在配合其他项目组做系统压测,过程中出现了偶发的死锁问题.分析代码后发现有复合主键的update情况,更新复合主键表时只使用了一个字段更新,同时在事务内又有对该表的insert操作,结果出现了 ...

最新文章

  1. Java数据结构类如何使用_Matlab如何使用Java的数据结构类型
  2. Fragment.setArguments()
  3. 集合框架源码学习之HashMap(JDK1.8)
  4. JAVA Web day02--- Android小白的第二天学习笔记
  5. Android/linux(earlysuspend、lateresume)睡眠唤醒机制简
  6. Acwing第 14 场周赛【完结】
  7. Android性能优化典范
  8. 浏览器打开php显示空白,pc微信浏览器打开页面显示空白,其他浏览器正常
  9. java 开发手机web,手机web app开发笔记
  10. nodejs安装服务器系统,window下,nodejs安装http-server,并开启HTTP服务器
  11. 约瑟夫环问题2(顺序表+链表求解)
  12. override与final
  13. 单片机TM4C123学习(一):GPIO模块的应用
  14. HIbernate学习笔记5 之 查询
  15. 完成一个简单的时间片轮转多道程序内核代码
  16. Python通过SSH下载远程服务器文件
  17. CenterOs升级gcc
  18. html颜色混搭的插件,Color by Fardos,网页取色配色插件,查找近似颜色,提供渐变配色...
  19. RK3399外设驱动之RTC驱动(一)
  20. 20201002Class not found XXXXTest

热门文章

  1. android模拟机新闻APP,DavidTGNewsProject
  2. linux安装 redis,在linux中安装redis
  3. 怎么卸载apowerrec_如何删除windows10自带应用
  4. HTML静态网页---标签
  5. 图的定义与术语 - 数据结构和算法54
  6. Visual Studio 2010 调试 C 语言程序
  7. HP-UX的终端TERM要设置成什么,才能输入中文呢?
  8. 求2个数的最大公约数
  9. C C++面试常问简答题(1)
  10. 劝你要看一些有门槛的机会