博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL 事务--转账
阅读量:2107 次
发布时间:2019-04-29

本文共 1596 字,大约阅读时间需要 5 分钟。

对于MySQL中存储引擎 InnoDB ,它可以实现事务安全

最常见的例子就是转账,什么是事务 什么是事务安全 ,我们直接来看例子

CREATE DATABASE shopUSE shopCREATE TABLE `account`(	`id` INT(3) NOT NULL AUTO_INCREMENT,	`name` VARCHAR(20) NOT NULL,	`money` DECIMAL(9,2) NOT NULL,	PRIMARY KEY (`id`))ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO `account`(`name`,`money`) VALUES ('A',2000.00),('B',10000.00)-- 模拟转账SET autocommit = 0; -- 关闭自动提交START TRANSACTION -- 开启事务 以下两条就是一组事务  他们被打包在一起 同生共死UPDATE `account` SET `money` = `money` - 500 WHERE `name` = 'A'UPDATE `account` SET `money` = `money` + 500 WHERE `name` = 'B'-- 成功了就提交  一旦提交 就被持久化了  滚不回去了COMMIT;-- 失败了回滚ROLLBACK;-- 事务完成  恢复自动提交SET autocommit = 1;

 

 

我们从头开始,创建一个 shop 的数据库 再创建一个 account 表

CREATE DATABASE shopUSE shop

然后我们对表进行定义

CREATE TABLE `account`(	`id` INT(3) NOT NULL AUTO_INCREMENT,	`name` VARCHAR(20) NOT NULL,	`money` DECIMAL(9,2) NOT NULL,	PRIMARY KEY (`id`))ENGINE=INNODB DEFAULT CHARSET=utf8

现在我们插入两条数据,就是两个人,一会他俩转账

INSERT INTO `account`(`name`,`money`) VALUES ('A',2000.00),('B',10000.00)

在 InnoDB 引擎中,事务是被自动提交的,我们来改为手动提交,关闭自动提交 并开启事务

SET autocommit = 0; -- 关闭自动提交START TRANSACTION -- 开启事务

然后我们让两人进行转账,这是两条更新语句,转账500元

UPDATE `account` SET `money` = `money` - 500 WHERE `name` = 'A'UPDATE `account` SET `money` = `money` + 500 WHERE `name` = 'B'

有成功了 和失败了两种操作

-- 成功了就提交  一旦提交 就被持久化了  滚不回去了COMMIT;-- 失败了回滚ROLLBACK;

最后不要忘了  再打开自动提交(是刚才我们手动关闭的)

-- 事务完成  恢复自动提交SET autocommit = 1;

 

好了,我们来执行以下代码,先看看两个人初始化的钱

然后在开启事务后 ,我们让A 来转账给B 500 元

现在B来接受 500元

现在还没有提交,我们来回滚以下,看看会发生什么,运行回滚那一行代码

他们两人的金额都变回之前的金额了

现在我们重新运行两行转账代码,然后运行提交行代码

再提交了之后,我们再运行回滚代码,发现已经回滚不回去了,这就是事务提交成功了,记录被持久保存,不能修改了

最后还是 别忘了打开自动提交嗯,运行最后一行代码

 

 

 

 

 

转载地址:http://uyuef.baihongyu.com/

你可能感兴趣的文章
03. 交换机的Telnet远程登陆配置
查看>>
微信小程序-调用-腾讯视频-解决方案
查看>>
giuhub搭建及常用操作
查看>>
phpStudy安装yaf扩展
查看>>
密码 加密 加盐 常用操作记录
查看>>
TP 分页后,调用指定页。
查看>>
Oracle数据库中的(+)连接
查看>>
java-oracle中几十个实用的PL/SQL
查看>>
PLSQL常用方法汇总
查看>>
详细介绍Oracle sqlplus命令
查看>>
几个基本的 Sql Plus 命令 和 例子
查看>>
PLSQL单行函数和组函数详解
查看>>
Oracle PL/SQL语言初级教程之异常处理
查看>>
Oracle PL/SQL语言初级教程之游标
查看>>
Oracle PL/SQL语言初级教程之操作和控制语言
查看>>
Oracle PL/SQL语言初级教程之过程和函数
查看>>
Oracle PL/SQL语言初级教程之表和视图
查看>>
Oracle PL/SQL语言初级教程之完整性约束
查看>>
PL/SQL学习笔记
查看>>
如何分析SQL语句
查看>>