首页 > 其他分享 >事务

事务

时间:2022-12-21 10:55:50浏览次数:27  
标签:autocommit 事务 SET -- money 提交

事务

事务原则:ACID原则 原子性,一致性,隔离性,持久性 (脏读,幻读...)

ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability).这是可靠数据库所应具备的几个特性.所以ACID就是这四大特性的缩写。

原子性(Atomicity)

要么都成功,要么都失败

一致性(Consistency)

事务前后的完整性要保持一致

隔离性(Isolation)

事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。

持久性(Durability) -- 事务提交

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

事务所导致的一些问题

脏读

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

不可重复读

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

虚读(幻读)

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

执行事务

-- ======事务======
-- 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(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

COMMIT; -- 提交事务,就被持久化了!
ROLLBACK; -- 回滚

SET autocommit=1; -- 恢复默认值 

标签:autocommit,事务,SET,--,money,提交
From: https://www.cnblogs.com/dengovo/p/16995740.html

相关文章