
Isolatin:隔离性,MySQL支持多事务并发工作,某个事务工作的时候不能受到其他事务的影响;
Durability:持久性,当事务提交成功之后,此次事务操作的所有数据都需要永久保存。
-- 开启事务
begin/start transaction;
-- 对数据库的DML操作
insert...
update...
delete...
-- 事务提交
commit;
-- 事务回滚;
rollback;
比如在MySQL中模拟转账的操作。
create table user(
id int primary key auto_increment,
name char(16),
balance int
);
insert into user(name,balance) values('python',100),('java',100);
-- 先开启事务
start transaction;
-- 书写事务的多条sql语句
update user set balance=900 where name='python';
update user set balance=1010 where name='java';
-- 回滚
rollback;
-- 确认事务
commit;
在执行DML语句的时候会自动在DML语句之前加一个begin,结束会自动加commit,但是在交易类的场景下自动提交事务是不安全的,可以通过修改MySQL的参数将DML语句设置为不自动提交。
-- 如果在autocommit=1的时候没有加begin(没有显式的开启事务),在执行dml语句的时候会自动在这个dml语句自动之前加一个begin,结束会自动加commit;
select @@autocommit;
-- 临时生效:DML语句不自动提交
set global autocommit=0;
-- 永久生效,需要修改mysql的配置文件,需要重启mysql服务
vim /etc/my.conf
[mysqld]
autocommit = 0
当事务非正常关闭时,比如数据库宕机了、事务语句执行失败,这种情况下就会触发隐式回滚。
select @@transaction_isolation; -- 查看默认的隔离级别
set global transaction_isolation='read_uncommited'; -- 参数修改,是临时的,只在当前会话有效
在详细介绍隔离级别之前,需要先了解几个概念:
SR(serializable….)可串行化:出现的问题:以上问题都可以避免,但是不利于事务的并发
转载请注明:XAMPP中文组官网 » MySQL之事务和事务隔离级别