一. 概念
如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
二.事务的ACID特征
* 原子性(Atomicity):是不可分割的最小操作单位,要么同时成功,要么同时失败
* 一致性(Consistency):保证数据的状态操作前和操作后保持一致
* 隔离性(Isolation):多个事务同时操作相同数据库的同一个数据时,一个事务的执行不受另外一个事务的干扰
* 持久性(Durability):当事务提交或回滚后,数据库会持久化的保存数据
三.事务操作步骤
- 开启事务
- 编写事务逻辑操作单元
- 提交事务或回滚事务
四.事务的分类
1.隐式(自动)事务
没有明显的开启和结束,本身就是一条事务可以自动提交,比如insert、update、delete。
2.显式事务
具有明显的开启和结束
语法:
①开启事务
set autocommit=0;
start transaction;#可以省略
②编写一组逻辑sql语句
注意:sql语句支持的是insert、update、delete
设置回滚点: savepoint 回滚点名;
③结束事务
提交:commit;
回滚:rollback;
回滚到指定的地方:rollback to 回滚点名;
五.并发事务
1.事务并发问题
当多个事务同时操作同一个数据库的相同数据时会产生事务并发问题。
脏读:一个事务读取到了另外一个事务未提交的数据。
不可重复读:同一个事务中,多次读取到的数据不一致。
幻读:一个事务读取数据时,另外一个事务进行更新,导致第一个事务读取到了没有更新的数据。
2.处理事务并发问题,设置事务隔离级别
READ UNCOMMITTED(读未提交)
READ COMMITTED(读已提交 ) :可以避免脏读
REPEATABLE READ(可重复读) :可以避免脏读、不可重复读和一部分幻读
SERIALIZABLE(串行化) :可以避免脏读、不可重复读和幻读
注意:隔离级别从小到大安全性越来越高,但是效率越来越低
3.设置隔离级别
set session|global transaction isolation level 隔离级别名;
4.查看隔离级别
select @@tx_isolation;
六. 数据库引擎
1.概念
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。
2.操作
show engines: 查看mysql支持的存储引擎。
其中我们要重点了解MyISAM 与 InnoDB 区别
对比项 | MyISAM | InnoDB |
---|---|---|
主外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行表锁 | 表锁,即使操作一条记录也会锁住整个表,不适合并发操作 | 行锁,操作时只锁某一行,不对其他行有影响,适合高并发操作 |
缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还缓存真实数据,内存要求较高,而且内存大小对性能有决定性的影响 |
表空间 | 小 | 大 |
关注点 | 性能 | 事务 |
默认安装 | Y | Y |