既然这么险恶的环境等着我,那我只好变得更强了。|

理暗

园龄:2年9个月粉丝:1关注:0

事务

6、事务

6.1、什么是事务

事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。

比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

事务原则:(ACID原则) 原子性、一致性、隔离性、持久性

原子性(Atomicity)

要么都成功,要么都失败。

比如说:1、SQL执行 A给B转账200 A 1000 -->200 B 200

2、SQL执行 B收到A的钱 A 800 B 400

1和2的操作要么都成功,要么都失败。

一致性(Consistency)

事务前后的数据完整性要保证一致。

(也就是说上面例子中A和B的总钱数1200不管怎么转账它都保持不变)

持久性(Durability)

事务一旦提交则不可逆,被持久化到数据库中!

隔离性(Isolation)

事物的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个事务之间要相互隔离。

 

隔离所导致的一些问题

脏读

指一个事务读取了另一个事务未提交的数据

不可重复读

在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定错误,只是某些场合不好)

虚读(幻读)

是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

 

执行事务

复制代码
-- mysql是默认开启事务自动提交的
SET autocommit = 0  -- 关闭
SET autocommit = 1  --开启(默认)

-- 模拟过程 -- 手动处理事务 SET autocommit = 0 -- 关闭自动提交 -- 事务开启 START TRANSACTION -- 标记一个事务的开始,从这个之后的sql都在同一个事务内
-- 具体操作······
-- 提交: 持久化 COMMIT -- 回滚: 回到原来的样子 ROLLBACK -- 事务结束 SET autocommit = 1 -- 开启自动提交
-- 了解 SAVEPOINT 保存点名 --设置一个事务的保存点 ROLLBACK TO SAVEPOINT 保存点名 -- 回滚到保存点 RELEASE SAVEPOINT 保存点名 -- 撤销保存点
复制代码

模拟场景

复制代码

-- A在线买一款价格为500元商品,网上银行转账.
-- A的银行卡余额为2000,然后给商家B支付500.
-- 商家B一开始的银行卡余额为10000


-- 创建数据库和表并添加数据 CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci USE shop CREATE TABLE `account` ( `id` INT(3) NOT NULL AUTO_INCREMENT, `name` VARCHAR(30) 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) -- 模拟转账:事务 SET autocommit = 0; -- 关闭自动提交 START TRANSACTION; -- 开始一个事务 (一组事务) UPDATE account SET money=money-500 WHERE name='A'; -- A减500 UPDATE account SET money=money+500 WHERE name='B'; -- B加500 ROLLBACK; -- 回滚 COMMIT; -- 提交事务,就被持久化了! SET autocommit = 1; -- 恢复默认值
复制代码

本文作者:Li-An

本文链接:https://www.cnblogs.com/Li-An/p/16444364.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   理暗  阅读(131)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起