数据库的完整性约束

数据库 完整性约束 数据完整性分为四类: 实体完整性:规定表的每一行在表中是惟一的实体。 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。 参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完... 阅读详情
完整性约束条件的作用对象:
  • 列级约束(针对字段,key)
    主要针对列的类型,取值范围,精度等约束
    • 对空值的约束。规定某个字段是否为空
    • 对取值范围的约束。例如,学生成绩的字段规定为 0 - 100
    • 数据类型的约束。包括数据类型,长度,精度等。例如常用的定长 varchar
    • 数据格式的约束。例如,学生表中的学号 stu_no 字段,认为规定前四位为入学年份,后面是院系的编号等
  • 元组(或称作 row,一条数据)约束
    • 元组中字段之间的约束。例如,一个活动的开始时间必须早于它的结束时间
  • 表级约束(外键)
    • 指多个元组之间,关系之间的联系的约束。例如,学生成绩表中的 stu_no 字段,实际取值源于 学生表中的 stu_no 字段
      以上是一些约束的概念,理论上的,如何实现约束,请往下看。
实体完整性

实体的完整性是通过主键(primary key)约束和候选键(candidate key)约束来实现的。所以前提条件是要了解键的一些概念和分类:

  • key:用于保证元组的唯一性

    • super-key:能够区分唯一的元组的集合
    • candidate key:super-key 中最小集
    • primary key:candidate key 中人工选择一个(一张表只能有一个或多个组成的联合主键)

    举个例子:例如有 students 表,含有字段 stu_number(学号)id(身份证号)name(姓名) 那么找出所有能够保证元组唯一性的super-key={{stu_number}, {id}, {stu_number, name}, {id, name}, {stu_number, id}, {stu_number, id, name}}然后可得 candidate key=stu_number 或 id

  • 主键约束

    • 每张表只能定义一个主键或多个主键组合的联合主键(复合主键)
    • 确保能够根据主键查询到唯一的元组,且不能为 NULL,这是唯一性原则
    • 联合主键不能包含不必要的字段。也就是说,从联合主键中删除其中一列后,还能保证唯一性,那么是不正确的。因为要满足最小集原则
    • 一个字段只能在联合主键中出现一次。因为集合的元素是唯一的
  • 创建主键约束

    • 可以在 CREATE TABLE 或 ALTER TABLE 语句中使用 PRIMARY KEY 来实现
    • 唯一主键:直接在某个字段后加上关键字
    • 联合主键:PRIMARY KEY(column_0, column_1, …)

创建主键后,数据库会自动创建唯一索引,用于对主键的快速查询,索引名默认为PRIMARY,也可以重新自定义命名

  • 创建候选键索引
  • 可以在 CREATE TABLE 或 ALTER TABLE 语句中使用 UNIQUE 来实现
  • 主键和候选键一样,只不过主键是唯一的,候选键可以是多个,所以同样具有唯一性,且不能为 NULL

创建候选键后,数据库也会自动创建 UNIQUE 索引

参照完整性(reference 或称作引用)
  • 可以在 CREATE TABLE 或 ALTER TABLE 语句中使用 FOREIGN KEY 和 REFERENCES 来实现

    FOREIGN KEY(column_name, ...)
    		REFERENCES table_name(column_name, ...)
    		[ON DELETE reference_option] 
    		[ON UPDATE reference_option] 
    #column_name 的语法格式为:column_name [(length)] [ASC | DESC]
    #refrence_option 提供选项有:RESTRICT | CASCADE | SET NULL | NO ACTION
    #"[]"内的参数为可选,不加也行,根据实际需求选择就好
    
  • 关键字ON DELETE和ON UPDATE是指定参照的动作,只要涉及这两个动作,系统就会检查完整性约束,即refrence_option,如果没有明确指定,那么其默认值为RESTRICT

    • RESTRICT :拒绝操作,当删除或更新被参照表时涉及到了被参照的字段,并且该字段在外键中存在数据,那么系统将拒绝操作
    • CASCADE :级联操作,当删除或更新被参照表时,会同时删除或更新参照表中的匹配的元组
    • SET NULL :置空操作,当删除或更新被参照表时,会将参照表中对应的外键字段的值设为NULL,前提是该字段在参照表中没有声明NOT NULL
    • NO ACTION :不做操作,和 RESTRICT 相同

    参照表:声明了FOREIGN KEY的表 A。被参照表:主键被表 A 声明为FOREIGN KEY
    举个例子:学生有选历史课,但是现在学校决定不开设历史课了,要把历史课从课程表删除,但是删除的时候会检查有没有被引用,如果存在引用则删除失败,这就是RESTRICT。如果删除历史课的同时,将所有学生选课表中的历史课也删除,这就是CASCADE。如果删除了历史课,只是将选课表中的历史课设为NULL,这就是SET NULL,万一哪天又恢复历史课呢?

