浅谈数据库事务
SQL transactions are a crucial aspect of database management systems (DBMS) that ensure the integrity, consistency, and reliability of data. SQL事务是数据库管理系统(DBMS)的一个关键方面,可确保数据的完整性、一致性和可靠性。
显然,事务一词transaction即交易的同形异义词。这也是在促使人们联想到交易结果的一致性。
比如,A和B的手机绑定了同一张银行卡(余额100元),在同一时间,A打算花70元,B打算花40元,无论是对于A还是B或是银行而言,这两笔交易都是合理的,但要是同时执行(并发),那么对于银行来说就存在一些问题:
余额100元,同一时间,A的交易行为合理(70 < 100),B的交易行为合理(40 < 100),但是A和B共花费110元,银行自己倒贴了10元,如果A和B利用这个机制套现后,销户跑路,这不就丸辣?
继续假设,同一时间,有更多的并发行为,C往银行卡账户汇入若干钱,D使用该银行卡向其他银行转账……
随着并发量的提升,会使得交易的计算非常复杂且难以控制结果的准确性!从抽象层面而言这就是并发安全问题,解决并发问题有效手段就是——将并发行为串行化执行
!
而这就是所谓的数据库事务,A花费70元是一个事务,B花费40元是一个事务,尽管事务 A 和 B 可以几乎同时开始执行(并行),但它们的执行过程中会遇到锁机制,导致其中一个事务必须等待另一个事务完成才能继续执行(串行),无论是A事务先执行,还是B事务先执行,最终结果都不会有误了,因为余额已经发生了变化:
假设事务A先执行,之后余额30元,B的交易行为不合理(40 > 30)
假设事务B先执行,之后余额60元,B的交易行为不合理(70 > 60)
即使有再多的并发,只要事务单独被执行,交易的结果总是能保证正确性
由此可见,事务是数据库在并发场景下,保证数据正确性的处理方案!因此在讨论事务的时候,我们可以断言默认有一个并发的前提条件。