定义
一个事务是个完整的业务逻辑单元,不可再分。
事务的四大特性(ACID)
原子性(Atomicity)
事务的操作是不可再分的。要么所有操作全部成功执行,要么全部失败。
一致性(Consistency)
在网上并没有找到非常能令人信服的定义:
保证事务只能把数据库从一个有效(正确)的状态“转移”到另一个有效(正确)的状态。
https://www.zhihu.com/question/31346392
隔离性(Isolation)
多个事务的执行不会互相影响。
持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
并发事务问题
脏读
当前事务读到其他事务尚未提交的数据。
不可重复读
当前事务不同时刻读到的某条数据可能不一样。常针对update操作
幻读
常针对insert操作。当前事务不同时刻读到的数据量不一样。前一秒10条记录,后一秒就11条,仿佛出现了幻觉一样。
事务的隔离级别
读未提交(read uncommitted)
这种隔离级别基本不会使用。
读已提交(read committed)
解决了脏读情况,但可能出现不可重复读和幻读。
可重复读(repeatable read)
解决了脏读和不可重复读情况,当可能出现幻读。
串行化(Serializable
解决了所有问题,但是效率低下。使用此种隔离级别,当有一个事务正在执行时,其他事务不能开启。

事务基本操作
常用操作
-- 开启事务
start transaction;
-- 提交事务
commit;
-- 回滚事务
rollback;
-- 设置保留点
savepoint t1;
查看事务隔离级别
-- 查看mysql全局级别的事务隔离级别:
SELECT @@global.tx_isolation;
-- 查看mysql会话级别的事务隔离级别:
SELECT @@session.tx_isolation;
SELECT @@tx_isolation;
设置事务隔离级别
-- 设置隔离级别格式
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL <isolation-level>
-- 设置全局隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
393

被折叠的 条评论
为什么被折叠?



