【MySQL】表的基本约束

文章目录

  • 1、约束类型
    • 1.1NOT NULL约束
    • 1.2UNIQUE:唯一约束
    • 1.3DEFAULT:默认值约束
    • 1.4PRIMARY KEY:主键约束
    • 1.5FOREIGN KEY:外键约束
  • 2、表的设计
    • 2.1一对一
    • 2.2一对多
    • 2.3多对多


1、约束类型

关键字解释
NOT NULL指示某列不能存储NULL值
UNIQUE保证某列的每行必须有唯一的值
DEFAULT规定没有给列赋值时的默认值
PRIMARY KEYNOT NULL和UNIQUE的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的每一个特定的记录
FOREIGN KEY保证一个表中的数据匹配另一个表中的值的参数完整性

1.1NOT NULL约束

创建表的时候,指定某列不能为空

 create table student(id int not null, 
                      name varchar(20) not null);

在这里插入图片描述
上图中的NO就表示不允许存储空值

1.2UNIQUE:唯一约束

create table student(id int unique, 
                     name varchar(20) unique);

在这里插入图片描述
上述图片中用红色圈起来的地方就是加上unique约束之后,每次插入/修改都会需要先进行查询,如果发现重复(已经存在)就会插入/修改失败,加上unique之后执行效率就会降低,对数据的校验更严格,有助于写代码的时候减少出错的概率(提高开发的效率)

1.3DEFAULT:默认值约束

create table student(id int, 
                     name varchar(20) default '无名氏');

在这里插入图片描述
设置好之后,后续进行指定列插入的时候,未被指定的列就会保持默认值
在这里插入图片描述

1.4PRIMARY KEY:主键约束

一条记录的身份标识,比较两个东西,看他俩是不是同一个,此时就可以使用身份标识来进行区分
在MySQL中主键还有具体的两个要求:
1.不能为null
2.不能重复

一般给表设置主键,都是使用数字(整数形式),很少会使用字符串
一个表只能有一个主键,一个主键不一定只针对一个列
把多个列的内容联合到一起,共同的构成一个主键叫做联合主键

create table student(id int primary key, 
                     name varchar(20));

在这里插入图片描述
当某个列集合了not null和unique就成了主键
在这里插入图片描述
MySQL中提供了 “自增主键” 每次插入新的数据,都可以把主键基于上一条数据的主键+1

 create table student(id int primary key auto_increment, 
                      name varchar(20));

在这里插入图片描述
上述主键的值就不用手动指定
在这里插入图片描述
此处写的的null表示这一列不用手动指定

1.5FOREIGN KEY:外键约束

就是两个表之间相互约束
外键用于关联其他表的主键或唯一键,语法:

foreign key(字段名)references 主表();

创建班级表class,classId为主键

mysql> create table class(classId int primary key auto_increment,
                          className varchar(30));

创建学生表student,一个学生对应一个班级,一个班级对应多个学生
使用id为主键,classId为外键,关联班级表classId

 create table student(id int primary key auto_increment, 
                      name varchar(30), 
                      classId int, 
                      foreign key (classId) references class(classId));

在这里插入图片描述
此时,student的classId就和class表的classId建立了联系student classId中的值,就必须要在class表的classId中存在
class表,就对student表产生了制约
此时,就把class表,制约别人的表,也称为“父表”(parent table)
把student表,被制约的表,称为“子表”(child table)
外键约束和unique类似的效果,都是要在插入和删除之前,进行查询

2、表的设计

表的设计是一个比较抽象的概念,有了一定经验后,会更好理解,结合后期的项目设计,再来理解表的设计,可能会更好,这里我们简单介绍一下常见设计

2.1一对一

每个人都有身份证,每个身份证id就对应一个人,这就是一对一的关系
关于一对一的设计方案有两种
第一种方案:把身份证id和姓名放在一张表里面
第二种方案:把身份证id和姓名放在不同的表里,相互关联

2.2一对多

一个班级对应多个学生,一个学生对应一个班级

2.3多对多

比如学校的一门课程,可以被多名学生选修,而一名学生可以选修多门课程,这就是多对多的关系

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

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

相关文章

点赞列表查询列表

点赞列表查询列表 BlogController GetMapping("/likes/{id}") public Result queryBlogLikes(PathVariable("id") Long id) {return blogService.queryBlogLikes(id); }BlogService Override public Result queryBlogLikes(Long id) {String key BLOG_…

【C++航海王:追寻罗杰的编程之路】C++11(上)

目录 1 -> C11简介 2 -> 统一的列表初始化 2.1 -> {}初始化 2.2 -> std::initializer_list 3 -> 声明 3.1 -> auto 3.2 -> decltype 3.3 -> nullptr 1 -> C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1),使得C…

Debian

文章目录 前言一、使用root用户操作二、配置用户使用sudo命令三、添加桌面图标显示1.打开终端2.执行安装命令3.执行成功后重启4. 打开扩展,配置图标 四、图形化界面关闭和打开五、设置静态IP1.查询自己系统网络接口2.修改网络配置文件 总结 前言 Debian 系统在安装…

基于Springboot+Vue的Java项目-在线文档管理系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

RUOYI 若依 横向菜单

保留移动端适配 小屏适配 菜单权限等 可轻松进行深度自定义菜单样式 以及分布 仅支持横向布局 如需源码 教程等 ➕ wx 技术支持 wx : 17339827025

