MySQL学习(8):约束

1.什么是约束

约束是作用于表中字段上的规则,以限制表中数据,保证数据的正确性、有效性、完整性

约束分为以下几种:

not null非空约束限制该字段的数据不能为null
unique唯一约束保证该字段的所有数据都是唯一、不重复的
primary key主键约束主键是一行数据的唯一标识,要求非空且唯一
default默认约束保存数据时,如果未指定该字段的值,则采用默认值
check(从mysql 8.0.16版本起,才支持)检查约束保证字段值满足某一个条件
foreign key外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性

约束可以在创建或修改表时添加(DDL)

2.使用案例

2.1主键与自动增长

上述建表条件中的自动增长(关键字为auto_increment)的含义是 表内每多一条数据,字段自动加一

建表语句如下图:

如果向表中写入如下数据:

则结果如下:

可以看到虽然添加数据时没有输入id的值,但表内还是有id的值,且自动增长

每张表只能有一个自动增长项,通常为主键

2.2自动增长与unique约束的冲突

不过,自动增长有一种特殊情况:继续以上述表为例,向表中写入如下数据

明显,两处重复的tom3违反了name字段的unique约束,这条数据会因为报错不在表中产生。

其结果如下:

可以看到,id直接从3跳到了5。

这是因为unique约束条件需要创建出一行新的数据,再与先前的数据进行比对并加以拦截,这条数据在产生的时候就已经让受到auto_increment约束的字段加1了

其他的约束条件是在创建前加以拦截,因此不会产生这种情况

3.外键

外键用来在2个表之间建立联系。使用外键的表称为子表或从表,与之产生联系的表称为父表或主表

3.1使用语句

(1)创建表

create table 表名(
字段名 数据类型,
...
[constraint] [外键名] foreign key (外键字段名) references 主表名(主表字段名)
);

(2)修改表

alter table 表名 add constraint 外键名  foreign key (外键字段名) references 主表名(主表字段名);

(3)删除外键

alter table 表名 drop foreign key 外键名;

3.2外键使用案例

主表(表名为dept)如下:

从表(表名为emp)如下:

要实现的效果是,让从表的dept_id字段与主表的id字段联系起来。

其使用的语句如下:

在建立了联系后,假如主表要删除 id为1 的那一行数据,数据库会报错。因为从表中外键字段dept_id中正在使用1

3.3外键删除更新行为

虽然在默认情况下主表不能删除从表外键使用的字段,但这可以通过设置从表行为来进行修改

外键有2种常用的删除更新行为:

