当前位置: 首页 > news >正文

数据库中常见的六种约束,有一种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被很多企业所使用,毕竟它的优点还是很多的。

 

相关文章:

  • FastJson时间格式化问题-踩坑集锦
  • 新160个CrackMe分析-第1组:1-10(下)
  • 一文聊透数字化转型,获得企业未来生存的入场券--童亚斋
  • 我实践:搭建轻量git服务器的两个方案
  • Oracle 清理归档日志
  • [1]-基于图搜索的路径规划基础
  • 工业相机飞拍模式介绍及相机曝光值计算
  • spring cloud 使用oauth2 问题收集
  • vscode-pretter 插件支持 styled-components 格式化问题
  • 搭建微服务项目框架环境
  • 与MySQL的纠缠(卸载与安装)
  • nodejs+vue+elementui影城选座管理系统python518
  • 机器学习笔记之支持向量机(一)模型构建思路
  • python-(4-3)数据类型的应用(元组、集合)
  • Hbase基本概念
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • Docker入门(二) - Dockerfile
  • java8-模拟hadoop
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Python语法速览与机器学习开发环境搭建
  • Vue.js源码(2):初探List Rendering
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 简单实现一个textarea自适应高度
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 用简单代码看卷积组块发展
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 白色的风信子
  • 数据可视化之下发图实践
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #if 1...#endif
  • (1)(1.13) SiK无线电高级配置(五)
  • (Java数据结构)ArrayList
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (离散数学)逻辑连接词
  • (一)appium-desktop定位元素原理
  • (转)LINQ之路
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .dwp和.webpart的区别
  • .NET Core WebAPI中封装Swagger配置
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET 表达式计算:Expression Evaluator
  • .netcore如何运行环境安装到Linux服务器
  • /*在DataTable中更新、删除数据*/
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • ;号自动换行
  • @EnableWebMvc介绍和使用详细demo
  • @RequestParam详解
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [20140403]查询是否产生日志