Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySql学习笔记(一)- 表类型有哪些,怎么用?

MySql学习笔记(一)- 表类型有哪些,怎么用?

作者头像
写一点笔记
发布于 2020-11-02 06:17:34
发布于 2020-11-02 06:17:34
2.7K00
代码可运行
举报
文章被收录于专栏:程序员备忘录程序员备忘录
运行总次数:0
代码可运行

天天在用mysql,你说sql有什么学的,但是面试官说你学的都是皮毛。怎么样?确实萌新自问发现确实咋就是会写个sql,好点的话还能写个几十行让别人看都看不懂,甚至为自己写了一手好sql而感叹软件开发太简单了,飘飘然还想爬一波泰山说一句会当凌绝顶一览众山小的豪言壮志。

要说的就是mysql的一些比较重要的东西,也是对自己学习的一种挖掘。所以,说的不对的地方还望大家指正。读过我文章的朋友都知道我写的比较简洁,希望写博客的过程能够梳理自己的思维方式,也希望能够帮到别人,少走弯路。

我们都知道数据库是一个数据树,就是将数据用树的结构存储,就二叉树来说可以筛选50%的数据,所以树同一节点的分支愈多则树的深度就会越少,树深越小的话检索的速度就能提升上去,毕竟B树的检索瓶颈往往位于读磁盘上。所以说一张表就是一棵树,那么这个树的类型有哪些?这也就是我们标题所示的表类型。

那么具体的表类型有哪些?搞开发的人都知道InnoDB,除此之外还知道myISAM是一种适合做全文检索的树,其他的就触及到盲区了。那么我就逐个的过一遍吧!

mysql的基本表类型有MyISAM、InnoDB、DBD、MEMORY、MERGE、EXAMPLE、NDB CLUSTER、ARCHIVE、CSV、BLACKHOLE、FEDERATED等。其中InnoDB和BDB提供了事务。其他都不是事务安全的。如果创建表的时候不指定表类型,默认为InnoDB,这是mysql5.5之后约定的规范。当然您可以通过修改ini文件来指定默认的表类型。

使用命令:show engines可以查看当前数据库支持的表类型,从下图可以看出,我这个数据库不支持BDB,也就是说事务型的库也之后InnoDB了。

其实我们可以在创建表的时候指定表类型,比如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use pymysql;
create table mysqlLearn(
id int not null primary key,
name varchar(64),
age int
) engine MyISAM

#或者使用alter语句进行修改
alter table mysqlLearn engine=innodb

各种表类型的对比

通过上图的对比,我们发现InnoDB其实是当下最好的表类型了。但是他的数据上限是64TB

MyISAM

mysisam不支持事务,也没有外键关系,他的优势是访问速度快。所以说如果对事务完整性要求比较低或者说以insert和select为主的库可以采用myisam。

myisam库会带有几个文件,分别为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.sdi   表结构定义
.MYD 数据
.MYI  索引

当myisam表出现损坏的时候可以采用check table 表名进行检测

并使用repair table 表名 进行修复

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
check table mysqllearn;
repair table mysqllearn;

要注意的是myisam在存储的时候会对数据进行压缩,比如会将数据末尾的空格去掉。这一点需要注意。

InnoDB

InnoDB提供了提交、回滚和数据崩溃的恢复机制。但也是这点让其在效率上差于myisam,并且其在磁盘上的占用空间也大于myisam。innnodb提供了自增主键,修改自增主键的开始基数的时候可以使用alter table 表名 auto_increment=n;对于innoDB来说自增列必须是主键,如果是组合索引,必须是组合索引的第一列。但是对于myisma来说自增列可以是组合索引的其他列。具体是按照组合列排序之后进行递增。在主外键关系中,innodb提供了cascade、set null、restrict等策略。

MEMORY

是一种使用内存的内容来创建表。每个memory对应一个磁盘文件。memory的表访问极快,并且使用的是hash索引,但是如果服务关闭表中的数据就会消失。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table thistory (
id varchar(64) not null primary key,
close double
) engine MEMORY ;

insert into thistory select date as id,close as close from sh600567 limit 100 ;

select * from thistory;

MERGE

