众所周知,事务是一个实体——通常是一组 SQL 语句,或者语句和存储过程调用的组合,应该全部执行或不执行。
例如,如果一个事务有 4 个语句 - S1 到 S4 并且例如 - S4 抛出一些错误可能是由于不正确的语法或访问或任何功能问题,那么语句 S1 到 S3 将被回滚并且数据库将到达它的原始状态,好像没有执行任何语句。
理解 MySQL TRANSACTION 的最佳示例是同一家银行的 2 个账户之间的汇款。
想象一下,如果没有 TRANSACTION,这将如何工作?
假设借记成功,但贷记没有发生,可能是因为一些数据库问题。在这种情况下,数据库将处于不一致的状态。
因此,在这种情况下,客户的账户会借记,但其他客户的账户不会贷记。理想情况下,您希望此交易(包括信用卡和借记卡)发生,否则不会发生。即,在这种情况下,如果它是一个事务,那么失败的贷记将导致借记操作的回滚,并且不会对数据库状态进行更改。
现在让我们了解 MySQL TRANSACTION 有哪些属性以及我们如何实际使用它们。
MySQL 支持事务安全关系数据库管理系统的 ACID 属性。让我们简要地看一下这些属性。
A(原子性):事务通过运行 ALL 或 NONE 来支持原子性 - 即事务的所有语句都将被执行,或者它们都不执行。
C(Consistency): Consistency 属性确保数据库在事务完成之前和之后应该处于一致的状态。事务的原子性质支持这一点。
I(隔离): MySQL 提供了锁的概念以及事务。这确保了在事务执行期间,不会对该行数据进行其他操作。
D(Durability):持久性是指数据库从故障中恢复的能力。即即使存在系统故障,任何事务一旦成功应该能够应用更改。