MySQL 存储引擎简介
MySQL 提供了多种不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在 MySQL中不需要在整个服务器中使用同一种存储引擎,可以针对具体的要求对每一个表使用不同的存储引擎。MSQL 支持的存储引擎有InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE等。
用户可以使用 SHOW ENGINES 语句查看系统支持的引擎类型。
lnnoDB 存储引擎
InnoDB 是事务型数据库的首选引擎,支持事务安全表( ACID ),支持行锁定和外键 MySQL 的默认
存储引擎为 InnoDB, InnoDB 的主要特点如下:
(1)、InnoDB MySQL 提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID 兼容)存储引擎。InnoDB 锁定在行级,并且也用 SELECT 语旬提供个类似 Oracle 的非锁定读。这些功能增加了多用户部署和性能 SQL 查询中可以自由地将 InnoDB 类型的表与 MySQL 其他类型的表混合起来,甚至在同一个查询中也可以混合。
(2) 、InnoDB 是为处理巨大数据量时的最大性能设计,它的 CPU 效率可能是任何其他基于碰盘的关系数据库引擎所不能匹敌的。
(3) InnoDB 存储引擎被完全与 MySQL 服务器整合,InnoDB 存储引 擎为在主内存中缓存数据和索引而维持它自己的缓冲池。 InnoDB 的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原始碰盘分区)。这与 MyISAM 表不同,比如在 MyISAM 表中每个表被保存在分离的文件中。 InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为 2GB 的操作系统上。
(4) InnoDB支持外键完整性约束(FOREIGN KEY )。在存储表中的数据时每张表的存储都按主键顺序存放,如果没有显式地在定义表时指定主键,lnnoDB 会为每一行生成一个6字节的 ROWID ,并以此作为主键。
( 5) InnoDB 被用来在众多需要高性能的大型数据库站点上。InnoDB 不创建目录,在使用 InnoDB时MySQL 将在 MySQL 数据目录下创建一个名为 ibdatal的10MB大小的自动扩展数据文件,以及两个名为
ib_logfile()和ib_logfilel 的5MB大小的曰志文件。
MyISAM 存储引擎
My ISAM 基于 ISAM 存储引擎,并对其进行扩展。它是在 Web 、数据仓储和其他应用环境下最常使用的存储引擎之一。 MyISAM 拥有较高的插 、查询速度,但不支持事务。 MyISAM 的主要特点如下:
(1)大文件(达 63 位文件长度)在支持大文件的文件系统和操作系统上被支持。
(2)当把删除、更新及插入混合的时候,动态尺寸的行的碎片更少,这要通过合并相邻被删除的块来完成,若下一个块被删除,则扩展到下一块自动完成。
(3)每个MyISAM 表的最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16个。
(4)最大的键长度是 1000 字节,这也可以通过编译来改变。对于键长度超过250字节的情况,使用一个超过1024字节的键块。
(5)BLOB和TEXT 列可以被索引。
(6)NULL 被允许在索引的列中,其占每个键的0~1字节。
(7)所有数字键值先以高字节位被存储,以允许一个更高的索引压缩。
(8)对于每个表的 AUTO_INCREMENT列,MyISAM 通过INSERT和UPDATE操作自动更新这一列,这使得 AUTO_INCREMENT列更快(至少10%)。注意,在序列项的值被删除之后就不能再利用。
(9)可以把数据文件和索引文件放在不同目录。
(10)每个字符列可以有不同的字符集;
(11)有VARCHAR的表可以有固定或动态记录长度;
(12)VARCHAR和CHAR列可以多达64KB。
使用 MyISAM引擎创建数据库将产生3个文件。文件的名字以表的名字开始,扩展名指出文件类型。
frm文件存储表定义,数据文件的扩展名为.myd(MYData),索引文件的扩展名为.myi (MYindex)
MEMORY 存储引擎
MEMORY 存储引擎将表中的数据存储在内存中,为查询和引用其他表中的数据提供快速访问。
MEMORY 的主要特点如下:
(1)MEMORY表可以有多达每个表32个索引,每个索引16列,以及500字节的最大键长度;
(2)MEMORY存储引擎执行HASH和BTREE索引;
(3)可以在一个MEMORY表中有非唯一键;
(4)MEMORY 表使用一个固定的记录长度格式;
(5)MEMORY 不支持BLOB或TEXT;
(6)MEMORY 支持 AUTO_INCREMENT列和对可包含NULL值的列的索引;
(7)MEMORY 表在所有客户端之间共享(就像其他任何非 TEMPORARY 表〉;
(8)队在EMORY 表内容被存在内存中,内存是MEMORY表和服务器在查询处理的空闲中创建的内部表共享;
(9)当不再需要MEMORY表的内容时要释放被MEMORY 表使用的内存,应该执行 DELETE FROM
TRUNCATE TABLE ,或者整个地删除表(使用 DROP TABLE)
存储引擎的选择
不同的存储引擎有不同的特点,适用于不同的需求,为了做出正确的选择,用户首先需要考虑每个存储引擎提供了哪些不同的功能
四、MySQL 数据库的基本操作
- 创建数据库实例
CREATE DATABASE 数据库名; - 查看数据库
show databases; - 选择数据库
use 数据库名 - 删除数据库
drop databases 数据库名;
五、数据表的基本操作
创建表
CREATE TABLE <表名>
(
字段名 数据类型[列级别约束条件] [默认值]
字段名 数据类型[列级别约束条件] [默认值]
.
.
.
[表级别约束条件]
);
在使用CREATE TABLE 创建表时必须指定以下信息:
- 要创建表的名称,不区分大小写,不能使用 SQL 语言中的关键字,例如 DROP、ALTER、INSERT 等。
- 数据表中每一列(字段〉的名称和数据类型。如果创建多列,要用逗号隔开。
主键约束
主键又称主码 是表中一列或多列的组合。主键约束( Primary Key Constraint )要求主键列的数据唯一并且不允许为空。主键能够唯一标识表中的一条记录 可以结合外键来定义不同数据表之间的关系 并且可以加快数据库查询的速度。主键和记录之 的关系如同身份证号码和人之 的关系 它们之间是一一对应的。主键分为两种类型。即单字段主键和多字段主键。
单字段主键
主键由一个字段组成,设置主键的 SQL 语旬格式分为两种情况。
(1)在定义列的同时指定主键,语法格式如下:
字段名数据类型 PRIMARY KEY [默认值]
(2)在定义完所有列之后指定主键,语法格式如下:
[CONSTRAINT <约束名>] PRIMARY KEY [字段名]
多字段主键
主键由多个字段联合组成,语法格式如下:
PRIMARY KEY [字 字段 2, ..., 字段时
外键约束
外键用来在两个表的数据之间建立连接,它可以是一列或者多列。一个表可以有一个或者多个外键。
外键对应的是参照完整性,一个表的外键可以为空值。若不为空值,则每一个外键值必须等于另一个表中主键的某个值。
外键首先是表中的一个字段,它可以不是本表的主键,但对应另外一个表的主键。
外键的主要作用是保证数据引用的完整性,在定义外键后不允许删除在另一个表中具有关联关系的行。
外键还保证数据的一致性、完整性。例如部门表 tb dept 的主键 id 在员工表 db_5 中有-个键 deptld 这个 id 关联。
- 主表(父表):对于两个具有关联关系的表而言 相关联字段中主键所在的那个表即是主表。
- 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。
创建外键的语法格式如下:
[CONSTRAINT <外键名>] FOREIGN KEY 字段名1 [字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]
”外键名“为定义的外键约束的名称,在一个表中不能有相同名称的外键:”字段名“表示子表需要添加外键约束的字段列。
查看数据表基本结构
使用 DESCRIBE/DESC 语旬可以查看表字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等,其语法格式如下:
DESCRIBE <表名>;
或者
DESC <表名>;
查看数据表详细结构
SHOW CREATE TABLE 语句可以用来查看表的详细信息,语法格式如下:
SHOW CREATE TABLE <表名> \G;
修改表名
MySQL 是通过 ALTER TABLE语句来实现表名的修改的,具体语法格式如下
ALTER TABLE <旧表名> RENAME TO <新表名>
其中, TO 为可选参数,使用与否不影响结果。
修改字段数据类型
修改字段数据类型就是把字段的数据类型转换成另一种数据类型。在 MySQL 中修改字段数据类型的语法格式如下:
ALTER TABLE <表名> MODIFY <字段> <字段类型>;
修改字段名
MySQL 中修改表字段名的语法格式如下:
ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新字段类型>
添加字段
添加字段的语法格式如下:
其中,新字段名为需要添加的字段名称 FIRST 为可选参数,其作用是将新添加的字段设置为表的第一个字段: AFTER 为可选参数,其作用是将新添加的字段添加到已存在字段名指定的字段后面。
ALTER TABLE <表名> <新字段名> <新字段类型> [约束条件] [FIRST| AFTER 已存在的字段名];
删除字段
删除字段是将数据表中的某个字段从表中移除,其语法格式如下:
ALTER TABLE <表名> DROP <字段名>;
修改字段排序
对于已经创建的数据表,读者也可以根据实际工作的需要修改字段的排列顺序,通常使用 ALTER TABL 改变字段的排列顺序,其语法格式如下:
ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>;
更改表的存储引擎
更改表的存储引擎的语法格式如下:
ALTER TABLE <表名> ENGINE=<更改后的存储引擎名>;
删除表的外键约束
对于数据库中定义的外键,如果不再需要可以将其删除。外键一旦删除,就会解除主表和从表间的关联关系。 MySQL中删除外键的语法格式如下:
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
其中, “外键约束名”指在定义表时CONSTRAIN 关键字后面的参数。
删除没有被关联的表
在MySQL 中使用 DROP TABLE 可以一次删除一个或多个没有被其他表关联的数据表,语法格式如下:
# 最后
看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。
开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下**互联网工程师必备的面试1000题**。
> 注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友
![最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?](https://img-blog.csdnimg.cn/img_convert/cb390184ae139261206d91502988c7c2.webp?x-oss-process=image/format,png)
互联网工程师必备的面试1000题
而且从上面三家来看,**算法与数据结构是必备不可少的**呀,因此我建议大家可以去**刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》**,里面近**200道真实出现过的经典代码面试题**。
![最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?](https://img-blog.csdnimg.cn/img_convert/a81c87bef0b292e76436f62b658c5f27.webp?x-oss-process=image/format,png)
加入社区:https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友
[外链图片转存中...(img-S8tOmjHh-1725592692347)]
互联网工程师必备的面试1000题
而且从上面三家来看,**算法与数据结构是必备不可少的**呀,因此我建议大家可以去**刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》**,里面近**200道真实出现过的经典代码面试题**。
[外链图片转存中...(img-8Skszhav-1725592692348)]
加入社区:https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0