一、MySQL的事务处理

一、综述

事务就是将一组SQL语句放在同一批次内去执行。
如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。

注:MySQL事务处理只支持InnoDB和BDB数据表类型

比如你去银行转账,在数据库里面做了两件事:1、在你的银行账户里面减2000;2、在对方的账户里面增加2000。这是两个UPDATE语句,而这两个语句是需要当做一个整体来运行的。

二、事务的ACID原则

一、MySQL的事务处理_第1张图片
image.png

三、MySQL的事务实现方法

一、MySQL的事务处理_第2张图片
image.png

对于之前的单个SQL语句,每个SQL语句执行以后,它的影响就是持久的。每个SQL语句都是独立的单元,都直接被提交了。现在需要把几句SQL语句包在一起,当做一个字段,怎么办呢?
首先。以前的单个SQL语句之所以能够提交,并且对数据的影响是持久的是因为以前的每个SQL语句是默认自动提交的。现在想把这几条语句当做一个整体,需要先把SQL的自动提交关闭掉,这样子SQL语句就不会默认提交了。然后,把几句SQL语句当做一个整体。


一、MySQL的事务处理_第3张图片
image.png

一、MySQL的事务处理_第4张图片
image.png

四、示例

一、MySQL的事务处理_第5张图片
image.png

示例代码:

#使用事务模拟实现转账
CREATE TABLE account(
    id INT(4) PRIMARY KEY AUTO_INCREMENT,
    `name` VARCHAR(32) NOT NULL,
    cash DECIMAL(9,2) NOT NULL
)

INSERT INTO account(`name`, cash)
VALUES ('A', 2000),('B', 10000);


SET autocommit=0;
START TRANSACTION;
UPDATE account SET cash=cash-500 
WHERE `name`='A';
UPDATE account SET cash=cash+500 
WHERE `name`='B';
#commit;
ROLLBACK;
SET autocommit=1;

DELETE FROM account;

SELECT * FROM account;

执行顺序:1、SET autocommit=0;
2、START TRANSACTION;
3、执行update语句。
4、当执行ROLLBACK;的时候会回滚到start的位置,start之后的语句相当于全部都没有执行。

你可能感兴趣的:(一、MySQL的事务处理)