(1)cascade:父表删除/更新对应记录时,数据库会先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。(父表删除记录后,并不是子表对应的外键处变为空,而是子表对应的一整行数据都被删除

(2)set null:父表中删除/更新对应记录时,数据库会先检查该记录是否有对应外键,如果有,则设置子表中该外键值为nul。(这就要求该外键允许取null,即不可设置非空约束not null

修改语句如下:

alter table 表名 add constraint 外键名  foreign key (外键字段名) references 主表名(主表字段名)on update 行为名 on delete 行为名;
#on update后接的是主表更新时的子表行为
#on delete后接的是主表删除时的子表行为

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

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

相关文章

微信小程序毕业设计-走失人员的报备平台系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

Docker 安装迅雷NAS

一、前言 在本文之前,博主在家用服务器 CentOS 上使用的下载方案是 Aria2 和其前端面板 Ariang. 所下载的资源大多数是 BT 资源,奈何 Aria2 对 BT 资源的下载速度实在堪忧,配置 BT 服务器效果不佳且费时。每次都将 BT 资源云添加至迅雷云盘&…

Github与本地仓库建立链接、Git命令(或使用Github桌面应用)

一、Git命令(不嫌麻烦可以使用Github桌面应用) git clone [] cd [] git branch -vv #查看本地对应远程的分支对应关系 git branch -a #查看本地和远程所有分支 git checkout -b [hongyuan] #以当前的本地分支作为基础新建一个【】分支,命名为h…

windows内置的hyper-v虚拟机的屏幕分辨率很低,怎么办?

# windows内置的hyper-v虚拟机的屏幕分辨率很低,怎么办? 只能这么大了,全屏也只是把字体拉伸而已。 不得不说,这个hyper-v做的很烂。 直接复制粘贴也做不到。 但有一个办法可以破解。 远程桌面。 我们可以在外面的windows系统&…

python解析Linux top 系统信息并生成动态图表(pandas和matplotlib)

文章目录 0. 引言1. 功能2.使用步骤3. 程序架构流程图结构图 4. 数据解析模块5. 图表绘制模块6. 主程序入口7. 总结8. 附录完整代码 0. 引言 在性能调优和系统监控中,top 命令是一种重要工具,提供了实时的系统状态信息,如 CPU 使用率、内存使…

0/1背包问题总结

文章目录 🍇什么是0/1背包问题?🍈例题🍉1.分割等和子集🍉2.目标和🍉3.最后一块石头的重量Ⅱ 🍊总结 博客主页:lyyyyrics 🍇什么是0/1背包问题? 0/1背包问题是…

CFS三层内网渗透——第二层内网打点并拿下第三层内网(三)

目录 八哥cms的后台历史漏洞 配置socks代理 ​以我的kali为例,手动添加 socks配置好了,直接sqlmap跑 ​登录进后台 蚁剑配置socks代理 ​ 测试连接 ​编辑 成功上线 上传正向后门 生成正向后门 上传后门 ​内网信息收集 ​进入目标二内网机器&#xf…

小程序分包加载、独立分包、分包预加载等

一、小程序分包加载 小程序的代码通常是由许多页面、组件以及资源等组成,随着小程序功能的增加,代码量也会逐渐增加, 体积过大就会导致用户打开速度变慢,影响用户的使用体验。分包加载是一种小程序优化技术。将小程序不同功能的代…

【微信小程序开发实战项目】——花店微信小程序实战项目(4)

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

Nginx的安装与配置 —— Linux系统

一、Nginx 简介 1.1 什么是 Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务…

Linux系统部署MongoDB开源文档型数据库并实现无公网IP远程访问

文章目录 前言1. 安装Docker2. 使用Docker拉取MongoDB镜像3. 创建并启动MongoDB容器4. 本地连接测试5. 公网远程访问本地MongoDB容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 💡 推荐 前些天发现了一个巨牛的人工智能学习网站&am…

现代农业利器:土壤检测仪器的应用与未来

在现代农业发展的浪潮中,土壤检测仪器以其精准、高效的特点,成为了农业生产的得力助手。这些看似不起眼的设备,实际上在保障农产品质量、提高农业生产效率方面发挥着举足轻重的作用。 一、土壤检测仪器:现代农业的“眼睛” 土壤检…

记录第一次写脚本

使用csh语言,Linux系统操作的 写和执行csh(C Shell)脚本不需要额外的软件,只需要一个支持csh的终端环境。 1.检查是否安装了C Shell 在终端terminal运行以下命令 which csh 如果返回路径,比如/bin/csh&#xff0c…

SpringBoot 启动流程六

SpringBoot启动流程六 这句话是创建一个上下文对象 就是最终返回的那个上下文 我们这个creatApplicationContext方法 是调用的这个方法 传入一个类型 我们通过打断点的方式 就可以看到context里面的东西 加载容器对象 当我们把依赖改成starter-web时 这个容器对象会进行…

STM32-HAL-FATFS(文件系统)(没做完,stm32f103zet6(有大佬的可以在评论区说一下次板子为什么挂载失败了))

1STM32Cube配置 1-1配置时钟 1-2配置调试端口 1-3配置uart 1-4配置SDIO(注意参数)(其中他的初始化的异常函数给注释,SD卡文件写了) 配置了还要打开中断和DMA可在我的其他文章中看一样的 1-5配置FatFs (只改了图选中…

QT c++函数模板与类模板的使用

QT c类模板的使用 #pragma once#include <QtWidgets/QMainWindow> #include "ui_QtWidgetsApplication5.h"class QtWidgetsApplication5 : public QMainWindow {Q_OBJECTpublic:QtWidgetsApplication5(QWidget *parent nullptr);~QtWidgetsApplication5();te…

Arthas实战(4)- 线程死锁问题排查

一、 准备测试应用 新建一个 SpringBoot应用&#xff0c;写一段线程死锁的代码&#xff1a; GetMapping("/threadLock") public void threadLock() {Thread thread1 new Thread(() -> {synchronized (resource1) {System.out.println(Thread.currentThread().g…

Solution

(解决方案)可行性研究报告暨设计方案-zengwenfeng.doc 基本上都要300-500多页&#xff0c;大型【纯软件】&#xff0c;县级0-200万&#xff0c;市级项目500-1500万不等&#xff0c;省部级1000-10000万不等都有。本例为过往已完成项目案例目录结构。搞方案都要准备1-3个月呢。所…

房屋租赁管理小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;中介管理&#xff0c;房屋信息管理&#xff0c;房屋类型管理&#xff0c;租房订单管理&#xff0c;租房信息管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;房屋信息&a…

极狐GitLab 将亮相2024空天信息大会暨数字地球生态峰会,携手中科星图赋能空天行业开发者

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…