创建事务sql代码mysql_事务mysql

一、事务的概念

事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。

例如:A——B转帐,对应于如下两条sql语句

update from account set money=money+100 where name='B';

update from account set money=money-100 where name='A';

二、MySQL数据库中操作事务命令

1、编写测试SQL脚本,如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 /*创建账户表*/

2 create table account(

3 id int primary key auto_increment,

4 name varchar(40),

5 money float

6 );

7

8 /*插入测试数据*/

9 insert into account(name,money) values('A',1000);

10 insert into account(name,money) values('B',1000);

11 insert into account(name,money) values('C',1000);

48304ba5e6f9fe08f3fa1abda7d326ab.png

下面我们在MySQL数据库中模拟A——B转帐这个业务场景

2.1、开启事务(start transaction)

使用"start transaction"开启MySQL数据库的事务,如下所示:

bPp04BAObkxuGTqVMAgDnZuvds6hQAYE6EG6ICwCbamesNUQFgGneOZ3pDVACYxt7JN1OnAABzsn9KWQQAC1eLANDC3xYBwPZfa6AgcOp9JmsAAAAASUVORK5CYII=

我们首先在数据库中模拟转账失败的场景,首先执行update语句让A用户的money减少100块钱,如下图所示:

qpxbj3mzovAAAAAElFTkSuQmCC

然后我们关闭当前操作的dos命令行窗口,这样就导致了刚才执行的update语句的数据库的事务没有被提交,那么我们对A用户的修改就不算是是真正的修改了,下次在查询A用户的money时,依然还是之前的1000,如下图所示:

p2ugwAYgv8AEkYdSD1D8HwAAAAASUVORK5CYII=

2.2、提交事务(commit)

下面我们在数据库模拟A——B转账成功的场景

0Uhxlh3AP2iAAAAAElFTkSuQmCC

我们手动提交(commit)数据库事务之后,A——B转账100块钱的这个业务操作算是真正成功了,A账户中少了100,B账户中多了100。

2.3、回滚事务(rollback)

6775ddff5fe65b5fff8b229efe1b0727.png

通过手动回滚事务,让所有的操作都失效,这样数据就会回到最初的初始状态!

三、JDBC中使用事务

当Jdbc程序向数据库获得一个Connection对象时,默认情况下这个Connection对象会自动向数据库提交在它上面发送的SQL语句。若想关闭这种默认提交方式,让多条SQL在一个事务中执行,可使用下列的JDBC控制事务语句

Connection.setAutoCommit(false);//开启事务(start transaction)

Connection.rollback();//回滚事务(rollback)

Connection.commit();//提交事务(commit)

3.1、JDBC使用事务范例

在JDBC代码中演示银行转帐案例,使如下转帐操作在同一事务中执行

"update account set money=money-100 where name='A'"

update account set money=money+100 where name='B'

代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 package me.gacl.demo;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值