MySQL事务+存储引擎

news2024/11/14 10:22:20

文章目录

  • MySQL事务+存储引擎
    • 1 事务
      • 1.1 事务的概念
      • 1.2 事务的ACID特点
      • 1.3 导致问题
      • 1.4 事务控制语句
        • 1.4.1 查看修改隔离级别
        • 1.4.2 使用set设置控制事务
        • 1.4.3 查看事务自动提交功能
    • 2 存储引擎
      • 2.1 存储格式
      • 2.2 常用存储引擎
      • 2.3 查看表使用的存储引擎
      • 2.4 修改存储引擎
      • 2.5 InnoDB行锁与索引的关系

MySQL事务+存储引擎

1 事务

1.1 事务的概念

事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求

即这一组数据库命令要么都执行,要么都不执行
事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元
事务适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等
事务通过事务的整体性以保证数据的一致性
事务能够提高在向表中更新和插入信息期间的可靠性

1.2 事务的ACID特点

  • 原子性
    • 事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生

A给B转帐100元钱的时候只执行了扣款语句,就提交了,此时如果突然断电,A账号已经发生了扣款,B账号却没收到加款,在生活中就会引起纠纷。这种情况就需要事务的原子性来保证事务要么都执行,要么就都不执行。

  • 一致性
    • 在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏

对银行转帐事务,不管事务成功还是失败,应该保证事务结束后表中A和B的存款总额跟事务执行前一致。

  • 隔离性
    • 在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间
  • 持久性
    • 在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚
总结:在事务管理中,原子性是基础,隔离性是手段,一致性是目的,持久性是结果

1.3 导致问题

当多个客户端并发地访问同一个表时,可能出现下面的一致性问题:
(1)脏读:当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

(2)不可重复读:指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。(即不能读到相同的数据内容)

(3)幻读:一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,另一个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,操作前一个事务的用户会发现表中还有一个没有修改的数据行,就好象发生了幻觉一样。

(4)丢失更新:两个事务同时读取同一条记录,A先修改记录,B也修改记录(B不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。

事务的隔离级别决定了事务之间可见的级别

MySQL事务支持如下四种隔离,用以控制事务所做的修改,并将修改通告至其它并发的事务:

(1)未提交读(Read Uncommitted(RU)):
允许脏读,即允许一个事务可以看到其他事务未提交的修改。

(2)提交读(Read Committed(RC)):
允许一个事务只能看到其他事务已经提交的修改,未提交的修改是不可见的。防止脏读。

(3)可重复读(Repeatable Read(RR)):—mysql默认的隔离级别
确保如果在一个事务中执行两次相同的SELECT语句,都能得到相同的结果,不管其他事务是否提交这些修改。可以防止脏读和不可重复读。

(4)串行读(Serializable):—相当于锁表
完全串行化的读,将一个事务与其他事务完全地隔离。每次读都需要获得表级共享锁,读写相互都会阻塞。可以防止脏读,不可重复读取和幻读,(事务串行化)会降低数据库的效率。

mysql默认的事务处理级别是 repeatable read ,而Oracle和SQL Server是 read committed 。

1.4 事务控制语句

BEGIN 或 START TRANSACTION:显式地开启一个事务

COMMIT 或 COMMIT WORK:提交事务,并使已对数据库进行的所有修改变为永久性的

ROLLBACK 或 ROLLBACK WORK:回滚会结束用户的事务,并撤销正在进行的所有未提交的修改

SAVEPOINT S1:使用 SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个 SAVEPOINT;“S1”代表回滚点名称

ROLLBACK TO [SAVEPOINT] S1:把事务回滚到标记点

1.4.1 查看修改隔离级别

#查看当前的隔离级别
show session variables like '%isolation%';
 
修改隔离级别
set session transaction isolation level read committed;

在这里插入图片描述

1.4.2 使用set设置控制事务

SET AUTOCOMMIT=0;						#禁止自动提交
SET AUTOCOMMIT=1;						#开启自动提交,Mysql默认为1
SHOW VARIABLES LIKE 'AUTOCOMMIT';		#查看Mysql中的AUTOCOMMIT值

如果没有开启自动提交,当前会话连接的mysql的所有操作都会当成一个事务直到你输入rollback|commit;当前事务才算结束

当前事务结束前新的mysql连接时无法读取到任何当前会话的操作结果。
如果开起了自动提交,mysql会把每个sql语句当成一个事务,然后自动的commit
当然无论开启与否,begin; commit|rollback; 都是独立的事务

1.4.3 查看事务自动提交功能

show variables like 'autocommit';

在这里插入图片描述


2 存储引擎

2.1 存储格式

(1)静态(固定长度)表
静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。
 
(2)动态表
动态表包含可变字段,记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁的更新、删除记录会产生碎片,需要定期执行 OPTIMIZE TABLE 语句或 myisamchk -r 命令来改善性能,并且出现故障的时候恢复相对比较困难。
 
(3)压缩表
压缩表由 myisamchk 工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。

2.2 常用存储引擎

  • InnoDB

    • 支持事务、外键约束,支持行级锁定(在全表扫描时仍然表级锁定)
    • 读写并发能力较好,在5.5版本才支持全文索引,缓存能力较好可以减少磁盘IO的压力,数据和索引是存储在一个文件中。
    • 使用场景:适用于一致性要求较高,数据频繁更新,高并发读写的业务场景
  • MyISAM

    • 不支持事务、外键约束,只支持表级锁定
    • 适合单独的查询或写入,读写并发能力较差,支持全文索引,占用资源较小适合硬件资源相对比较差的服务器使用,数据和索引是分开存储的。
    • 使用场景:适用于不需要事务处理,单独的查询或插入数据的业务场景
#查看系统支持的存储引擎
show engines;

2.3 查看表使用的存储引擎

方法一:
show table status from 库名 where name='表名'\G
 
方法二:
use 库名;
show create table 表名;

在这里插入图片描述
在这里插入图片描述

2.4 修改存储引擎

方法一:
通过 alter table 修改
use 库名;
alter table 表名 engine=MyISAM;
 
eg:
alter table member engine=myisam;
show create table member;

在这里插入图片描述
在这里插入图片描述

方法二:
通过修改 /etc/my.cnf 配置文件,指定默认存储引擎并重启服务
vim /etc/my.cnf
......
[mysqld]
......
default-storage-engine=INNODB
 
systemctl restart mysql.service
注意:此方法只对修改了配置文件并重启mysql服务后新创建的表有效,已经存在的表不会有变更。

在这里插入图片描述

方法三:
通过 create table 创建表时指定存储引擎
use 库名;
create table 表名(字段1 数据类型,...) engine=MyISAM;
 
 
eg:
create table qzz(name varchar(10),age char(4)) engine=myisam;
show create table qzz\G;

在这里插入图片描述

2.5 InnoDB行锁与索引的关系

1)
delete from t1 where id=1;	
如果id字段是主键,innodb对于主键使用了聚簇索引,会直接锁住整行记录。
 
