栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【数据库】-----03初识MySQL(事务)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数据库】-----03初识MySQL(事务)

文章目录
  • 一、什么是事务
  • 二、事务的四大特性
  • 三、事务的隔离级别
    • 查看事务当前隔离级别
    • 设置当前mySQL连接的隔离级别
    • 设置数据库系统的全局的隔离级别
  • 四、事务的创建


一、什么是事务

  事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行错误或执行失败,整个单元将会回滚。所受到影响的数据将返回到事务开始以前的状态;如果单元中的所有SQL语句执行成功,则事务被顺利执行。

二、事务的四大特性

原子性:
  指事务是一个不可分割的工作单位,事务中的操作要么全部发生,要么全部不发生

一致性:
  事务必须使数据从一个一致状态变换到另一个一致状态

隔离性:
  事务的执行不能被其他事务干扰,并发执行的各个事务之间不能相互干扰

持久性:
  指一个事务一旦提交,它对数据库中数据的改变是永久性的。接下来的其他操作和数据库故障不对其有任何影响

三、事务的隔离级别

  对于同时运行的多个事务,当这些事务访问数据库中相同数据时,如果没有采取必要的隔离机制,就会导致各种并发问题

隔离级别是否允许脏读是否允许不可重复读是否允许幻读
read -uncommitted(读未提交数据)YYY
read- committed(读已提交数据)NYY
repeatable -read(可重复读)NNY
serializable(串行化)NNN

MySQL支持4种隔离级别,默认事务隔离级别为:repeatable -read

1、脏读
  事务A对数据库中数据进行了增、删或改,未提交事务。事务B可以读到事务A未提交的数据,如果事务A进行了回滚,那么事务B读到的这个数据就是脏数据

2、不可重复读
  事务A读取了一个字段后,事务B更新了该字段,当事务A再次读取该字段时该字段发生了变化,使得事务A两次读取相同字段,值不相同。

不可重复读关注点在数据更新和删除,通过行级锁可以实现可重复读的隔离级别。

3、幻读
  当事务A在读取某个范围内的记录时,事务B又在该范围内插入了新的记录,当事务A再次读取该范围的记录时,会产生幻行。

  相对于不可重复读,幻读更关注其它事务的新增数据。通过行级锁可以避免不可重复读,但无法解决幻读的问题,想要解决幻读,只能通过Serializable隔离级别来实现

查看事务当前隔离级别

  每启动一个mysql程序,就会获得一个单独的数据库连接,每一个数据库连接都有一个全局变量@@tx_isolation,表示当前的事务隔离级别

MySQL支持4种隔离级别,默认事务隔离级别为:repeatable -read

mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
设置当前mySQL连接的隔离级别
mysql> set session transaction isolation level read uncommitted;
设置数据库系统的全局的隔离级别
mysql> set global transaction isolation level read uncommitted;
四、事务的创建

  MySQL默认操作模式为自动提交模式,除非显示的开启一个事务,否则每个查询都被当成一个单独的事务自动执行。可以通过设置autocommit的值改变默认的提交模式。

显式事务:
事务具有明显的开启和结束的标记
前提:必须先设置自动提交功能为禁用
步骤:

步骤1:开启事务
set autocommit=0;
start transaction;(可写可不写)
步骤2:编写事务中的SQL语句(增、删、改、查)
语句1;
语句2;
……
步骤3:结束事务(选其一)

commit;提交事务
rollback;回滚事务

添加保存点:
  savepoint 节点名;设置保存点,只搭配(ROLLBACK TO 节点名;)使用

SET autocommit=0;
START TRANSACTION;
DELETE FROM account WHERe id=25;#删了
SAVEPOINT d;#设置保存点
DELETe FROM account WHERe id=52;#没删
ROLLBACK TO d;#回滚到保存点

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/677296.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号