【MySQL】表的基本约束

news2025/1/19 23:23:28

文章目录

  • 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多对多

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

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

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

相关文章

【2024-04-19亲测有效】Markdown Pad2 激活

下载地址 链接 密码: 8trb 点击下载好的文件直接安装,安装过程按照提示就好。 安装后打开,会提示输入license 上面的填邮箱地址:Soar360live.com 下面的填密钥(注意要鼠标拖动全部复制,双击只能选中部分)…

webpack-babel

babel Babel 是一个 JavaScript 编译器,主要用于将高版本的 JavaScript 代码转换为低版本的 JavaScript 代码,从而确保代码在不同浏览器和环境中的兼容性。它可以将 ES6/ES7/ES8 等新特性转换为 ES5 等旧版本的 JavaScript 代码,使得开发人员…

在线编辑器 CodeMirror

如何优雅的在网页显示代码 如果开发在线编辑器 引入资源&#xff1a; <link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.60.0/codemirror.min.css"><script src"https://cdnjs.cloudflare.com/ajax/libs/c…

​面试经典150题——从前序与中序遍历序列构造二叉树

​ 1. 题目描述 2. 题目分析与解析 二叉树的前序、中序和后序遍历 二叉树的前序、中序和后序遍历是树的三种基本遍历方式&#xff0c;它们是通过不同的顺序来访问树中的节点的。 前序遍历&#xff08;Pre-order traversal&#xff09;&#xff1a; 访问根节点 前序遍历左子树…

五种主流数据库:集合运算

关系型数据库中的表与集合理论中的集合类似&#xff0c;表是由行&#xff08;记录&#xff09;组成的集合。因此&#xff0c;SQL 支持基于数据行的各种集合运算&#xff0c;包括并集运算&#xff08;Union&#xff09;、交集运算&#xff08;Intersect&#xff09;和差集运算&a…

本地项目如何设置https——2024-04-19

问题&#xff1a;由于项目引用了html5-qrcode插件&#xff0c;但是该插件在本地移动端调试时只能使用https访问&#xff0c;所有原本的本地地址是http&#xff0c;就需要改成https以方便调试。 解决方法&#xff1a;使用本地https证书 1&#xff09;从项目文件下打开cmd逐步输…

AOP基础

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

SRS服务接入华为云CDN

一、srs配置 正常的标准配置即可&#xff0c;需打开hls推流即可&#xff0c;一般配置中默认打开 二、华为云cdn配置 1.登录华为云&#xff0c;找内容分发网络cdn 2.点击域名管理&#xff0c;点击添加域名 3.配置加速域名 4.选择点播加速 5.添加源站 配置源站地址&#xf…

2024年【G1工业锅炉司炉】考试及G1工业锅炉司炉考试内容

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【G1工业锅炉司炉】考试及G1工业锅炉司炉考试内容&#xff0c;包含G1工业锅炉司炉考试答案和解析及G1工业锅炉司炉考试内容练习。安全生产模拟考试一点通结合国家G1工业锅炉司炉考试最新大纲及G1工业锅炉司炉考…

删除顺序表中所有值为X的元素(顺序表,单链表)

目录 时间复杂度为O(1)(顺序表)&#xff1a;代码实现&#xff1a; 运行结果&#xff1a; 时间复杂度为O(n)(顺序表)&#xff1a;代码实现&#xff1a; 运行结果&#xff1a; 单链表&#xff1a;时间复杂度o&#xff08;n&#xff09;:代码实现&#xff1a; 时间复杂度为O(1…

20240415,构造函数和析构函数,拷贝构造函数调用时机规则

目录 二&#xff0c;对象的初始化和清理 2.1 构造函数和析构函数 2.2 函数分类及调用 2.3 拷贝构造函数调用时机 2.4 构造函数调用规则 二&#xff0c;对象的初始化和清理 2.1 构造函数和析构函数 解决初始化和清理问题&#xff0c;编译器自动调用&#xff0c;如果不提…

探索异常传播:深入剖析Python中的错误处理机制

文章目录 1. 异常传播的基本原理2. 复杂的异常传播场景3. 再次抛出异常的意义是什么&#xff1f;4. 最佳实践与异常处理策略 理解异常传播&#xff08;也称为异常冒泡&#xff09;的过程是至关重要的。这一机制确保当在程序执行中发生错误时&#xff0c;错误能被有效地捕获和处…

CentOS7下安装mysql8或者mysql5.7

mysql8 1、下载 访问mysql官网下载mysql8软件包 https://dev.mysql.com/downloads/mysql/ 选择相应的版本如&#xff1a;RPM Bundle mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar RPM Bundle 8.0.33 下载地址&#xff1a;https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.…

springboot结合vue实现文件上传下载功能

紧接着上一次的博客&#xff0c;这次来实现一下文件(主要是图片)的上传和下载功能&#xff0c;上一次的博客如下所示&#xff1a; Springboot集成JWT token实现权限验证-CSDN博客 其实文件的上传和下载功能(后端的部分)&#xff0c;在我之前的博客就已经有写了&#xff0c;所以…

【学习】关于测试技术的重要性和挑战有哪些

随着信息技术的飞速发展&#xff0c;软件产品已成为现代社会不可或缺的一部分。在软件研发过程中&#xff0c;测试技术的重要性日益凸显。它不仅是确保软件质量的关键环节&#xff0c;也是降低软件故障风险、提高用户体验的重要手段。然而&#xff0c;测试技术也面临着诸多挑战…

【触想智能】如何选购到一款合适的工业电脑一体机

工业电脑一体机是专为工业环境而设计的一种工业计算机。工业电脑一体机和普通的计算机不一样&#xff0c;它对产品的参数性能要求很高&#xff0c;因为它们通常会运行在高低温、电磁干扰、高粉尘、湿度大的恶劣环境中&#xff0c;所以相应的要求工业电脑一体机必须具备良好的宽…

Qt日志使用

QsLog使用 这篇讲qt的日志还是比较好的&#xff0c;可以在自己的函数里面配置这个日志框架实现自己所需的功能。 我接触的项目里面&#xff0c;假如有个函数功能执行错误了&#xff0c;我希望可以快速定位到这个错误&#xff0c;这个时候就需要到了日志&#xff0c;我咨询了有经…

LeetCode 113—— 路径总和 II

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 看到树的问题一般我们先考虑一下是否能用递归来做。 假设 root 节点的值为 value&#xff0c;如果根节点的左子树有一个路径总和等于 targetSum - value&#xff0c;那么只需要将根节点的值插入到这个路径列表中…

VUE 页码分页封装

VUE 页码封装组件 pagination/index.vue &#xff1a; <template><div class"pagination-contianer"><el-pagination background layout"prev, pager, next" :total"total" current-change"currentChange"> </e…

jdk17 +MAT进行内存分析

MemoryAnalyzer要进行内存分析&#xff0c;需要Dump快照 文件 手动获取Dump快照 文件 jmap -dump:live,formatb,file/path/to/heapdump.hprof <PID>然后再MAT 进行分析&#xff1a;