1、事务简介
事务:是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失效。
默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式提交事务
2、事务操作
方式一:
开启一个事务之后数据并没有存入数据库中,只有提交commit事务之后,才能看到操作过的数据?
方式二
create table account(
id int auto_increment primary key comment '主键ID',
name varchar(10) comment '姓名',
money int comment '余额'
)comment '账户表';
insert into account (id, name, money) values (null,'张三',2000),(null,'李四',2000);
-- 恢复数据
update account set money=2000 where name='张三'or name='李四';
select @@autocommit;
set @@autocommit=1; -- 设置手动提交
-- 转账操作(张三给李四转账1000)
-- 1、查询张三账户余额
select money from account where name='张三';
-- 2、将张三余额-1000
update account set money =money-1000 where name='张三';
-- 3、将李四余额+1000
#update account 程序出错set money =money+1000 where name='李四';
update account set money =money+1000 where name='李四';
-- 提交事务
commit ;
-- 当事务报错时,先不要提交,此时先回滚事务
rollback;
-- 方式二
start transaction ;
-- 1、查询张三账户余额
select money from account where name='张三';
-- 2、将张三余额-1000
update account set money =money-1000 where name='张三';
-- 3、将李四余额+1000
# update account 程序出错set money =money+1000 where name='李四';
update account set money =money+1000 where name='李四';
-- 提交事务
commit;
# 回滚事务
rollback ;
3、事务四大特性
ACID
4、并发事务问题
脏读:一个事务读到另外一个事务还没有提交的数据。
不可重复性:一个事务读取同一条记录,但两次读取的数据不同,称之为不可重复读。
幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了”幻影“。
5、事务隔离级别
?MySQL中默认事务级别? Repeatable
# 查看事务级别
select @@transaction_isolation;
# 设置事务级别
set session transaction isolation level read uncommitted;
set session transaction isolation level repeatable read;
事务隔离级别越高,数据越安全,但是性能越低
|