【重学 MySQL】六十一、数据完整性与约束的分类

news2024/11/23 2:00:54

【重学 MySQL】六十一、数据完整性与约束的分类

  • 数据完整性
  • 什么是约束
  • 约束的分类
  • 如何查看、添加和删除约束
    • 查看约束
    • 添加约束
    • 删除约束

在这里插入图片描述
在MySQL中,数据完整性是确保数据库中数据的准确性和一致性的关键。为了实现数据完整性,MySQL提供了多种约束类型,这些约束可以根据其功能和作用进行分类。

数据完整性

数据完整性是指数据库中数据的准确性和一致性,它要求数据库中的数据必须满足特定的规则和条件。数据完整性可以分为三类:实体完整性、域完整性和引用完整性。

  1. 实体完整性:确保表中的每一行数据都有一个唯一标识,通常通过主键约束来实现。主键的值必须唯一,且不能为NULL。
  2. 域完整性:限制表中特定列的数据必须满足的条件,以确保数据的准确性和有效性。域完整性通常通过数据类型、非空约束、默认值约束和检查约束等来实现。
  3. 引用完整性:维护两个或多个表之间的关系,确保一个表中的外键值在另一个表的主键中存在,从而防止破坏表之间关系的无效数据。引用完整性通常通过外键约束来实现。

什么是约束

约束(Constraint)在数据库管理系统中,是一种用于限制表中数据类型的规则或条件。这些规则或条件旨在确保数据的准确性和可靠性,防止无效或不一致的数据进入数据库。约束可以应用于单个列或多个列,以及表之间的关系。

在数据库设计中,约束扮演着至关重要的角色,因为它们能够:

  1. 保证数据的准确性:通过限制可以输入的数据类型和值,约束确保数据符合业务规则。

  2. 维护数据的一致性:约束确保不同表之间的数据关系保持一致,例如通过外键约束来维护参照完整性。

  3. 提高数据质量:通过防止无效数据的输入,约束有助于提高整个数据库的数据质量。

  4. 简化数据维护:有了约束,数据库管理员可以更容易地管理和维护数据,因为约束会自动执行数据验证。

总之,约束是数据库管理系统中用于确保数据准确性和一致性的重要工具。通过合理应用约束,可以大大提高数据库的质量和可靠性。

约束的分类

MySQL中的约束类型根据其功能和作用可以分为多种,以下是常见的约束类型及其说明:

  1. 主键约束(Primary Key Constraint)

    • 定义:唯一标识表中的每一行数据。
    • 特点:主键值必须唯一,且不能为NULL。每个表中只能有一个主键,但可以由一个或多个列组合而成。
  2. 外键约束(Foreign Key Constraint)

    • 定义:用于维护两个表之间的关系,确保一个表中的外键值在另一个表的主键中存在。
    • 特点:外键值必须在其所引用的主键表中存在,或者为NULL(如果允许)。外键约束有助于防止破坏表之间关系的无效数据。
  3. 唯一约束(Unique Constraint)

    • 定义:确保表中的某一列或一组列的值是唯一的。
    • 特点:唯一约束允许NULL值,但NULL值不被视为重复值。一个表中可以有多个唯一约束。
  4. 非空约束(Not Null Constraint)

    • 定义:确保表中的某一列的值不为NULL。
    • 特点:非空约束适用于那些必须有值的字段。即使表中的其他列允许为NULL,也可以通过非空约束保证特定列的值不为NULL。
  5. 检查约束(Check Constraint)注意:MySQL 8.0.16及更高版本支持检查约束)

    • 定义:用于限制表中的某一列的值必须满足特定的条件。
    • 特点:检查约束可以确保列中的值在指定的范围内或满足特定的条件。例如,可以使用检查约束确保年龄必须大于0或日期必须在有效范围内内。
  6. 默认值约束(Default Constraint)

    • 定义:为表中的某一列指定默认值,当插入新行时未指定该列的值时,将使用默认值。
    • 特点:默认值约束适用于那些在没有明确指定值时需要一个标准值的字段。
  7. 自动递增约束(Auto Increment Constraint)

    • 定义:为表中的某一列指定一个自动递增的值,通常用于主键或ID列。
    • 特点:自动递增约束确保每次插入新行时,该列的值都会自动增加,从而确保主键的唯一性。
  8. 级联约束(Cascade Constraint)

    • 定义:当父表中的行被删除或更新时,级联到子表中相应的行。
    • 特点:级联约束有助于维护表之间的数据一致性。例如,当删除一个用户时,可以级联删除该用户所有的订单记录。
  9. 索引约束(Index Constraint)

    • 定义:限制在索引列上可以执行的操作,例如唯一性或外键约束。
    • 特点:索引约束可以提高查询性能,并确保数据的唯一性或参照完整性。
  10. 空间约束(Spatial Constraint)

    • 定义:指定地理空间列可以容纳的空间类型和维度。
    • 特点:空间约束用于处理地理空间数据,例如地理信息系统(GIS)中的经纬度坐标。

