阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL存储引擎 InnoDB 介绍

374次阅读
没有评论

共计 2910 个字符,预计需要花费 8 分钟才能阅读完成。

一. 概述:

InnoDB 存储引擎提供了具有提交,回滚,和崩溃恢复能力的事务安全,对比 MYISAM 的存储引擎,InnoDB 写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。它的特点有如下:

1. 自动增长列特点(AUTO_INCREMENT)

InnoDB 表的自动增长列可以手工插入,但插入的值如果是空或者是 0,则实际插入的将是自动增长的值,下面演示下

CREATE TABLE autoincre_demo
(
  i  SMALLINT NOT NULL AUTO_INCREMENT,
  NAME VARCHAR(10),
  PRIMARY KEY(i)
)ENGINE=INNODB

INSERT INTO autoincre_demo VALUES(1,’1′),(0,’2′),(NULL,3)

MySQL 存储引擎 InnoDB 介绍

可以通过 alter table autoincre_demo auto_increment=n 来设置自增长的初使值, 该值是保留在内存中,如重启数据库这个强制的默认值就会丢失。

2. 自动增长与索引

对于 InnoDB 表,自动增长列必须是索引,如果是组合索引,也必须是组合索引的第一列。但对于 MYISAM 表,自增长列可以是组合索引的其他列。
这里简单来说下 MySQL 的索引,索引的关键词包括: key(普通索引), primary key(主键索引),unique key(唯一索引),index(没有约束的索引)。

下面演示下 Myisam 类型的表 autoincre_demo, 自动增长列 d1 作为组合索引第二列。

 CREATE TABLE autoincre_demo
(
  d1  SMALLINT NOT NULL AUTO_INCREMENT,
  d2  SMALLINT NOT NULL,
  NAME VARCHAR(10),
  INDEX(d2,d1)
)ENGINE=MYISAM

INSERT INTO autoincre_demo(d2,NAME) VALUES(2,’2′),(3,’3′),(4,’4′),(2,’2′),(3,’3′)

MySQL 存储引擎 InnoDB 介绍

上面可以看出自增长是按照组合索引的前面几列进行排序后递增的。

3. 外键约束

mysql 支持外键的存储引擎只有 innodb, 在创建外键的时候,要求父表必须有对应的索引,子表创建外键的时候也会自动创建对应的索引

 下面演示两个表 country 父表 country_id 列为 主键索引,city 子表其中 country_id 列为外键

  — 创建父表
CREATE TABLE country
(
  country_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  country VARCHAR(50) NOT NULL,
  PRIMARY KEY(country_id)
)ENGINE=INNODB DEFAULT CHARSET=utf8

— 创建子表  关联 country_id
CREATE TABLE city
(
  city_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  country_id SMALLINT UNSIGNED NOT NULL ,
  PRIMARY KEY(city_id),
  KEY idx_fk_country_id (country_id),
  CONSTRAINT fk_city_country  FOREIGN KEY(country_id)  REFERENCES country(country_id)
  ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=INNODB DEFAULT CHARSET=utf8

 

下面先说下里面的关键词的含义:
unsigned:表示无符号的意思, 也就是非负数, 只用于整型。
key:为 country_id 建个索引,名叫 dx_fk_country_id。
CONSTRAINT:关键词是约束,外键约束名叫 fk_city_country,FOREIGN KEY 是对应的外键字段。
references:是引用 country 表的 country_id 字段。
在删除更新父表时,对子表相应的操作包括 restrict,cascade,set null 和 no action。
其中 restrict 与 no action 相同 是指限制在:子表有关联记录的情况下父表不能更新;cascade 表示父表在更新或者删除时,同时更新或删除子表相应记录。set null 则表示在更新或者删除时,子表对应字段被设置为 null。
了解后在看 on delete ,restrict 是指:主表删除记录时,如果子表有对应记录,则不允许删除。
on update cascade 是指:主表更新记录时,如果子表有对应记录,则子表对应更新;

– 先维护下数据
INSERT INTO country(country) VALUES(‘ 中国 ’);
INSERT INTO city (country_id) VALUES(1);

MySQL 存储引擎 InnoDB 介绍

MySQL 存储引擎 InnoDB 介绍

— 先试下 on delete ,restrict 的作用,主表删除记录时,如果子表有对应记录,则不允许删除
DELETE FROM country WHERE country_id=1

 

— 再试下 on update cascade 是指主表更新记录时,如果子表有对应记录,则子表对应更新;
UPDATE country SET country_id=2 WHERE country_id=1;

MySQL 存储引擎 InnoDB 介绍

MySQL 存储引擎 InnoDB 介绍

在导入多个表数据时,如果需要忽略之前的导入顺序,可以暂时关闭外键的检查,加快处理速度。

— 关闭命令是
set foreign_key_checks=0;
— 开启
set foreign_key_checks=1;

对于 INNODB 类型表,外键的信息通过使用 INFORMATION_SCHEMA 查看

SELECT TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE CONSTRAINT_SCHEMA =’test’

MySQL 存储引擎 InnoDB 介绍

4. 存储方式(简单了解)

        innodb 存储表和索引有两种方式。

        一是使用共享表空间存储,这种方式创建的表的表结构保存在.frm 文件中,数据和索引保存在 innodb_data_home_dir 和 innodb_data_file_path 定义的表空间中,可以是多个文件。

        二是使用多表空间存储,这种方式创建的表的表结构保存在.frm 文件中,每个表的数据和索引单独保存在.ibd 中,如果是分区表,则每个分区对应单独的.ibd 文件,文件名是 ” 表名 + 分区名 ”

  需要使用多表空间存储,需要设置参数 innodb_file_per_table, 并重新启动服务后生效。新建的表就按多表空间来存储,已有表仍然使用共享表空间存储。

多表空间存储的优势是方便进行单表备份和恢复操作,命令如下:

ALTER TABLE tab_name DISCARD TABLESPACE
TABLE TABLE tab_name IMPORT TABLESPACE

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2910字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7805941
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...