MySQL中的数据库约束

目录

导读:

约束类型

1、not null(不能为空)

2、unique(唯一)

3、default(默认值约束)

4、primary key(唯一)与unique

相同点:

不同点:

auto_increment:

5、foreign key(外键)

语法形式:

功能:

6、check——了解即可


导读:

在使用数据库的时候,为了避免插入数据出错,一般会对插入的数据进行约束(限制)

比如插入学生信息(包含学生名字):

如果不对插入的数据进行约束,那么这种情况,也会插入成功:

在逻辑上这显然是不成立的,因为学生的名字不能是null。

为此,MySQL中提供了约束类型,用来实现对插入数据的管控。


约束类型

一共有这几种:

not null - 指示某列不能存储 NULL 值。

unique - 保证某列的每行必须有唯一的值。

default - 规定没有给列赋值时的默认值。

primary key - not nullunique 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。

foreign key - 保证一个表中的数据匹配另一个表中的值的参照完整性。

check - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 check子句。

接下来,妖妖介绍:

1、not null(不能为空)

语法形式:

 create table 表名(id int ,name varchar(20) not null,score int);

举例,创建一个表,名字这一列不能填NULL

此时还想插入一个名字为null的学生就不可能了:

注意事项:

1、name的默认值不能是NULL了:

2、不能将名字修改成NULL:

2、unique(唯一)

语法形式:

 create table 表名(id int unique,name varchar(20),score int);

举例,创建一个表,id不能重复

注意:

unique允许有多个NULL值,而不报错。

3、default(默认值约束)

语法形式:

create table 表名(id int ,name varchar(20) default '自定义的默认值',score int);

举例,创建一个表,id的默认值是-1,名字的默认值是‘无姓名’:

4、primary key(唯一)与unique

primary key(一般叫主键)unique很像,被约束的列,都不能出现重复的值,但他们也有很多不同点。

相同点:

1.唯一性:primary keyunique都确保了被修饰的列的值是唯一的。

2.索引:MySQL 会自动为 PRIMARY KEY 和 UNIQUE 创建索引,以加快查询速度。(索引如果没学过,不用管,不要紧)

不同点:

1.unique允许插入相同的NULL值,因为MySQL认为NULL无法比较,因此不相等

但primary key不允许插入相同的NULL值。

2.数量 primary key在一个表中,只能约束一列数据:

但unique在一个表中可以约束多列数据:

像这种约束,用的还是比较多的,比如说游戏的ID

五月份LOL的改名活动,不知道大家有没有白嫖:

像这种可以取重复ID的账户系统,底层使用的就是primary key这类约束,既对id这一列进行唯一约束,但是不对name这一列进行唯一约束。


auto_increment:

auto_increment是一个关键字,通常与primary key一起使用去约束整数类型的数据,

MySQL 中用于自动生成唯一标识符的属性

语法:

插入数据:

 结果:

也就是说,id默认从1,开始,然后顺序增加。

注意:

如果图中插入了一个id为100的数据:

在使用auto_increment:

那么id将会从101开始递增:


 

5、foreign key(外键)

语法形式:

