MySQL原理---事务

75 阅读1分钟

一、事务的提出

购买商品时点击支付,并未付款,

思考此时数据库的变化是怎样的?


也就是说,某些时候,

需要我们确定某事物之后再更新数据库。

因此引入————事务(transaction)



二、transaction

创建一个钱包表:

请添加图片描述


开始一个事务:

START TRANSACTION;

让1号用户金额减50:

UPDATE wallet SET balance=balance-50 WHERE id=1;

让2号用户金额加50:

UPDATE wallet SET balance=balanc+50 WHERE id=2;

提交事务,完成转账操作:

COMMIT;

请添加图片描述


开始一个新的事务:

START TRANSACTION;
UPDATE wallet SET balance=balance+20;

不想进行当前操作时,进行事务回滚:

ROLLBACK;

此时数据表没有发生变化。

请添加图片描述


注意:一旦commit以后就不能再rollback回滚



三、rollback to回滚点

参考虚拟机中的快照、git中的回滚

开始一个事务:

START TRANSACTION;

在钱包表中插入一条数据:

INSERT INTO wallet VALUES(4,1000);

设置一个回滚点:

SAVEPOINT four;

再在钱包表中插入一条数据:

INSERT INTO wallet VALUES(5,199999);

设置下一个回滚点:

SAVEPOINT five;

此时发现第二次插入的数据不正确

回滚至上一个回滚点:

ROLLBACK TO four;

提交事务,完成操作:

COMMIT;


四、ACID

A:atomicity(原子性)

C:consistency(一致性)

I:isolation(隔离性)

D:durability(持久性)



五、注意

只有创建数据库时指定: 数据库引擎为 innodb 才能使用事务。