数据
事务(transaction)
事务(transaction)把好几处数据库改动捆成一个「要么全成、要么全不成」的单元:要么每一步一起成功,要么一步都不发生。这是数据库用来保证你绝不会卡在半途的办法——那些本该是一个不可分割动作的事,不会做到一半就停住。
最经典的例子是转账。转 100 元意味着从一个账户扣钱、并往另一个账户加钱——这两步必须成对出行。把它们裹进一个事务,万一第二步失败了(或者两步之间断了电),数据库会把第一步也倒回去。钱永远不会「移动到一半」——从一边消失了,却没到另一边。
实际操作中,你先 BEGIN 开启一个事务,做出改动,再 COMMIT 把它们一并锁定生效——或者一旦出岔子,就 ROLLBACK 把整批撤销。在你提交之前,这一切就当还没发生过,别的用户也看不到你做了一半的活儿。
BEGIN; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT;
两条更新在 COMMIT 时一起落地——若中途出错,则一条都不落地。
这种「全有或全无」的保证,就是 ACID 里的「A」(原子性)——ACID 是可靠的关系型数据库就事务做出的那一组承诺。
又称
另见