当前位置: 首页 > news >正文

【数据库约束】

文章目录

  • 一、什么是数据库约束
  • 二、约束类型
  • 三、NOT NULL ⾮空约束
  • 四、DEFALUT 默认值约束
  • 五、UNIQUE 唯⼀约束
  • 六、PRIMARY KEY 主键约束
  • 七、FOREIGN KEY 外键约束
  • 八、CHECK 约束


一、什么是数据库约束

数据库约束是指对数据库表中的数据所施加的规则或条件,⽤于确保数据的准确性和可靠性。这些约束可以是基于数据类型、值范围、唯⼀性、⾮空等规则,以确保数据的正确性和相容性

二、约束类型

在这里插入图片描述

三、NOT NULL ⾮空约束

定义表时某列不允许为NULL时,可以为列添加⾮空约束。

  • ⽐如创建⼀个学⽣表,学⽣名为NULL时,这条记录是不完整的
    (1)创建表
    在这里插入图片描述
    (2)插入数据
    在这里插入图片描述
    (3)查询,班级名为NULL,没有意义
    在这里插入图片描述

  • 此时需要约束学⽣名的列不能为NULL
    (1)添加not null
    在这里插入图片描述
    (2)由于name列有⾮空约束,插⼊NULL值时报错
    在这里插入图片描述
    (3)正常值可以成功插⼊
    在这里插入图片描述

  • 查看表结构,NULL列为NO表⽰值不允许为NULL,YES表⽰值可以为NULL
    在这里插入图片描述

四、DEFALUT 默认值约束

DEFAULT 约束⽤于向列中插⼊默认值,如果没有为列设置值,那么会将默认值设置到该列

  • 重构学⽣表,新增年龄列
    在这里插入图片描述
  • 插⼊⼀条记录,没有设置默认约束时,不指定年龄的值时列为NULL
    (1)年龄值为NULL
    在这里插入图片描述
  • 重构学⽣表,为年龄的列加⼊默认约束
    在这里插入图片描述
  • 插⼊⼀条记录,不指定年龄的值时列使⽤了默认值
    在这里插入图片描述
  • 查看表结构,年龄列的默认值为18
    在这里插入图片描述
  • 当⼿动明确指年龄列为NULL时列值为NULL
    在这里插入图片描述

五、UNIQUE 唯⼀约束

指定了唯⼀约束的列,该列的值在所有记录中不能重复,⽐如⼀个⼈的⾝份证号,学⽣的学号等

  • 重构学⽣表,新增学号列
    在这里插入图片描述
  • 不设置唯⼀约束时,学号可以重复
    在这里插入图片描述
  • 重构学⽣表,为学号列设置唯⼀约束
    在这里插入图片描述
  • 插⼊重复的学号时报错,唯⼀约束⽣效
    在这里插入图片描述
  • 查看表结构,Key列显⽰UNI表⽰唯⼀约束
    在这里插入图片描述
    注意:只加了唯一约束的列可以写入多个NULL值
    在这里插入图片描述

六、PRIMARY KEY 主键约束

