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 ;

你可能感兴趣的:(sql,学习,笔记)