目录
事务原理
原理:事务开启之后, 所有的操作都会临时保存到事务日志中, 事务日志只有在得到命令才会同步到数据表中,其他任何情况都会清空事务日志。
事务提交
功能 | SQL语句 |
---|---|
开启事务 | start transaction; |
提交事务 | commit; |
回滚事务 | rollback; |
事务回滚点
操作 | SQL语句 |
---|---|
设置回滚点 | savepoint 名字 |
回到回滚点 | rollback to 名字 |
事务四大特征(ACID)
特征 | 含义 |
---|---|
原子性(Atomicity) | 每个事务都是一个整体,不可再拆分,事务中所有的 SQL 语句要么都执行成功, 要么都失败。 |
一致性(Consistency) | 事务在执行前数据库的状态与执行后数据库的状态保持一致。 |
隔离性(Isolation) | 事务与事务之间不应该相互影响,执行时保持隔离的状态。 |
持久性(Durability) | 一旦事务执行成功,对数据库的修改是持久的。就算关机,也是保存下来的。 |
并发访问的问题
并发访问的问题 | 含义 |
---|---|
脏读 | 一个事务读取到了另一个事务中尚未提交的数据。 |
不可重复读 | 一个事务先后执行同一条 SQL,但另一个事务两次读取到的数据不同 |
幻读 | 在一个事务中无法读取其他事务对该事务的增删操作。 |
事务隔离级别
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交(read-uncommitted) | 是 | 是 | 是 |
读已提交(read-committed) | 否 | 是 | 是 |
可重复读(repeatable-read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
读未提交:该隔离级别的事务可以看到其他事务中未提交的数据。
读已提交:该隔离级别的事务可以读取到已经提交事务的数据。
可重复读:MySQL 的默认事务隔离级别,它能确保同一事务多次查询的结果一致。
串行化:事务最高隔离级别,它会强制事务排序,使之不会发生冲突。