SQL学习笔记6
事务
1、事务的概念
事务就是多个操作的集合,事务将这一串操作作为一个整体向数据库提交,要么同时操作成功,要么同时失败
在输入DML语句时,MySQL是自动将事务提交,因此要操作事务时需要手动开启
事务操作流程为:
开启事务
(若中间有错,则回滚复原并报错)
结束事务
2、事务操作
事务操作有两种方式
方式一:关闭事务自动提交,改为手动提交
查看事务提交方式:select @@ autocommit
设置事务提交方式:set @@ autocommit = 0[1]#1为自动,0为手动
提交事务:commit
回滚事务:rollback
select @@autocommit;
set @@autocommit=0;
set @@autocommit=1;
update account set deposit =deposit-1000 where name='张三';
产生错误...
update account set deposit =deposit+1000 where name='李四';commit;
rollback ;
方式二:使用关键字start transaction/begin
开启事务:start transaction/begin
提交事务:commit
回滚事务:rollback
start transaction ;
update account set deposit =deposit-1000 where name='张三';
产生错误...
update account set deposit =deposit+1000 where name='李四';
rollback ;
commit;
3、事务的四大特性
事务的四个特性,合成ACID,分别指
A:原子性:事务是最小操作单元,同一个事务下的操作要么全成功,要么全失败
C:一致性:事务完成后,表里的数据状态保持一致
I:隔离性:数据库系统有隔离机制,并行事务之间相互独立,事务不会受外界影响
D:持久性:事务一但提交或回滚,则对数据库永久改变
4、并发事务
在运行并发事务时,会遇到三大问题,分别是:
脏读:一个事务读到另一个事务还没提交的数据(购物网站有时点进了还没发布产品的页面)
不可重复读:一个事务两次读取一样的记录,但读取的数据不一样(双十一购物,买的时候有余货,付款的时候没了)
幻读:一个事务读取数据时发现没有对应行,在插入数据时又报错说对应行存在(输入密码-密码错误-更改密码-不能输入与原密码相同的密码)
解决这三大问题可以通过更改事务隔离级别,SQL有四个等级的隔离级别,从上到下依次为:
read uncommitted :会出现问题:脏读,不可重复读,幻读
read committed(oracle默认等级):会出现问题:不可重复读,幻读
repeatable read(MySQL默认等级):会出现问题:幻读
serializable:不会出现问题
上述等级从上到下隔离等级越高,性能越差
隔离等级本质上是禁止数据库的一些并行操作,到serializable等级数据库一次只允许操作一条事务
查看数据库当前事务隔离级别:select @@ transaction_isolation;
select @@transaction_isolation;
更改数据库事务隔离级别:set [session(更改当前会话)/global(更改全局)] transaction isolation level 事务隔离等级
set transaction isolation level repeatable read ;