
























MySQL的事务是一组被视为一个单一逻辑工作单元的SQL操作。事务确保这些操作要么全部成功,要么在出现错误时全部失败并回滚,以保持数据库的一致性和完整性。事务通常用于需要多个步骤的操作,这些步骤必须全部成功才能确保数据的完整性,比如在银行转账中,转出和转入账户的操作必须同时完成。
在MySQL中,不同的存储引擎具有不同的特性,myisam memory存储引擎均不支持事务,如果你需要事务支持,InnoDB 是最推荐的选择,因为它在性能和事务处理方面表现优异,并且是MySQL的默认存储引擎。
查看当前存储引擎
SHOW ENGINES;查看事务是否自动提交
SHOW VARIABLES LIKE '%autocommit%';MySQL隐式事务INSERT, UPDATE, DELETE默认开启自动提交
Atomicity, 原子性:每个事务都是不可分割的单位,要么全部执行,要么全部失败Consistency, 一致性:使数据库从一个一致的状态切换到另一个一致性的状态Isolation, 隔离性:一个事务执行不受其他事务干扰(需要隔离级别控制)Durability, 持久性:一个事务,一旦提交,就是永久性改变提交一个事务
-- 必须,使用多个语句的事务,需要禁用隐式事务
SET autocommit = 0;
-- 可选
START TRANSACTION;
-- 只有增删改查可以有事务,ddl语句没有事务
UPDATE account SET money = money-20 WHERE id = 1;
UPDATE account SET money = money+20 WHERE id = 2;
-- 结束事务,应用程序外无法决定使用提交还是回滚,COMMIT,ROLLBACK只能手动选择一个
COMMIT;
-- ROLLBACK;
回滚到回滚点
-- 必须,使用多个语句的事务,需要禁用隐式事务
SET autocommit = 0;
-- 可选
START TRANSACTION;
-- 只有增删改查可以有事务,ddl语句没有事务
UPDATE account SET money = money-20 WHERE id = 1;
-- 回滚点
SAVEPOINT a
UPDATE account SET money = money+20 WHERE id = 2;
-- 结束事务,应用程序外无法决定使用提交还是回滚,COMMIT,ROLLBACK只能手动选择一个
-- COMMIT;
ROLLBACK TO a;运行多个事务,访问相同数据,如果不采取隔离机制,就会引发并发问题,设置隔离级别避免并发问题,Oracle支持:读已提交,串行化,默认读已提交,MySQL支持:读未提交 ,读已提交 ,可重复读 ,串行化,默认可重复读。
脏读:
不可重复读:
幻读:
读未提交(Read Uncommitted):
读已提交(Read Committed):
可重复读(Repeatable Read):
串行化(Serializable):
总结:
查看当前隔离级别
SELECT @@tx_isolation设置隔离级别为读未提交
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。