D011MySQL学习笔记-事务

五迷三道 提交于 2019-12-05 11:03:45

一、基本介绍

1、概念

如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败;

 

2、操作

①开启事务:start transaction;

②回滚:rollback;

③提交:commit;

案例:

 

3、MySql数据库中事务默认自动提交

事务自动提交:一条DML(增删改)语句会自动提交一次事务;

事务手动提交:手动开启事务(start transaction),需要手动提交(commit);

修改事务的默认提交方式:

-- 查看默认的提交方式
select @@autocommit; -- 1代表自动提交 0代表手动提交

-- 修改默认的提交方式
set @@autocommit = 0;

 

二、事务的四大特征(常见面试题)

1、原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败;

2、持久性:当事务提交或回滚后,数据库会持久化地保存数据;

3、隔离性:多个事物之间相互独立;(实际上,多个事物之间会产生影响,需要进行手动隔离(类似Java多线程里面,需要锁机制))

4、一致性:事务操作前后,数据总量不变;

 

三、事务的隔离级别(了解)

1、概念:

多个事务之间是相互独立的,但是多个事务同时操作同一批数据则会引发一些问题,设置不同的隔离级别就可以解决这些问题;

 

2、存在问题

①脏读:一个事务读取到另一个事务中没有提交的数据;

②不可重复读(虚读):在同一个事务中,两次读到的数据不一样;

③幻读:一个事务(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改;

 

3、4 大隔离级别

①read uncommited:读未提交

产生的问题:脏读、不可重复读(虚读)、幻读;

②read commited:读已提交

产生的问题:不可重复读(虚读)、幻读;

③repeatable read:可重复读(MySql默认)

产生的问题:幻读;

④serializable:串行化

可以解决所有问题;

注意:隔离级别越高,则安全性越高,但效率越低;

 

4、设置数据库隔离级别

查询数据库隔离级别:

select @@tx_isolation;

设置数据库隔离级别:

set global transaction isolation level 级别字符串;

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!