是一组myisam表的组合,但是这些myisam表的结构完全相同,MERGE表本身没有数据,对MERGE表可以进行查询更新删除操作,这些表其实是对myisam的操作。对merge的插入实际上是通过insert_method子句定义插入的表。使用first和last可以使得插入在第一或者最后的表上,不定义或者定义为no表示不能插入。对merge的drop,只是删除merge的定义,对内部的表没有任何影响。

如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table mysqlLearn1(
id int not null primary key,
name varchar(64),
age int
) engine MyISAM;

create table mergeTest(
id int not null primary key,
name varchar(64),
age int
)engine=merge union=(mysqlLearn,mysqlLearn1) insert_method=last;

insert into mysqllearn1 value(1,'123',1);
select * from mergeTest;
insert into mergetest value(10,'1',2);
select * from mysqllearn1;

如何选择合适的表类型

对事务要求低、主要以读和插入为主的业务可以采用myisam,比如一些展示类的数据。如果对事务要求比较高并且要有数据的安全性则可以选用innoDB,Membry是一种存在内存中的表类型,因为membory对数据大小有限制,所以不能大范围的缓存数据。适合一些小表。因为membory是内存表,所以重启服务之后数据就没有了。在mergeDB上其实是一种逻辑表,相当于将myisam联合到了一起,其优点是可以改善单表限制。然后将数据存到不同的磁盘上,还可以改善读写性能。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员备忘录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL存储引擎memory和merge介绍
  memoery存储引擎是在内存中来创建表,每个memory表只实际对应一个磁盘文件格式是.frm.  该引擎的表访问非常得快,因为数据是放在内存中,且默认是hash索引,但服务关闭,表中的数据就会丢失掉。     
星哥玩云
2022/08/17
1.2K0
MySQL存储引擎memory和merge介绍
mysql常用存储引擎(InnoDB、MyISAM、MEMORY、MERGE、ARCHIVE)介绍与如何选择
    数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySql的核心就是存储引擎。
