首页 > 数据库 >MySQL之存储引擎

MySQL之存储引擎

时间:2024-03-03 12:57:29浏览次数:13  
标签:存储 支持 外键 引擎 内存 MySQL 数据

什么是存储引擎

  • 数据库存储引擎是数据库底层软件组织,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据。

  • 日常生活中文件格式有很多种,并且针对不同的文件格式会有对应不同存储方式和处理机制(txt、pdf、word、mp4等等)

  • 不同的存储引擎提供不同的存储机制、索引机制、锁定水平等功能。不同的存储引擎,也都有其特定的功能及特定应用场景。

  • 用户可以根据不同的需求为数据表选择不同的存储引擎(表类型)

MySQL主要存储引擎

  • Innodb

    是MySQL5.5版本以及之后默认的存储引擎,支持事务/行锁/外键,支持外键约束,5.5前不支持全文索引,5.5后支持全文索引。

    优点
    提供良好的事务管理、崩溃修复能力和并发控制,存储数据更加的安全
    缺点
    读写效率稍差,占用的数据空间相对较大

  • MyISAM

    是MySQL5.5版本之前默认的存储引擎

    特点

    (1) 不支持事务,不支持外键
    (2) 支持表锁,不支持行锁
    (3) 占用空间小,访问速度快

  • MEMORY

    内存引擎(数据全部存放在内存中)断电数据丢失,读速度快很快,适合作为会话表和缓存表。

    特点

    (1) 内存存放
    (2) hash索引(默认)

  • BLACKHOLE

    无论存什么,都立刻消失(黑洞)

# 查看所有的存储引擎
show engines;

# 建表时指定引擎语法
create table 表名(
	字段
	...
)engine=存储引擎;

# 不同的存储引擎在存储表的时候有什么异同点吗
create table t1(id int) engine=innodb;
create table t2(id int) engine=myisam;
create table t3(id int) engine=blackhole;
create table t4(id int) engine=memory;

image

# 存数据
insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);

验证blackhole 不存储数据

image

验证memory 数据是存在内存中

  • memory 数据是存在内存中的,如何印证?
    • 重启mysql服务

image

可以发现memory 表中的数据已经不存在了

上述三种存储引擎的比较(不包括BLACKHOLE)

特点 InnoDB MyISAM Memory
存储限制 64TB
事务安全 支持 - -
锁机制 行锁 表锁 表锁
B+tree索引 支持 支持 支持
Hash索引 - - 支持
全文索引 支持(5.6版本之后) 支持 -
空间使用 N/A(Not Applicable)
内存使用 中等
批量插入速度
支持外键 支持 - -

存储引擎选择

(1) InnoDB : 是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择。
(2) MyISAM : 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。
(3) MEMORY:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。

标签:存储,支持,外键,引擎,内存,MySQL,数据
From: https://www.cnblogs.com/xiao01/p/18049837

相关文章

  • MySQL之SQL语句+严格模式
    SQL使用规范在数据库管理系统中,SQL语句关键字不区分大小写(但建议用大写),参数区分大小写。建议命令大写,数据库名、数据表名、字段名统一小写,如数据库名、数据表名、字段名与关键字同名,使用反引号圈起来,避免冲突。SQL语句可单行或多行书写,默认以英文分号(;)结尾,关键词不能跨多......
  • MySQL之初识数据库
    linux安装更新YUM源:sudorpm-Uvhhttps://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm安装MySQL:sudoyum-yinstallmysql-community-server--enablerepo=mysql80-community--nogpgcheck启动数据库netstartmysql或者sudosystemctlstartmysq......
  • MySQL之MySQL数据库安装
    了解各种服务器的端口MySQL:3306Redis:6379MongoDB:27017Django:8000flask:5000MySQL介绍MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下公司。MySQL最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDa......
  • PostgreSQL初体验及其与MySQL的对比
    因为工作的原因接触到了pgsql数据库,对PostgreSQL的体系和运维操作也有了一定的了解。PostgreSQL在官网上标称为世界上最先进的开源数据库,而MySQL在官网上标称的是世界上最流行的开源数据库,可见PostgresSQL还是比较高调的。一、PostgreSQL初体验首先是数据库的安装,PostgreSQL官网......
  • 在K8S中,如果后端nfs存储的ip发生变化如何解决?
    在Kubernetes(K8S)中,如果后端NFS(NetworkFileSystem)存储的IP地址发生了变化,你需要更新与之相关的PersistentVolume(PV)或PersistentVolumeClaim(PVC)以及StorageClass中关于NFS服务器IP的配置信息,确保K8S集群内的Pod能够正确连接到新的NFS存储位置......
  • 数据结构之线性表(顺序存储表)
    php<?php/***CreatedbyPhpStorm.*User:SillyCat*Date:2024/3/2*Time:18:47*/classSequenceList{private$item=array();private$length=0;publicfunction__construct(){//$this->item=$item;......
  • 在K8S中,业务Pod数据如何存储?
    在Kubernetes(K8S)中,业务Pod的数据存储及具体方法通常涉及多种存储选项,这些选项根据业务需求和场景的不同而有所不同。以下是关于业务Pod数据如何存储及其具体方法的详细说明:1.临时存储(EmptyDir)描述:EmptyDir是最简单的存储类型,它会在Pod被分配到Node时创建一个空目录,并挂载到Pod......
  • 共享存储服务nfs
    已知samba主要用于linux与windows之间共享文件夹那用于Linux之间进行文件共享则是用NFS服务(NetworkFileSystem)目的在于让不同的机器,不同的操作系统可以彼此分享各自的文件数据。NFS服务可以将远程Linux系统上的文件共享资源挂载到本地机器的目录上。企业生产集群为什么需要......
  • 邻接矩阵 存储图
    存储图可以用邻接表和邻接矩阵以下代码来自https://www.acwing.com/blog/content/405///对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点inth[N],e[N],ne[N],idx,w[N];//添加一条边a->b,权重是wvoidadd(inta,intb,intw){e[id......
  • mysql中已经写好了的列的属性是可以修改的
    今天在写黑马的实战项目时,不小心把建表语句写错了,导致有一行的数据类型给错了,然后在插入数值的时候报错,说是插入的数据长度超出了限度,因为我懒得再重新建表,所以便找了找能不能直接修改已经建好的表的属性,不出所料,是可以的。下面就简单介绍一下:当你需要将列的属性修改为update_tim......