MySQL学习5:事务、存储引擎

2023-11-02

事务

简介

事务是一组数据库操作的执行单元,它要么完全执行,要么完全不执行。事务是确保数据库中的数据一致性和完整性的重要机制之一。

事务具有以下四个特性(称为ACID特性):

  1. 原子性(Atomicity):事务作为一个整体被执行,要么全部操作成功,要么全部操作失败。如果事务中的任何操作失败,那么整个事务将被回滚到初始状态。

  2. 一致性(Consistency):事务的执行不会破坏数据库的完整性约束。在事务开始之前和结束之后,数据库必须保持一致状态。

  3. 隔离性(Isolation):事务的执行是相互隔离的,即一个事务的操作不会被其他并发事务所干扰。每个事务都应该感知不到其他并发事务的存在。

  4. 持久性(Durability):一旦事务提交,其结果应该永久保存在数据库中,即使在系统故障或重启后也不能丢失。

通过使用事务,可以确保数据库操作的安全性和一致性,从而提供可靠的数据处理机制。在MySQL中,可以使用事务来对一系列SQL语句进行分组和控制。

语法

默认MySQL的事务是自动提交的,也就是当执行一条DML语句后,MySQL会立即隐式的提交事务。
因此我们使用事务时需要手动开启事务、提交事务,当出现异常后,回滚事务。

示例:比如张三给李四转账。转账成功时张三的钱会减少,李四的钱会增多;转账失败,双方的钱都不能发生变化。
也就是上面说的要么完全执行,要么完全不执行。不能够出现张三钱减少了,但是李四的钱没有增多的情况。

语法

-- 开启事务
begin
	
-- 如果执行成功则: 提交事务  commit;
-- 如果执行失败则: 回滚事务  rollback;
		
-- 结束事务
end

可以在业务代码里使用try-catch 来判断有没有执行成功。

并发事务问题

  • 脏读:当一个事务读取了另一个事务尚未提交的数据,然后该事务回滚,导致读取的数据是无效或错误的。
  • 不可重复读:一个事务在读取一个数据项之后,另一个事务修改了该数据项并提交,导致第一个事务再次读取时得到不同的结果。
  • 幻读:一个事务在读取了一批数据后,另一个事务插入了新的数据项并提交,导致第一个事务再次查询时发现多了一些之前不存在的数据。
  • 丢失更新:两个事务同时更新同一行数据,其中一个事务的更新结果被另一个事务覆盖,导致更新的结果丢失。

事务隔离

为了解决这些并发事务问题,MySQL提供了多种隔离级别,包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。不同的隔离级别可以根据具体的应用场景选择,以平衡并发性能和数据一致性的需求。

其中在MySQL中 ,可重复读是默认隔离
在这里插入图片描述
查看事务隔离级别

select @@transaction_isolation;

在这里插入图片描述
设置事务隔离级别

// 读未提交(Read Uncommitted):
   SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

// 读已提交(Read Committed):
   SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

// 可重复读(Repeatable Read):
   SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

//串行化(Serializable):
   SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;

这些命令可以在事务开始前执行,以设置事务的隔离级别。请注意,设置事务隔离级别的命令只对当前会话有效,不会影响其他会话的隔离级别。另外,MySQL也支持在创建表或启动服务器时通过配置文件来设置默认的隔离级别。

存储引擎

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以被称为表类型。

查看当前表的存储引擎
我们可以通过show create table 表名来查看表使用的存储引擎

在这里插入图片描述
查看所有的存储引擎

show engines;

在这里插入图片描述

InnoDB

简介
InnoDB 是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL 5.5之后,InnoDB 是默认的MySQL存储引擎。

特点:

  • DML操作遵循ACID模型,支持事务
  • 行级锁,提高并发访问性能
  • 支持外键约束,保证数据的完整性和正确性

