第四章-表

一、索引组织表
在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表。每张表都有个主键,如果在创建表时没有显式地定义主键,则InnoDB会按如下方式选择或创建主键:
(1)首先判断表中是否有非空的唯一索引(Unique NOT NULL),如果有,则该列即为主键
(2)如果无,InnoDB会自动创建一个6字节大小的指针
注:主键的选择根据的是定义索引的顺序,而不是建表时刻的顺序

二、InnoDB逻辑存储结构
从逻辑角度,所有数据被存放在一个空间中,称之为表空间(tablespace)。表空间又由段(segment)、区(extent)、页(page)组成。页有时也被称为块(block)。结构如下:
在这里插入图片描述

  • 表空间:逻辑结构的最高层,所有的数据都放在表空间中
  • 段:常见的段有数据段、索引段、回滚段等。数据段即为B+树的叶子节点(Leaf node segment),索引段即为非叶子节点(Non-leaf node segment)。回滚段后续介绍。对段的管理是由引擎自身完成的。
  • 区:区是由连续的页组成的,大小为固定的1MB。为保证页的连续性,InnoDB一次从磁盘申请4-5个区,默认情况下页大小为16KB,即一个区中有64个连续的页。
  • 页:页/块是InnoDB磁盘管理的最小单位。默认页大小为16KB,可通过innodb_page_size设置为4K,8K,16K.设置完成后不可再次修改。常见的页类型有:(1)数据页(B-tree Node)(2)undo页(undo Log Page)(3)系统页(System Page)(4)事务数据页(Transaction system Page)(5)插入缓冲位图页(Insert Buffer Bitmap)(6)插入缓冲空闲列表页(Insert Buffer Free List)(7)未压缩的二进制大对象页(Uncompressed BLOB Page)(8)压缩的二进制大对象页(compressed BLOB Page)
  • 行:InnoDB是面向列的(row-oriented),即数据是按行进行存放的。每个页最多存放16KB/2-200 = 7992行记录

二、InnoDB行记录格式

InnoDB提供了Compact和Redundant两种格式来存放行记录数据。Redundant格式是为了兼容之前的版本而保留的。
2.1 Compact
MySQL5.0版本之后支持:
在这里插入图片描述

2.2 Redundant
在这里插入图片描述
2.3 行溢出数据
InnoDB可以将一条记录中的某些数据存储在真正的数据页面之外。

2.4 Compressed和Dynamic行记录格式

2.5 CHAR的行结构存储

三、InnoDB数据页结构

四、Named File Formats机制

五、约束

5.1 数据完整性

关系型数据库系统和文件系统的一个不同点是,关系数据库本身能保证存储数据的完整性,不需要应用程序的控制,而文件系统一般需要在程序端进行控制。数据完整性有以下三种形式:

  • 实体完整性:保证表中有一个主键。用户可通过定义Primary Key 或 Unique Key约束来保证实体的完整性;还可以通过编写触发器
  • 域完整性:保证每列的值满足特定的条件。途径有:(1)选择合适的数据类型(2)外键(Foreign Key)约束(3)编写触发器(4)DEFAULT约束
  • 参照完整性:保证两张表之间的关系。InnoDB允许用户定义外键以强制参照完整性,也可通过编写触发器强制执行。
5.2 约束的查找与创建

约束的创建可以在(1)表建立时就进行约束定义;(2)利用ALTER TABLE命令创建约束。

5.3 约束和索引的区别
5.4 对错误数据的约束
5.5 ENUM和SET约束
5.6 触发器与约束

触发器的作用是在执行INSERT, DELETE, UPDATE命令之前或之后自动调用SQL命令或存储过程。
创建触发器的命令是CREATE TRIGGER,只有具备Super权限的MySQL数据库用户才可以执行,最多可为一张表建立6个触发器,即三个命令之前和之后。

5.7 外键约束

六、视图(view)

视图是一个命名的虚表,由一个SQL查询来定义,可以当作表使用。与permanent table不同的是,视图中的数据没有实际的物理存储。

七、分区表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值