事务"/>
数据库之事务
数据库之事务
事务的特点:
ACID
原子性
一致性:数据库的完整性约束,不能被破坏
隔离性
持久性:数据一旦提交,事务的效果将会被永久的保留在数据库中。而且不会被回滚
主从复制
高可用
备份
权限控制
脏读:另外一个事务能够看到另一个事务未提交的修改结果
事务隔离级别的作用范围:
1、全局级:对所有的会话有效
2、会话级:只对当前的会话有效
show global variables like ‘%isolation’;:查询全局事务的隔离级别
select @@global.txisolation;:查询全局事务的隔离级别
show session variables like ‘%isolation’;:查询会话事务的隔离级别
select @@session.txisolation;:查询会话事务的隔离级别
设置全局事务的隔离级别:
set global transation isolation level read uncommitted;
临时修改全局事务的隔离级别,重启服务即失效:
set @@global.tx_isolation=’read uncommitted’;
设置会话的隔离级别:
set session transation isolation level read uncommitted;
设置临时会话的隔离级别:
set @@session.tx_isolation=’read uncommitted’;
不可重复读:一个事务内,多次读同一数据
前一个事务还没有结束,另一个事务也访问该数据
在一个事务之内,两次查询到结果不一致,读不到相同的数据内容
幻读:一个事务对一个表中的数据进行了修改,可能会涉及到表中的全部数据。
另一个事务也修改了表中的数据。
例如插入了一行新的数据,前一个事务会发现表中还有数据没有修改,类似于幻觉
丢失更新:两个事务同时修改一条记录,A先记录,B也修改了记录,B一旦提交会覆盖A的结果
面试题:
以上这些情况如何避免:
1、权限控制
2、根据情况来使用隔离级别
生产环境----最好是提交读
测试环境----无所谓
3、生产环境只能允许一个人对一个事务进行操作。其他人不允许操作
总结:在事务管理中,原子性是基础,隔离性是手段,一致性是目的 持久性是最终的结果
事务的控制语句:
BEGIN:显示的开启事务
START transaction:显示的开启事务
commit:提交事务
commit work:提交事务
rollback:回滚(撤销正在进行的所有未提交的修改)
rollback work:回滚(撤销正在进行的所有未提交的修改)
savepoint s1;:创建回滚点,一个事务可以有多个回滚点
rollback to s1;:回滚到还原点
注意:
1、多点还原,s1和s2
如果说还原到s1
mysql提交事务是默认提交
可以用set来设置mysql的提交方式:
show variables like ‘autocommit’;
set autocommit=0;
默写:
1、AICD:分别是什么
A:原子性
C:一致性
I:隔离性
D:持久性
2、mysql支持的隔离级别分别是什么?
未提交读
可重复读
提交读
串行读
3、脏读,幻读,不可重复读和丢失更新怎么预防?
权限控制
设置合理的隔离级别
生产中主要还是串行读
更多推荐
数据库之事务
发布评论