文件
xxx.idb:xxx代表的是表名,innerDB引擎的每张表都会对应这样的一个表空间文件,存储该表的表结构、数据和索引

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL学习5:事务、存储引擎 的相关文章

  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • MySQL MIN/MAX 所有行

    我有桌子Races与行ID Name and TotalCP 我选择分钟 TotalCP FROM Races 但是我想选择具有最小值的整行 我如何在单个查询中做到这一点 从聚合值获取整行的一般形式是 SELECT FROM Races W
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • 即使使用“autoReconnect=true”,MySql JDBC 也会超时[重复]

    这个问题在这里已经有答案了 有时 我的 Java Tomcat6 Debian Squeeze 应用程序无法与 MySql 服务器通信 Tomcat 应用程序位于前端服务器上 而 MySql 位于单独的 仅限 MySql 的机器上 一个典型
  • Mysql 将 int 转换为 MAC

    我有一些数据可以转换 其中有 2 列 其中一列有 IP 它包含整数值 我在 mysql 查询中使用了以下函数 是否有一个函数可以用来转换我的 mac 列 其中包含整数和数据类型是bigint to MAC地址 SELECT INET NTO
  • Flask-login:无法理解它是如何工作的

    我试图理解如何Flask Login https flask login readthedocs org en latest works 我在他们的文档中看到他们使用预先填充的用户列表 我想使用数据库存储的用户列表 但是 我不明白其中的一些
  • 如何将ElasticSearch与MySQL集成?

    在我的一个项目中 我计划将 ElasticSearch 与 MySQL 结合使用 我已经成功安装ElasticSearch 我可以单独管理ES中的索引 但我不知道如何用 MySQL 实现同样的功能 我读过一些文件 但我有点困惑 没有明确的想
  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • 显示标准化数据

    跟进问题 添加 2 个不同表的总和 https stackoverflow com questions 39717541 adding sum from 2 different tables 我创建了3个表 members videos v
  • 海量记录的bulk_create最佳实践

    I use bulk create将 1 mio 记录插入到新表中 需要 80 秒 Django 只使用一个 CPU 核心 大约 25 CPU 但没有一个核心达到 100 我相信有改进的潜力 这是代码 class Stock models
  • 合并两个 MYSQL SELECT 查询[重复]

    这个问题在这里已经有答案了 可能的重复 如何将两个 Post Category 表 MYSQL SELECT 查询合并为一个 https stackoverflow com questions 12972130 how to combine
  • Google Cloud SQL 在重新启动时卡住

    我的云 sql 实例长时间处于重新启动状态 在操作窗格中 重新启动的状态显示为待处理 并且还发生了导出 其状态仍为Running 有没有办法可以强制重新启动或取消重新启动或从常规备份中恢复数据 不 没有办法 如果您向 Google 支付高级
  • PHP PDO 使用 bindParam 第一个参数(不带冒号)[重复]

    这个问题在这里已经有答案了 请检查这个 user id int GET user id sql DELETE FROM users WHERE user id user id query db gt prepare sql query gt
  • 在 jQuery AJAX 成功中从 MySql 获取特定响应

    好吧 我有这个 ajax 代码 它将在 Success 块中返回 MySql 的结果 ajax type POST url index php success function data alert data My Query sql SE
  • ORDER BY 字段内的 MySQL 子查询。 (没有内连接)

    有很多与此相关的问题 但都具有使用内部联接的相同答案 这 我认为 在这里是不可能的 如果我错了请告诉我 我现在正在做的是调用两个不同的 mysql 查询来获取结果 它工作完美 db gt query SELECT FROM meta WHE
  • 如何在MYSQL中将整个字符串小写并保持第一个大写[重复]

    这个问题在这里已经有答案了 我的表栏目 我预期的输出会在列中发生变化 Smith Allen Doyle Dennis Baker Waker 这是我尝试过的 但不起作用 UPDATE TABLE employee SET last nam

