MySQL 事务四大特性ACID及实现——(七)

MySQL 事务四大特性ACID及实现

8.1事务的四大特性(ACID)

1、原子性(Atomicity)

事务是一个不可分割的单位,事务中的所有SQL等操作要么都发生,要么都不发生。

2、一致性(Consistency)

事务发生前和发生后,数据的完整性必须保持一致。

3、隔离性(Isolation)

当并发访问数据库时,一个正在执行的事务在执行完毕前,对应其他的会话是不可见的,多个并发事务之间的数据是相互隔离的。备份的参数 --single-transaction

4、持久性(Durability)

一个事务一旦被提交,它对数据库中的数据改变就是永久性的。如果出了错误,事务也不允许撤销,只能通过“补偿性事务”

8.2MySql事务实现方法

-- mysql 是默认开启事务自动提交的
SET autocommit=0;-- 关闭
-- 手动处理事务
 -- 事务开启
START TRANSACTION -- 标记一个事务的开始,从之歌之后的sql都在同一个事务内

-- 对数据进行操作(注意:这两次操作在同一个事务中)
INSERT INTO xxxx;
INSERT INTO xxxx;

-- 提交:数据持久化(成功!)
COMMIT;
-- 回滚:回到对数据进行操作之前的数据(失败!)
ROLLBACK;

-- 事务结束
SET autocommit=1;-- 开启自动提交

SAVEPOINT;-- 设置一个事务的保存点
rollback TO SAVEPOINT 保存点名;-- 回滚到保存点
RELEASE SAVEPOINT 保存点名;-- 撤销保存点

8.3MySql事务实现步骤

MySQL 事务四大特性ACID及实现——(七)_第1张图片

8.4MySql事务实现案例

-- 转账
-- 创建数据库
CREATE DATABASE `shop` CHARACTER SET utf8 COLLATE utf8_general_ci
-- 切换到当前数据库
USE shop;
-- 在当前数据库中创建一个表
CREATE TABLE `account`(
	`id` INT(4) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(60) NOT NULL,
	`money` DECIMAL(9,2) NOT NULL,
	PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 插入数据
INSERT INTO `account`(`name`,`money`) VALUES('A',10000),('B',20000);
-- 模拟转账:事务
-- 闭自动提交
SET autocommit=0;
-- 开启一个事务
START TRANSACTION;
-- 账户A每转账一次减少500
UPDATE `account` SET money = money - 500 WHERE `name` = 'A';
-- 账户B每收款一次加上500
UPDATE `account` SET money = money + 500 WHERE `name` = 'B';
-- 提交数据,数据持久化
COMMIT;
-- 数据回滚
ROLLBACK;
-- 事务结束,恢复默认值
SET autocommit=1;

你可能感兴趣的:(mysql)