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

数据表中列的完整性约束概述

文章目录

    • 一、完整性约束概述
    • 二、设置表字段的主键约束
    • 三、设置表字段的外键约束
    • 四、设置表字段的非空约束
    • 五、设置表字段唯一约束
    • 六、设置表字段值自动增加
    • 七、设置表字段的默认值
    • 八、调整列的完整性约束

一、完整性约束概述

完整性约束条件是对字段进行限制,要求用户对该属性进行的操作符合特定的要求。如果不满足完整性约束条件,数据库系统将不再执行用户操作,MySQL中基本的完整性约束条件如下表所示:
在这里插入图片描述

二、设置表字段的主键约束

主键是表的一个特殊字段,能唯一标识该表中的每条信息。主键和记录的关系,如同身份证和人的关系。主键用来标识每个记录,每个记录的主键值都不同。身份证用来表明人的身份,每个人都具有唯一的身份号。设置表的主键是指在创建表时设置表的某个字段为该表的主键。主键的主要目的是帮助数据库管理系统以最快的速度查找到表的某一条信息。主键必须满足的条件就是主键必须是唯一的,表中的任意两条记录的主键字段的值不能相同,并且是非空值。主键可以是单一的字段,也可以是多个字段的组合。
1.单字段主键
单字段主键的语法规则如下:

CREATE TABLE tablename(propName propType PRIMART KEY,.....);

或者

CREATE TABLE tablename(propName propType,......PRIMARY KEY(propType));

在这里插入图片描述
MySQL支持给主键设置名字:

CREATE TABLE tablename(propName propType,.....CONSTRAINT pk_name PRIMARY KEY(propType));

给id字段的PK约束设置一个名字,可以执行SQL语句CONSTRAINT。
在这里插入图片描述
2.多字段主键
主键是由多个属性组合而成时,在属性定义完之后统一设置主键。语法规则如下:

CREATE TABLE tablename(propName1 propType, propName2 propType,......[CONSTRAINT pk_name] PRIMART KEY(propName1, propName2));

在这里插入图片描述

三、设置表字段的外键约束

外键是表的一个特殊字段,外键约束是为了保证多个表(通常为两个表)之间的参照完整性,即构建两个表的字段之间的参照关系。设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值范围由父表决定。例如表示一个班级和学生的关系,即每个班级有多个学生。首先应该有两个表:班级表和学生表,然后学生表有一个表示班级号的字段,其依赖于班级表的主键,这样的字段就是学生表的外键,通过该字段班级表和学生表建立了关系。
一个班级表:
在这里插入图片描述
每一行对应着一个班级,而一个班级对应着多个学生,所以班级表和学生表的关系就是“一对多”。
在这里插入图片描述
在设置外键约束时,设置外键约束的字段必须依赖于数据库中已经存在的父表的主键,同时外键可以为空(NULL)。设置表中的某字段的外键约束非常简单,可以在MySQL数据库管理系统中通过SQL语句FOREIGN KEY来实现。其语法形式如下所示:

CREATE TABLE tablename_1(proName1 proType,proName2 proType,......[CONSTRAINT fk_name] FOREIGN KEY(propName1) REFERENCES table2_name(table2_column));

其中tablename_1参数时要设置外键的表名,proName1参数是要设置外键的字段,tablename_2是父表的名称,table2_column是父表中设置主键约束的字段名。
在这里插入图片描述

四、设置表字段的非空约束

当数据库表中的某个字段上的内容不希望设置为NULL时,可以使用非空约束进行设置,非空约束在创建数据库表时为某些字段加上“NOT NULL”约束条件,保证所有记录中的该字段都有值。如果在用户插入的记录中该字段为空值,那么数据库管理系统会报错。设置表中某字段的非空约束非常简单,在MySQL数据库管理系统中是通过SQL语句NOT NULL来实现,其语法形式如下:

CREATE TABLE tablename(propName propType NOT NULL,.....);

在这里插入图片描述

五、设置表字段唯一约束

当数据库表中某个字段上的内容不允许重复时,可以使用唯一约束进行设置,唯一约束在创建数据表时为某些字段加上"UNIQUE"约束条件,保证所有记录中该字段上的值不重复。如果在用户插入的记录中该字段上的值与其他记录中该字段上的值重复,那么数据库管理系统会报错。设置表中某字段的唯一约束非常简单,可以在MySQL数据库管理系统中通过SQL语句UNIQUE来实现,其语法形式如下:

