什么是事务:
- 对于用户而言,事务是具有完整逻辑意义的数据库操作序列的集合。
- 对于DBMS而言,事务则是一个读写操作序列。这些操作是一个不可分割的逻辑工作单元,要么都做,要么都不做。
- 事务是DBMS中竞争资源、并发控制和恢复的基本单元。它是由数据库操作语言(如SQL)或高级编程语言(如Java、C、C++)提供的事务开始语句、事务结束语句以及由它们包含的全部数据库操作语句组成。
事务结束的两种类型:
- 事务提交(commit):将成功完成的事务的执行结果(即更新)永久化,并释放事务占有的全部资源。是事务的正常结束。
- 事务回滚(rollback):中止当前事务,撤销其对数据库所做的更新,并释放事务占有的全部资源。是事务的非正常结束。
MySQL默认采用自动提交事务模式(AutoCommit=1),即每一条INSERT、UPDATE、DELETE的SQL语句执行后,会自动执行COMMIT操作。如果想要显式地手动对事务进行操作,则需要set AutoCommit=0,或者在start transaction语句和commit(rollback)语句之间,编写SQL语句对事务进行操作。
事务的ACID原则:
四大原则 | 详细解释 | DBMS保证事务原则的措施 |
---|---|---|
原子性(Atomicity) | 原子性是指:事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生;要么都成功,要么都失败,不能只发生其中一个动作。 | 由DBMS通过撤销(UNDO)未完成的事务对数据库的影响来实现。 |
一致性(Consistency) | 事务前后数据的完整性必须保持一致,符合逻辑运算。 | 由编写该事务代码的应用程序员负责,但有时也可利用DBMS提供的数据库完整性约束(如触发器)的自动检查功能来保证。 |
隔离性(Isolation) | 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。 | 由DBMS的并发控制模块保证。 |
持久性(Durability) | 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。事务一旦提交则不可逆,会被持久化到数据库中存储。 | 由DBMS的恢复管理模块保证。 |