初识 事务

张开发
2026/4/22 17:18:53 15 分钟阅读
初识 事务
目录什么是事务事务的ACID特性事务语法保存点手动提交事务隔离级别四种标准隔离级别读未提交Read Uncommitted读已提交Read Committed可重复读Repeatable Read串行化Serializable隔离级别与并发问题的关系什么是事务事务 是 数据库操作的最小逻辑单元它把一组SQL组成一个整体这些整体执行过程中要么全部成功执行要么全部失败回滚。事务的ACID特性原子性Atomicity事务是不可分割的工作单元要么全部完成要么全部不完成。 不存在只执行到到一半的情况一致性Consistency事务执行后保证数据是正确且符合预期的。隔离性Isolation多个事务相互不能影响。持久性Durability事务一旦提交存储在介质中无论数据是否损毁都不会影响安全性。事务最终要满足 一致性的通过原子性隔离性和持久性来实现的基于事务的ACID特性 这也就是使用事务的缘由在数据库使用的过程中对于修改的只要提交成功 就可以保存成功 只要回滚 就可以是事务恢复如初事务语法事务语法用于数据库操作中确保数据一致性通常包含BEGIN、COMMIT、ROLLBACK等关键命令。//事务的开始STARTTRANSACTION或者BEGIN//提交当前事务 并更改持久化保存COMMIT//回滚当前的事务取消对其的更改ROLLBCAK在开起一段事务中处于在事务中的SQL 都具有ACID的特性此外 在commit 之后再 rollback无效因为数据已经落盘了事务已经提交了保存点事务保存点 允许在事务执行过程中设置标记点如果后续操作失败可以回滚到保存点Savepoint savepoint 1(保存名)Savepoint savepoint 2(保存名)多次建立保存点可以完成以下的操作手动提交事务事务的提交一般设置的是自动的在使用SHOW variables like autocommit;可以检查事务是否是自动提交的这里可以自主修改自动提交事务改为手动的set autocommit 0;注意1.只要开始STARTTRANSACTION 或者BEGIN要必须经过commit 提交才能持久化 或者 rollback 回滚结束事务与set autocommit 无关2.但在手动提交事务情况之下不用显示开启事务在执行修改操作之后提交或回滚操作事务时直接使用commit和rollback3.已经提交的事务不可以回滚在每次重启之后 都会改为自动若要永久为手动提交事务---这里要在配置文件里修改隔离级别四种标准隔离级别读未提交Read Uncommitted最低的隔离级别允许事务读取其他事务未提交的数据。可能导致脏读、不可重复读和幻读。读已提交Read Committed事务只能读取其他事务已提交的数据。避免了脏读但可能出现不可重复读和幻读。可重复读Repeatable Read确保事务内多次读取同一数据的结果一致。避免了脏读和不可重复读但可能出现幻读。串行化Serializable最高的隔离级别通过强制事务串行执行避免所有并发问题脏读、不可重复读、幻读但性能最低。脏读事务A读取了事务B未提交的数据若事务B回滚事务A读取的数据无效。不可重复读事务A多次读取同一数据期间事务B修改并提交了该数据导致事务A两次读取数据结果不一致。幻读事务A查询某范围数据时事务B插入或删除了该范围内的数据并提交导致事务A再次查询时结果集发生变化。隔离级别与并发问题的关系隔离级别脏读不可重复读幻读Read Uncommitted✔✔✔Read Committed✖✔✔Repeatable Read✖✖✔Serializable✖✖✖并发性能是由高到低的但是安全性能却是恰恰相反的 有利就有弊由低到高的事务保证了数据的安全索引提升了数据查询的效率

更多文章