CREATE TABLE tablename(propName propType UNIQUE, ......);

注意:UNIQUE约束允许受约束的字段出现多个空值,不算重复。
在这里插入图片描述

六、设置表字段值自动增加

"AUTO_INCREMENT"是MySQL唯一扩展的完整性约束,当向数据库表中插入新记录时,字段上的值会自动生成唯一的ID。在具体设置"AUTO_INCREMENT"约束时,一个数据库表中只能有一个字段使用该约束,该字段的数据类型必须是整数类型。由于设置"AUTO_INCREMENT"约束后的字段会生成唯一的ID,因此该字段也经常会同时设置成主键。设置表中某字段值的自动增加约束非常简单,可以在MySQL数据库管理系统中通过SQL语句"AUTO_INCREMENT"来实现,其语法形式如下:

CREATE TABLE tablename(propName propType AUTO_INCREMENT, .....);

在上述语句中,tablename参数表示所要设置非空约束的字段名字,propName参数为属性名,propType为属性类型,propName字段要设置自动增加约束。默认情况下,字段propName的值从1开始增加,每增加一条记录,记录中该字段的值就会在前一条记录(或已存在的最大值,包括曾经存在的)的基础上加1。
在这里插入图片描述
注意:在MySQL8中,AUTO_INCREMENT必须设置为键(主键、外键和唯一键均可),否则就会报错!

七、设置表字段的默认值

当为数据库表中插入一条新记录时,如果没有为某个字段赋值,数据库系统就会自动为这个字段插入默认值。为了达到这种效果,可以通过SQL语句关键字"DEFAULT"来设置。设置数据库表中某字段的默认值非常简单,可以在MySQL数据库管理系统中通过SQL语句DEFAULT来实现,其语法形式如下:

CREATE TABLE tablename(propName propType DEFAULT defaultvalue, .....);

注意:如果没有设置,则默认为空。
在这里插入图片描述

八、调整列的完整性约束

1.修改主键、外键和唯一键
新增语句:

alter table [table_name] add constraint [constraint_name] [unique key | primary key | foreign key] ([column_name]);

添加约束
在这里插入图片描述
删除约束
通过如下命令查询键值的约束名:

show indexkeys from 表名

执行如下命令删除:

主键:alter table 表名 drop primary key;
外键或唯一键:alter table 表名 drop index 约束名;

在这里插入图片描述
2.修改默认值DEFAULT、自增长和非空
使用如下语法重新定义即可:

alter table 表名 modify 列名 类定义;

在这里插入图片描述


http://www.kler.cn/a/461767.html

相关文章:

  • 网络安全【C10-2024.10.1】-sql注入基础
  • Fastapi项目通过Jenkins2.4.91自动化构建部署到Nginx1.20进行访问详细方法(完全自动化部署亲测可用)
  • 云效流水线使用Node构建部署前端web项目
  • 最新MySQL面试题(2025超详细版)
  • Ethernet 系列(12)-- 基础学习::SOME/IP
  • 机器学习之模型评估——混淆矩阵,交叉验证与数据标准化
  • 网络安全公司Chrome扩展被劫持,用户密码遭窃
  • 从RNN循环神经网络到长短时记忆网络LSTM
  • Flutter中进行多平台开发的ip设置
  • HTML5 标签输入框(Tag Input)详解
  • Android Studio学习笔记
  • 我的杂记一
  • 数据中心基础设施管理平台:构建高效、安全与可扩展的基石
  • OpenCV和PyQt的应用
  • 基于JavaWeb的汽车维修保养智能预约系统
  • doris 2.1 -Data Manipulation-Transaction
  • 等价和划分
  • [算法学习笔记] 《Hello算法》第5章 栈与队列
  • javaEE-文件操作和IO-文件
  • Elasticsearch:探索 Elastic 向量数据库的深度应用
  • vue2实现txt文件在线预览
  • 通过服务器推送消息:Websocket和SSE解释
  • Kafka为什么要放弃Zookeeper
  • 医疗实时数仓环境配置与ods层
  • Conda 命令教程
  • 折叠手机突然折翅,折叠屏采购暴跌,苹果挽救或是幻想