用户定义的完整性
  • 关键字

    • CHECK:在更新或删除时,检查数据是否满足条件
    • NOT NULL:比较常用 ,定义一个字段不可为空。可以理解为 CHECK(column NOT NULL)
  • TRIGGER(触发器)

    • 触发器是由事件驱动的,主要用于保护主键和外键的参照完整性和数据一致性
    • 无法主动调用,可理解为数据库系统维护了一个线程或一组线程去轮询加了触发器的事件

    可以使用 CREATE TRIGGER 创建触发器,其格式为:

    CREATE TRIGGER trigger_name trigger_time trigger_event
    	ON table_name FOR EACH ROW trigger_body
     # trigger_name:触发器唯一命名
     # trigger_body:触发器具体的执行逻辑
     # trigger_event:事件类型,INSERT DELETE UPDATE
     # trigger_time:触发时间,参照的是 trigger_event 事件发生时间,AFTER(常用) BEFORE
    
    

综上,我们简单的总结下
约束:向表中插入数据时,数据库会判断数据是否符合约束,不符合则插入失败

  • CHECK :用于约束范围 例如 CHECK(score>60)
  • DEFAULT :字段没有值的话,给定一个默认值
  • UNIQUE :约束 row 的唯一性,可以建立多个
  • PRIMARY KEY :约束 row 的唯一性,只能建立一个
  • NOT NULL :约束强制 column (字段或直列)不接受 NULL 值,且字段始终包含值
  • FOREIGN KEY :A 表与 B 表中同名的字段,且是 B 表的 PRIMARY KEY(或者说 A 表的 FOREIGN KEY 指向 B 表中的 PRIMARY KEY)

参考:

DB-Day4笔记-数据库的完整性&约束 create table 表名 (字段名 字段类型 primary key, 字段名 字段类型 [约束], ... , 外键字段 外键类型 ,[constraint 外键名] foreign key (外键字段) references 主表名 (主表主键字段));create table 表名(字段名 字段类型 [约束], 字段名 字段类型 [约束], ... , primary key(主键字段));外键字段1 外键类型, 外键字段2 外键类型, primary key (外键字段1,外键字段2), 阅读详情

相关推荐

树莓派c语言串口通讯程序

在网上搜了很多关于树莓派串口通讯的例子,但是都是用python写的,虽然python很有名,而且最近也在学习这门语言, 但是还是想用c语言实现一下,因为需要用到整套系统里,其他内容都是用c语言写的。但是网上没有找打现成的。 还好,之前做过天嵌2440开发板的串口程序(参照天嵌工程师提供的代码),发现串口程序其实是通用的, 驱动层屏蔽了硬件细节,个人猜测,几乎所有移植好的系统的串口,都可以用一

realank的专栏 1万+

数据库完整性约束

一、五种完整性约束 1.NOT NULL(非空):默认情况下,表中的所有列均允许空值。Null 指没有值。NOT NULL 约束条件要求表列必须包含非空值. 2.UNIQUE Key(唯一键):UNIQUE 键完整性约束条件要求一列或一组列(键)中的每个值必须唯一,即在指定的列或一组列中,表任意两行的值均不重复。ORACLE允许该列有多个NULL,而SQLSERVER只允许有一个NULL。PR

ysfseu的专栏 2284

用Multisim仿真AD630锁定放大器:从2012年电赛A题实战到避坑指南

本文详细介绍了如何使用Multisim仿真AD630锁定放大器,从2012年电赛A题实战出发,提供完整的电路搭建、参数优化及避坑指南。重点解析AD630的开关调制架构和双相位检测的工程实现,帮助读者在强噪声背景下有效提取微弱信号,提升电子设计竞赛和工程实践中的信号处理能力。

weixin_42549451的博客 203

数据库的完整性——实体完整性、参照完整性、属性约束条件命名子句、域

数据库的完整性——实体完整性、参照完整性、属性约束条件命名子句、域

LeiYuPenga_的博客 5567

S型速度曲线C程序实现

S型速度曲线C语言程序实现 前言 S型曲线相较于梯形速度曲线具有运行更加平稳的特点,S型曲线共有八种运行情况,感兴趣可以查阅相关文献 代码段 #include <stdio.h> #include <math.h> #define FP64 double int main(void) { /**************************** 定义相关变量(需要映射到PLC寄存器才能进行监控) ***********************/ FP6