综上所述,MySQL通过提供多种约束类型来确保数据的完整性和一致性。在创建表时,可以根据实际需求添加适当的约束,以提高数据库的可靠性和安全性。

如何查看、添加和删除约束

在MySQL数据库中,查看、添加和删除约束是数据库管理的重要操作。

查看约束

要查看表中的约束,可以使用以下几种方法:

  1. 使用SHOW INDEX语句

    SHOW INDEX IN 表名;
    

    这条语句将显示表中所有的索引,包括主键、唯一键等约束。在结果中,Key_name列的值就是约束名。

  2. 使用SHOW CREATE TABLE语句

    SHOW CREATE TABLE 表名;
    

    这条语句将显示表的创建语句,包括所有的约束定义。在结果中,CONSTRAINT后面的值就是系统自动生成的约束名。

添加约束

在MySQL中,可以使用ALTER TABLE语句来添加约束。以下是常见的约束及其添加方法:

  1. 添加主键约束

    ALTER TABLE 表名 ADD PRIMARY KEY (列名);
    

    或者在建表时直接添加:

    CREATE TABLE 表名 (
        列名 数据类型 PRIMARY KEY,
        ...
    );
    
  2. 添加唯一约束

    ALTER TABLE 表名 ADD UNIQUE (列名);
    
  3. 添加外键约束

    ALTER TABLE 表名 ADD FOREIGN KEY (列名) REFERENCES 参照表名(参照列名);
    
  4. 添加非空约束

    ALTER TABLE 表名 MODIFY 列名 数据类型 NOT NULL;
    
  5. 添加默认值约束

    ALTER TABLE 表名 ALTER COLUMN 列名 SET DEFAULT 默认值;
    
  6. 添加检查约束(MySQL 8.0.16及更高版本支持):

    ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK (条件);
    

删除约束

同样地,可以使用ALTER TABLE语句来删除约束。以下是删除常见约束的方法:

  1. 删除主键约束

    ALTER TABLE 表名 DROP PRIMARY KEY;
    
  2. 删除唯一约束

    ALTER TABLE 表名 DROP INDEX 唯一约束名;
    

    注意,这里的唯一约束名是创建唯一约束时指定的名称,或者系统自动生成的名称。

  3. 删除外键约束

    ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;
    

    同样地,外键约束名是创建外键约束时指定的名称。

  4. 删除检查约束

    ALTER TABLE 表名 DROP CHECK 检查约束名;
    

需要注意的是,在删除约束之前,应该仔细考虑其对数据完整性和业务逻辑的影响。此外,如果表中存在依赖于该约束的数据或索引,删除约束可能会导致错误或数据不一致。因此,在执行删除约束的操作之前,最好先备份数据并谨慎测试。

以上就是在MySQL中查看、添加和删除约束的详细步骤和方法。希望这些信息能帮助你更好地管理数据库中的约束和数据完整性。

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

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

相关文章

【Qt】窗口预览(1)—— 菜单栏

窗口预览(1) 1. QMainWindow2. QMenuBar——菜单栏2.1 创建菜单栏/将菜单栏添加到widget中2.2 addMenu——在菜单栏中添加菜单2.3 在菜单中添加选项2.4 添加快捷键2.5 支持嵌套添加菜单2.6 添加信号2.7 添加分割线 1. QMainWindow Qt窗口是通过QMainWin…

插件-发送邮件通知

有时候通过python运行程序,在出现异常时,需要进行邮件通知,可能还需要截图。比如对浏览器进行控制时出现了异常,则需要进行截图分析。 email-validator 2.0.0.post2 import asyncio import logging import smtpli…

C++基础面试题 | C++中野指针和悬挂指针的区别?

文章目录 回答重点:1. 野指针(Wild Pointer):2. 悬挂指针(Dangling Pointer): 拓展知识:如何避免这些问题野指针和悬挂指针 回答重点: 在C中,野指针是指未初…

职场上的人情世故,你知多少?这五点一定要了解

职场是一个由人组成的复杂社交网络,人情世故在其中起着至关重要的作用。良好的人际关系可以帮助我们更好地融入团队,提升工作效率,甚至影响职业发展。在职场中,我们需要了解一些关键要素,以更好地处理人际关系&#xf…

计算机网络:物理层 —— 信道复用技术

文章目录 信道信道复用技术信道复用技术的作用基本原理常用的信道复用技术频分复用 FDM时分复用 TDM波分复用 WDM码分复用 CDM码片向量基本原理 信道 信道是指信息传输的通道或介质。在通信中,信道扮演着传输信息的媒介的角色,将发送方发送的信号传递给…

