0
点赞
收藏
分享

微信扫一扫

[ 数据库 ] MySQL 入门到放弃(六) --- 事务

kolibreath 2022-01-10 阅读 88

目录

 🍬 博主介绍  

我之前学习 MySQL 是在b站看的狂神说MySQL,收获很大。

一、存储引擎介绍

1. 存储引擎的概念:

2. MySQL 查看存储引擎

3. 存储引擎分类

1. MyISAM:

2. InnoDB:

3. BDB:

4. Memory :

5. Merge :

6. Archive :

7. Federated:

8. Cluster/NDB :

9. CSV:

10. BlackHole :

11. 自定义

二、什么是事务

1. 概述:

2. 概念

3. 特性(事物的四个属性:ACID)

1. 原子性(atomicity):

2. 一致性(consistency):

3. 隔离性(isolation):

4. 持久性(durability):

三、事物的类型

1. 手动事务

2. 自动事务

三、隔离产生的问题

1. 事物的隔离级别

1. 读未提交数据(Read uncommitted)

2. 读已提交数据(Read committed)

3. 可重复读(Repeatable read)

4. 串行化(Serializable)

5. 总结

2. 隔离级别会产生的问题介绍

1. 脏读:

2. 不可重复读:

3. 虚读(幻读)

四、执行事务

绍事务的语法:

1. mysql 自动开启事务提交

2. 手动处理事务

3. 事务开启

4. 提交 : 持久化(成功)

5. 回滚:  回到原来的样子(失败)

6. 事务结束

7. 其他

五、模拟场景

模拟转账:事务

六、专栏分享


一、存储引擎介绍

1. 存储引擎的概念:

2. MySQL 查看存储引擎

show engines;

3. 存储引擎分类

1. MyISAM:

2. InnoDB:

3. BDB:

4. Memory :

5. Merge :

6. Archive :

7. Federated:

8. Cluster/NDB :

9. CSV:

10. BlackHole :

11. 自定义

二、什么是事务

1. 概述:

2. 概念

3. 特性(事物的四个属性:ACID)

1. 原子性(atomicity):

2. 一致性(consistency):

3. 隔离性(isolation):

4. 持久性(durability):

2. 自动事务

三、隔离产生的问题

1. 事物的隔离级别

1. 读未提交数据(Read uncommitted)

定义:

缺点:

案例:

解决方案:

2. 读已提交数据(Read committed)

定义:

缺点:

案例:

解决方案:

3. 可重复读(Repeatable read)

定义:

缺点:

问题解读:

解决方案:

4. 串行化(Serializable)

定义:

缺点:

5. 总结

事务隔离级别脏读
 
不可重复读
 
幻读
 
读未提交( read-uncommitted )
不可重复读( read-committed )
可重复读( repeatable-read )
串行化( serializable )

2. 隔离级别会产生的问题介绍

1. 脏读:

2. 不可重复读:

3. 虚读(幻读)

四、执行事务

绍事务的语法:

1. mysql 自动开启事务提交

SET autocommit=0 -- 关闭
SET autocommit=1 -- 开启(默认的)

2. 手动处理事务

SET autocommit =0 -- 关闭自动提交

3. 事务开启

START TRANSACTION -- 标记一个事务的开始,从这个之后的SQP都在同一个事务内
INSERT XX
INSERT XX

4. 提交 : 持久化(成功)

COMMIT

5. 回滚:  回到原来的样子(失败)

ROLLBACK

6. 事务结束

SET autocommit = 1 -- 开启自动提交

7. 其他

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),('B',10000)

模拟转账:事务

SET autocommit = 0; -- 关闭自动提交
START TRANSACTION -- 开启事务(一组事务)
UPDATE account SET money = money-500 WHERE `name` = 'A' -- A 转账给B
UPDATE account SET money = money+500 WHERE `name` = 'B' -- B 收到钱
COMMIT ; -- 提交事务
ROLLBACK ; -- 回滚
SET autocommit=1 -- 恢复默值

六、专栏分享

每个专栏都在持续更新中~~~

举报

相关推荐

0 条评论