LSX312441548的博客 8393

Klocwork安装

简单介绍一下Klocwork在windows下的安装,操作系统是win7,Klocwork的版本是10.0。 第一步:由于Klocwork的安装程序已十分成熟,所以在安装之前不需要什么准备共走。双击Klocwork的安装包,会出现下图的安装引导界面,点击Next按钮。 第二步:下图是协议界面,点击Next按钮。 第三步:选择Klocwork的安装目录,点击Next按钮 第四步:

旮旯 9931

数据库完整性三大约束——域完整性约束

1.2 域完整性约束 域完整性约束的作用:限制此单元格的数据正确,不对其它单元格起作用,域代表当前单元格 域完整性约束:数据类型、非空约束(not null)、默认值约束(default) check约束(mysql不支持)check(sex='男'or sex='女') 1.2.1 数据类型 数值类型 类型 大小 范围(有符号) 范围(无符号) 用途 TI...

Morning Sunshine的IT技术博客 1万+

西门子 标准程序解读---> 机器手抓取和涂胶控制程序

摘要 该程序实现机械手在OP70/OP90工位的自动化控制,核心功能包括: 流程控制:分段(Seg1-Seg11)管理抓件、涂胶、放件等动作,结合DB1050/DB1250数据块监控工位状态及变位机位置反馈。 安全机制:配置干涉区(FC124)、实时检测安全光/急停信号,防止碰撞;服务程序(FB191)支持维修位触发与安全隔离。 参数配置:通过DB块关联机器人速度、节拍(FB27)、车型编码(如空过=2)及手自动模式(DB70.DBX21.2)。 应用场景:适用于汽车焊接/装配线

工控智联驿站 1239

数据库之超详细的完整性约束

数据库之超详细的完整性约束  数据库的完整性是指数据的正确性和相容性。数据库是否具备完整性关系到数据库系统能否真 实地反映现实世界,因此维护数据库的完整性是非常重要的。  数据库的完整性可分为实体完整性、参照完整性和用户定义的完整性。   1.实体完整性 实体完整性是基于主码的,一个主码由一个或多个属性组成。实体完整性要求主码中的任一属 性(列)不能为空,所谓空值是"不知道"或"无意义"的值。之所以要保证实体完整性主要是因为在关 系中,每一个元组的区分是依据主码值的不同,若主码...

yummy的博客 4917

基于YOLOv8深度学习架构的智能农业巡检小车系统—面向农作物与杂草实时精准识别的创新实践

本研究设计并实现了一套基于YOLOv8的智能农业巡检小车系统,解决农田中农作物与杂草的精准识别与追踪问题。系统采用改进YOLOv8-RGCSPELAN-ECA-AFPN模型,融合ECA注意力机制与AFPN多尺度特征融合结构,提升复杂环境下的检测精度。硬件以树莓派4B为核心,集成摄像头、传感器与电机模块,具备避障、循迹与自主导航功能。移动端基于Android部署NCNN推理引擎,实现模型高效移植与实时检测。

Stara-AI的博客 1425

Android 13.0 Launcher3中去掉Hotseat功能实现

在13.0系统产品定制化开发中,在Launcher3的定制化需求也是特别多的,由产品是小屏幕的产品,所以产品需求Launcher3 页面布局的原因,要求Launcher3 需要去掉Hotseat 不显示Hotseat下面几个图标,而做满屏app的显示,从而达到美观的效果,下面就来分析去掉Hotseat从而实现这个功能

安卓兼职framework和app工程师的博客 1330

数据库中的数据完整性约束

