Mysql事务详解(一)事务的概念,四大特性,使用和回滚

原创 2016年06月01日 13:31:37
以往的时候在java中,下面一个语句就可以操作一条数据库语句
<span style="font-family: Arial, Helvetica, sans-serif;">Class.forName("com.mysql.jdbc.Driver");//加载相应的字节码文件,把类加载到java虚拟机的方法区中(以后会详细讲解jvm的内存模型)</span>
conn = DriverManager.getConnection(url, user, password);//获取连接  
stmt = conn.prepareStatement(sql);//准备执行语句  
那么接下来的一个执行代码就是一个事务
sql = "create table student(NO char(20),name varchar(20),primary key(NO))";
int result = stmt.executeUpdate(sql);// executeUpdate语句会返回一个受影响的行数,-1未成功

这就是一个事务,这一个事务代表了一个语句的链接,传输和运行。在默认上述的情况下这样的一个语句独占一个事务。

这样的操作有什么弊端呢?

如果你去银行转账,刚刚从自己卡里划了100元出去,要打给A,结果A还没有收到银行系统就崩溃了(假设情况),这样你这100元就丢掉了。如果从自己卡里扣钱和小A卡里加钱是一个事务的话,他们两个应该是一起执行,不然就一起没有执行。

这就是事务的四大特性

事务的四大特性ACID

A~原子性:事务的一组操作是原子的不可再分割的,这组操作要么同时完成要么同时不完成。类似于一个CAS(compare and swap)(有时间会讲解cas)

C~一致性: 事务在执行前后数据的完整性保持不变。(例:原本的外键约束在进行事务成功后不会损坏)

D~隔离性:当多个事务同时操作一个数据库时,可能存在并发问题,此时应保证各个事务要进行隔离,事务之间不能互相干扰。

I~持久性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,不能再回滚。

那么我们怎么声明一个事务呢

在数据库中我们这样使用

start transaction;
sql语句1;
sql语句2;
commit;
这是在数据库中的使用,在JDBC环境下,由于jdbc自动提交事务,我们需要关闭自动提交事务

conn.setAutoCommit(false);
sql="";
stmt.executeUpdate(sql);
conn.commit();
这样就完成了一次事务的提交,可以类比流,一直存在cache里,最后一次性flush;

事务里还有一个特别有意思的事情就是回滚,可以返回上次的回滚点

下面是回滚点例子

conn.setAutoCommit(false);
stmt.execute(sql);
conn.rollback();
这样的情况下一旦调用rollback方法,这次的sql语句便失效了,即回滚到事务刚刚开始的时候

当然我们还可以设置回滚点

conn.setAutoCommit(false);
stmt.execute(sql1);
SavePoint sp = conn.setSavePoint();
stmt.execute(sql2);
conn.rollback(sp<span style="font-family: Arial, Helvetica, sans-serif;">);</span>
我们只要把保存的SavePoint当作参数传入rollback方法即可回滚到执行完sql1的位置,sql2失效。


版权声明:本文为博主原创文章,未经博主允许不得转载。

MySQL事务回滚

什么是事务?所谓的事务,简单来说的话那就是指要做的或所做的事情,在计算机语中是指访问并可能更新数据库中各种数据项的一个程序单元。它就是将一个任务看成一个整体,如果中间有一处出错的话,那么事务就进行回滚...
  • yingxiaochen
  • yingxiaochen
  • 2016年06月14日 10:12
  • 474

如何在mysql下实现事务的提交与回滚

最近要对数据库的数据进行一个定时迁移,为了防止在执行过程sql语句因为某些原因报错而导致数据转移混乱,因此要对我们的脚本加以事务进行控制。 首先我们建一张tran_test表 CREATE TABLE...
  • SSMDZ
  • SSMDZ
  • 2017年07月19日 14:53
  • 1947

mysql事务回滚机制概述

应用场景:    银行取钱,从ATM机取钱,分为以下几个步骤        1 登陆ATM机,输入密码;     2 连接数据库,验证密码;     3 验证成功,获得用户信息,比如存款余额等...
  • aschulianwuyanzu
  • aschulianwuyanzu
  • 2017年09月07日 12:05
  • 314

MySQL事务回滚rollback与提交commit的操作

1.    >D: 2.    >cd program files\mysql\bin 3.    >mysql -uroot -p123456 4.    >show data...
  • youcheng_ge
  • youcheng_ge
  • 2017年08月29日 17:41
  • 590

Mysql-spring事务回滚

已经标记:@Transactional(rollbackFor={RuntimeException.class 并且没有网友说的try catch,已经抛出了RuntimeException,但是还...
  • jzdzhiyun
  • jzdzhiyun
  • 2016年10月12日 14:51
  • 629

mysql事务的提交和回滚和数据引擎有关

mysql事务的提交和回滚数据引擎有关
  • zhejingyuan
  • zhejingyuan
  • 2016年03月23日 13:06
  • 1912

mysql事务处理用法与实例详解

  • 2017年08月30日 14:42
  • 11KB
  • 下载

MySQL 的异常与事务结合的使用方法。并带自动回滚!

MySQL 的异常与事务结合的使用方法。并带自动回滚!DELIMITER $$ DROP PROCEDURE IF EXISTS test_sp1 $$ CREATE PROCEDURE t...
  • samxx8
  • samxx8
  • 2015年12月02日 16:37
  • 2106

java mysql事务回滚

首先最原生态的com.mysql.jdbc.Driver数据源进行回滚。 1、spring配置文件
  • jianghuihong2012
  • jianghuihong2012
  • 2016年07月18日 23:23
  • 1935

关于java中MySQL的事务回滚

在开发中,我们最不希望出现的一件事就是在对数据库进行增删改查的时候,由于某些原因不能够一次性没有提交完,结果在数据库表中出现脏数据。而我们需要保证数据数据的完整性。事务正好为我们解决了此烦恼。publ...
  • yy763496668
  • yy763496668
  • 2016年05月24日 11:32
  • 2032
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mysql事务详解(一)事务的概念,四大特性,使用和回滚
举报原因:
原因补充:

(最多只允许输入30个字)