MySQL数据库约束

目录

数据库约束

1.NULL约束

2.UNIQUE:唯一约束

3.DEFAULT:默认值约束

4.PRIMARY KEY:主键约束

5.FOREIGN KEY:外键约束


数据库约束

以下为本篇文章会介绍的约束

 (1)NOT NULL - 指示某列不能存储 NULL 值。  

(2)UNIQUE - 保证某列的每行必须有唯一的值。

(3)DEFAULT - 规定没有给列赋值时的默认值。
(4)PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。
(5)FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
约束能够引入更多的检查操作,但也会增加系统的开销, 属于牺牲了执行效率,换来了开发效率。

1.NULL约束

创建表时,可以指定某列不为空:

设置学生表结构1-1
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (id INT NOT NULL,sn INT,name VARCHAR(20),qq_mail VARCHAR(20)
);
比如我们先创建一个student表,我们对里面的id列进行约束为不能为null;
演示效果:
若想正常插入id不能为空

 


2.UNIQUE:唯一约束

设置学生表结构2-1

-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (id INT NOT NULL,sn INT UNIQUE,name VARCHAR(20),qq_mail VARCHAR(20)
);

这里我们重新设置一下表结构,对sn进行约束为唯一约束

演示效果:

补充:

加上unique约束之后,当后续进行插入或修改操作时,系统都会进行查询,看看操作值是否存在。


3.DEFAULT:默认值约束

指定插入数据时,若列为空,则为默认值

设置学生表结构3-1

指定插入数据时, name 列为空,默认值 unkown
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);

演示:

4.PRIMARY KEY:主键约束

可以理解为:主键是 NOT NULL 和 UNIQUE 的结合

非空&唯一
注意:
  • 每个表只能定义一个主键。

  • 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。

指定 id 列为主键:
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL PRIMARY KEY,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);
对于整数类型的主键,常配搭自增长 auto_increment 来使用。
插入数据对应字段不给值时, 数据库会按照自增的方式分配, 使用最大值+1。
-- 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
id INT PRIMARY KEY auto_increment 

(1)一般演示: 

 

 

(2)演示:
插入数据对应字段不给值时, 数据库会按照自增的方式分配, 使用最大值+1。
(3)此时你也可以手动加入符合条件的任意值。
(4)递增不重复利用之前的值

注意:

(1)自增的数据必须是整形。

(2)上述自增,只能在单个数据库中生效。如果数据库是由多个mysql服务器构成的集群,自增主键就会失效。


5.FOREIGN KEY:外键约束

外键用于关联其他表的主键或唯一键

语法如下:

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

本表的某列引用另一个表的对应列,此时就要求,本表中个这个列的数据与另一个表的类型对应。

接下来我们设计一个案例如下:

  • 创建班级表classes,id为主键
    DROP TABLE IF EXISTS classes;
    CREATE TABLE classes (
    id INT PRIMARY KEY auto_increment,
    name VARCHAR(20),
    desc1 VARCHAR(100)
    );
    

  • 创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id。
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT PRIMARY KEY auto_increment,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20),
classes_id int,
FOREIGN KEY (classes_id) REFERENCES classes(id)
);
  • 必须为主表定义主键。

