本文共 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/