一、综述
事务就是将一组SQL语句放在同一批次内去执行。
如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。
注:MySQL事务处理只支持InnoDB和BDB数据表类型
比如你去银行转账,在数据库里面做了两件事:1、在你的银行账户里面减2000;2、在对方的账户里面增加2000。这是两个UPDATE语句,而这两个语句是需要当做一个整体来运行的。
二、事务的ACID原则
三、MySQL的事务实现方法
对于之前的单个SQL语句,每个SQL语句执行以后,它的影响就是持久的。每个SQL语句都是独立的单元,都直接被提交了。现在需要把几句SQL语句包在一起,当做一个字段,怎么办呢?
首先。以前的单个SQL语句之所以能够提交,并且对数据的影响是持久的是因为以前的每个SQL语句是默认自动提交的。现在想把这几条语句当做一个整体,需要先把SQL的自动提交关闭掉,这样子SQL语句就不会默认提交了。然后,把几句SQL语句当做一个整体。
四、示例
示例代码:
#使用事务模拟实现转账
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之后的语句相当于全部都没有执行。