数据库->数据库约束

目录

一、数据库约束

1.定义

2.约束类型

3.NOT NULL 非空约束

4. UNIQUE 唯一约束

5.PRIMARY KEY 主键约束

1.主键的使用

2.把表中的主键交给数据库自己维护 

2.1主键列设置为null 则使用自增

2.2插入除了主键以外的所有非空列(推荐方法)

2.3自定义的主键值

4.为一个表定义两个主键(error)

5.一个主键包含多个列

6.主键或唯⼀键冲突时的更新操作

6.1 更新

6.2替换

6.FOREIGN KEY 外键约束

1.语法

2.应用

7.DEFALUT 默认值约束

1.应用

1.1重构学⽣表,有以下要求,年龄不能⼩于16岁,性别只能是男或⼥

1.2列与列之间进行比较


一、数据库约束

1.定义

数据库约束是关系型数据库的一个重要功能  

主要作用是保证数据的有效性  也可以理解为数据的正确性(数据本身是否正确,关联关系是否正正确)

人工检查数据的完整性工作量非常大,在数据库中定义一些约束,那么数据在写入数据库的时候,就会帮我们做一些检验

约束一般是在指定的列上创建的

2.约束类型

类型说明
NOT NULL⾮空约束指定⾮空约束的列不能存储 NULL 值
DEFALUT 默认约束当没有给列赋值时使⽤的默认值
UNIQUE 唯⼀约束指定唯⼀约束的列每⾏数据必须有唯⼀的值
PRIMARY KEY 主键约束NOT NULL 和 UNIQUE的结合,可以指定⼀个列或多个列,有助于防⽌数据
重复和提⾼数据的查询性能
FOREIGN KEY 外键约束外键约束是⼀种关系约束,⽤于定义两个表之间的关联关系,可以确保数据
的完整性和⼀致性
CHECK 约束 ⽤于限制列或数据在数据库表中的值,确保数据的准确性和可靠性

3.NOT NULL 非空约束

学⽣名为NULL时,这条记录是不完整的

在不可以为空的列后面加 not null 

4. UNIQUE 唯一约束

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

在需要加唯一约束的列后面加 unique 关键字

只加了唯一约束的列可以写入null  而且可以写入很多条null

5.PRIMARY KEY 主键约束

非空语约束 + 唯一约束 + 提高效率

主键约束唯⼀标识数据库表中的每条记录。
主键必须包含唯⼀的值,且不能包含 NULL 值。
每个表只能有⼀个主键,可以由单个列或多个列组成。
通常为每张表都指定⼀个主键,主键列建议使⽤BIGINT类型

1.主键的使用

在数据校验上   即非空 又 唯一

2.把表中的主键交给数据库自己维护 

2.1主键列设置为null 则使用自增

2.2插入除了主键以外的所有非空列(推荐方法)

2.3自定义的主键值

只要符合非空和唯一即可

自增操作一旦完成  不论是否写入成功 都不会回退

4.为一个表定义两个主键(error)

5.一个主键包含多个列

两列全部重复才报错

6.主键或唯⼀键冲突时的更新操作

6.1 更新

删除原数据  新增新数据

6.2替换

如果没有冲突则直接插入新数据 和 insert 的功能一样

6.FOREIGN KEY 外键约束

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

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

1.语法

foreign key (id) references class(id) -- 加入外界关联

2.应用

删除主表时 如果从表有对主表的引用 则不允许删除主表的记录

 删除主表时 应该先解除主外键关系 或者先删除从表

7.DEFALUT 默认值约束

指定值的列用具体的值填充  没有指定值的列 用默认值填充如果明确指定列的值为null   则用null填充改列 

默认约束只是数据库层面的一个兜底行为 

8.CHECK 约束

对单行数据进行检验 一般在应用程序级别进行校验

1.应用

1.1重构学⽣表,有以下要求,年龄不能⼩于16岁,性别只能是男或⼥

1.2列与列之间进行比较

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ValueError: Object arrays cannot be loaded when allow_pickle=False

