搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
小桥流水78
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
测试用例编号_测试用例设计方法 实战讲解
2
使用idea搭建SpringBoot+Spring Data jpa项目(实现获取数据库数据显示在页面中)_idea里面怎么写获取信息页面
3
【蛋糕商城】(一)使用HBuliderX搭建uni-app项目_hbuilderx开发app案例
4
腾讯ai人工智能(智障)-java版可直接运行_腾讯ai生成海报 java
5
Prometheus 监控服务器
6
Java面试题超详细整理《Redis篇》_java面试redis
7
Redis 缓存穿透、缓存击穿和缓存雪崩_缓存雪崩传统
8
git学习笔记(图文)_git基本操作命令
9
大数据生态体系产品(2) - Spark的架构与原理_钱栓老师生态产品数据集的制作原理和注意事项
10
macOS Big Sur 11 Beta 8 Release Notes 更新记录_ios detectpatternsforpatterns
当前位置:
article
> 正文
数据库的完整性约束_数据库中为什么需完整性约束
作者:小桥流水78 | 2024-06-30 08:34:32
赞
踩
数据库中为什么需完整性约束
之前介绍了
数据库基本常识的简介及mysql安装
结构化查询语言sql
数据库表介绍
数据库的数据类型
数据操作语言DML——数据的增删改查
数据库对象操作语言DDL——修改、删除数据库表等对象
接下来介绍一下数据库的完整性约束。
完整性约束的作用
:保证数据库中数据的准确性和一致性。
约束在作用上可以分为两类:
表级约束:可以约束表中任意一个或多个字段,与列定义相互独立,不包含在列定义中;与定义用”,“分割;必须指定要约束的列的名称。
列级约束:包含在列定义中,直接跟在该列的其他定义之后,用空格分割,不需要指定列名。
完整性约束可以分为非外键约束和外键约束
非外键约束
主要包括以下几种(后面紧跟的是列级约束的写法)
主键约束:primary key。主键的作用是,通过主键所在的字段可以查询到唯一一条数据。主键的要求是不能为空,并且是唯一的。也就是说主键这一列必须有东西,并且每个行的主键位置的信息不能重复。主键的使用在创建表的时候,在这一列的语句中加入primary key即可。
自增约束:auto_increment。作用是,这个字段可以自己添加,但是字段类型必须是int(integer)类型。在插入的时候这个字段可以设置为null或者default都可。如果sql报错,则这个递增的就浪费了。此外自增必须应用在主键上。
非空约束:not null。作用是,这个字段的内容不能为空,也就是必须有内容。
唯一约束:unique。作用是,这个字段在这个表中的信息是不重复的。注意这里没有限制非空,所以与主键是有区别的。
默认值:default。作用是,如果这个字段在插入的时候不写,我们可以设置默认值。用法:default 默认值。
检查约束(mysql8之后的):check。作用是检查字段的内容。用法:check(字段=内容||字段=内容and字段=内容)
上面介绍的是
非外键约束
的
列级约束
写法,也就是直接跟在表创建的时候写。下面说一下这些约束的表记约束的写法
constraint 约束名 约束条件 (列名[条件])
这里的列名是必须的,条件有时候是需要的。例如检查约束的写法:constraint 约束名 check (sex = ‘男’ || sex = ‘女’)
注意表级约束跟列级约束基本一致,只不过写法不同而已。但是自增约束、非空约束、默认值约束只能使用列级约束,也就是说auto_increment、not null和default只能写在某一列后面。
如果使用列级约束,并且系统抛出错误。例如使用检查约束设置性别只能是男女,那么输入其他的之后,则会出错。这时候违反的约束,系统会自动命名。但是如果我们使用表级约束,则会按照我们定义的约束名,方便错误的排查。
在创建表之后添加约束:
命令语句:alter table 表名 add constraint 约束名 约束条件 (列名[条件]);
想要添加auto_increment的语句:alter table 表名 modify 列名 类型(限制) auto_increment;这就是相当于对之前的列字段重新定义了。
查看表结构:desc 表名;
接下来介绍一下外键约束
外键是指:表中的某一字段,依赖于另外一张表中某个字段的值。而被依赖的字段必须是主键约束或者唯一约束。被依赖的表通常称为父表或主表,而设置外键约束的表通常称为子表或从表。
主表中的字段称为主键,子表中的字段称为外键。例如学生表中一个班级字段关联到班级表id,则学生表的这个字段为外键,班级表的id为主键。学生表是子表,班级表是父表。
外键约束的主要好处是
可以将两张表紧密结合起来
数据不会重复
修改时效率高
需要先创建父表,再创建子表;先删子表,再删除父表。并且外键约束只有表级约束,没有列级约束。
命令语句:
建表的时候:constraint 约束名 foreign key (本表中的字段) references 主表名称(主表中的主键或者主表中的唯一约束的字段);
建表之后:alter table 表名 add constraint 约束名 foreign key (本表中的字段) references 主表名称(主表中的主键或者主表中的唯一约束的字段);
接下来说一下
外键策略
,也就是说如果有子表关联主表,主表的数据不能删除的时候,可以使用一些策略。
no action:不允许操作。写sql,让要删除的部分的关联取消掉,或者说关联到其他一行。例如要删除班级表中id=2的,可以将学生表中班级为2的先修改到其他班或者设置为null。
cascade:级联操作。操作主表的时候,会影响子表,例如将班级表中id=2的改成id=5,则之前学生表班级id=2的也会变成5。如果删除班级表id=2的,那么学生表中班级id为2的学生也会跟着删除。
用法(在子表中创建外键约束的时候,如果已经有了则删除之前的外键约束):
删除之前的外键约束:alter table (子)表名 drop foreign key 约束名;
重新添加带有级联操作的外键约束(这里对修改和删除都添加了级联操作):alter table (子)表名 add constraint 约束名 foreign key (本表中的字段) references 主表名称(主表中的主键或者主表中的唯一约束的字段) on update cascade on delete cascade;
set null:置空操作。操作主表的时候,子表的值会变成null。用法与级联操作类似。但是在之前写on update cascade和on delete cascade的时候换成 on update set null和on delete set null;
一般情况下,我们会将update设置为级联操作,而delete设置为置空操作。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/小桥流水78/article/detail/771985
推荐阅读
article
从源码解析
Bert
的
Bert
Pooler
模块
_
bert
pooler
...
前文链接:energy百分百:从源码解析
Bert
的 Embedding
模块
energy百分百:从源码解析 Ber...
赞
踩
article
自学AD第二天——从
原理
图
到
PCB
图
_
ad
如何将
原理
图
转化为
pcb
...
今天学习不顺利,在画异形焊盘的基本轮廓那里画了好久,然后老师的一些操作也看不明白,一种反复观看,感觉学的东西好杂,对AD...
赞
踩
article
STM32
毕业设计
单片机
RFID
智能
门禁系统
- 物联网 嵌入式_基于
单片机
的智能密码锁射频...
Hi,大家好,学长今天向大家介绍一个 如何使用
RFID
技术构建一个
单片机
门禁系统
基于
RFID
的
门禁系统
大家可用于 课程设...
赞
踩
article
两款
IntelliJ
IDEA
的
AI
编程
插件
_
intellij
idea
ai
插件
...
介绍两款
IntelliJ
IDEA
的
AI
编程
插件
:通义灵码和 CodeGeeX。这是由阿里推出的一个基于通义大模...
赞
踩
article
对于
GPT
-
5
的
些许期待...
GPT
-
5
作为下一代大语言模型,预计将在一年半后发布。据OpenAI首席技术官米拉·穆拉蒂描述,
GPT
-
5
的
智能水平将类...
赞
踩
article
uni
-
app
ios
运行提示
app
key未
配置
或
配置
错误
_
ios
未
配置
app
key或
配置
错误
...
uni
-
app
ios
运行提示
app
key未
配置
或
配置
错误
_
ios
未
配置
app
key或
配置
错误
ios
未
配置
app
ke...
赞
踩
article
什么是
HuggingFace
_
huggingface
是
干什么
的
...
HuggingFace
是一个高速发展
的
社区,包括Meta、Google、Microsoft、Amazon在内
的
超过500...
赞
踩
article
docker
-
compose
命令不
存在
、
docker
-
compose
not
found
_docke...
docker
-
compose
not
found
、
docker
-
compose
命令不
存在
centos 7中pytho...
赞
踩
article
python
镜像
源
配置
_
python
镜像
源
怎么用...
python
镜像
源
_
python
镜像
源
怎么用
python
镜像
源
怎么用 1.1 手动添加镜...
赞
踩
article
Py之
streamlit
:
streamlit
的简介
、
安装
、
使用方法之详细攻略_
pipy
stream...
Py之
streamlit
:
streamlit
的简介
、
安装
、
使用方法之详细攻略目录
streamlit
的简介streaml...
赞
踩
article
【
AI
工具
合集】
图片
、
文本
、音视频
工具
与A I岗位面试资料_
音频
视觉
文本
ai
...
本文介绍了全球最新的
AI
工具
集合,涵盖了
图片
、
文本
、视频、
音频
等多种类型,提供Windows系统本地化运行,包括Mone...
赞
踩
article
JQuery
中使用
mouseover
事件
和
mouseout
事件
作用在同一个
元素
上时
出现
闪烁现象_
js
...
前提:实现一个电影网站中的关于选定图片
出现
一个新的div容器展示具体电影详情的功能(通过使用visibility属性隐藏...
赞
踩
article
基于
单片机
的
门禁
安全
管理系统
设计
_基于
单片机
的
门禁
系统
设计
前言...
本系统将ID卡技术、计算机控制技术与电子门锁有机结合,用ID卡替代钥匙,配合计算机实现智能化
门禁
控制和管理,有效的解决了...
赞
踩
article
Java
项目
的难点_
java
项目
难点...
4. 并发编程:
Java
的并发编程是其强大的特性之一,但是并发编程可能会导致线程安全性和性能问题,需要仔细考虑如何编写并...
赞
踩
article
浅谈
Java
中
List
的用法_
java
列表
list
的用法...
浅谈一下
Java
中
List
的简单使用_
java
列表
list
的用法
java
列表
list
的用法 ...
赞
踩
article
Springboot
-
Zookeeper
(
curator
)实现
分布式
锁、
分布式
ID等
_
springb...
Zookeeper
的原生客户端使用起来比较繁琐,一般生成环境很少使用。
curator
在外面封装了一层,使用起来更加方...
赞
踩
article
【
ROS
】
ROS
上位机使用
Serial
库和
boost
::
asio
库与
STM32
进行
USART
通讯_b...
ROS
上位机使用
Serial
库和
boost
::
asio
库与
STM32
进行
USART
通讯,库安装、串口收发程序讲解_boo...
赞
踩
article
Jupyter
Notebook
安装
与使用教程(完整版)_
jupyter
notebook
安装
和...
你可以通过点击 "File" 菜单,然后选择 "Save and Checkpoint" 来保存你的
Notebook
。...
赞
踩
article
STM32
中断
和
事件
的区别...
STM32
中的
中断
和
事件
的区别
STM32
中断
和
事件
的区别 ...
赞
踩
article
Solidworks
按装配体
批量
编图
号_
solidworks
批量
编图
号...
本例子是在PDM API上完成的,如果没有PDM也可以通知读取装配体结构为每个零件写入属性值,同样可以做到
批量
编图
号;效...
赞
踩
相关标签
bert
bertpooler
nlp
python
pooler
linux
学习方法
单片机
stm32
毕业设计
intellij-idea
人工智能
java
创业创新
自然语言处理
uni-app
ios
huggingface
开发语言
streamlit
语言模型
ai
安全
嵌入式硬件