MySQLQ_数据库约束

news2025/5/9 15:43:44

目录

  • 什么是数据库约束
  • 约束类型
  • NOT NULL 非空约束
  • UNIQUE 唯一约束
  • PRIMARY KEY主键约束
  • FOREIGN KEY外键约束
  • CHECK约束
  • DEFAULT 默认值(缺省)约束


什么是数据库约束

数据库约束就是对数据库添加一些规则,使数据更准确,关联性更强
比如加了唯一值约束,就避免了人工检查的成本,大大降低了时间成本和风险

约束类型

NOT NULL 非空约束

加了非空约束的列不能为NULL值
如果预见某个列不能为空,建议家费控约束,会对查询功能产生积极的影响
用法:
在这里插入图片描述
加了非空约束后就不能加入空值

UNIQUE 唯一约束

指定了唯一约束的列,该列的值在所有记录中不能重复,比如一个人的身份证号
unique 值限制唯一,不限制空
只加了唯一约束的列可以写入多个null

测试用例:
在这里插入图片描述
校验:id 重复定义

PRIMARY KEY主键约束

主键约束唯一标识数据库中的每条记录(唯一)
主键必须包含唯一的值,且不能包含null值(非空)
每个表只能有一个主键,一个主键可以由单个列或多个列组成
通常每张表都指定一个主键,逐渐建议使用BIGINT类型

测试用例:
在这里插入图片描述
非空且唯一(与unique not null 不同),primary key 是数据库表的一个特性,数据如何组织依赖主键

通常把主键列设置为自动增长(auto_increment),让数据库维护主键
像这样写入数据时,不用人为的去维护主键值
在这里插入图片描述

这里的id系统自动维护
注意:写入自增数据id 后,对自增值写入null,表示id继续自增,null不影响自增属性 但是用户明确指定了一个数,这个数就会写入数据表中,下一次自增从最大值继续自增
比如先写入100,再写入4,最后自增是从最大值100往后自增

如果想一个主键包含两个列,就单独开一行
在这里插入图片描述
两个形成复合主键只要两个不同时重复就能创建
表中只能有一个自增列
auto_increment 属性只能用于定义为 PRIMARY KEY 或者 UNIQUE 的列
为自增主键指定null时,只起到一个占位作用

如果主键出现冲突,对主键进行修改(replace into)
使用:
在这里插入图片描述

FOREIGN KEY外键约束

外键用于定义主表和从表之间的关系
外键约束主定义在从表上,主表关联的列必须是非空唯一约束
从表和主表关联的列必须有对应关系(相同值)

外键约束也是对数据的一种校验
从表中使用了主表中的某个值,这个值必须存在于主表中

语法
【在从表中创建】
【从表外键类型和主表保持一致】

foreign key (从表列) references 主表表名(主表列);

如果不符合外键约束,就会报错【从表建的一条数据的外键不在主表内】
【如果要删除主表中的数据,则必须把从表中关联数据删了,或者删除外键关系】

CHECK约束

可以应用于一个或多个列,用于限制列中可接受的数据值,从而确保数据的完整性和准确性

举例:
在这里插入图片描述
【因为创建的age小于18,不符合check约束,所以报错】
也可以不同的两个列比较

DEFAULT 默认值(缺省)约束

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

在这里插入图片描述
【没有填age信息默认填入18】
【有指定值就以指定值为准】

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

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

相关文章

责任链设计模式(单例+多例)

目录 1. 单例责任链 2. 多例责任链 核心区别对比 实际应用场景 单例实现 多例实现 初始化 初始化责任链 执行测试方法 欢迎关注我的博客!26届java选手,一起加油💘💦👨‍🎓😄😂 最近在…

林纳斯·托瓦兹:Linux系统之父 Git创始人

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 林纳斯托瓦兹:Linux之父、Git创始人 一、传奇人物的诞生 1. 早年生活与家…

8. RabbitMQ 消息队列 + 结合配合 Spring Boot 框架实现 “发布确认” 的功能

8. RabbitMQ 消息队列 结合配合 Spring Boot 框架实现 “发布确认” 的功能 文章目录 8. RabbitMQ 消息队列 结合配合 Spring Boot 框架实现 “发布确认” 的功能1. RabbitMQ 消息队列 结合配合 Spring Boot 框架实现 “发布确认” 的功能1.1 回退消息 2.备用交换机3. API说…

维港首秀!沃飞长空AE200亮相香港特别行政区

4月13日-16日,第三届香港国际创科展在香港会议展览中心盛大举办。 作为国内领先、国际一流的eVTOL主机厂,沃飞长空携旗下AE200批产构型登陆国际舞台,以前瞻性的创新技术与商业化应用潜力,吸引了来自全球17个国家及地区的行业领袖…

redis6.2.6-prometheus监控

一、软件及系统信息 redis:redis-6.2.6 redis_exporter:redis_exporter-v1.50.0.linux-amd64.tar.gz # cat /etc/anolis-release Anolis OS release 8.9 granfa; 7.5.3 二、下载地址 https://github.com/oliver006/redis_exporter/releases?page…

如何在idea中快速搭建一个Spring Boot项目?