2)
delete from t1 where name='aaa';
如果name字段是普通索引,会先锁住索引的两行,接着会锁住相应主键对应的记录。
 
3)
delete from t1 where age=23;
如果age字段没有索引,会使用全表扫描过滤,这时表上的各个记录都将加上锁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

证券市场基本概念

证券市场基本概念 一、 指数分类1.1 什么是指数1.2 指数分类 二 、交易所及板块2.1 交易所及板块2.2 股票代码规则 三 、指数、ETF、股票的关系3.1 指数和股票的关系3.2 指数和指数ETF的关系3.3 ETF概念 四、 股票行业分类4.1 申万行业分类4.2 股票与申万行业分类的关系 五 、指…

idea - 插件之 codeium(安装篇)

idea - 插件之 codeium 插件官网地址:https://codeium.com/ Idea 版本:2021.3.2 关于插件作用就不多做介绍,接下来开始正文。 由于目前有很多博客文章没有对 Idea 安装进行详细的讲解和遇到问题的处理讲解,所以我经过踩坑后&am…

【C++学习】C++的动态内存管理 | new和delete的底层 | 初识模板

目录 1. C的动态内存管理 2. new和delete的底层 3. 定位new 4. new和malloc 的区别总结 5. 模板 写在最后: 1. C的动态内存管理 上一篇文章已经大致介绍完new和delete的用法, 以及C和C语言两种动态内存管理方式的区别,这里简单总结一…

【MMCV python安装指南】

MMCV python安装指南 MMCV 介绍安装教程1.系统环境2.python版本3.torch版本4.mmcv版本 安装示例 MMCV 介绍 mmcv 是用于计算机视觉研究的基础 Python 库,支持 MMLAB 中的许多研究项目,例如 MMDetection https://github.com/open-mmlab/mmdetection MMAct…

arc163 C 思维构造

题意&#xff1a;https://atcoder.jp/contests/arc163/tasks/arc163_c 思路&#xff1a;本题构造主要就是围绕 初始放入2&#xff0c;3&#xff0c;6&#xff0c;然后一直将一个拆解直到满足大小。 /*keep on going and never give up*/ #include<cstdio> #include<…

【择校】肠子悔青,录取分数断层,超过第二名44分,超过最后一名146分!

一、学校及专业介绍 中南民族大学&#xff08;South-Central Minzu University&#xff09;坐落于湖北省武汉市&#xff0c;中华人民共和国国家民族事务委员会直属高校&#xff0c;位列湖北省“国内一流大学建设高校”、“少数民族高层次骨干人才计划”资格高校、全国深化创新创…

15. python从入门到精通——Pygame游戏编程

目录 游戏的原理 安装Pygame Pygame常用模块 Pygame的基本使用 实例:制作一个跳跃的小球游戏&#xff0c;如果碰到窗口边缘会改变小球移动方向 实现步骤&#xff1a; 运行效果&#xff1a; 小球图片&#xff1a; python代码&#xff1a; 开发Flappy Bird游戏 …

