数据库的完整性约束

数据库 完整性约束 数据完整性分为四类: 实体完整性:规定表的每一行在表中是惟一的实体。 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。 参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完... 阅读详情
完整性约束条件的作用对象:
  • 列级约束(针对字段,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), 阅读详情

相关推荐

Topas——基于Geant4的放射治疗蒙特卡罗算法模拟工具

本文内容参考Joseph Perl 的线上会议,视频详情可见于,该视频会议内容主要介绍Topas功能、软件架构、工作流程、参数设定、物理模型、具体案例等,对TOPAS的基本入门使用方法以及使用规定作出阐述。

fy方的博客 7606

数据库完整性约束

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

ysfseu的专栏 2284

基于fMRI数据计算脑脊液(CSF)与全脑BOLD信号的时间耦合分析

BOLD和CSF信号有多相似CSF信号要延迟多少时间才能最匹配BOLD信号BOLD-CSF的互相关公式lag:时间延迟采样点数BOLD信号CSF信号延迟时间点对应的相关系数。

Rose9614的博客 2982

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

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

LeiYuPenga_的博客 5567

AquaCrop-OSPy学习笔记02:模型输入设置

AquaCrop-OSPy的输入设置

EWBA_GIS_RS_ER的博客 3696

基于Codex平台构建AI技能:抖音爆款分析与带货视频生成实战

这次我们来看一个基于 Codex 平台构建 AI 技能(Skill)的实战项目。核心目标很直接:利用 AI 能力,自动化分析抖音平台的爆款内容,并生成可用于带货的视频。这听起来像是内容创作领域的“自动化流水线”,它解决的核心痛点是:人工分析爆款、撰写脚本、制作视频的效率瓶颈。 对于技术开发者和内容创作者而言,这个项目的价值在于将“内容策略分析”和“视频内容生成”两个环节通过 Codex 的 Skill 机制串联起来,形成一个可定制、可批量执行的自动化工作流。我们最关心的几个问题包括:这个方案的技术门槛高不高

weixin_29054399的博客 487

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

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

Morning Sunshine的IT技术博客 1万+

Verilog十大基本功2(testbench的设计 文件读取和写入操作 源代码)

需求说明:Verilog设计基础 内容       :testbench的设计 读取文件 写入文件 来自       :时间的诗 十大基本功之 testbench 1. 激励的产生 对于 testbench 而言,端口应当和被测试的 module 一一对应。 端口分为 input,output 和 inout 类型产生激励信号的时候, input  对

时间的诗 5万+

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

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

yummy的博客 4917

Java 开发 修改【冒险岛 079 私服】完整学习流程

第 1-2 天:环境搭建 + 运行原版 079 服务端,能正常登录游戏;第 3-4 天:纯配置文件修改,掌握倍率、属性、怪物、道具的修改,改出第一个「百倍经验私服」;第 5-10 天:Java 代码基础修改,掌握 Player/Skill/Monster 核心类的修改,实现技能无冷却、一刀秒怪、升级满属性;第 11-20 天:Java 代码进阶修改,掌握业务逻辑修改,实现死亡不掉经验、自动捡物、装备强化无失败;第 21-30 天。

萧曳丶 3897

SentEval学习笔记

SentEval allows you to evaluate your sentence embeddings as features for the followingdownstreamtasks: Task Type #train #test needs_train set_classifier MR movie review(影评) 11k 11k 1 1 CR product review(产品评述) ...

AlphaFinance 803

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

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

叶清逸的博客 8万+

《YOLOv8-seg改进》专栏指导书册 &手把手创新教程

学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研;1)手把手教你如何训练YOLOv8-seg;2)模型创新,提升分割性能;3)独家自研模块助力分割;

会AI的学姐 3813

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

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

clzZ2的博客 2811

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

weixin_33836223的博客 2198

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数据库数据完整性的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、付费专栏及课程。

余额充值