【IEEE出版 | 中山大学主办 | 往届会后2-4个月EI检索】第五届电子通讯与人工智能学术会议(ICECAI 2024)

第五届电子通讯与人工智能国际学术会议(ICECAI 2024) 2024 5th International Conference on Electronic communication and Artificial Intelligence 第五届电子通讯与人工智能国际学术会议(ICECAI 2024)将于2024年5月31日-6月…

淘宝订单交易详情查询API是淘宝开放平台提供的接口,可以通过该接口获取淘宝订单的详细信息。

淘宝订单交易详情查询API是淘宝开放平台提供的接口,可以通过该接口获取淘宝订单的详细信息。通过该API,你可以获取订单的基本信息、商品信息、买家信息、物流信息等。 具体使用该API需要进行以下步骤: 在淘宝开放平台注册开发者账号&#xf…

QA测试开发工程师面试题满分问答15: 讲一讲InnoDB和MyISAM

InnoDB和MyISAM是MySQL中两种常见的存储引擎,它们在数据存储和处理方面有着显著的区别。让我们逐一来看一下它们的区别、原理以及适用场景。 区别: 事务支持:InnoDB是一个支持事务的存储引擎,而MyISAM不支持事务。事务是一种用于维…

L2-045 堆宝塔

L2-045 堆宝塔 分数 25 全屏浏览 切换布局 作者 陈越 单位 浙江大学 堆宝塔游戏是让小朋友根据抓到的彩虹圈的直径大小,按照从大到小的顺序堆起宝塔。但彩虹圈不一定是按照直径的大小顺序抓到的。聪明宝宝采取的策略如下: 首先准备两根柱子&#xff…

C++运算符重载和日期类的实现

运算符重载 参数个数与操作个数应该一致(双目操作符就是2个参数,同时参数中包括this) 不能被重载的运算符 " .* "运算符的作用 .*就是用来调用成员函数指针的 调用 1.显式调用 运算符重载可以显式调用 eg. 2.转换调用 运算符重载增强了程序的可读性 bool operato…

SpringBoot版本配置问题与端口占用

前言 ​ 今天在配置springboot项目时遇到了一些问题,jdk版本与springboot版本不一致,在使用idea的脚手架创建项目时,idea的下载地址是spring的官方网站,这导致所下载的版本都是比较高的,而我们使用最多的jdk版本是jdk…

使用不锈钢微型导轨的优势!

微型导轨是一种专门用于在紧凑空间内执行高精度的机器运动控制的导轨设备。其特点是尺寸小、精确度高、刚性好、平稳性好以及使用寿命长。微型导轨的材质种类多样,一般包括钢、不锈钢、铝合金等。目前来说,不锈钢材质的使用率最为频繁,那么使…

Vue3从入门到实践:深度了解新组件

1.Teleport 概念:Teleport(传送门)是一个新的特性,用于在DOM中的任意位置渲染组件。它允许你将组件的内容渲染到DOM中的另一个位置,而不受组件层次结构的限制。 下面举出例子解释: 1.新建App.vue文件作…

数据结构—单链表

1、链表的概念及结构 1.1链表的概念 链表是一种物理存储结构上非连续、非顺序的存储结构,但在逻辑上确是连续、顺序的,而数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 1.2链表的结构 如下图: 逻辑上的链表,pList是指…

AOP基础

一、AOP概述 AOP:Aspect Oriented Programming(面向切面编程、面向方面编程),其实就是面向特定方法编程。 使用场景:①记录操作日志;②权限控制;③事务管理等。 优势:①代码无侵入…

【GPTs分享】GPTs分享之 AskYourPDF Research Assistant​

一、简介 AskYourPDF Research Assistant 是一款高级人工智能研究助手,专门设计用于帮助用户高效从PDF文件和文章中提取信息。它结合了深度学习技术和自然语言处理能力,以便用户能够快速地查询、总结及处理文档内容,并能够生成与文章内容相关…

依泉LXSY LXLY电子远传水表说明书MODBUS-RTU通讯协议

这款水表的通讯协议主要包括以下内容: 概述 传输方式 数据帧格式 地址码 功能码 数据区 CRC校验码 生成一个CRC的流程 通讯应用格式详解 寄存器地址 通讯接口 表盘地址 这是厂家给的通讯协议,我亲测可以读取到水表的读数,精度只…

怎么理解load_average

之前我讲了cpu使用率的问题,cpu使用率是我们监控中非常关注的指标。 但是工作中,我们经常遇到业务应用已经很慢了,但是cpu利用率显示很低。 这种时候,你会发现top中load很高。 在top中,load average后面有3个数字。…

AtCoder ABC349 A-D题解

比赛链接:ABC349 Problem A: 签到。 #include <bits/stdc.h> using namespace std; const int maxn105; int A[maxn]; int main(){int N;cin>>N;int ans0;for(int i1;i<N;i){cin>>A[i];ans-A[i];}return 0; } Problem B: 开2个桶即可&#xff0c;具体…

西夏区第三届中华诗词大会活动方案

活动流程/比赛规则 1.【13:30-14:10】 参赛选手签到&#xff1b;领取参赛号码牌&#xff1b;分组抽签&#xff1b;拍摄赛前感言&#xff0c;集体祝福口号&#xff1b; 2.【14:10-14:25】 熟悉设备、答题环节、题目设置等&#xff0c;走台演练 3.【14:25-14:30】 播放暖场视频…