字段默认值:针对每个字段都有自己的默认值,较有利于进行统计和分析,以及方便程序逻辑操作;不可为空:若是该字段创建为索引情况下,且允许为NULL,则存储多个值,若是不允许为空,可能用某一个值替代。
一、关系型数据库中的字段默认值、不可为空、少数索引约束的优缺点
1.字段默认值:针对每个字段都有自己的默认值,较有利于进行统计和分析,以及方便程序逻辑操作;
2.不可为空:若是该字段创建为索引情况下,且允许为NULL,则存储多个值,若是不允许为空,可能用某一个值替代,则索引值更少,以及部分数据库产品不支持字段为NULL情况下创建索引(特别是早期的数据库产品)。
3.少数性约束:那是指有数据少数性要求的情况下,可以借助数据库的方式判断是否存在重复值,而避免程序去判断,减少事务的处理等。
六大约束:
not null 非空 :用于保障该字段的值不能为空, 比如姓名、学号等
Default 默认: 用于保证该字段有默认值,比如性别、
PRIMARY KEY 主键: 用于保证该字段的值有少数性,并且 非空。是能够少数的标识一组数据的数据元素;比如说:学号,姓名,年龄,性别,课程号课程中学号是少数的
UNIQUE 少数约束: 用于保障该字段的值有少数性,可以为空, 比如座位号
Check 检查约束:mysql中不支持,但不报错
Foreign KEY 外键:用于限制两个标的关系 用于保证该字段的值必须来自于主表关联的值。 一组数据的主键是另一组数据的的元素;主键约束了外键所在表中不能存在主键类之外的值;外键用于与另一张表的关联。比如:学生表的专业编号、员工表的部门编号。
延伸阅读:
二、索引维护
B+树为了维护索引有序性,在插入新值的时候需要做必要的维护。以上面这个图为例,如果插入新的行ID值为700,则只需要在R5的记录后面插入一个新记录。如果新插入的ID值为400,就相对麻烦了,需要逻辑上挪动后面的数据,空出位置。
而更糟的情况是,如果R5所在的数据页已经满了,根据B+树的算法,这时候需要申请一个新的数据页,然后挪动部分数据过去。这个过程称为页分裂。在这种情况下,性能自然会受影响。
除了性能外,页分裂操作还影响数据页的利用率。原本放在一个页的数据,现在分到两个页中,整体空间利用率降低大约50%。
当然有分裂就有合并。当相邻两个页由于删除了数据,利用率很低之后,会将数据页做合并。合并的过程,可以认为是分裂过程的逆过程。