数据库约束

数据库约束

  • 1. NULL约束
  • 2. UNIQUE:唯一约束
  • 3. DEFAULT:默认值约束
  • 4. PRIMARY KEY:主键约束
  • 5. FOREIGN KEY:外键约束
  • 6. CHECK约束

数据库约束是关系型数据库的一个重要功能,主要作用是保证数据的正确性,也就是数据本身是否正确,关联关系是否正确。如果人工去检查数据完整性,工作量是非常大的。我们可以通过在数据库中定义一些约束,那么数据库在写入数据时,数据库就会帮我们做校验工作

1. NULL约束

  • NOT NULL:指定某一列不能存储NULL值

在默认情况下,某一列是可以写入NULL的
在这里插入图片描述

如果要把某一列规定为一个必填项,就可以使用NOT NULL来约束
在这里插入图片描述

当我们写入一条id为NULL的数据时,会报错,提示不能写入NULL值,相当于数据库帮我们做了一次校验
在这里插入图片描述

2. UNIQUE:唯一约束

  • UNIQUE:保证某列的值在整个表中不能重复出现,比如:省份证号,学号

在这里插入图片描述
不加唯一约束的时候,可能出现编号相同,但是人名不同的情况,这是不符合逻辑的。我们可以在创表的时候,在id字段后添加上唯一约束,加以限制
在这里插入图片描述


在这里插入图片描述
第二次插入同样的id字段时,就会报错,因为id字段加了唯一约束
注: NULL可以重复插入

3. DEFAULT:默认值约束

  • DEFAULT:规定没有给列赋值时的默认值

在默认情况下,字段的默认值都是NULL,我们也可以在创建表时去自定义默认值
在这里插入图片描述


比如:我们可以定义name列的默认值为‘无名氏’
在这里插入图片描述


当我们插入数据时只指定id字段,而不指定name字段时,name列就会使用默认值去填充
在这里插入图片描述


虽然指定了默认约束,但是当我们手动指定name列的值为NULL时,插入的值依然是NULL,因为这个NULL是我们自己手动指定的,用户指定的优先级要高于默认约束
在这里插入图片描述

4. PRIMARY KEY:主键约束

  • PRIMARY KEY:NOT NULL 和 UNIQUE 的结合,即主键约束的列既是非空的也是唯一的,确保某列(或两列多个列的结合)有唯一标识,有助于更容易更快速找到表中的一个特定记录

在这里插入图片描述


为id列指定了非空和唯一约束,id列被标识为了一个PRI,表示它是一个主键。当然,也可以简写成下面的形式,更简洁
在这里插入图片描述


写入数据时,两个约束同时生效
在这里插入图片描述

主键约束帮我们校验了非空和唯一,这两个校验在写入数据时对效率时有一定的影响的,但是比起不做校验来说,这个校验消耗还是可以承担的,而且主键对于索引起到了非常重要的作用,因此强烈建议为每一张表都定义一个主键


另外,一个表中是不允许有两个主键的
在这里插入图片描述


但是,一个主键可以同时包含多个列,也就是复合主键
在这里插入图片描述


在唯一校验时,只有复合主键中的所有列都相同时,才会被判定为相同
在这里插入图片描述


  • **auto_increment: ** 自增类型,表示在当前表中上一条的记录上加1既可以
    在这里插入图片描述
    这个扩展可以让数据库帮我们去维护主键的增长,不用程序员自己去计算了,在插入的时候,先找到最大值,然后在这个基础上加1,生成一个新的值,作为新一个数据行主键的值

当设置了自增主键之后,发现写入NULL时,也可以成功插入数据,这里并不是说把这个NULL写入了数据库,而是说让数据库帮我们去处理这个列的值(自增操作)
在这里插入图片描述


当指定列插入时,也会自动生成ID,作为数据行的主键
在这里插入图片描述


当然,我们也可以去指定一个主键值,只要主键值不重复即可
在这里插入图片描述


现在,我们再尝试不指定id列,去插入一条新的数据行
在这里插入图片描述
我们发现,自增是在最大值的基础上加1,因此,主键值在数据表中可能是不连续的