主键约束唯⼀标识数据库表中的每条记录。(数据库管理数据时,使用主键列作为数据行的“身份证编号”)
主键必须包含唯⼀的值,且不能包含 NULL 值。(非空约束+唯一约束)
每个表只能有⼀个主键,可以由单个列或多个列组成。(复合主键)
通常为每张表都指定⼀个主键,主键列建议使⽤BIGINT类型(范围足够的大,不会溢出)

  • 重构学⽣表,为ID列添加⾮空和唯⼀约束
    在这里插入图片描述
  • 查看表结构,添加了⾮空和唯⼀约束之后Key列显⽰PRI表⽰主键
    在这里插入图片描述
  • 当Id列的重复时会发⽣主键冲突
    在这里插入图片描述
  • 通常把主键列设置为⾃动增⻓,让数据库维护主键值
    在这里插入图片描述
  • 插⼊数据时不设置主键列的值
    (1)主键列的值为NULL
    在这里插入图片描述
    (2)不指定主键
    在这里插入图片描述
    (3)主键列的值⾃动⽣成
    在这里插入图片描述
  • 查看表结构,Extra列显⽰auto_increment 表⽰⾃增
    在这里插入图片描述
  • 如果某条记录写⼊失败,新⽣成的主键值将会作废
    (1)由于学号重复,产⽣了唯⼀冲突,导致插⼊失败,ID为3的主键值作废
    在这里插入图片描述
    (2)修改学号后成功插⼊数据
    在这里插入图片描述
    (3)查询后发现新记录ID列的值为4
    在这里插入图片描述
    show create table student;
    在这里插入图片描述
  • 主键值可以不连续
    (1)⼿动指定⼀个值
    在这里插入图片描述
    (2)下⼀次⾃增从主键的最⼤值开始,ID列的值是101
    在这里插入图片描述
  • 主键或唯⼀键冲突时的更新操作,插⼊否则更新
    (1)语法
    在这里插入图片描述
    (2)插⼊ID为100,学号为100100的学⽣记录时,报主键冲突
    在这里插入图片描述
    (3)可以使⽤以上语法,如果插⼊时有冲突则更新当前列的值
    在这里插入图片描述
    (4)两⾏受影响,表⽰删除了原来的记录,⼜新写⼊了⼀条记录
    (5)与update student set name = ‘赵六’, sno = ‘100100’ where id = 100; 等效
    在这里插入图片描述
  • 替换,如果存在冲突则替换,不存在冲突则插⼊
    (1)语法
    在这里插入图片描述
    (2)写⼊或更新Id为101的记录
    在这里插入图片描述
    (3)原数据已更新
    在这里插入图片描述
    (4)写⼊⼀条新数据
    在这里插入图片描述
    (5)成功写⼊
    在这里插入图片描述
    在这里插入图片描述
  • 表中不能有多个主键
    在这里插入图片描述
  • 复合主键:由多个列共同组成的主键,主键是否冲突以多个列的组成进⾏判定
    (1)重构学⽣表,指定复合主键
    在这里插入图片描述
    (2)插⼊数据
    在这里插入图片描述
    (3)重复插⼊主键冲突,此时主键值由id和name两个列共同决定
    在这里插入图片描述
    (4)修改id值插⼊成功
    在这里插入图片描述

七、FOREIGN KEY 外键约束

外键⽤于定义主表和从表之间的关系
外键约束主定义在从表的列上,主表关联的列必须是主键或唯⼀约束
当定义外键后,要求从表中的外键列数据必须在主表的主键或唯⼀列存在或为null。
在这里插入图片描述

  • 创建班级表(主表),并初始化数据
    (1)建表
    在这里插入图片描述
    (2)初始化数据
    在这里插入图片描述
  • 重构学⽣表(从表),加⼊外键约束
    (1)语法
    在这里插入图片描述
    (2)重构表
    在这里插入图片描述
  • 查看表结构,Key列的值为MUL表⽰外键约束的列
    在这里插入图片描述
  • 正常插⼊数据
    (1)班级编号在主表中存在
    在这里插入图片描述
    (2)插⼊成功
    在这里插入图片描述
  • 插⼊⼀个班级号为100的学⽣,由于主表中没有这个班级,插⼊失败
    (1)班级编号在主表中不存在,提⽰外键约束限制导致插⼊失败
    在这里插入图片描述
  • 插⼊班级Id为NULL的记录,可以成功,表⽰当前学⽣还没有分配置班级
    (1)班级为NULL
    在这里插入图片描述
  • 删除主表某条记录时,从表中不能有对该记录的引⽤
    (1)删除从表中没有引⽤的记录,可以成功
    在这里插入图片描述
    (2)删除从表中引⽤的记录,失败
    在这里插入图片描述
  • 删除主表时要先删除从表
    (1)从表存在是不能删除主表
    在这里插入图片描述
    (2)删除从表
    在这里插入图片描述
    (3)再删除主表,成功
    在这里插入图片描述

八、CHECK 约束

对单行数据进行校验
可以应⽤于⼀个或多个列,⽤于限制列中可接受的数据值,从⽽确保数据的完整性和准确性。在8.0.16开始全⾯⽀持CHECK约束,之前的版本会忽略CHECK的定义

  • 重构学⽣表,有以下要求,年龄不能⼩于16岁,性别只能是男或⼥
    (1)加⼊CHECK约束
    在这里插入图片描述
    (2)正常插⼊数据
    在这里插入图片描述
    (3)插⼊年龄⼩于16岁的记录,失败
    在这里插入图片描述
    (4)插⼊性别的值不是男或⼥的记录,失败
    在这里插入图片描述
  • 创建新表,c1的值不能为0,c2的值必须⼤于0,c3的值不⼩于c2
    (1)列与列之间也可以⽐较,需要在单独⼀⾏中定义
    在这里插入图片描述
    (2)插⼊正常数据
    在这里插入图片描述
    (3)c1 = 0时,失败
    在这里插入图片描述
    (4)c2 <= 0时,失败
    在这里插入图片描述
    (5)c3 < c2时,失败
    在这里插入图片描述

