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

news2025/1/4 21:41:13

文章目录

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

一、完整性约束概述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何解决Eigen和CUDA版本不匹配引起的错误math_functions.hpp: No such file or directory

Apollo9针对RTX40的docker环境里的Eigen库版本是3.3.4,CUDA是11.8: 编译我们自己封装模型的某些component代码时没问题,编译一个封装occ模型的component代码时始终报错: In file included from /usr/include/eigen3/Eigen/Geometry:11:0, …

【非关系型数据库Redis 】 入门

Redis入门 一、非关系型数据库概述 (一)概念 非关系型数据库(NoSQL,Not Only SQL)是相对于传统的关系型数据库而言的一种数据存储管理系统。它摒弃了关系型数据库中严格的表结构、SQL 语言操作以及复杂的事务等特性…

0基础跟德姆(dom)一起学AI 自然语言处理10-LSTM模型

1 LSTM介绍 LSTM(Long Short-Term Memory)也称长短时记忆结构, 它是传统RNN的变体, 与经典RNN相比能够有效捕捉长序列之间的语义关联, 缓解梯度消失或爆炸现象. 同时LSTM的结构更复杂, 它的核心结构可以分为四个部分去解析: 遗忘门输入门细胞状态输出门…

Ribbon源码分析

一、Spring定制化RestTemplate,预留出RestTemplate定制化扩展点 org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration 二、Ribbon定义RestTemplate Ribbon扩展点功能 org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguratio…

【C++】智能指针详解(实现)

在本篇博客中,作者将会带领你理解并自己手动实现简单的智能指针,以加深对智能指针的理解。 一.什么是智能指针,为什么需要智能指针 智能指针是一种基于RAII思想实现的一种资源托管方式,至于什么是RAII,后面会讲到。 对…

【微服务】【Sentinel】认识Sentinel

文章目录 1. 雪崩问题2. 解决方案3. 服务保护技术对比4. 安装 Sentinel4.1 启动控制台4.2 客户端接入控制台 参考资料: 1. 雪崩问题 微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。动图演示: 在微服务系统…

macos 支持外接高分辩率显示器开源控制软件

macos 支持外接高分辩率显示器开源控制软件 软件(app应用)名:BetterDisplay 官方地址: https://github.com/waydabber/BetterDisplay

JVM实战—7.如何模拟GC场景并阅读GC日志

大纲 1.动手模拟出频繁Young GC的场景 2.JVM的Young GC日志应该怎么看 3.代码模拟动态年龄判定规则进入老年代 4.代码模拟S区放不下部分进入老年代 5.JVM的Full GC日志应该怎么看 6.问题汇总 1.动手模拟出频繁Young GC的场景 (1)程序的JVM参数示范 (2)如何打印出JVM GC…

javaEE-文件操作和IO-文件

目录 一.什么是文件 1.文件就是硬盘(磁盘)上的文件。 2.计算机中存储数据的设备: 3.硬盘的物理特征 4.树型结构组织和⽬录 5.文件路径 文件路径有两种表示方式: 6.文件的分类 二、java中文件系统的操作 1.File类中的属性: 2.构造方…

使用 Docker 搭建 Hadoop 集群

1.1. 启用 WSL 与虚拟机平台 1.1.1. 启用功能 启用 WSL并使用 Moba 连接-CSDN博客 1.2 安装 Docker Desktop 最新版本链接:Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本链接:Docker Desktop release notes | Do…

数据结构(系列)

在Python中,列表(list)是一种基本的数据结构,它可以存储一系列的元素。列表是可变的,即可以对其进行增删改查操作。 栈(Stack)是一种具有特定限制的线性数据结构,在栈中&#xff0c…

【Linux】HTTP cookie与session

在登录B站时,有登录和未登录两种状态, 问题:B站是如何认识我这个登录用户的?问题:HTTP是无状态、无连接的,怎么能够记住我? HTTP协议是无状态、无连接的。比如客户端(浏览器&#…

Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J集成logback 及 原理分析

文章目录 Pre官网集成步骤POM依赖使用第一步:编写 Logback 的配置文件第二步:在代码中使用 SLF4J 原理分析1. 获取对应的 ILoggerFactory2. 根据 ILoggerFactory 获取 Logger 实例3. 日志记录过程 小结 Pre Java - 日志体系_Apache Commons Logging&…

5.系统学习-PyTorch与多层感知机

PyTorch与多层感知机 前言PyTroch 简介张量(Tensor)张量创建张量的类型数据类型和 dtype 对应表张量的维度变换:张量的常用操作矩阵或张量计算 Dataset and DataLoaderPyTorch下逻辑回归与反向传播数据表格 DNN(全连结网络&#x…

ubuntu 如何使用vrf

在Ubuntu或其他Linux系统中,您使用ip命令和sysctl命令配置的网络和内核参数通常是临时的,这意味着在系统重启后这些配置会丢失。为了将这些配置持久化,您需要采取一些额外的步骤。 对于ip命令配置的网络接口和路由,您可以将这些配…

Unity Shader TexelSize的意义

TexelSize在制作玻璃折射效果时会用到。 // Get the normal in tangent space fixed3 bump UnpackNormal(tex2D(_BumpMap, i.uv.zw)); // Compute the offset in tangent space float2 offset bump.xy * _Distortion * _RefractionTex_TexelSize.xy; i.scrPos.xy offset * i…

嵌入式硬件杂谈(七)IGBT MOS管 三极管应用场景与区别

引言:在现代嵌入式硬件设计中,开关元件作为电路中的重要组成部分,起着至关重要的作用。三种主要的开关元件——IGBT(绝缘栅双极型晶体管)、MOSFET(金属氧化物半导体场效应晶体管)和三极管&#…

【亲测有效】k8s分布式集群安装部署

1.实验环境准备 准备三台centos7虚拟机,用来部署k8s集群: master(hadoop1,192.168.229.111)配置: 操作系统:centos7.3以及更高版本都可以配置:4核cpu,4G内存&#xff…

【SQL server】教材数据库(5)

使用教材数据库(1)中的数据表完成以下题目: 1 根据上面基本表的信息定义视图显示每个学生姓名、应缴书费 2 观察基本表数据变化时,视图中数据的变化。 3利用视图,查询交费最高的学生。 1、create view 学生应缴费视…

去除el-tabs 下面的灰色横线,并修改每一项的左右间距,和字体颜色

HTML <el-tabs v-model"activeName" class"demo-tabs" tab-click"handleClick"><el-tab-pane label"全部" :name"null"></el-tab-pane><el-tab-pane label"问答陪练" name"general-t…