5. FOREIGN KEY:外键约束

  • FOREIGN KEY:保证一个表中的数据匹配另一个表的值的参照完整性
    在这里插入图片描述
    表中外键对应的列的值,必须是另一张表中主键列的值,或是唯一约束列,也就是当前表中的值在另一张表中必须存在,且满足主键或唯一约束

我们先试着不使用外键,去创建这两张表
在这里插入图片描述


当我们去写入一条新的学生记录时,设置了不存在的班级编号,数据行依然可以写入成功
在这里插入图片描述
这是不符合要求的,因为class表中并不存在这个班级。为了使student表里的class_id字段与class表中的id字段建立关联关系,可以对student表里的class_id列使用外键约束


语法:foreign key (字段名) reference 主表(列)

在这里插入图片描述
在这里插入图片描述


这时,去插入合理的数据是可以成功的
在这里插入图片描述


如果去插入不合理的数据,就会报错
在这里插入图片描述


另外,如果这时去插入正确的数据行,会发现id是3,而不是2。这是因为虽然上一条记录未能插入成功,id字段已经自增了,因此再次去插入数据行,id是2 + 1
在这里插入图片描述


综上所述,我们可以通过外键约束,保证数据的完整性和关系的正确性


在这里插入图片描述
当子表中存在对主表的依赖时,能否去删除主表中想应的记录?答案是否定的,如果这样去删除,会报一个主外键关系的错误
在这里插入图片描述


如果要删除主表中的记录,子表中不能有对该条记录的依赖,也就意味着要先删除子表中的记录,再去删除主表中的记录

在这里插入图片描述

6. CHECK约束

  • CHECK:保证列中的值符合指定的条件。对于MySQL数据库,使用时不报错,就忽略这条约束

CHECK约束在MySQL8.0中是生效的,而在MySQL5.7中是不生效的

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NetAssist 5.0.14网络助手基础使用及自动应答使用方案

以下是NetAssist v5.0.14自动应答功能的详细使用步骤: 一、基础准备: 工具下载网址页面:https://www.cmsoft.cn/resource/102.html 下载安装好后,根据需要可以创建多个server,双击程序图标运行即可,下面…

ChatGPT课件分享(37页PPT)

资料解读:ChatGPT课件分享 详细资料请看本解读文章的最后内容。 近年来,人工智能技术的迅猛发展引发了全球范围内的广泛关注,尤其是以OpenAI为代表的公司在自然语言处理领域的突破性进展,彻底改变了人机交互的方式。本文将详细解…

【机器学习】主成分分析法(PCA)

【机器学习】主成分分析法(PCA) 一、摘要二、主成分分析的基本概念三、主成分分析的数学模型五、主成分分析法目标函数公式推导(梯度上升法求解目标函数)六、梯度上升法求解目标函数第一个主成分七、求解前n个主成分及PCA在数据预…

【蓝桥杯—单片机】第十五届省赛真题代码题解析 | 思路整理

第十五届省赛真题代码题解析 前言赛题代码思路笔记竞赛板配置建立模板明确基本要求显示功能部分频率界面正常显示高位熄灭 参数界面基础写法:两个界面分开来写优化写法:两个界面合一起写 时间界面回显界面校准校准过程校准错误显示 DAC输出部分按键功能部…

重邮数字信号处理-实验六用 MATLAB 设计 IIR 数字滤波器

一、实验目的 1、加深对 IIR 数字滤波器设计方法和设计步骤的理解; 2、掌握用模拟滤波器原型设计 IIR 数字滤波器的方法; 3、能编写 MATLAB 函数,掌握设计 IIR 数字滤波器的函数调用方法; 4、根据不同的应用场景&#xff0…

Linux中的基本指令(下)

目录 mv指令 more指令 less指令 head指令 tail 指令 继续理解文件 重定向和追加重定向操作 理解管道 find指令 whereis 指令 bc指令 uname ‒r指令 grep 指令 关机 扩展命令 zip/unzip 指令 tar指令 关于rzsz 系统间的文件互传 接上! mv指令 m…

Python文件,模块

