您现在的位置是:首页 >

数据库执行事务 SQL实战新手入门:事务(1)

火烧 2023-04-09 07:20:33 1051
SQL实战新手入门:事务(1)    事务( )  事务是SQL提供的一种机制 用于强制实施数据库的完整性并保持数据的统一性 事务提供了这样一种机制 可以确保将多个步骤的操作作为单个执行单元 如果事务

SQL实战新手入门:事务(1)  

   事务( )

  事务是SQL提供的一种机制 用于强制实施数据库的完整性并保持数据的统一性 事务提供了这样一种机制 可以确保将多个步骤的操作作为单个执行单元 如果事务中涉及的任何一个步骤失败 那么整个事务都将回滚 如果所有的步骤都已经成功完成 那么既可以提交事务(即将所有的修改保存回数据库) 也可以回滚事务(即取消所有修改)

  尽管保留了SQL标准的灵魂 但各个RDBMS厂商在对事务的实现上存在着一定的差异 桌面型数据库在嵌入数据库的代码中处理事务(对于Microsoft Access来说是VBA) 其他RDBMS Oracle IBM DB Microsoft SQL Server 和PostgreSQL 都具有健壮的事务支持 MySQL实现了一个独一无二的特性 即为表指定存储引擎的功能 MySQL的两种存储引擎 InnoDB和IBMDB I 都提供了对事务的原生支持

  什么是事务

  事务在更小的粒度上补充了会话的概念 它将发生在会话期间的每一个操作划分为逻辑的工作单元 通过这样的办法 数据库操作 那些涉及数据修改的操作 将按照步骤一步一步地执行 并且可以在任何时刻回滚操作 或者在每一个步骤都成功执行的情况下提交这些操作

  涉及创建和销毁数据库对象的数据定义语言(DDL)结构的修改并不是事务性的 可能无法回滚 这取决于RDBMS以及一些附加的参数设置(例如隔离级别 这将在本章后面进行讨论)

  SQL标准一开始就定义了事务 并在后续的标准中增强了这一概念 根据SQL标准 事务是由RDBMS启动的 并一直持续到发出一条MIT或ROLLBACK语句 细节则由RDBMS自己实现 表 列出了SQL标准定义的事务管理语句

  表 SQL标准定义的事务管理语句

  一个工作单元必须满足ACID的条件 才能称之为一个事务 ACID这个首字母缩略词代表了如下含义

  原子性 所有修改要么全部接受 要么全部取消 如果批中的任何一个语句失败 则所有修改必须被复原

  一致性 在事务完成或回滚时 操作中涉及的所有数据必须保持一致性状态 不能破坏数据库的完整性

  隔离性 除非将事务提交给数据库 否则一个事务不应该知道任何其他事务对数据所做的修改 可以设置不同的隔离级别来改变这一默认行为

  持久性 对于已经成功提交到数据库的事务 其结果将保存在数据库中

  关于事务 一个真实生活的例子就是ATM(银行的自动取款机)的取款操作 假设你需要取一笔钱 并决定从最近的取款机取钱 你只需要将你的银行卡(用户ID)插入取款机 并输入你的个人识别码(PIN) 就可以开始一个会话过程 一旦银行确认了你的身份 就允许你继续操作 你可以要求提取指定数量的现金 这时就会开始一个事务 它涉及几个操作 取款机必须检查你的账户 验证你是否具有足够的钱来完成该事务 并从你的账户总额中减去取款金额 然后再向你公布账单 如果其中任何一个步骤(以及其他一些步骤 这取决于指定银行定义的策略)失败 则必须取消该事务 所有数据都必须恢复到事务开始之前的状态 这意味着除非RDBMS已经从你的账户余额中减去了取款额 否则你无法取到现金 除非你的账户上有足够的余额来完成该事务 否则银行将无法从你的账户余额中减去取款额 在所有这些操作都成功之后 你才能取到现金 无论什么原因(例如你取消了操作 或者银行取款机发生故障) 如果其中任何一个步骤失败 则所有的改变都必须回滚到事务之前的状态

  在ANSI/ISO的SQL标准中定义了事务的模型 它规定事务以隐式方式开始 在成功执行了该事务的所有逻辑单元之后使用一个显式的MIT 或者当需要回滚未提交的变更时使用一个显式的ROLLBACK(例如当程序异常终止时) 绝大多数RDBMS都遵循这一事务模型

  显式事务和隐式事务

数据库执行事务 SQL实战新手入门:事务(1)

  在SQL标准中 将隐式事务作为默认的事务行为 这种方式过于小心谨慎了 无论何时 如果在会话期间执行了某些DDL和DML语句 RDBMS就会启动(或继续)一个事务 通过发出一条MIT语句或者一条ROLLBACK语句 就可以终止事务

  显式事务是由客户端使用BEGIN TRANSACTION语句来启动的 并采用与隐式事务类似的办法 手动发出命令来终止事务 可以为显式事务定义一个名称 但这是可选的 为事务定义名称有助于更好地维护代码

  例如 Microsoft SQL Server 提供了SETIMPLICIT_TRANSACTIONS{ON|OFF}语句 用于配置事务的默认行为 如果该选项为ON 当声明了下列语句之一时 SQL Server将自动启动一个事务 ALTER TABLE CREATE DELETE DROP FETCH GRANT INSERT OPEN REVOKE SELECT TRUNCATETABLE和UPDATE 事务必须显式地提交 或者显式地回滚 一旦执行了前面所列的任何一个语句 就会启动一个新事务 将IMPLICIT_TRANSACTIONS选项调整为OFF 将返回到事务默认的自动提交事务模式

  尽管并非SQL标准的要求 但在绝大多数RDBMS中 在任何DDL语句之前和之后都会隐式地发出一个MIT命令

      返回目录SQL实战新手入门

      编辑推荐

       Oracle索引技术

       高性能MySQL

lishixinzhi/Article/program/SQL/201311/16450  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码