随机推荐

  • Android的ScrollView简单使用实例(附Demo)

    目录 1 垂直滚动 Scroll 2 水平滚动 HorizontalScrollView Demo地址 https github com zGuangYuan Androidstudio example 垂直滚动 Scroll 水平滚动 H
  • Android开机流程(一)

    参考文章 Android系统开篇 一 概述 简单梳理下Andorid启动流程 一般操作系统启动流程如下图 Android系统启动流程概览 system server服务启动流程 启动过程 Loader gt Kernel gt Native
  • JSP数据交互(一)---内置对象》request(乱码解决)理解原理解决乱码问题

    Jsp内置对象之out JSp内置对象是Web容器创建的一组对象 没有进行声明创建但却可以使用out对象 不经常使用的内置对象 pageContext 内置对象的集大成者 config 指定Jsp页面初始配置的 Servlet page 当
  • C语言-----标识符、关键字、常量、变量

    这篇文章主要对C语言的标识符 关键字 常量 变量的一些细致知识点进行详细的讲解 比如 1 标识符的命名规范 也就是常量 变量 函数名的命名规则进行规范的讲解 2 C语言的关键字列表 3 常量的定义及其分类 4 对全局变量和局部变量的细节知识
  • 带你掌握Vue3新宠——快速Diff算法

    前言 我们都知道Vue 2中用的diff算法是双端Diff 而Vue 3的其中一个特性就是把底层的diff算法改成了快速Diff 与字面意思一样 快速diff是目前已知的最快的diff算法 本文将带大家解剖一下快速diff的原理 预处理 在
  • 常用服务器命令

    ssh 用户名 服务器地址 密码 nvidia smi查看当前显卡状态11 top 用户使用进程 Q 推出top CUDA VISIBLE DEVICESE 2 3 nohup python u test py gt test log 2
  • notepad++ json 排版插件 NPPJSONViewer dll

    将下载的32位或者64位插件dll文件拷贝到notepad 安装目录Notepad plugins 下面 例如我的目录 C Program Files Notepad plugins 拷贝后 或者在此路径下新建一个文件夹 重启notepad
  • cart回归树备忘录

    Cart回归树相关 决策树回顾 Cart树 分类树 回归树 最小二乘回归树 决策树回顾 1 决策树进化 ID3 C4 5 Cart 提问 异同点 2 决策树节点分裂评估准则 分类 信息增益 信息增益比率 gini系数 回归 MSE 提问 优
  • Python3,掌握这4个自动化脚本,让工作效率提升200%。

    4个自动化脚本 1 引言 2 自动发送多封邮件 2 1 模块介绍 2 2 代码实战 3 自动桌面提示 3 1 模块介绍 3 2 代码实战 4 自动生成素描草图 4 1 模块介绍 4 2 代码实战 5 自动化阅读网页新闻 5 1 模块介绍 5
  • kafka在Linux上的安装 运行,Linux下Kafka单机安装配置

    说明 操作系统 CentOS 6 x 64位 Kafka版本 kafka 2 11 0 8 2 1 实现目的 单机安装配置kafka 具体操作 一 关闭SELINUX 开启防火墙9092端口 1 关闭SELINUX vi etc selin
  • 8086汇编语言:标志寄存器的各个标志位的详细介绍

    一 基本介绍 CPU的内部的寄存器中 有一类特殊的寄存器 对于不同的处理机 其个数和结构都可能不同 它具有以下三种作用 这种特殊的寄存器在8086CPU中 被称为标志寄存器flag 8086CPU的标志寄存器有16位 其中存储的信息通常又被
  • 电路中VCC VDD VSS VEE GND的含义

    在电路中 芯片引脚经常会出现VCC VDD VSS VEE和GND这些标示 其中VCC一般表示通用芯片的电源引脚 比如一些模拟运放的正电源引脚 74系列数字芯片的电源引脚 VCC一般接相应的正电源电压 VDD一般表示数字芯片的电源引脚 如果
  • 手写Promise

    Promise是JS进行异步操作的重要API 也是开发基本上绕不开的技术 所以很有必要对其进行深入的了解 本文我们就 一步步手动实现Promise的相关功能 Promise属性和构造函数 原生功能 Promise对象的属性 验证原生Prom
  • python 工具变量回归_工具变量多重高维固定效应ivreghdfe

    Stable versionTo install reghdfe open Stata and run ssc install reghdfeNote that reghdfe requires at least Stata 11 2 an
  • win10启动项_win10系统开机启动项的设置教程

    小编给大家详解win10系统开机启动项的设置教程 使用win10系统过程中 有时会遇到启动项过多影响开机速度的问题 为此事困扰的用户 可参照以下的方法进行开机启动项的设置 win10系统的开机启动项如果过多的话 就会影响电脑的开机速度 其实
  • 计算机专业毕业设计一

    概述 从一个医学生转行成为一名程序员 对于我来说 是一个超前的跨越 好奇的朋友会问了 医学这么吃香的行业 怎么转行做码农呢 这个道理很简单 就是想象和显示差距太大了 距离梦想的专业差了点距离 请允许我去小黑屋哭上半个小时 想当年 我意气风发
  • JSP与Servlet之间的值传递种种

    这几天搞那个网上书店的过程中对JSP河Servlet有有了很多的认识 恩 下面是我遇到的问题解决了以后总结了一下 希望对大家有用吧 JSP与 servlet之间的传值有两种情况 JSP gt servlet servlet gt JSP 通
  • HTTPSConnectionPool(host='xxxxx', port=443): Max retries exceeded with url:xxxxxxxx (Caused by Ne...

    requests exceptions ConnectionError HTTPSConnectionPool host baike baidu com port 443 Max retries exceeded with url http
  • 提升mysql服务器性能(分库、分片与监控)

    节点一的建立 节点2 3 也要建立
  • MySQL学习5:事务、存储引擎

    事务 简介 事务是一组数据库操作的执行单元 它要么完全执行 要么完全不执行 事务是确保数据库中的数据一致性和完整性的重要机制之一 事务具有以下四个特性 称为ACID特性 原子性 Atomicity 事务作为一个整体被执行 要么全部操作成功