一系列操作需要 要不全部成功 要不全部失败
开启事务后,在提交之前,执行结果都只是在当前会话有效,是临时的
提交事务后,才会真正生效,持久更新
若其中有执行失败的,都应该回滚到开启时的状态
// 开启事务
START TRANSACTION; -- MySQL
BEGIN TRANSACTION; -- SQLite
BEGIN; -- SQLite 可省略
// 提交事务
COMMIT;
// 回滚事务
ROLLBACK;
MySQL 默认自动提交
Oracle 默认手动提交
SQLite 默认自动提交
// 查看事务默认提交方式 SELECT @@autocommit; – 1 代表自动提交, 0 代表手动提交
不可分割,要么全部成功,要不全部失败
提交/回滚 后,持久更新
会话独立
30+30 = 40+20
并发,多个事务同时操作一批数据,会引发问题
隔离级别:
特点:隔离级别越小 效率越高,隔离级别越大 安全性越高
// 查看隔离级别 SELECT @@tx_isolation;
// 设置隔离级别 (后面是级别) SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;