事务
什么是事务
要么都成功,要么都失败
1、SQL执行 A给B转账 A 1000 ---> 200 B 200
2、SQL执行 B收到A的钱 A 800 --> B 400
将一组SQL放在一个批次中去执行~
事务原则:ACID性 原子性,一致性,隔离性,持久性 (脏读,幻读....)
参考博客链接:https://blog.csdn.net/dengjili/article/details/82468576/
原子性(Atomicity)
要么都成功,要么都失败
一致性(Consistency) ---事务提交
事务前后的数据完整性要保证一致,1000
持久性(Durability)
事务一旦提交则不可逆,被持久化到数据库中!
隔离性(Isolation) 事务的隔离性是多个用户
隔离所导致的一些问题
脏读:
指一个事务读取了另外一个事务未提交的数据。
不可重复读:
在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)
虚读(幻读)
是指在一个事务内读取到了别的事务插入的数据,导致前后读取数量总量不一致。
执行事务
-- ================= 事务 ================= -- mysql是默认开启事务自动提交的 SET autocommit = 0;/* 关闭 */ SET autocommit = 1;/* 开启(默认的) */ -- 手动处理事务 SET autocommit = 0; -- 关闭自由提交 -- 事务开启 START TRANSACTION -- 标记一个事务的开始,从这个之后的sql都在同一个事务内 INSERT xx INSERT xx -- 提交:持久化(成功!) COMMIT -- 回滚:回到原来的样子(失败!) ROLLBACK -- 事务结束 SET autocommit = 1; -- 开启自动提交 -- 了解 SAVEPOINT 保存点名 -- 设置一个事务的保存点 ROLLBACK TO SAVEPOINT 保存点名 -- 回滚到保存点 RELEASE SAVEPOINT 保存点名 -- 撤销保存点
模拟场景
-- 转账 CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci USE shop CREATE TABLE `account`( `id` INT(4) 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 COMMIT; -- 提交事务,就被持久化了! ROLLBACK; -- 回滚 SET autocommit = 1; -- 恢复默认值
我的一生
第1章-废物的一生
第50章-糟糕的婴儿
第300章-莫欺少年穷
第600章-莫欺中年穷
第1000章-莫欺老年穷
第1100章-不详的离去
第1101章-棺材板的震动
第1150章-盗墓贼的眼泪
第1200章-死者为大

浙公网安备 33010602011771号