MySQL 外键约束(FOREIGN KEY是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

简单理解:

班级表约束了学生表。我们把班级表这种约束别人的表称为父表,把学生表这种被约束的表称为子表。

演示:

(1)父表对字表的约束。外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。

如果输入不存在的classes_id.

(2)外键为空值:

补充:字表对父表也有约束

如果尝试修改或删除父表的记录,也会先查看一下子表,看看这个结果是否在子表中被引用,如果被引用则无法删改。


以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

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

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

相关文章

带头双向循环链表

目录 一、结构定义 二、结点创建 三、头结点初始化 四、链表打印 五、尾插 六、头插 七、尾删 八、头删 九、查找(返回结点) 十、任意位置插入 十一、任意位置删除 十二、利用LTInsert写尾插函数 十三、利用LTInsert写头插函数 十四、利用…

按位运算符、逻辑运算符

按位运算 运算符描述&按位与运算符:如果两个相应位都为1,则该位的结果为1,否则为0|按位或运算符:只要对应的两个二进位有一个为1时,结果位就为1^按位异或运算符:当两对应的二进位相异时,结…

pipeline + node +jenkins+kubernetes部署yarn前端项目

1、编写Dockerfile文件 # Set the base image FROM node:16.10.0# WORKDIR /usr/src/app/ WORKDIR /home/option# Copy files COPY ./ /home/option/# Build arguments LABEL branch${BRANCH} LABEL commit${COMMIT} LABEL date${BUILD_DATE} ARG ENV# Set ENV variables ENV …

视频封装格式

FLV(Flash Video) FLV封装格式 Tag Data分为Audio,Video,Script三种 TS(Transport Stream)传输流 TS文件分为三层,(倒叙更好理解) TS层:在PES层基础上加入…

Leetcode——岛屿的最大面积

1. 题目链接:695. 岛屿的最大面积 2. 题目描述: 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都…

Moto edge s pro手机 WIFI和蓝牙连接不上 解决方法分享

2021年12月入手一台Moto Edge S Pro 12256版,看着性价比很高,越用越垃圾。屏幕显示没有vivo亮丽/APP图标很丑/屏幕上一点点水就失灵/拍照片边缘是模糊的/系统几乎不更新。 以上都可以忍受,但是: 用一年不到,蓝牙不能…

pycharm使用

1、注释多行:ctril/ 2、解除多行注释:ctril/

【人工智能Ⅰ】7-KNN 决策树

【人工智能Ⅰ】7-KNN & 决策树 7-1 KNN(K near neighbour) 思想:一个样本与数据集中的k个样本最相似,若这k个样本大多数属于某类别,则该个样本也属于这类别 距离度量 样本相似性用欧氏距离定义 L p ( x i , x…

kicad源代码研究:symbol properties窗口中为SCH_SYMBOL添加或删除一个sch_field

向grid中添加一个sch_field FIELDS_GRID_TABLE<SCH_FIELD>* m_fields; WX_GRID* m_fieldsGrid; simEnableFieldRow (int) m_fields->size(); m_fields->emplace_back( VECTOR2I( 0, 0 ), simEnableFieldRow, m_symbol, SIM_ENABLE_FIELD ); // notify the grid w…

前端 vue 面试题 (一)

文章目录 v-if,v-show差别v-for和v-if虚拟dom解决什么问题vue的data为什么返回函数不返回对象比较vue&#xff0c;reactvue双向绑定原理vue虚拟dom 的diff算法vue 虚拟dom的diff算法的时间复杂度vue2与vue3的区别vue数据缓存&#xff0c;避免重复计算单页应用怎么跨页面传参vue…

在MySQL上实现间隔5分钟汇总取数及相关字符串、时间处理方法实践

1. 实践案例需求描述 查询mysql数据库&#xff0c;按每5分钟分组获取3个小时内的电量数据&#xff0c;参考SQL语句如下。 select sd.RecordTime RecordTime, sd.sddl sddl,sd.pvdl ,cap.capdl capdl from ((SELECT CONCAT(DATE_FORMAT(RecordTime,%Y-%m-%d %H:), LPAD(floor(…

Ubuntu20.04 通过nmcli命令查看网卡状态为unmanaged

问题描述&#xff1a; 通过下述指令查看网卡状态为 "unmanaged" nmcli dev status 解决方法&#xff1a; cd /usr/lib/NetworkManager/conf.d/ sudo mv 10-globally-managed-devices.conf 10-globally-managed-devices.conf.bak sudo cp 10-globally-managed-devic…

Java 设计模式——中介者模式

目录 1.概述2.结构3.案例实现3.1.抽象中介类3.2.抽象同事类3.3.具体同事类3.4.具体中介类3.5.测试 4.优缺点5.使用场景 1.概述 &#xff08;1&#xff09;一般来说&#xff0c;同事类之间的关系是比较复杂的&#xff0c;多个同事类之间互相关联时&#xff0c;他们之间的关系会…

Python爬取股票交易数据代码示例及可视化展示。

文章目录 前言一、开发环境二、第三方模块三、爬虫案例步骤四、爬虫程序全部代码1.分析网页2.导入模块3.请求数据4.解析数据5.翻页6.保存数据 五、实现效果六、数据可视化全部代码1.导入数据2.读取数据3.可视化图表4.效果展示关于Python技术储备一、Python所有方向的学习路线二…

Windows本地配置带GPU的Pytorch环境

首先需要安装并配置好Anaconda环境&#xff0c;安装教程教程随便找一个就好。 第一步&#xff1a;安装好之后创建conda虚拟环境&#xff1a; conda create -n your_env_name pythonx.x 第二步&#xff1a;安装需要版本的pytorch&#xff1a;pytorch下载链接 cu100/torch-1.2…

VUE基础的一些总结

首先推荐观看VUE官方文档 目录 创建一个 Vue 应用 要创建一个 Vue 应用&#xff0c;你需要按照以下步骤操作&#xff1a; 步骤 1&#xff1a;安装 Node.js 和 npm 确保你的计算机上已经安装了 Node.js。你可以在 Node.js 官网 上下载并安装它。安装完成后&#xff0c;npm&…

算法之Eigen库

Eigen库是用于线性代数运算的C++模板库,提供了矩阵、向量、数值求解器等线性代数相关算法的实现。以下是Eigen库的一些基本用法示例: 1. 安装Eigen库 首先,你需要下载并安装Eigen库。你可以从Eigen的官方网站上获取最新版本:Eigen官方网站 2. 定义矩阵和向量: #includ…

sqlalchemy查询数据为空,查询范围对应的数据在数据库真实存在

记录一个开发过程遇到的小bug&#xff0c;构造些伪数据还原并解释。 """ 场景&#xff1a;传参触发了查询条件&#xff0c;数据库中是存在传参对应范围的数据&#xff0c;但是通过查询条件得到的查询结果为空 """ 入参场景一&#xff1a; start_…

修复img实际有正确的链接,但是不显示 (chrome 插件保存的html)--google镜像chatgpt

打开目标html文件 chrome 控制台 执行以下脚本 //删除侧边栏 $x("//div[idsidebar]")[0].remove();//修复img实际有正确的链接&#xff0c;但是不显示 (chrome 插件保存的html&#xff09; //img.data-savepage-src 复制到 img.src imgs$x("//img"); imgs…

小黑完成了最后一节健身课,顺利完成了跳绳比赛,乘飞机到达南京准备第二天领物资和南京城内闲逛的leetcode之旅:215. 数组中的第K个最大元素

小黑代码 class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:# 数组长度n len(nums)nums list(map(lambda x:-x, nums))q []for i in range(n):heapq.heappush(q, nums[i])# 出堆target -1for i in range(k):target heapq.heappop(q)return -…