概念:事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向 系 统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 注意:默认MySQL的事务是自动提交的,也就是说,当执行完一条DML语句时,MySQL会立即隐 式的提交事务 create table account( id int primary key AUTO_INCREMENT comment 'ID', name varchar(10) comment '姓名', money double(10,2) comment '余额' ) comment '账户表'; insert into account(name, money) VALUES ('张三',2000), ('李四',2000); select * from account; -- 查询张三余额 select * from account where name='张三'; -- 张三用户减少一千 update account set money=money-1000 where name='张三'; -- 李四用户增加一千 update account1 set money=money+1000 where name='李四'; -- 查看事物的提交方式,1是自动提交,0是手动提交 select @@autocommit; -- 设置事物提交方法为手动,此为开启事务 set @@autocommit=0; -- 执行该单词才能提交,若有异常提交了则张三钱少了李四钱没多 -- 点此两处,数据会进入盘里,数据会改变,之前直接运行代码数据就会进盘 commit ; -- 若有异常则运行此单词回滚,则张三的一千会退回 rollback ;
事务的四大特性
原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。一个事务不可能只执行其中的一部分操作。
一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。如a向b转账,a不可能减少100后b没有增加100,或者转账中出现错误使a无缘无故损失100。
隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立 环境下运行。即并发执行的各个事务之间不能互相干扰,一个事务内部的操作及使用数据对其他并发事务是隔离的。
持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。接下来的其他操作不会对执行结果有任何影响,此时即使系统崩溃数据也不会丢失。
隔离级别
隔离级别 脏读 不可重复读 幻读
Read uncommitted √ √ √
Read committed × √ √
Repeatable Read(默认) × × √
Serializable × × ×
查看事物的隔离级别
select @@transaction_isolaciton;
设置事物的隔离级别
SET -- 设置
[ SESSION | GLOBAL ] -- session:一次会话; global:全局有效
TRANSACTION ISOLATION LEVEL
READ UNCOMMITTED |
READ COMMITTED |
REPEATABLE READ |
SERIALIZABLE