事务
概念:事务就是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起项系统提交或撤销操作请求,记这些操作要么同时成功,要么同时失败。
一、事务的操作
1、事务语法
#①:开启事务:
start transaction;/begin;
#②:对数据的一系列操作:...例如:
delete table tb;
#③:提交事务:
commit;
#③:回滚事务:
rollback;
注解:
开启事务:顾名思义,当开启事务后,将会把运行的代码组成一个操作的集合,
提交事务:将操作集合提交,并运行,此时整个事务就已经结束了。
回滚事务:将操作集合进行回滚,将不会运行操作集合,此时整个事务已经结束了。
注意:
当你已经开启事务,并运行了事务的sql语句,当你在当前会话中进行查询时会发现此sql数据发生了变动,但是当你在其他的会话中再去查询时会发现此sql语句并没有发生变动。
二、事务的四大特性(面试常考题)
1.原子性
概念:事务是不可分割的最小操作单位,要么全部执行成功/失败(一荣俱荣,一损俱损)
2.一致性
事务完成时,必须使所有的数据都保持一致状态。
3.隔离性
数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
4.持久性
事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
三、并发事务问题
脏读:一个事务读到另一个事务还没有提交的数据。
不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同。
幻读:一个事物按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在。
(解决方法可以用对应的隔离级别去解决)
四、事务的隔离级别
语法:
使用语法:
查看事务隔离级别:
select @@transaction_isolation;
设置事务隔离界别:
set [session \ flobal] tansaction isolation level [事务隔离级别];
session:仅当前的会话窗口有效
flobal:对所有的会话窗口有效
事务的隔离级别:
read uncommitted:脏读 √ 不可重复读 √ 幻读 √;
read committed : 脏读 × 不可重复读 √ 幻读 √;
repeatable read(默认):脏读 × 不可重复读 × 幻读 √;
serializable:脏读 × 不可重复读 × 幻读 ×;
@、自动提交、手动提交
在提交事务、回滚事务时,你可能会好奇如果我不去提交事务或回滚事务那他将会如何?
这就要去了解一下自动提交和手动提交。
查看提交方式:select @@autocommit;
设置提交方式:set @@ autocommit =0(手动提交)/1(自动提交;默认);
自动提交
概念:自动提交是在你开启事务后,每执行一句sql语句就会自动提交
验证:
手动提交
概念:手动提交就是在开启事务后,除了你自己去提交事务、回滚事务或者直接关闭终止Mysql会话(默认回滚事务),他是不会提交或者回滚事务的。
验证:
总结
事务可以简单的理解为是一个函数,当使用时会将一个整体直接运行当此运行结果并不是直接想要的时候还可以进行事务的回滚,但是在使用的时候一定要注意事务的并发事务问题,对应的事务问题可以设置对应的事务的隔离级别,进行应对。