文章目录 前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热启动(热部署)结语 前言 Spring Boot 凭借其便捷的开发特性,极大提升了开发效率,为 Java 开发工作带来诸多便利。许多大伙伴希望快速…

itext7 html2pdf 将html文本转为pdf

1、将html转为pdf需求分析 经常会看到爬虫有这样的需求,将某一个网站上的数据,获取到了以后,进行分析,然后将需要的数据进行存储,也有将html转为pdf进行存储,作为原始存档,当然这里看具体的需求…

docker compose搭建博客wordpress

一、前言 docker安装等入门知识见我之前的这篇文章 https://blog.csdn.net/m0_73118788/article/details/146986119?fromshareblogdetail&sharetypeblogdetail&sharerId146986119&sharereferPC&sharesourcem0_73118788&sharefromfrom_link 1.1 docker co…

代码随想录算法训练营Day30

力扣452.用最少数量的箭引爆气球【medium】 力扣435.无重叠区间【medium】 力扣763.划分字母区间【medium】 力扣56.合并区间【medium】 一、力扣452.用最少数量的箭引爆气球【medium】 题目链接:力扣452.用最少数量的箭引爆气球 视频链接:代码随想录 题…

无感改造,完美监控:Docker 多阶段构建 Go 应用无侵入观测

作者:牧思 背景 随着云原生的普及,Golang 编程语言变得越来越热门。相比 Java,Golang 凭借其轻量,易学习的特点得到了越来越多工程师的青睐,然而由于 Golang 应用需要被编译成二进制文件再进行运行,Golan…

006.Gitlab CICD流水线触发

文章目录 触发方式介绍触发方式类型 触发方式实践分支名触发MR触发tag触发手动人为触发定时任务触发指定文件变更触发结合分支及文件变更触发正则语法触发 触发方式介绍 触发方式类型 Gitlab CICD流水线的触发方式非常灵活,常见的有如下几类触发方式: …

512天,倔强生长:一位技术创作者的独白

亲爱的读者与同行者: 我是倔强的石头_,今天是我在CSDN成为创作者的第512天。当系统提示我写下这篇纪念日文章时,我恍惚间想起了2023年11月19日的那个夜晚——指尖敲下《开端——》的标题,忐忑又坚定地按下了“发布”键。那时的我…

【目标检测】【YOLO综述】YOLOv1到YOLOv10:最快速、最精准的实时目标检测系统

YOLOv1 to YOLOv10: The fastest and most accurate real-time object detection systems YOLOv1到YOLOv10:最快速、最精准的实时目标检测系统 论文链接 0.论文摘要 摘要——本文是对YOLO系列系统的全面综述。与以往文献调查不同,本综述文…

日常学习开发记录-slider组件

日常学习开发记录-slider组件 从零开始实现一个优雅的Slider滑块组件前言一、基础实现1. 组件结构设计2. 基础样式实现3. 基础交互实现 二、功能增强1. 添加拖动功能2. 支持范围选择3. 添加垂直模式 三、高级特性1. 键盘操作支持2. 禁用状态 五、使用示例六、总结 从零开始实现…

Windows 系统如何使用Redis 服务

前言 在学习过程中,我们长期接触到的是Mysql 关系型数据库,也是够我们平时练习项目用的,但是后面肯定会有大型数据的访问就要借助新的新的工具。 一、什么是Redis Redis(Remote Dictionary Server)是一个基于内存的 键…

【unity游戏开发入门到精通——UGUI】CanvasScaler画布缩放器组件

注意:考虑到UGUI的内容比较多,我将UGUI的内容分开,并全部整合放在【unity游戏开发——UGUI】专栏里,感兴趣的小伙伴可以前往逐一查看学习。 文章目录 一、CanvasScaler画布缩放器组件是什么二、CanvasScaler的三种适配模式1、Cons…

Hugging Face 模型:AI 模型的“拥抱”与开源革命!!!

🌐 Hugging Face 模型:AI 模型的“拥抱”与开源革命 用表情符号、图表和代码,探索开源模型生态的底层逻辑与应用场景! 🌟 名字由来:为什么叫 Hugging Face? “Hugging”:象征 开放…

关于 人工智能(AI)发展简史 的详细梳理,按时间阶段划分,涵盖关键里程碑、技术突破、重要人物及挑战

以下是关于 人工智能(AI)发展简史 的详细梳理,按时间阶段划分,涵盖关键里程碑、技术突破、重要人物及挑战: 字数:约2500字 逻辑结构:时间线清晰,分阶段描述技术突破、关键事件与挑战…

微服务即时通信系统---(四)框架学习

目录 ElasticSearch 介绍 安装 安装kibana ES客户端安装 头文件包含和编译时链接库 ES核心概念 索引(Index) 类型(Type) 字段(Field) 映射(mapping) 文档(document) ES对比MySQL Kibana访问ES测试 创建索引库 新增数据 查看并搜索数据 删除索引 ES…

Android查看依赖树的方法,简单有效

一、使用命令打印 在工具栏“Terminal”中输入以下命令,即可打印依赖树信息 gradlew xxxx:dependencies (“xxxx”为module名称)二、工具栏双击打印 右侧“Gradle”工具栏打开按下图顺序依次查找到“dependencies”,双击后依赖树就会在控制台中打印出…