小仙女讲InnoDB(5)——表

表的概念

表是关于特定实体的数据集合,比如用户表,加分记录表等。

特点:

(1)在InnoDB中,表都是根据主键顺序组织存放的,所以又名“索引组织表”
(2)每个表中必有主键,一般是在创建表时指定。如果没有指定:
先查看表中是否有非空的唯一索引,如果有,则为主键。如果有多个,则选择第一个定义的。
如果没有非空的唯一索引,其会自动创建一个6字节大小的指针。

逻辑存储的结构

(1)表

在上一篇的介绍日志文件博客中,我们说过,在默认情况下InnoDB有一个共享表空间ibdata1,所有数据都存放在这个表空间内。
如果用户启用了innodb_file_per_table这个参数,则每张表内的数据可以单独放到一个表空间内。我们可以将数据、索引和插入缓冲Bitmap页存放到这个单独的表空间中,其他类的数据,如回滚信息,二次写缓冲等还是要放在共享表中。

(2)段

段是表的组成部分,对段的管理是由引擎自身完成的,人为不能干预。段分为3类:

  • 数据段:B+树的叶子节点
  • 索引段:B+树的非索引节点
  • 回滚段:

(3)区

区是段的组成部分,区的大小为1MB。默认情况下,页的大小为16KB,也就是说,一个区中一共有64个连续的页。
在每个段开始时,InnoDB会先用32个碎片页来存放数据,在使用完这些碎片页之后,才开始使用64个连续页。

(4)页(块)

页是InnoDB磁盘管理的最小单位。在上面我们也说过,页的默认大小为16KB,当然我们也可以使用innodb_page_size将页的大小设置为4K、8K、16K。当设置完成后,所有表中页的大小均为此大小,除非新建库,否则不能对其进行修改。页的内部存储结构如下:
在这里插入图片描述

(5)行

每个页最多存放7992行的记录。InnoDB提供了2种格式来存放行记录数据:

  • Compact

在这里插入图片描述

  • Redundant

在这里插入图片描述

约束

约束的作用就是为了保证数据库中的数据完整性。其有3种形式:

  • 实体完整性:保证一个表中只能有一个主键
  • 域完整性:保证每列的值需满足特定的条件
  • 参照完整性:保证两张表之间的关系

和索引的区别

约束是一个逻辑的概念,用来保证数据的完整性。而索引是一个数据结构,既有逻辑上的概念,在数据库中还代表着物理存储的方式。

对错误数据的约束

在默认设置下,mysql数据库允许非法的数据插入或更新。比如向一个NOT NULL的字段插入一个NULL值,mysql会将其更改为0再插入,而不是报错。如果想让数据库严格审核输入的参数,可以设置sql_mode参数。

对离散值的约束

对离散值的约束可以使用enum和set。

create table a(id INT,set ENUM('male','female'));

对连续值的约束

对连续值的约束可以使用触发器来实现。触发器的作用就是在执行insert、delete、update命令之前或之后自动调用sql命令或存储过程。这有点AOP的思想。
一个表最多可以建立6个触发器,在“增删改”的前后各加一个。建立命令如下:

create trigger
视图和分区

视图

视图是一个虚拟的表,是一组数据的逻辑表示。其本质是对应于一条select语句,结果集被赋予一个名字,即视图名字。
视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。

分区

分区是将一个表或索引分解为多个更小、更可管理的部分。mysql只支持水平分区。分区的类型有很多种:range、list、hash等。
其中range最常用,比如我们创建表时,可以根据id值的范围来进行分区,id小于10的放入p0分区,大于等于10的放入p1分区。

©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页