赞
踩
事务:是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失效。
默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式提交事务
方式一:
开启一个事务之后数据并没有存入数据库中,只有提交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 ;
-
-
ACID
脏读:一个事务读到另外一个事务还没有提交的数据。
不可重复性:一个事务读取同一条记录,但两次读取的数据不同,称之为不可重复读。
幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了”幻影“。
MySQL中默认事务级别 Repeatable
- # 查看事务级别
- select @@transaction_isolation;
-
- # 设置事务级别
- set session transaction isolation level read uncommitted;
-
- set session transaction isolation level repeatable read;
事务隔离级别越高,数据越安全,但是性能越低
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。