数据库-事务

来源:互联网 发布:java职业培训中心 编辑:程序博客网 时间:2024/05/21 15:44

事务是数据库中一个单独的执行单元,它通常由高级数据库操作语言(例如SQL)或编程语言(例如C++、java等)编写的用户程序的执行引起的。

特性: 当在数据库中更改数据成功时,在事物中更改的数据便会提交,不再改变。否则,事物就取消或回滚,更改无效。(一损俱损)

事务的四个属性(ACID):
原子性、一致性、隔离性、持久性

  • 原子性:
    事务是一个不可分割的整体,为了保证事务的整体目标,必须具有原子性,即当数据修改时,要么全部执行,要么全不执行。原子性要求事务必须被完整的执行。

  • 一致性:
    一个事物执行之前和执行之后,数据库数据必须保持一致性。
    数据库的一致性状态应该满足模式锁指定的约束,执行事务后,仍然满足。
    数据库的一致性状态由用户负责,并由并发机制实现。
    由于并发机制带来的数据不一致性包括丢失数据修改、读“脏数据”、不可重复读、产生“幽灵”数据。

  • 隔离性:
    也被成为独立性,当两个事务并发执行时,为了保证数据的安全性,将一个事物内部的操作与事务的操作隔离起来,不被其他正在进行的事务看到。
    例如两个事物T1和T2,对于T1,T2要么在T1执行前执行,要么在T1执行后再执行。
    数据库有四种类型的事务隔离级别:不提交的读、提交的读、可重复的读和串行化。
    因为隔离性,使得每个事务的更新在他被提交之前,对其他事务都是不可见的,所以,隔离性是解决临时更新消除级联回滚问题的一种方式。

  • 持久性:
    也被成为永久性,事务完成以后,DBMS保证它对数据库中的数据的修改是永久的,当系统或介质发生故障时,该修改也永久保持。
    持久性一般通过数据库备份与恢复来保证。

数据库的事务属性一般通过数据库管理系统来进行保证的,在整个应用程序运行过程中,应用无需考虑数据库的ACID的实现。

数据库通过COMMIT和ROLLBACK来终止事务,当执行COMMIT时,自事务启动以来的所有操作都会被保存成为永久性的,即被写入磁盘;当执行ROLLBACK时,自事务启动以来对数据库做的所有更改都会被撤销,并且数据库内容返回到事务开始之前的状态。无论什么情况都能回到一致性状态。

原创粉丝点击