【MySQL数据库】 四

本文主要介绍了mysql数据库的几种常见的约束. 

一.数据库约束

我们希望存储的数据是靠谱的,mysql提供一些机制来辅助我们自动的依赖程序对数据进行检查 .

这类查数据的机制,就是约束

一旦约束好了,后续在进行增 删 改的时候,mysql就会自动的对修改的数据做出检查,如果不符合约束就会直接报错 !

not null

不是存储null值 . 跟在列名类型后面

unique

唯一 . 保证某列的某行必须有唯一的值

default

标识没有给值时候的默认值

primary key

主键 , 非空 唯一

foreign key

外键


  • not null

  • unique

指的是同一列不允许出现重复的值

设置id为unique,当插入两条id相同的数据,那么就会报错

【MySQL数据库】 四_第1张图片

  • default

【MySQL数据库】 四_第2张图片

如果未设置,使用默认值

【MySQL数据库】 四_第3张图片

  • primary key

主键约束

1.非空

2.不能重复

一个表只能有一个主键

【MySQL数据库】 四_第4张图片

自增主键

主键往往是一个整数类型的id,要求不能重复

允许客户端,在插入数据的时候,不手动指定主键的值,而是交给mysql自行分配,确保分配出来的这个主键的值,和之前的不重复

此时允许id设置为null,mysql会自动自增

mysql 服务器会维护id的最大值,每次从最大的id开始自增

如果mysql是一个单个节点的系统,基于上述策略,是没有问题的

如果mysql是一个分布式系统(有好几个主机,每个主机上都有mysql),此时自增主键就无法保证唯一性了


为了解决这个问题,市面上有一些分布式id的生成算法 ; 核心公式,目的就是为了保证系统上每个节点生成的id是唯一的 , 把id作为作为一个字符串,这个字符串由下列几个部分拼接成

1.主机编号/机房编号

2.时间戳

3.随机因子

生成的字符串格式的id就能够保证分布式系统下的唯一性了

分布式系统

由于一台主机的硬件资源是有限的 (cpu/内存/硬盘/网络带宽) ,增加主机就可以解决资源不足的问题.

  • foreign key

外键约束

父表:起约束的表

子表:受约束的表

1.插入或者修改子表中受约束的这一列的数据,就需要保证插入/修改后的数据在父表中是存在的. 如果是不存在的,就会报错

2.如果删除/修改父表中的记录,就需要看这个记录在子表中被使用了,如果被使用了,就不能进行删除/修改! ! !

索引

设置外键的时候,就会导致在进行的子表的时候,频繁的查询父表 ,这个操作是很耗时的,

为了加快查询速度,如果父表中的id这一列是带有索引,那就很好 

primary key和unique这两个约束,都是有索引的

3.没有索引,就不能建立外键

  • check

写一个具体的表达式 , 符合当前的记录条件就可以进行插入/修改

对于mysql5来说,不支持check (写了也无效)

你可能感兴趣的:(MySQL数据库,数据库,mysql)