恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
6.数据库约束(表结构定义)
首页
资讯中心
/
6.数据库约束(表结构定义)
6.数据库约束(表结构定义)
发布时间:2026/10/14 11:03:38
【目标】• 掌握约束的使⽤场景• 掌握⾮空约束、默认约束、主键约束、唯⼀约束、外键约束、CHECK的创建1.数据库约束1.1 什么是数据库约束数据库约束是指对数据库表中的数据所施加的规则或条件其属于表结构定义即DDL同CREATE、DROP等属于同一层次的操作⽤于确保数据的准确性和可靠性。这 些约束可以是基于数据类型、值范围、唯⼀性、⾮空等规则。1.2约束类型类型名称说明NOT NULL非空约束指定非空约束的列不能存储 NULL 值DEFAULT默认约束当没有给列赋值时使用的默认值UNIQUE唯一约束指定唯一约束的列每行数据必须有唯一的值PRIMARY KEY主键约束NOT NULL 和 UNIQUE 的结合可以指定一个列或多个列有助于防止数据重复和提高数据的查询性能FOREIGN KEY外键约束是一种关系约束用于定义两个表之间的关联关系可以确保数据的完整性和一致性CHECK检查约束用于限制列或数据在数据库表中的值确保数据的准确性和可靠性约束语法字段名1 数据类型 [约束类型1]字段名2 数据类型 [约束类型2]......[]表示可写可不写2.NOT NULL约束NOT NULL指定某列不能为NULL值具体例子见下结合上章所讲id和name是可以为NULL的。我们假设一个场景就是name为NULL没有意义。那么为了防止后续的数据插入过程中插入NULL我们就可以限制name数据列不能填入NULL从图上表结构可以看出name的数据列不允许再插入NULL接下来我们来验证一、正常插入二、非正常插入3.DEFAYLT约束Default指的是默认值如果我们不指定默认值那么默认值是NULL从上图可得如果我们指定了默认值那么默认值就会按照我们指定的值进行插入需要注意的是默认值是没有数据情况下的值并不一定就是数据值当我们有数据插入的时候真实的数据值还是我们插入的值这样name的默认数据值就是 无名氏 接下来我们进行验证一、不插入数据会自动插入默认值二、插入数据插入我们输入的数据4.UNIQUE约束UNIQUE指定某列数据不能重复具体例子见下先说明这个表格的key是‘键’的意思他表示“这个字段是什么键”。这里的UNI是UNIQUE的缩写在这里表示——唯一键表明在id这一列不能有重复数据演示见下。一、正确插入二、错误插入这里错误的原因就是因为UNIQUE指定了id这一列的数据不能重复而最开始我们已经成功插入了一个id为1的数据后面再插入一个id为1的数据就会出现错误。5.PRIMARY KEY约束PRIMARY KEY约束是主键约束它是NOT NULL和UNIQUE的结合表示不能为NULL且不能有重复数据其约束的字段称之为主键指定一个列时称为单列主键表示这一列不能为NULL且不能有重复数据指定多个列时称为复合主键表示任意列都不能为空且不能与已有数据完全重复具体的例子见下主键的存在是做标识。在excel中我们把每一行的行高做为标识分别为1、2、...。而对应到数据库中,比如下列例子中的id我们把他作为标识。由于 PRIMARY KEY是 UNIQUE和NOT NULL的结合 所以也可以这样写了解即可但是需要大家明确的是在一个表中主键只能有一个。注意是主键只能有一个而不是只指定一个列的键才是主键复合主键也是主键。具体情况见下一、单列主键一个表中只能有一个主键所以以上是错误的但是可以这样做——复合主键二、复合主键通过PRIMARY KEY(字段1,字段2,...);上述例子中id和name两列复合成一个复合主键在这里的作用就是id和name两者的数据两列数据任意一列都不能为NULL、且不能和已有数据全重复。见下我们先插入一行测试数据错误示例见下一、不能同时和已有数据重复但是可以这样做二、任意一个都不能为 NULL注意不是不能同时为NULL是任意一个都不能为NULL一、总结对于单列主键后进数据不能与已有数据重复、且不能为NULL对于复合主键后进数据不能完全和已有数据重复、且任意一列都不能为NULL二、extra讲解想必现在大家对这个表格除了Extra这一列都熟知了这里就简单讲解一下Extra这一列啥意思Extra 额外的、附加的。显示的是这个字段的额外信息比如是否自增等常用见下Extra 显示含义auto_increment自增DEFAULT_GENERATED默认值由表达式生成on update CURRENT_TIMESTAMP更新时自动更新时间STORED GENERATED存储生成列VIRTUAL GENERATED虚拟生成列空没有额外信息举例说明删除原来的表新建一个表并且定义 id为主键自增、name不为null一、情况一不定义主键明明我们没有定义主键可是服务器还是自动为我们加上了id默认是从1开始二、情况二在主键中定义NULL遇到自增不报错三、情况三报错但是自增值仍增加导致插入值和预想值不一样报错原因指定name不为null但是数据插入name为null那么我们插入正确数据但是实际上:这是因为虽然insert into class values(null,null);没有插入但是这里id自增值是增加了的这时默认变成5了而在insert into class values(null,钱七);之后id自增值又增加了这时就变成了6。这里提醒一句当前自增值是在最大主键值没有默认最大自增值的基础上进行加一得到的6.FOREIGN KEY约束FOREIGN KEY约束是一种关系约束用于定义两个表的关联关系语法为FOREIGN KEY (本表列) REFRERNCES 主表名(主表列)注意点见下外键列写的是“当前表的列”不能带表名主键列写的是“主表的列”主表的主表列必须是主键或者唯一键现在先建两个表class用于存放班级信息、student用于存放学生信息把class当作主表一、对于插入分别插入数据这两者就是对应的但是大家可能有一个疑问这也没有体现主外键关系啊那么就来给大家演示——错误数据插入这就没办法插入了因为主外键对应情况下主表class没有(5java5)这个班级也就是说class没有student关联的数据。二、对于删除那么在删除主表中的数据时会发生什么呢不能进行删除因为我们的从表student中还有对主表进行依赖的数据只有我们先删除了从表中依赖的主表中要删除的数据的时候然后才能成功删除数据。先删除从表的依赖数据再删除主表的待删数据7.CHECK约束CHECK约束用于限制数据库表中的值。CHECK约束的语法CHECK(约束条件);实例见下创建一个身份表一、插入正常数据二、插入错误数据