文章目录 问题解决方法1:allow_pickleTrue解决方法2:降低numpy版本错误原因:python和numpy版本不兼容 问题 Traceback (most recent call last): File “D:\project\test_st\retrieval\read_npy.py”, line 4, in data np.load(‘mosi0__le…

HTML CSS

目录 1. 什么是HTML 2. 什么是CSS ? 3. 基础标签 & 样式 3.1 新浪新闻-标题实现 3.1.1 标题排版 3.1.1.1 分析 3.1.1.2 标签 3.1.1.3 实现 3.1.2 标题样式 3.1.2.1 CSS引入方式 3.1.2.2 颜色表示 3.1.2.3 标题字体颜色 3.1.2.4 CSS选择器 3.1.2.5 发布时间字…

Prometheus和Grafana的安装部署

初识Prometheus和Grafana 通常来说,对于一个运行时的复杂系统,如果系统出了问题是很难排查的。因为你是不太可能在运行时一边检查代码一边调试的。因此,你需要在各种关键点加上监控,通过监控获取的数据,指导我们进一步…

ubuntu20.04 加固方案-设置用户缺省UMASK

一、编辑/etc/profile配置文件 打开终端。 查看当前umask 使用文本编辑器(如vim)编辑/etc/profile文件。 sudo vim /etc/profile 二、添加配置参数 在打开的配置文件的末尾中,添加或修改以下参数: umask 027 三、保存并退出…

liunx网络套接字 | 实现基于tcp协议的echo服务

前言:本节讲述linux网络下的tcp协议套接字相关内容。博主以实现tcp服务为主线,穿插一些小知识点。以先粗略实现,后精雕细琢为思路讲述实现服务的过程。下面开始我们的学习吧。 ps:本节内容建议了解网络端口号的友友们观看哦。 目录…

【果蔬识别】Python+卷积神经网络算法+深度学习+人工智能+机器学习+TensorFlow+计算机课设项目+算法模型

一、介绍 果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜(‘土豆’, ‘圣女果’, ‘大白菜’, ‘大葱’, ‘梨’, ‘胡萝卜’, ‘芒果’, ‘苹果’, ‘西红柿’, ‘韭菜’, ‘香蕉’, ‘黄瓜’)…

isp框架代码理解

一、整体框架如下: 1 外层的src中 1.1 从camera.c->task.c:封装了3层,透传到某个功能的本级。 1.2 core.c和capability.c中实现:开机初始化加载参数。2. plat/src中 2.1 fun.c中继task.c又透传了一层;以及最后功能…

VuePress文档初始化请求过多问题探讨

1. 背景 公司有部门使用VuePress 1.0搭建平台的帮助文档,前期文档不是很多,所以没有暴露出特别明显的问题。但随着文档的逐步迭代和内容的增多,出现了大量的并发请求,总共有218个请求,导致服务器带宽耗尽、响应速度下降…

Paimon x StarRocks 助力喜马拉雅构建实时湖仓

作者:王琛 喜马拉雅数仓专家 小编导读: 本文将介绍喜马拉雅直播的业务现状及数据仓库架构的迭代升级,重点分享基于 Flink Paimon StarRocks 实现实时湖仓的架构及其成效。我们通过分钟级别的收入监控、实时榜单生成、流量监测和盈亏预警&am…

Virtuoso使用layout绘制版图、使用Calibre验证DRC和LVS

1 绘制版图 1.1 进入Layout XL 绘制好Schmatic后,在原理图界面点击Launch,点击Layout XL进入版图绘制界面。 1.2 导入元件 1、在Layout XL界面左下角找到Generate All from Source。 2、在Generate Layout界面,选中“Instance”&#…

vscode插件-08 Golang

文章目录 Go安装其他必须软件 Go Go语言环境,只需安装这一个插件。然后通过vscode命令下载安装其他go环境需要的内容。 程序调试,需要创建.vscode文件夹并编写launch.json文件。 安装其他必须软件 ctrlshiftp,调出命令面板,输入…

Linux系列-vim的使用

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” vim的使用 vim是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面,比如语法加亮&am…

强化学习DQN实践(gymnasium+pytorch)

Pytorch官方教程中有强化学习教程,但是很多中文翻译都太老了,里面的代码也不能跑了 这篇blog按照官方最新教程实现,并加入了一些个人理解 工具 gymnasium:由gym升级而来,官方定义:An API standard for rei…

2024快手面试算法题-生气传染

问题描述 思路分析 生气只会向后传播,最后一个生气的人一定是最长连续没有生气的人中的最后一个人,前提是前面得有一个人生气。 注意,一次只能传播一个人,比如示例1,第一次只会传播给第一个P,不会传播给第…

入门 | Kafka数据使用vector消费到Loki中使用grafana展示

一、Loki的基本介绍 1、基本介绍 Loki 是由 Grafana Labs 开发的一款水平可扩展、高性价比的日志聚合系统。它的设计初衷是为了有效地处理和存储大量的日志数据,与 Grafana 生态系统紧密集成,方便用户在 Grafana 中对日志进行查询和可视化操作。 从架构…

分类算法——逻辑回归 详解

逻辑回归(Logistic Regression)是一种广泛使用的分类算法,特别适用于二分类问题。尽管名字中有“回归”二字,逻辑回归实际上是一种分类方法。下面将从底层原理、数学模型、优化方法以及源代码层面详细解析逻辑回归。 1. 基本原理 …

【Spring MVC】DispatcherServlet 请求处理流程

一、 请求处理 Spring MVC 是 Spring 框架的一部分,用于构建 Web 应用程序。它遵循 MVC(Model-View-Controller)设计模式,将应用程序分为模型(Model)、**视图(View)和控制器&#x…

现代数字信号处理I--最佳线性无偏估计 BLUE 学习笔记

目录 1. 最佳线性无偏估计的由来 2. 简单线性模型下一维参数的BLUE 3. 一般线性模型下一维参数的BLUE 4. 一般线性模型下多维参数的BLUE 4.1 以一维情况说明Rao论文中的结论 4.2 矢量参数是MVUE的本质是矢量参数中的每个一维参数都是MVUE 4.3 一般线性模型多维参数BLUE的…

QT(绘图)

目录 QPainter QPainter 的一些关键步骤和使用方法: QPainter 的一些常用接口: 1. 基础绘制接口 2. 颜色和画刷设置 3. 图像绘制 4. 文本绘制 5. 变换操作 6. 渲染设置 7. 状态保存与恢复 8. 其它绘制方法 示例代码1: 示例代码…

【js逆向学习】某多多anti_content逆向(补环境)

文章目录 声明逆向目标逆向分析逆向过程总结 声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的…