以上是本篇文章的全部内容,如果文章有错误或者有看不懂的地方,多和喵博主交流。互相学习互相进步。如果这篇文章对你有帮助,可以给喵博主一个关注,你们的支持是我最大的动力。


文章转载自:

http://kxsN0GIJ.wnnfh.cn
http://bj4crlZ9.wnnfh.cn
http://MX0c6qkV.wnnfh.cn
http://efugnR89.wnnfh.cn
http://r93FBAPv.wnnfh.cn
http://cbzb1A84.wnnfh.cn
http://VpCq7T4e.wnnfh.cn
http://Y0gR9utr.wnnfh.cn
http://6jypnmTI.wnnfh.cn
http://NVytEUhl.wnnfh.cn
http://wJHmA8Gw.wnnfh.cn
http://PH6lMcTm.wnnfh.cn
http://x6FTwHiO.wnnfh.cn
http://Fksfy6CU.wnnfh.cn
http://381lv5TI.wnnfh.cn
http://JpMVmA80.wnnfh.cn
http://MBwlBbTK.wnnfh.cn
http://dcojlej2.wnnfh.cn
http://r57O1ZGs.wnnfh.cn
http://qQxDFbzs.wnnfh.cn
http://8HZo40UD.wnnfh.cn
http://uoTKPhsP.wnnfh.cn
http://SzC5clH0.wnnfh.cn
http://EdPG9iAa.wnnfh.cn
http://9LQlg3qJ.wnnfh.cn
http://643U00Cu.wnnfh.cn
http://dbJC9qWL.wnnfh.cn
http://HttJd5aI.wnnfh.cn
http://qpCYb80Q.wnnfh.cn
http://AsKRsnFi.wnnfh.cn
http://www.dtcms.com/a/377441.html

相关文章:

  • 小白成长之路-centos7部署ceph存储
  • python学习进阶之面向对象(二)
  • 【芯片设计-信号完整性 SI 学习 1.1.1 -- Unit Interval,比特周期】
  • sudo apt update sudo apt upgrade -y 两个命令的作用
  • 每日算法刷题Day68:9.10:leetcode 最短路6道题,用时2h30min
  • apache详细讲解(apache介绍+apache配置实验+apache实现https网站)
  • 一些常用的激活函数及绘图
  • 第3节-使用表格数据-数据库设计
  • 同步时钟系统在体育场游泳馆的应用
  • QT里获取UUID当做唯一文件名称
  • 【Python】pytorch数据操作
  • iOS应用启动深度解析:dyld动态链接器的工作机制与优化实践
  • [硬件电路-175]:multisim中如何给让光电二极管产生光电流?
  • 小巧精准,安全无忧:安科瑞ADL200N-CT/D16-WF防逆流电表守护阳台光伏
  • NLP(自然语言处理, Natural Language Processing)
  • 【竞赛系列】机器学习实操项目07——全球城市计算AI挑战赛(baseline、时间序列分析、地铁流量预测)
  • 华为昇腾CANN开发实战:算子自定义与模型压缩技术指南
  • Java 多线程(二)
  • TCGA(The Cancer Genome Atlas)数据库是癌症基因组学研究的重要资源,包含了多种癌症类型的基因组、转录组、表观基因组和临床数据
  • 单片机与PLC:定义、异同及替代可能性解析
  • 金融知识:投资和融资
  • 重学前端013 --- 响应式网页设计 CSS网格布局
  • hCaptcha 图像识别 API 对接说明
  • 大模型应用开发八股
  • Linux进程概念(上):进程基本概念和进程状态
  • 汽车EPAS ECU功能安全建模分析:Gamma框架+深度概率编程落地ISO 26262(含寿命预测案例)
  • 深入解析:ES6 中 class 与普通构造器的区别
  • 华清远见25072班网络编程学习day3
  • QT(3)
  • 具有区域引导参考和基础的大型语言模型,用于生成 CT 报告