这篇文章讲的是数据库中的数据完整性约束,如有错误或不当之处,还望各位大神批评指正。 什么是数据完整性约束? 数据完整性:存储在数据库中的所有数据值均正确的状态。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。 数据完整性分为四类: 1. 实体完整性(实体完整性是对关系中的记录唯一性,也就是主键的约束。准确地说,实体完整性是指关...

叶清逸的博客 8万+

3. NVIDIA GPU Xid 常见错误码全解析、故障定位与标准化处理方案

摘要: Xid是NVIDIA显卡驱动记录的硬件/软件异常日志,通过dmesg等工具可获取,包含PCI总线、GPU编号、故障码等信息,是诊断显卡问题的核心依据。Xid故障分为四类:应用程序类(如代码错误,Xid13/31)、显存ECC硬件类(如显存损坏,Xid48/63)、链路/供电温控类(如PCIe故障,Xid74/79)和GSP固件类(如静电干扰,Xid119/154)。排查流程包括日志采集、软件修复(如重启进程、升级驱动)、硬件检查(如PCIe链路状态)及断电复位(针对GSP故障)。预防措施包括监控EC

jundao1997的专栏 704

数据库完整性——六大约束学习

小明疫情期间在家上网课,可是老是走神,一会儿功夫老师就把《数据库完整性》讲完。这下完了,只能自己看书自学了,What?六大约束!!!这是什么啊?啥事约束啊?————少年别慌,看了这篇博客,保证你学会六大约束!

clzZ2的博客 2811

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数据库实验——数据库的完整性约束

数据完整性。使用T-SQL语句完成以下内容。 1)将数据库stu的表course的cno字段定义为主键,约束名称为cno_pk; USE student ALTER TABLE XSKC.course ADD CONSTRAINT cno_pk PRIMARY KEY(cno) 2)为表course中的字段cname添加唯一值约束; USE student ALTER TABLE XSKC.co...

WYMei_529 2万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

数据库的四种类型的完整性约束

数据完整性:是指存储在数据库中的所有数据值均正确的状态。 四种类型的完整性约束: 1、实体完整性约束: 表中的每一行数据都反映不同的实体,不能存在相同的数据行. 通过索引.唯一约束,主键约束或标识列属性,可以用来实现表的实体完整性. 索引:将文献中具有检索意义的事项(可以是人名、地名、词语、概念、或其他事项)按照一定方式有序编排起来,以供检索的工具书。  数据库...

weixin_33836223的博客 2198

数据库数据完整性的6个约束

数据库数据完整性default约束check约束null约束unique约束primary key约束foreign key约束总结 前言:数据完整性是指存储在数据库中数据的准确性和可靠性。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。 类型: 域完整性 :域完整性指特定列的项的有效性(default、check、null) ...

weixin_41508295的博客 5266

sql server 2008 数据库的完整性约束

一、数据库完整性概述   1.数据库的完整性:   ①数据库的完整性是指数据的正确性和相容性 ②数据库完整性是防止不合语义或不正确的数据进入数据库 ③完整性体现了是否真实地反映现实世界   例:  学生的年龄必须是整数,取值范围为14-29; 学生的性别只能是男或女; 学生的学号一定是唯一的; 学生所在的系必须是学校开设的

八行书 5127

数据库复习——数据库的完整性约束(静态约束与动态约束示例)

前言 总结一下,数据库完整性约束几个列子 正文 一、静态完整性:Create Table CreateTable有三种功能:定义关系模式、定义完整性约束和定义物理存储特性 定义完整性约束条件: 列完整性 表完整性 Col_constr列约束 一种域约束类型,对单一列的值进行约束 Col_constr列约束:只能应用在单一列上,其后面的约束如UNIQUE,PRIMARY KEY及search_cond只能是单一列唯一、单一列为主键、和单一列相关 示例 Create Table Student (

无由页的博客 4355

5 数据库完整性约束

总结:掌握完整性约束与触发器的核心机制,能够有效保障数据库数据的正确性、一致性与业务合规性,同时通过自动化逻辑减少代码冗余。• 事件驱动:仅当关联的DML操作(如插入、更新、删除)发生时激活。• BEFORE:适用于数据预处理或校验(失败时可中止操作)。• 触发器:动态逻辑,可处理复杂业务(如跨表校验、级联操作)。• AFTER:适用于数据同步或日志记录(需确保操作已成功)。• 外键:引用其他表的主键,可为空或有效值(参照完整性)。• 主键:唯一标识记录,不可重复且非空(实体完整性)。

2401_82495678的博客 1349

软件测试 数据库 MySQL01 数据库操作 表操作 实体完整性约束 域完整性约束 参照完整性约束 外键约束

1 数据库操作 查看现有数据库 show datadases 创建数据库 create databases 库名 删除数据库 drop database 库名 系统自带库不可以删除! 2 数据类型 2.1 数值类型 常用的数据类型 整数类型 int 小数类型 decimal 小数格式工decimal(总长度,小数位) decimal(5,2) 总长度是5位,小数位是2位 例如:123.45 2.2 日期和时间类型 常用的日期时间类型 datetime YYY-MM-DD HH:MM:SS dat

qq_740785701的博客 2591
上一篇: SQL字符串匹配和运算
下一篇: 数据库集合运算
若水无言
博客等级 码龄10年 10粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值