数据库|数据库中常见的六种约束,有一种MySql不支持,你知道是哪个吗?

数据库|数据库中常见的六种约束,有一种MySql不支持,你知道是哪个吗?

文章图片


对于每个程序员来说 , 数据库系统无疑是很熟悉的软件 。 对于数据库中的约束 , 自然也经常打交道了 。
数据库中的约束 , 顾名思义即是对插入数据库中的数据进行了一定的限定 , 这样做的目的是为了保证数据的完整性和有效性 。 这样会大幅度地提升数据库中数据的质量 , 节省数据库空间和提高运行效率 。
那么 , 常见的数据库约束有哪几种呢?我们下面一起来看一下 。
1、主键约束Primary Key
理论上来说 , 每一个数据表都应该设置一个唯一主键 , 它就像身份证一样 , 唯一标识着这条数据 。 设置为主键的列不允许为空 , 也在全表里面唯一 。
2、非空约束Not Null
非空约束意味着这张数据表中的某一列是必填字段 , 既不允许为空 。 就比如我们在使用很多网上系统的时候 , 用户名密码都不能为空一样 。
3、唯一约束Unique
唯一约束用来保护表中的某列数据不允许重复 , 它与主键约束类似 , 但是级别没有主键高 。 一份表中 , 唯一约束可以创建多个 , 并且唯一约束的列通常可以为空 。 通常在一个系统里面 , 类似于手机号、账户、邮箱等 , 都会被设置为唯一约束 。

4、默认约束Default
有些时候 , 我们插入数据的时候 , 不会把所有的数据列内容都填入 , 因此 , 有些列会被设置一个默认值 , 如果没有给该列设置值 , 就会默认值来填充 。 例如我们在很多系统里面 , 插入国籍的时候 , 默认都是中国 , 除非自己去改动 , 否则就会使用默认值 。
5、外键约束Foreign Key
外键约束用于在两个表之间的数据设立关联 , 例如一个城市属于那个国家 , 这个国家的代码应该与国家表的主键相关联 , 即一个城市所属的国家应该存在于地球上 , 而不是会出现某个城市位于世界上没有的国家 。
6、检查约束Check
检查约束意为对该列的数值进行检查 , 例如说我们在做一个系统的时候 , 年龄这个字段 , 其取值范围应该不小于0 , 因为世界上没有小于0岁的人 。 而这个最大值也应该有一个范围 。 据说世界上活得最久的人是清朝的李清云 , 享年256岁 , 一生中娶了24位妻子 , 共有180位子女 。 虽然随着科学的进步 , 人们的寿命在增长 。 但是如果现在出现一个年龄为500岁的人 , 我们都会觉得数据一定是有问题的 。
而这样的问题是经常会发生的 。 例如说2011年的时候 , 意大利农业供应管理局就在数据库中将30多万头意大利奶牛的寿命从122个月提高到了999个月 , 导致很多奶牛在系统里面拥有了近乎“永久”的户口 , 从而用于骗取欧盟的农业补贴 。
因此我们可以看到 , 检查约束对于数据的完整性而言还是很有用的 , 虽然我们也可以将相关代码在业务逻辑层实现 。 但是多一层保护都是好的 , 毕竟有修改数据库权限的系统可能不止一个 。
但是在流行的MySql数据库里 , check约束却是不被支持的 。 不同于PostgresSQL等数据库 , 在MYSQL中 , CHECK只是一段可调用但毫无意义的子句 。 MySQL会直接忽略 。 如果想实现Check约束的话 , 可以考虑写一个触发器 。
除了Check约束以外 , 还有很多其它数据库支持而MySql不支持的操作 , 例如说不支持intersect操作、datetime不支持毫秒等 。

但是这并不妨碍MySql被很多企业所使用 , 毕竟它的优点还是很多的 。
【数据库|数据库中常见的六种约束,有一种MySql不支持,你知道是哪个吗?】