InnoDB

​ InnoDB存储引擎是Mysql的默认存储引擎。InnoDB存储引擎提供了具有提交、回滚、崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引。

InnoDB存储引擎不同于其他存储引擎的特点 :

事务控制

create table goods_innodb(id int NOT NULL AUTO_INCREMENT,name varchar(20) NOT NULL,primary key(id)
)ENGINE=innodb DEFAULT CHARSET=utf8;
start transaction;insert into goods_innodb(id,name)values(null,'Meta20');commit;

测试,发现在InnoDB中是存在事务的 ;

外键约束

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

​ 下面两张表中 , country_innodb是父表 , country_id为主键索引,city_innodb表是子表,country_id字段为外键,对应于country_innodb表的主键country_id 。

create table country_innodb(country_id int NOT NULL AUTO_INCREMENT,country_name varchar(100) NOT NULL,primary key(country_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;create table city_innodb(city_id int NOT NULL AUTO_INCREMENT,city_name varchar(50) NOT NULL,country_id int NOT NULL,primary key(city_id),key idx_fk_country_id(country_id),CONSTRAINT `fk_city_country` FOREIGN KEY(country_id) REFERENCES country_innodb(country_id) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into country_innodb values(null,'China'),(null,'America'),(null,'Japan');
insert into city_innodb values(null,'Xian',1),(null,'NewYork',2),(null,'BeiJing',1);

在创建索引时, 可以指定在删除、更新父表时,对子表进行的相应操作,包括 RESTRICT、CASCADE、SET NULL 和 NO ACTION。

RESTRICT和NO ACTION相同, 是指限制在子表有关联记录的情况下, 父表不能更新;

CASCADE表示父表在更新或者删除时,更新或者删除子表对应的记录;

SET NULL 则表示父表在更新或者删除的时候,子表的对应字段被SET NULL 。

针对上面创建的两个表, 子表的外键指定是ON DELETE RESTRICT ON UPDATE CASCADE 方式的, 那么在主表删除记录的时候, 如果子表有对应记录, 则不允许删除, 主表在更新记录的时候, 如果子表有对应记录, 则子表对应更新 。

表中数据如下图所示 :

 外键信息可以使用如下两种方式查看 :

show create table city_innodb ;

删除country_id为1 的country数据:

delete from country_innodb where country_id = 1;

更新主表country表的字段 country_id :

update country_innodb set country_id = 100 where country_id = 1;

更新后, 子表的数据信息为 :

存储方式

InnoDB 存储表和索引有以下两种方式 :

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

②. 使用多表空间存储, 这种方式创建的表的表结构仍然存在 .frm 文件中,但是每个表的数据和索引单独保存在 .ibd 中。

MySQL高级 - InnoDB特性相关推荐

  1. mysql fsync_MySQL - InnoDB特性 - Buffer Pool漫谈

    缓存管理是DBMS的核心系统,用于管理数据页的访问.刷脏和驱逐:虽然操作系统本身有page cache,但那不是专门为数据库设计的,所以大多数数据库系统都是自己来管理缓存.由于几乎所有的数据页访问都涉 ...

  2. MySQL高级 - MyISAM特性

    MyISAM ​ MyISAM 不支持事务.也不支持外键,其优势是访问的速度快,对事务的完整性没有要求或者以SELECT.INSERT为主的应用基本上都可以使用这个引擎来创建表 .有以下两个比较重要的 ...

  3. mysql innodb4大特征_MYSQL中InnoDB特性浅谈

    许久没有更新博客,上周末放假把网易大牛姜sir的著作MYSQL技术内幕InnoDB存储引擎又翻阅了一番,对当前工作的InnoDB特性有了一些新的认识,下面谈谈自己的读后感. 1. InnoDB的体系架 ...

  4. MySQL 高级 —— 深入理解 InnoDB 与 MyISAM

    引言 在文件系统中,MySQL将每个数据库(也可以称之为schema)保存为数据目录下的一个子目录.创建表时,MySQL会在数据库子目录下创建一个与表同名的.frm文件保存表的定义.因为MySQL使用 ...

  5. MySQL高级特性 读书笔记

    MySQL高级特性 1. 分区表 对于用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成.实现分区的代码实际上是对一组底层表的句柄对象的封装 以下场景分区表可以起到非常大的作用: 1. 表 ...

  6. MySQL高级特性之分布式(XA)事务的介绍

    文章目录 分布式(XA) 事务 1.内部XA事务 2.外部XA事务 这一部分是 高性能MySQL(第3版)中第七章第11节内容:关于MySQL高级特性之分布式(XA)事务的介绍,(不感兴趣的可以忽略) ...

  7. MySQL - InnoDB特性 - Buffer Pool漫谈

    转载自  MySQL - InnoDB特性 - Buffer Pool漫谈 缓存管理是DBMS的核心系统,用于管理数据页的访问.刷脏和驱逐:虽然操作系统本身有page cache,但那不是专门为数据库 ...

  8. mysql高级-4-深入InnoDB

    mysql高级 前言 InnoDB数据存储结构 1.存储结构-页 页的上层结构 2.页的内部结构 2.1 文件头和文件尾 2.2 记录部分(最大最小记录.用户记录.空闲记录) 2.3 页头和页目录 3 ...

  9. 尚硅谷《MySQL高级特性篇》教程发布

    MySQL底层如何组织设计数据 怎么理解"索引即数据,数据即索引" 海量数据和高并发场景下如何设计主键 索引下推.覆盖索引对优化有什么优势 如何保证主从一致性 MVCC如何解决可重 ...

最新文章

  1. JavaScript总结(七)
  2. LeetCode-二分查找-69. Sqrt(x)
  3. BigData之Hadoop:Hadoop的简介、深入理解、下载、案例应用之详细攻略
  4. python代码命令行tab补齐_Python语言交互模式下命令tab补全
  5. 顺序表中有效元素的长度_图解线性表,启动数据结构的大门,深刻理解链式存储和顺序存储!...
  6. 合并excel文件 C语言,多个Excel文件中的多个Sheet合并到一个Excel文件中两个函数...
  7. Mysql和vs2010 的连接
  8. Center Loss
  9. dns服务期搭建使用_DNS服务器搭建
  10. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_3_字符输出流_Writer类FileWriter类...
  11. 前端学习总结【103天】:CSS——不用JavaScript实现tab标签切换的两种方法
  12. 游戏设计类毕业论文文献(推荐10篇)
  13. 什么是数据库连接池?为什么使用数据库连接池?数据库连接池工作原理
  14. 手机桌面上的计算机怎么删除,怎样删除桌面图标?删除桌面图标方法教学
  15. win10配置docker环境
  16. 17万用来助学,能做什么?
  17. OpenCV打开摄像头并显示图像(C++、Python)
  18. C# 微信证书签名,WECHATPAY2-SHA256-RSA2048 签名方式
  19. 音视频开发系列(24)使用FFmpeg添加、删除、替换和提取视频中的音频
  20. sql将数据按照年月日分组并统计数量

热门文章

  1. FastDFS问题汇总
  2. 面试常备题----数组总结篇(上)
  3. 仿as3的displaylist
  4. Code On Earth
  5. 好用的把PDF等转换为SWF的工具
  6. Visual Studio Code(VS code)介绍
  7. 【收藏】CMD命令提示符窗口中的快捷键、小技巧和常用命令
  8. ThreadPoolExecutor运转机制详解(转)
  9. linux磁盘 分区 物理卷 卷组 逻辑卷 文件系统加载点操作案例
  10. DAX2012 R3安装