洋仔聊编程
2019/01/15
2.3K0
MyISAM 迁移至 InnoDB方案
在InnoDB中我们可能会遇到死锁,一般情况下我们对于死锁无需关注,MySQL会自己处理,不过如果我们在error日志中发现大量的死锁,就需要我们检查应用并进行相应的处理
bsbforever
2020/08/18
1.3K0
MySQL常见存储引擎详解
在my.cnf配置文件中设置default-storage-engine参数表示设置默认存储引擎 在MySQL的连接上设置当前连接的默认存储引擎
星哥玩云
2022/08/17
5090
MySQL常见存储引擎详解
MySQL学习笔记(3) - 表的基本操作
使用 SHOW CREATE TABLE 语句可以用来显示创建表时的 SQL 语句。示例:
张云飞Vir
2021/06/24
4750
Mysql MERGE引擎简介
一. 什么是MERGE引擎 MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询。
跑马溜溜的球
2020/12/07
1.3K0
MySQL常见的库操作,表操作,数据操作集锦及一些注意事项
一 库操作(文件夹) 1 数据库命名规则 可以由字母、数字、下划线、@、#、$ 区分大小写 唯一性 不能使用关键字如 create select 不能单独使用数字 最长128位 2 数据库相关操作 创建库 create database 数据库名 ;    (注意要引号结尾)    (默认latin1) 在创建数据库的时候也可指定编码格式,如: create database 数据库名 charset utf8;  选择数据库 use 数据库名    切换到指定数据库下  查看库 show database
用户1214487
2018/01/24
1K0
02 . Mysql基础操作及增删改查
SQL(Structured Query Language 即结构化查询语言) SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。
iginkgo18
2020/09/27
2K0
mysql各种引擎对比、实战
1)存储引擎概述; (2)MySQL各大存储引擎; (3)InnoDB和MyIsam使用及其原理对比; (4)InnoDB和MyIsam引擎原理; (5)剩余引擎的使用DEMO(主要是Mrg_Myisam分表); 文章目录:(例子下载在最下方) (1)存储引擎概述 为什么要合理选择数据库存储引擎 定义 存储引擎作用 如何修改数据库引擎 怎么查看修改成功 (2)MySQL各大存储引擎 InnoDB 适用场景 MySQL官方对InnoDB的讲解 MyIsam 适用场景 补充:ISAM索引方法–索引顺
sunsky
2020/08/20
1.8K0
mysql各种引擎对比、实战
MySQL进阶笔记-2(存储引擎)
最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
千羽
2021/01/14
5260
MySQL进阶笔记-2(存储引擎)
我的MYSQL学习心得(一) 简单语法
使用MYSQL有一段时间了,由于公司使用SQLSERVER和MYSQL,而且服务器数量和数据库数量都比较多
跟着阿笨一起玩NET
2018/09/20
2.4K0
我的MYSQL学习心得(一) 简单语法
Mysql 基础篇
存储引擎是mysql的特性之一,使用者可以根据自己的业务场景选择自己适合的存储引擎,是不是要支持事物,如何选择存储,如何选择索引数据,当然你也可以定制自己的存储引擎,如果你们公司有能力,mysql支持支持很多种存储引擎,如 Myisam ,Innodb,MEMORY,MERGE,BDB,EXAMPLE,CSV等等,mysql 5.5之前默认的存储引擎是Myisam,之后就是Innodb,今天我们只讲常见的存储引擎。
小土豆Yuki
2020/06/15
7230
MySQL 表类型和存储引擎
# MySQL 表类型和存储引擎 mysql 表类型和存储引擎 基本介绍 主要的存储引擎/表类型特点 细节说明 三种存储引擎表使用案例 如何选择表的存储引擎 # mysql 表类型和存储引擎 # 基本介绍 # 主要的存储引擎/表类型特点 特点 Myism InnoDB Memory Archive 批量插入的速度 高 底 高 非常高 事务安全 支持 全文索引 支持 锁机制 表锁 行锁 表锁 行锁 存储限制 没有 64TB 有 没有 B树索引 支持 支持 支持 哈希索引 支持 支持 集
用户9615083
2022/12/25
1.8K0
MySQL 表类型和存储引擎
《MySQL核心知识》第4章:简单语法
今天是《MySQL核心知识》专栏的第4章,今天跟大家一起聊聊MySQL的简单语法。好了,开始今天的正题。
冰河
2022/08/05
1.1K0
Mysql数据库常用命令总结
1、用truncate,它会重新计算自增,重新从1开始,对事务无影响,不能恢复。 一般上线前使用,清空表格。
jiankang666
2022/05/12
5590
Mysql数据库常用命令总结
MySQL之库表操作详述
创建库 create database 库名(charset utf8 对库的编码进行设置,不写就用默认值) 库名可以由字母、数字、下划线、特殊字符,要区分大小写,唯一性,不能使用关键字,不能用数字开头,最长128位 查看数据库 注意:在cmd中输入指令是不区分大小写的 show databases;  #这查看的是所有的库 show create database db1;  #这是查看指定的库 select database();      #这是查看当前的库 选择数据库 USE 数据库名          #相当于在电脑上双击文件夹,进入文件夹 删除数据库 DROP DATABASE 数据库名; 修改数据库 alter database db1 charset utf8;    #只能修改库的编码格式
星哥玩云
2022/08/17
7440
MySQL之库表操作详述
MySQL从删库到跑路_高级(一)——数据完整性
数据冗余是指数据库中存在一些重复的数据,数据完整性是指数据库中的数据能够正确反应实际情况。 数据的完整性是指数据的可靠性和准确性,数据完整性类型有四种: A、实体完整性:实体的完整性强制表的标识符列或主键的完整性(通过唯一约束,主键约束或标识列属性)。 B、域完整性:限制类型(数据类型),格式(通过检查约束和规则),可能值范围(通过外键约束,检查约束,默认值定义,非空约束和规则)。 C、引用完整性:在删除和输入记录时,引用完整性保持表之间已定义的关系。引用完整性确保键值在所有表中一致,不能引用不存在的值.如果一个键。 D、自定义完整性:用户自己定义的业务规则,比如使用触发器实现自定义业务规则。
良月柒
2019/03/19
2K0
mysql存储引擎
MySQL5.5以后默认使用InnoDB存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表。
kl博主
2023/11/17
4130
数据库之表操作
表(TABLE) 是一种结构化的文件,可用来存储某种特定类型的数据。表中的一条记录有对应的标题,标题 称之为 表的字段。
全栈程序员站长
2022/07/21
5090
数据库之表操作
【MySQL高级】Mysql的体系结构概览及存储引擎以及索引的使用
最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
陶然同学
2023/02/24
8750
【MySQL高级】Mysql的体系结构概览及存储引擎以及索引的使用
相关推荐
MySQL存储引擎memory和merge介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验