数据库设计与事务处理

事务(transaction)其实就是一序列数据库命令,他们可以组合在一起当做一个单一逻辑单元

在一个事务被标记为完成之前(commited),任何改变可以被回滚(rolled back)

例子:转账,它可以包括(减少发送钱账户的金额量,增加收款人的金额量,给发送方和接收方都增加交易记录)

如果连接被打断,或者说一些操作失败了,所有的操作都需要被回滚

→ Total failure is better than partial failure

每一个事务的终止信号都是通过commit或者roll back来传达的,没有commit,我们做出的改变不会被保存

但其实Sesssions都是有自动提交功能(auto-commit)的,也就是任何命令都能被马上提交,不需要roll back和commit,这种auto-commit方式都是被默认的(set sutocommit = 0 关闭autocommit)

→ START TRANSACTION or BEGIN

BEGIN;

UPDATE accounts SET balance = balance - 100.00 WHERE acc_nr = 254231426;

UPDATE accounts SET balance = balance + 100.00 WHERE acc_nr = 676535301;

INSERT INTO transfers (acc_nr, amount, reference) VALUES (254231426, -100.00, ’Dentist’);

INSERT INTO transfers (acc_nr, amount, reference) VALUES (676535301, 100.00, ’John Smith’);

COMMIT;

同时事务:

复杂情况:多种同时事务

情况1:按顺序执行事务

  很简单去实行,在一些情况下工作的很好

  但是有时过慢了:

    CPU可以保持空闲当I/O转换过程中,反之亦然

    慢的语句可能会阻碍快的那个

    事务可能需要去等待用户输入

猜你喜欢

转载自www.cnblogs.com/northernmashiro/p/9153982.html