输入三位数的整数,求最大的一位数字 python

题目: 输入三位数整数,求最大的一位数字 代码: aint(input("请输入三位正整数:")) xa%10 #个 ya//10%10 #十 za//100%10 #百 print("最大的一位数为", max(x,y,z))运行结果:

20.Nginx动静分离原理与案例实现

一.Nginx动静分离原理与案例实现 1.动静分离原理图 2.动静分离的问题 3. Nginx动静分离案例实践 3.1 nginx部署架构图 3.2 nginx部署案例实现 (1)配置tomcats.conf文件 api.z.mukewang.com反向代理tomcat api upstream tomcats {server

AI编程工具的机遇与风险

作者 吴国平 北京市隆安律师事务所 超过1万个程序员,77,000个项目使用了Copilot,55%的程序员选择Copilot。 程序员使用人工智能来协助编写代码时,最终作品的所有权就变成了一个灰色地带。传统的软件著作权法是在程序员是代码创作…

Linux高效查日志命令介绍

说明:之前介绍Linux补充命令时,有介绍使用tail、grep命令查日志; Linux命令补充 今天发现仅凭这两条命令不够,本文扩展介绍一下。 命令一:查看日志开头 head -n 行数 日志路径如下,可以查看程序启动是否…

Django一分钟:DRF生成OpenAPI接口文档

DRF项目中如果想要自动生成API文档我们可以借助drf-spectacular这个库,drf-spectacular非常强大,它可以自动从DRF中提取信息,自动生成API文档,配置简单开箱即用,并且它对很多常用的第三方如:SimpleJWT、dja…

专业高清录屏软件!Mirillis Action v4.40 解锁版下载,小白看了都会的安装方法

Mirillis Action!(暗神屏幕录制软件)专业高清屏幕录像软件,被誉为游戏视频三大神器之一。这款屏幕录制软件和游戏录制软件,拥有三大硬件加速技术,支持以超高清视频画质录制桌面和实况直播,超清视频画质&…

论文速读:基于渐进式转移的无监督域自适应舰船检测

这篇文章的标题是《Unsupervised Domain Adaptation Based on Progressive Transfer for Ship Detection: From Optical to SAR Images》基于渐进式转移的无监督域自适应舰船检测:从光学图像到SAR图像,作者是Yu Shi等人。文章发表在IEEE Transactions on Geoscience…

erlang学习:Linux命令学习9

sed命令介绍 sed全称是:Stream EDitor(流编辑器) Linux sed 命令是利用脚本来处理文本文件,sed 可依照脚本的指令来处理、编辑文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等 sed 的运行…

Dev-C++ 安装与使用(dev c++官网)(已解决)

1.Dev-C的安装 ①打开Dev-C的官网(https://sourceforge.net/projects/orwelldevcpp/ );点击Download(下载),等待5秒后开始下载。 ②点开下载好的EXE文件,等待加载完成(如图)。 右键,以管理员身份 运行安装包。 选择English(英语),…

近年来自动驾驶行业就业与企业需求情况

自动驾驶行业在近年来持续发展,就业情况和企业需求呈现出多样化和复杂化的趋势。 以下是基于我搜索到的资料对自动驾驶行业最新就业情况和企业需求的详细分析: 自动驾驶行业对高端技术人才的需求非常旺盛,尤其是架构工程师、算法工程师等岗…

四、Python基础语法(数据类型转换)

数据类型转换就是将一种类型的数据转换为另外一种类型的数据,数据类型转换不会改变原数据,是产生一个新的数据。 变量 要转换为的类型(原数据) -> num int(28) 一.int()将其他类型转换为整型 1.整数类型的字符串转换为整型 num1 28 print(type…

判断推理(3)

A正好说反了 C没说唐朝是否使用陶片 题干说的是有时会造成伤害,但是没有说服用了维生素和矿物质一定会带来伤害,所以A选项不能进行削弱 D是对比实验:增加反向论据。通过对儿童的调查发现,不服用的儿童营养缺乏症的发病率高,通过对…

Windows无需管理员权限,命令轻松修改IP和DNS

哈喽大家好,欢迎来到虚拟化时代君(XNHCYL)。 “ 大家好,我是虚拟化时代君,一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…(每天更新不间断,福利…

QML: FolderListModel(访问本地系统文件)

目录 一.性质 1.导入模块 2.基本属性 3.数据模型接口 4.方法 二.使用 1.引入 2.调用 三.效果 四.代码 一.性质 FolderListModel是QT提供的一个可以访问本地系统文件夹内容的组件,它能够将获取到的信息提供给其他组件使用。 1.导入模块 在使用FolderLis…