目录
我之前学习 MySQL 是在b站看的狂神说MySQL,收获很大。
一、存储引擎介绍
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 -- 恢复默值
六、专栏分享
每个专栏都在持续更新中~~~