南头专业的网站建设公司,wordpress数据量大网站访问,wordpress 定制主题,上海市公共招聘网12333数据库事务及ACID
数据库事务是指作为单个逻辑工作单元执行的一组操作。这组操作要么全部成功地执行#xff0c;要么全部不执行#xff0c;不允许出现部分执行的情况。数据库事务通常需要满足ACID属性#xff0c;即原子性#xff08;Atomicity#xff09;、一致性#x…
数据库事务及ACID
数据库事务是指作为单个逻辑工作单元执行的一组操作。这组操作要么全部成功地执行要么全部不执行不允许出现部分执行的情况。数据库事务通常需要满足ACID属性即原子性Atomicity、一致性Consistency、隔离性Isolation和持久性Durability。
ACID属性详解 原子性Atomicity 原子性要求事务是不可分割的单元要么全部执行要么全部不执行。如果事务中的任何一步失败整个事务都会被回滚到初始状态。 一致性Consistency 一致性确保事务执行后数据库从一个一致性状态转移到另一个一致性状态。即事务应满足所有的约束和触发器保持数据库的完整性。 隔离性Isolation 隔离性指的是多个事务并发执行时每个事务的操作应该与其他事务隔离互不干扰。隔离性可通过锁定机制来实现以确保并发执行不导致数据不一致。 持久性Durability 持久性要求一旦事务被提交其结果就应该是永久性的即使系统故障也不应该导致数据丢失。 设置/禁止自动提交
在数据库中自动提交是指每个SQL语句都被当做一个事务并自动提交。在很多情况下我们可能需要禁止自动提交以便将一系列的SQL语句作为一个事务进行执行。
SQL Server
-- 禁止自动提交
SET IMPLICIT_TRANSACTIONS ON;-- 启用自动提交
SET IMPLICIT_TRANSACTIONS OFF;MySQL / MariaDB
-- 禁止自动提交
SET AUTOCOMMIT 0;-- 启用自动提交
SET AUTOCOMMIT 1;Oracle
-- 禁止自动提交
SET AUTOCOMMIT OFF;-- 启用自动提交
SET AUTOCOMMIT ON;事务示例
考虑一个简单的银行应用场景其中执行了两个相关的SQL语句
-- 禁止自动提交
SET AUTOCOMMIT 0;-- 开始事务
BEGIN;-- 转账操作
UPDATE accounts SET balance balance - 100 WHERE account_id 1;
UPDATE accounts SET balance balance 100 WHERE account_id 2;-- 提交事务
COMMIT;在上述示例中如果任何一个UPDATE语句失败整个事务将被回滚从而保持数据的一致性。禁止自动提交使得事务成为一个原子操作要么完成要么回滚。