MySQL数据库事务

此篇内容是给自己总结一下最近的学习成果。

事务就是由一个或者多个sql语句组成,是作为一个整体,在执行的时候要么都执行成功,要么都执行失败。不可能存在说有执行成功也有执行失败。

数据是通过不同的存储引擎进行存储,然不同的存储引擎都有各自的特点。

在这里支持事务的有InnoDB

ps:我们可以通过 show engines  来查看mysql支持的存储引擎

 一、事务的特性

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

一致性  :指的是在数据进行操作时,保证数据在操作前以及操作后一致。

ps:如我们在买东西,付钱的状态,要么钱在我们这,还没付出去。要么钱在商家身上了,已经从我们这付出去了。而其他事务只能看到这俩个状态的其中一个。

隔离性  :多个事务同时操作相同数据库的同一个数据时,一个事务的执行不受另外一个事务的干扰。

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

二、事务的分类

隐式事务:没有明显的开启和结束事务的标志

我们在正常的对表中数据进行插入,更新,删除操作时,本质上就是一个事务,只不过是不需要提交  自动提交

显式事务:具有明显的开启和结束事务的标志

首先  对自动提交做出修改让它取消自动提交事务功能  set autocommit=0;

0:关闭 1:开启

接下来就是开启事务  start transaction;

此时我们可查询一下当前  提交事务的状态 SELECT @@autocommit;

如果  autocommit=0 则可以开始事务的进行

然后就是对事务的进行操作

结束事务   commit  在commit之前 相当于创建了虚拟的表,并在旧表的基础上执行事务的操作到虚拟表,当commit提交后,旧表的数据才正式为新的数据

回滚事务  rollback   就是之前的事务不执行,回滚到执行前的状态

 事务的并发问题
并发问题的产生   如何产生?

当多个事务同时操作同一个数据库的相同数据 便会产生

并发问题有哪些?

        - 脏读:一个事务读取到了另外一个事务未提交的数据
        - 不可重复读:同一个事务中,多次读取到的数据不一致
        - 幻读:一个事务读取数据时,另外一个事务进行更新,导致第一个事务读取到了没有更新的数据


如何处理并发问题?

设置隔离级别  在mysql中有四种事务的隔离级别,它们的作用就是隔离并发运行的事务,让它们不受其他事务影响

事务的隔离级别有哪些?

READ UNCOMMITTED
READ COMMITTED:可以避免脏读
REPEATABLE READ:可以避免脏读、不可重复读和一部分幻读
SERIALIZABLE:可以避免脏读、不可重复读和幻读

在mysql中  默认为第三种隔离级别

查看隔离级别

由于我的mysql版本比较靠近新版本     select  @@transaction_isolation

设置隔离级别

set session/global  transaction isolation level 隔离级别名;

 隔离级别越高,安全性也越高,但效率越低

这些便是本篇总结的知识了,各位看客也可以根据自己的实际例子进行操作 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值