[TOC]
## 事务处理
> MySql 提供事务处理的表引擎, `InnoDB`
> 服务器层不管理事务,由下层的引擎实现,所以在同一个事务中,使用多种存储引擎不靠谱。
> 在非事务的表上执行事务操作 MySql不会发出提醒,也不会报错
## 什么是事务
> 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点。
原子性:要不全部成功,要不全部撤销
隔离性:事务之间相互独立,互不干扰
一致性:数据库正确地改变状态后,数据库的一致性约束没有被破坏
持久性:事务的提交结果,将持久保存在数据库中
## 为什么会产生死锁?
在数据库的上下文中,死锁是指两个或多个事务无法进行的情况,因为每个事务都在等待另一个事务释放资源。这可以类比为事务的[循环链],每个事务都在等待链中的下一个事务释放资源。

## 避免死锁
这涉及到谨慎的资源调度,其中[数据库系统]提前检查以检测潜在的死锁情况并防止它们发生。然而,这需要了解未来的处理请求,这通常是不可能的。
## 预防死锁
这种策略涉及到设计一个系统,使得死锁条件不能成立。这可以通过防止至少一个Coffman[死锁条件]来实现,这四个条件是:相互排斥、占有和等待、[非抢占]、循环等待。
## 隔离级别
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
| --- | --- | --- | --- |
| Read uncommitted (读未提交) | √ | √ | √ |
| Read Committed (读已提交) | ✘ | √ | √ |
| Repeatable Reads (可重复读) | ✘ | ✘ | √ |
| Serializable (串行化) | ✘ | ✘ | ✘ |
**类型一:RU(READ-UNCOMMITTED 表示读未提交)**
> 可以读取到事务未提交的数据,隔离性差,会出现脏读(当前内存读),不可重复读,幻读问题;
**类型二:RC(READ-COMMITTED 表示读已提交)** 可用
> 可以读取到事务已提交的数据,隔离性一般,不会出现脏读问题,但是会出现不可重复读,幻读问题;
**类型三:RR(REPEATABLE-READ 表示可重复读)** `默认`
> 可以防止脏读(当前内存读),防止不可重复读问题,防止会出现的幻读问题,但是并发能力较差;
会使用next lock锁进制,来防止幻读问题,但是引入锁进制后,锁的代价会比较高,比较耗费CPU资源,占用系统性能;
**类型四:SR(SERIALIZABLE 可串行化)**
> 隔离性比较高,可以实现串行化读取数据,但是事务的并发度就没有了;
这是事务的最高级别,在每条读的数据上,加上锁,使之不可能相互冲突
读取未提交
- 简介
- PHP
- 字符串函数
- 数组函数
- 正则
- 加密函数
- 面向对象
- 关键字
- 设计模式
- 魔术方法
- 机制扩展
- 会话机制
- 垃圾回收
- PHP框架
- laravel
- 问题
- swoole
- easyswoole
- workerman
- 数据库
- Sphinx
- MongoDB
- MemCache
- Redis
- 基础操作
- 数据类型
- 持久化
- 分布式锁
- 内存模型
- redis高级特性
- MySql
- 基础操作
- 数据类型
- 数据表引擎
- 锁机制
- 事务处理
- 存储过程
- 触发器
- 索引
- 关联查询
- 分析SQL语句-优化查询
- 分区分表
- 主从复制
- MySql安全性
- 网络协议
- HTTP
- header详解
- 状态码
- nginx-配置
- 逻辑算法
- 时间和空间复杂度
- 常见算法
- 数据结构
- 核心
- 进程、线程、协程
- 存储容量-计量单位
- 开发软件及配置
- LNMP
- 版本控制器
- Git
- Fidder
- Fidder-Android7
- 自动化部署
- Jenkins
- supervisor
- Elasticsearch
- LogStash
- RabbitMQ
- AB测试
- JAVA-JDK
- FileBeat
- PhpStorm
- Composer
- Yum
- Linux
- API安全
- 高并发及大流量相关概念
- 网站优化
- WEB
- Electron
- 第三方平台对接
- Python框架
- docker
- CORS
- PHP面试题
- PHP相关问题
- Laravel和ThinkPHP框架的区别
