MySQL事务

事务,可以理解为对于一系列对数据操作的一个集合。

四个特性(ACID)

原子性(Atomicity)

事务可以理解为一个集合,这个集合内的操作,要么全部被执行,要么全部没执行,不存在中间的状态。即如同原子一样,不可再分割。(比喻,可能发明这个词的时候还不知道原子是可以再分割的)

一致性(Consistency)

非强约束,类似于能量守恒,可以理解为逻辑或者业务的自洽性。例如银行转账,A转出100,则B增加100,或者库存,卖出一件商品,相应的库存应当减少一件,否则会出现业务上的不自洽。

隔离性(Isolation)

多个事务同时对数据进行读写和修改时,隔离性可以方式多个事务并发执行时由于交叉执行而导致的数据不一致。事务隔离有四个级别:读未提交(Read uncommitted)、读已提交(Read committed)、可重复读(Repeatable read)、串行化(Serializable)。

持久性(Durability)

事务处理完成后,对数据的修改是永久性的。

使用

所有的insert,update,delete语句,都可以认为是事务,只不过没有显式开启事务时,执行一条SQL语句时就自动提交,即每个事务只包含了一条语句,如果要将多个语句合并为一个事务,可以关闭自动提交,手动提交,或者显式开启事务。

显式开启事务

begin;
insert into mytable (name) values ('kk1');
insert into mytable (name) values ('kk2');
commit;
或者
rollback;

设置为手动提交

set autocommit=0;	(仅此次连接有效)
insert into mytable (name) values ('kk1');
insert into mytable (name) values ('kk2');
commit;
或者
rollback;

其他

查询是否开启自动提交

select @@autocommit;

show variables like '%autocommit%';

事务和自增

操作语句造成表自增时,事务回滚,自增不回滚。