一.文件 1.生成一个文件: 2. 提示 : 第二次读时因为之前已经对文件进行了读取操作,文件指针可能已经移动到了文件末尾。在这种情况下,再次调用 read() 方法将不会读取到任何新的内容,因为已经没有未读取的数据了。可以使用 seek() 方法将文…

基于python的升级队列加速决策

a-f大等级是3级 a-c建筑每升1级分别需要8天 d-f建筑每升1级分别需要10天 目前以下建筑队列正在从0级升至1级 建筑A升级需要7天05:16:20 建筑b升级需要06:06:54 建筑c升级需要00:37:00 建筑d升级需要…

编译OpenSSL

OpenSSL简介 OpenSSL是一个用于加密和安全连接的开源软件库。它提供了一系列的加密算法、密码学功能和安全协议的实现,包括SSL(Secure Sockets Layer)和TLS(Transport Layer Security)等用于网络安全的协议。OpenSSL可…

Win 转 MacBook Pro 踩坑指南

前言 Window 和 macOS 系统的差异还是很大的,我从 Thinkpad 转用 M1 的 Macbook pro 已经一年了,几乎没有任何不适应,整体感受那是真的牛👃,速度和续航惊艳到我了,同时开启 6个 vscode 加几十个浏览器标签…

uniapp uniCloud引发的血案(switchTab: Missing required args: “url“)!!!!!!!!!!

此文章懒得排版了,为了找出这个bug, 星期六的晚上我从9点查到0点多,此时我心中一万个草泥马在崩腾,超级想骂人!!!!!!!!! uniCloud 不想…

数据结构和算法--仅仅用于理解里面的术语,入门级别

数据结构和算法 预先知识:java 黑马前29节 cmd命令: 文件夹路径不区分大小写 E: dir:查看所有文件 cd 目录 :进入 cd… 返回上一级 cd 目录1\目录2 cd\ 回到根目录 cls 清屏 exit 退出 打开文件夹必须用cd 查找,但是文件不用&am…

【设计模式】通过访问者模式实现分离算法与对象结构

概述 定义:封装一些作用于某种数据结构中的各元素的操作(将数据结构于元素进行分离),它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 结构 访问者模式包含以下主要角色: 抽象访问者(Visitor)角色&#xff…

低版本 Linux 系统通过二进制方式升级部署高版本 Docker

​ 一、背景: 在一些 Linux 系统中,由于系统自带的软件源版本较低,或者因网络、权限等限制无法直接通过源文件来升级到最新版本的 Docker。这种情况下,采用二进制方式升级部署高版本 Docker 就成为一种有效的解决方案。下面将详…

SpringAI+Ollama+DeepSeek本地大模型调用

前言 大型语言模型(LLM)在自然语言处理领域取得了突破性进展,但其庞大的计算资源需求和高昂的调用成本,使得许多开发者望而却步。如何高效、便捷地调用大模型,并将其应用于实际场景,成为了亟待解决的问题。…

【大模型科普】AIGC技术发展与应用实践(一文读懂AIGC)

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能(AI)通过算法模拟人类智能,利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络(如ChatGPT&…

数据结构与算法:归并排序

目录 归并排序的基本思想 归并排序的特性总结 代码 归并排序的非递归版 归并排序的基本思想 归并排序是建立在归并操作上的一种有效的排序算法。改算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列…

阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台

阿里云操作系统控制台评测:国产AI运维 一站式运维管理平台 引言 随着云计算技术的飞速发展,企业在云端的运维管理面临更高的要求。阿里云操作系统控制台作为一款集运维管理、智能助手和系统诊断等多功能于一体的工具,正逐步成为企业高效管理…

爬虫案例十三js逆向模拟登录中大网校

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、网站分析二、代码 前言 提示:这里可以添加本文要记录的大概内容: js 逆向模拟登录中大网校 提示:以下是本篇文章正文内…

sql靶场--布尔盲注(第八关)保姆级教程

目录 布尔盲注(第八关) 1.判断 2.确认布尔盲注 3.手工尝试布尔盲注 表名字符 表数 表名长度 表字符 字段数 字段名长度 字段字符 4.脚本布尔盲注注入 布尔盲注(第八关) 1.判断 布尔盲注了,这种页面只会有…