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

文章目录

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

一、完整性约束概述

完整性约束条件是对字段进行限制,要求用户对该属性进行的操作符合特定的要求。如果不满足完整性约束条件,数据库系统将不再执行用户操作,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 列名 类定义;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/948178.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于PINN进一步的探讨

pinn 是有监督、无监督、半监督? PINN(Physics-Informed Neural Networks,物理信息神经网络)通常被归类为一种有监督学习的方法。在PINN中,神经网络的训练过程不仅依赖于数据点(例如实验观测数据&#xff0…

VUE条件树查询 自定义条件节点

之前实现过的简单的条件树功能如下图&#xff1a; 经过最新客户需求确认&#xff0c;上述条件树还需要再次改造&#xff0c;以满足正常需要&#xff01; 最新暴改后的功能如下红框所示&#xff1a; 页面功能 主页面逻辑代码&#xff1a; <template><div class"…

游戏如何检测iOS越狱

不同于安卓的开源生态&#xff0c;iOS一直秉承着安全性更高的闭源生态&#xff0c;系统中的硬件、软件和服务会经过严格审核和测试&#xff0c;来保障安全性与稳定性。 据FairGurd观察&#xff0c;虽然iOS系统具备一定的安全性&#xff0c;但并非没有漏洞&#xff0c;如市面上…

GraphRAG vs 传统 RAG:如何通过知识图谱提升 AI 检索能力

相比传统 RAG 仅能独立检索文本片段的局限性&#xff0c;GraphRAG通过构建实体关系图谱实现了信息间的连接&#xff0c;让 AI 能更完整地理解和检索复杂的关联信息&#xff0c;从而生成更准确和连贯的回答 问题背景: 想象有一本详细记录某人(X)成就的传记,每个章节都描述了他的…

Linux平台下实现的小程序-进度条

目录 1.换行、回车概念 2.缓冲区 2.1缓冲区 2.2强制刷新 3.进度条程序 Makefile文件 ProgressBar.h ProgressBar.c Main.c 执行结果 1.换行、回车概念 /n&#xff1a;换行回车&#xff08;\r&#xff1a;回车&#xff09; 2.缓冲区 如下图在vim编辑器中的命令模式下…

【顶刊TPAMI 2025】多头编码(MHE)之Part 6:极限分类无需预处理

目录 1 标签分解方法的消融研究2 标签分解对泛化的影响3 讨论4 结论 论文&#xff1a;Multi-Head Encoding for Extreme Label Classification 作者&#xff1a;Daojun Liang, Haixia Zhang, Dongfeng Yuan and Minggao Zhang 单位&#xff1a;山东大学 代码&#xff1a;https:…

【Leetcode】732. 我的日程安排表 III

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 当 k k k 个日程存在一些非空交集时&#xff08;即, k k k 个日程包含了一些相同时间&#xff09;&#xff0c;就会产生 k k k 次预订。 给你一些日程安排 [startTime, endTime…

Tableau数据可视化与仪表盘搭建-数据连接

连接数据有三种类型 第一种&#xff0c;连接到本地文件&#xff0c;例如Excel&#xff0c;csv&#xff0c;JSON等 第二种&#xff0c;连接到数据库&#xff0c;例如MySQL 注意&#xff1a;连接到数据库要安装对应的数据库的驱动的 连接本地文件

Chapter4.2:Normalizing activations with layer normalization

文章目录 4 Implementing a GPT model from Scratch To Generate Text4.2 Normalizing activations with layer normalization 4 Implementing a GPT model from Scratch To Generate Text 4.2 Normalizing activations with layer normalization 通过层归一化&#xff08;La…

搭建开源版Ceph分布式存储

系统&#xff1a;Rocky8.6 三台2H4G 三块10G的硬盘的虚拟机 node1 192.168.2.101 node2 192.168.2.102 node3 192.168.2.103 三台虚拟机环境准备 1、配置主机名和IP的映射关系 2、关闭selinux和firewalld防火墙 3、配置时间同步且所有节点chronyd服务开机自启 1、配置主机名和…

GPIO、RCC库函数

void GPIO_DeInit(GPIO_TypeDef* GPIOx); void GPIO_AFIODeInit(void); void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); //输出 读 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,…

使用JMeter玩转tidb压测

作者&#xff1a; du拉松 原文来源&#xff1a; https://tidb.net/blog/3f1ada39 一、前言 tidb是mysql协议的&#xff0c;所以在使用过程中使用tidb的相关工具连接即可。因为jmeter是java开发的相关工具&#xff0c;直接使用mysql的jdbc驱动包即可。 二、linux下安装jmet…

Launcher3主页面加载显示流程分析

布局结构 抓取布局后&#xff0c;可以看到每个图标是一个DoubleShadowBubbleTextView&#xff0c;父布局是CellLayout、workspace。 我们可以在CellLayout添加子view打印出调用堆栈信息&#xff0c;可以整体上看页面加载显示流程。 主要类 Launcher.java&#xff1a;主界面&…

开发培训:慧集通(DataLinkX)iPaaS集成平台-基于接口的连接器开发(不需要认证机制)

一、开发一个简单的应用0源&#xff0c;本实例中对接的应用不需要接口认证 1、【连接管理-自建】新建应用源&#xff0c;保存并发布 代码示例 return {$$ - >//日志打印$$.$Log.info(日志打印) } 二、使用应用&#xff0c;建立应用连接 1、实例创建&#xff0c;【连接管理…

pikachu靶场--目录遍历和敏感信息泄露

pikachu靶场—目录遍历和敏感信息泄露 目录遍历 概述 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量&#xff0c;从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时&#xff0c;便会将请求的这个文件的值(比如文件名称)传递到后台&#xff0c;后台再…

机器学习详解(13):CNN图像数据增强(解决过拟合问题)

在之前的文章卷积神经网络CNN之手语识别代码详解中&#xff0c;我们发现最后的训练和验证损失的曲线的波动非常大&#xff0c;而且验证集的准确率仍然落后于训练集的准确率&#xff0c;这表明模型出现了过拟合现象&#xff1a;在验证数据集测试时&#xff0c;模型对未见过的数据…

Word2Vec解读

Word2Vec: 一种词向量的训练方法 简单地讲&#xff0c;Word2Vec是建模了一个单词预测的任务&#xff0c;通过这个任务来学习词向量。假设有这样一句话Pineapples are spiked and yellow&#xff0c;现在假设spiked这个单词被删掉了&#xff0c;现在要预测这个位置原本的单词是…

#渗透测试#漏洞挖掘#WAF分类及绕过思路

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

电子应用设计方案85:智能 AI门前柜系统设计

智能 AI 门前柜系统设计 一、引言 智能 AI 门前柜系统旨在提供便捷、安全和智能的物品存储与管理解决方案&#xff0c;适用于家庭、公寓或办公场所的入口区域。 二、系统概述 1. 系统目标 - 实现无接触式物品存取&#xff0c;减少交叉感染风险。 - 具备智能识别和分类功能&am…

如何在不丢失数据的情况下从 IOS 14 回滚到 IOS 13

您是否后悔在 iPhone、iPad 或 iPod touch 上安装 iOS 14&#xff1f;如果你这样做&#xff0c;你并不孤单。许多升级到 iOS 14 beta 的 iPhone、iPad 和 iPod touch 用户不再适应它。 如果您在正式发布日期之前升级到 iOS 14 以享受其功能&#xff0c;但您不再适应 iOS 14&am…