create table 表名(id int ,foreign key(id) references 另一个表的表名(表中一个字段)

看不懂没关系,等一下有栗子吃。

外键相对于前四个,功能就有意思了,语法形式也和上面有所不同。

功能:

有这样两个表,一个存储班级:

一共只有三个班级,请记住。

接下来一个表,用来存储学生:

此时,父表(class)和子表(student)就建立了联系。

子表,在插入数据的时候,受到父表的约束,班级号码不能1、2、3以外的数字,否则报错:

同时,父表也可能会被子表约束:

子表先插入一个非法数据:

然后删除父表对应的行数据,将会报错:

6、check——了解即可

语法:

实际上也是对插入数据进行约束。

例如,上图插入数据的price必须是正数才行,不然会报错。

但是,MySQL并不支持check关键字的使用,即使它可以用代码执行,但是实际运行时,会自动忽略。

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

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

相关文章

在WSL2下配置Pytorch(Linux+Anaconda+PyTorch-GPU)

之前使用过双系统、虚拟机的ubunutu 效果都不是很好,要么切换系统太麻烦,要么太卡顿 最近在尝试WSL子系统,没有想到还是有很多坑 记录一下配置的过程 一、NVIDIA显卡的安装 因为WSL和Windows的显卡驱动不能互通,所以在子系统上需…

在iPhone上恢复删除Safari历史记录的方法[2024]

您是否正在寻找恢复 iPhone 上已删除的 Safari 历史记录的最佳方法?好吧,这篇文章提供了 4 种在有/无备份的情况下恢复 iPhone 上已删除的 Safari 历史记录的最佳方法。现在按照分步指南进行操作。 iPhone 上的 Safari 历史记录会被永久删除吗&#xff1…

开源项目学习——vnote

一、介绍 vnote是一款免费且开源的markdown编辑器,用C开发,基于Qt框架,windows/linux/mac都能用。 二、编译 $ git clone --recursive https://github.com/vnotex/vnote.git $ cd vnote && mkdir build $ cd build $ cmake ../ $ …

国外媒体软文发稿-引时代潮流-助力跨国企业蓬勃发展

大舍传媒:开疆拓土,引领传媒新潮流 随着全球经济的一体化和信息技术的高速发展,跨国企业在国际市场上的竞争越来越激烈。这也给跨国企业带来了巨大的机遇和挑战。在这个时代背景下,大舍传媒凭借其独特的优势和创新的服务模式&…

代码随想录算法训练营第五十四 | ● 392.判断子序列 ● 115.不同的子序列

392.判断子序列 https://programmercarl.com/0392.%E5%88%A4%E6%96%AD%E5%AD%90%E5%BA%8F%E5%88%97.html class Solution { public:bool isSubsequence(string s, string t) {if(s.size()0 )return true;if(t.size()0)return false;vector<vector<int>> dp(s.size(…

GAN的入门理解

这一篇主要是关于生成对抗网络的模型笔记&#xff0c;有一些简单的证明和原理&#xff0c;是根据李宏毅老师的课程整理的&#xff0c;下面有链接。本篇文章主要就是梳理基础的概念和训练过程&#xff0c;如果有什么问题的话也可以指出的。 李宏毅老师的课程链接 1.概述 GAN是…

不能访问huggingface、与GPU配置

不能访问huggingface解决方法 如果是从 huggingface.co 下载模型&#xff0c;由于国内不能访问&#xff0c;所以建议先配置一下环境变量&#xff0c; 通过访问国内镜像站点 https://hf-mirror.com来下载模型。 &#xff08;1&#xff09;Linux系统设置环境变量&#xff1a; e…

[Cloud Networking] Layer3 (Continue)

文章目录 1. DHCP Protocol1.1 DHCP 三种分配方式1.2 DHCP Relay (中继) 2. 路由协议 (Routing Protocol)2.1 RIP (Routing Information Protocol)2.2 OSPF Protocol2.3 BGP Protocol2.4 IS-IS Protocol2.5 ICMP&#xff08;Internet Control Message Protocol&#xff09; 1. …

Unity 设置默认字体(支持老版及新版TMP)

普通UI-Text设置 &#xff08;同一unity版本设置一次即可&#xff09; 1.首先工程的Resources目录下创建Fonts文件夹用于存放字体 如下图所示 2.找到Unity的安装目录下的Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.ugui\Runtime\UI\Core\Text.cs文件 …

YOLOv5改进 | 主干网络 | 用SimRepCSP作为主干网络提取特征【全网独家 + 降本增效】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; SimRepCSP 类似于 YOLOv7的主干网络&#xff0c;由卷积模块和重参数化卷积&#xff08;RepConv&#xff09;模块组合而成&#xff0c;以 Cro…

特种设备起重机指挥题库附答案

1、【多选题】力的三要素是指:( )。(ACD) A、力的大小 B、力的单位 C、力的方向 D、力的作用点 2、【多选题】司索作业规范正确的要求是( )(ABC) A、吊点正确 B、吊索挂设合理 C、绑扎牢靠 D、吊索长短一致 3、【多选题】圆柱形物体兜吊时&#xff0c;一定要放空圈&#…

从零开始,手把手教你文旅产业策划全攻略

如果你想深入了解文旅策划的世界&#xff0c;那么有很多途径可以获取知识和灵感。 首先&#xff0c;阅读一些专业书籍也是一个不错的选择。书店或图书馆里有许多关于文旅策划的书籍&#xff0c;它们通常涵盖了策划的基本理论、方法和实践案例。通过阅读这些书籍&#xff0c;你…

python项目(豆瓣电影)

目录 1、项目效果 2、项目源码 3、技术实现 4、总结 前言 我的这个项目是做的一个豆瓣电影爬取&#xff0c;爬取了豆瓣电影的TOP排行榜的数据 包括电影的名称 演员 评分 评价人数等等 运用了TK布局助手 布了4个界面 有登录 注册 首页 详情 注意&#xff1a;项目并没有连接数…

讨论C++类与对象

讨论C类与对象 C语言结构体和C类的对比类的实例化类对象的大小猜想一猜想二针对上述猜想的实践 this指针不同对象调用成员函数 类的6个默认成员函数构造函数析构函数拷贝构造函数浅拷贝和深拷贝 赋值运算符重载 初始化列表初始化顺序 C语言结构体和C类的对比 在C语言中&#x…

深入探讨跨域请求(CORS):原理、解决方案与详细示例代码

深入探讨跨域请求&#xff08;CORS&#xff09;&#xff1a;原理、解决方案与详细示例代码 &#x1f310; 深入探讨跨域请求&#xff08;CORS&#xff09;&#xff1a;原理、解决方案与详细示例代码 &#x1f310;摘要引言正文内容什么是跨域&#xff1f;为什么会有跨域问题&am…

三十七篇:大数据架构革命:Lambda与Kappa的深度剖析

大数据架构革命:Lambda与Kappa的深度剖析 1. 引言 在这个数据驱动的时代,我们面临着前所未有的挑战和机遇。随着数据量的爆炸性增长,传统的数据处理方法已无法满足现代业务的需求。大数据处理不仅涉及数据量的增加,还包括数据类型的多样化、数据来源的广泛性以及对实时数据…

两句话让LLM逻辑推理瞬间崩溃!!

一道简单的逻辑问题&#xff0c;竟让几乎所有的LLM全军覆没&#xff1f; 对于人类来说&#xff0c;这个名为「爱丽丝梦游仙境」&#xff08;AIW&#xff09;的测试并不算很难—— 「爱丽丝有N个兄弟&#xff0c;她还有M个姐妹。爱丽丝的兄弟有多少个姐妹&#xff1f;」 稍加思考…

牛客题目数据结构

做过线段树2模板大概可以写出一部分代码&#xff0c;这题主要关键点是怎么维护平方和 借图了 这样处理完maketag的代码就出来了 void maketag(int id,int l,int r,ll v,int opt){if(opt1){seg[id].val*v;seg[id].pfval*(v*v);seg[id].mul*v;seg[id].add*v;}else{seg[id].pfva…

Java程序设计————从控制台输入

向控制台输入信息可以借助Scanner扫描器类来实现 语法&#xff1a; Scanner input new Scanner(System.in); 提示 &#xff08;1&#xff09;在使用Scanner类型之前&#xff0c;需要首先指明Scanner类所在的位置&#xff0c;既通过代码 import java.util.Scanner; &…

技术前沿 |【大模型BLIP-2的多模态训练】

大模型BLIP-2的多模态训练 一、引言二、BLIP-2模型概述三、多模态训练成本问题四、冻结预训练好的视觉语言模型参数的优势五、冻结预训练好的视觉语言模型参数的方法 一、引言 随着人工智能技术的飞速发展&#xff0c;大型多模态模型如BLIP-2在多个领域取得了显著的成果。然而…