生成古风少女图片【InsCode Stable Diffusion美图活动一期】

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 写在前面 Stable Diffusion 模型在线使用地址&#xff1a; 工具介绍 一.如何使用S…

基于Java的酒店管理系统设计与实现(源码+文档+报告+任务书)

本系统采用Java语言进行开发&#xff0c;实现了跨平台的部署。使用了MySQL数据库进行数据存储&#xff0c;保证了数据的稳定性与可靠性。通过使用Spring框架&#xff0c;实现了对各个模块的解耦&#xff0c;使得系统更易于维护与升级。前端使用了Node.jsVue以提供易用、美观的用…

spring复习:(4)AbstractEnvironment

该类中指定了激活profile属性的名称(spring.profiles.active)&#xff0c;默认profile属性的名称(spring.profiles.default)&#xff0c;以及默认的profile的名字(default)。

springboot项目集成nacos配置中心踩坑

前提 在使用nacos的配置中心功能&#xff0c;发现在application.yml中配置地址后仍然读取不到配置中心地址&#xff0c;配置项和值都是正确的。但就是读不到&#xff0c;现在来分析下 配置项 spring:application:name: test-servicemain:allow-bean-definition-overriding: …

Ubuntu 20.04 LTS x86_64 SPEC CPU 2006 cpu2006-1.2.iso 测试笔记

环境 安装依赖项 sudo apt install gfortran 挂载iso sudo mkdir /mnt/cpu2006 sudo mount cpu2006-1.2.iso /mnt/cpu2006 安装 cd /mnt/cpu2006 sh install.sh -d /home/speccpu/cpu2006 SPEC CPU2006 InstallationTop of the CPU2006 tree is /mnt/cpu2006Installing F…

【Vue3】学习笔记-toRef

作用 创建一个ref对象&#xff0c;其value值指向另一个对象中的某个属性。 语法 const nametoRef(person,‘name’) 应用 要将响应式对象中的某个属性单独提供给外部使用时 #扩展 toRefs与toRef功能一直&#xff0c;但可以批量创建多个ref对象,语法&#xff1a;toRefs(per…

浅谈消防应急照明和疏散指示系统在变电站的设计与应用

【摘要】&#xff1a;随着对消防安全重视程度的不断提高&#xff0c;消防设计要求更加严格。针对变电站的应用场景&#xff0c;以民用和工业建筑为对象设计的消防应急照明和疏散指示系统不宜直接套用。文章从变电站实际应用角度出发&#xff0c;梳理和对比了现行设计规范&#…

机器人制作开源方案 | 智能立体仓储系统模型

1. 功能说明 本文示例将通过程序控制模拟立体仓储系统的运动效果--模拟立体仓储系统进行运输货物时各个结构的运动方式。立体仓储系统的运动有整体系统的水平移动、载货台的纵向移动、货叉的平动&#xff0c;所有的运动表现形式都是旋转运动转化为平动。 2. 结构说明 该立体仓储…

netcat(nc)安装

网络工具中有“瑞士军刀”美誉的NetCat&#xff08;以下简称nc&#xff09;可以使用TCP或UDP协议的网络连接去读写数据。 问题 使用命令 nc -zv ip port 发现报错Ncat&#xff1a;Connection refused&#xff0c;其实是混淆了netcat&#xff08;nc&#xff09;与ncat where …

只要你会vue,5分钟学不会 svelte 你来找我

&#x1f33b; 前言 2023年了&#xff0c;国内前端领域基本被Vue、React占领市场&#xff0c;近几年似乎前端技术栈的迭代更新缓慢了下来。 当然近几年也出现了像svelte、solid.js等一些新兴的前端框架&#xff0c;这些框架有很多创新的点&#xff0c;比如svelte相比于vue,re…

SSTI-lab

Level-1 no waf {{2*2}}测试发现存在ssti漏洞 {{.__class__}}{{.__class__.__bases__[0]}}{{.__class__.__bases__[0].__subclasses__}}import requestsurl"http://node1.anna.nssctf.cn:28430/level/1"#payload{{.__class__.__bases__[0].__subclasses__()[1]}} …

基于智慧消防系统的建设与应用

安科瑞 华楠 【摘要】随着“智慧城市”建设热潮的兴起&#xff0c;对推动人类社会发展与进步发挥重要作用&#xff0c;而“智慧消防”作为“智慧城市”的重要组成部分&#xff0c;其建设工作也越来越受到社会各界人士的高度关注&#xff0c;这对推动“智慧城市”构建发挥作用。…

途乐证券|Prada总部上海荣宅失事?230亿龙头突现重大利空,黑马也被带崩

Prada和蔡徐坤同时刷屏&#xff01; 今天一早&#xff0c;Prada冲上微博热搜&#xff0c;原因是有网友称&#xff0c;“Prada总部上海荣宅起火”&#xff0c;相关视频在网上热传。据上海静安消防发布火情通报&#xff0c;2023年7月2日18时14分&#xff0c;静安区陕西北路靠近南…