MySQL初学之旅(3)约束
目录
1.前言
2.正文
2.1约束类型
2.2NULL约束
2.3UNIQUE约束
2.4DEFAULT约束
2.5PRIMARY KEY主键约束
2.6FOREIGN KEY外键约束
2.7CHECK约束
3.小结
1.前言
哈喽大家好啊,今儿来继续给大家分享最近学习的MySQL和约束相关的知识点,希望大家一起加油,让我们开始吧。
2.正文
2.1约束类型
在 MySQL 中,约束(Constraint)是对表中数据的一种规则,用于限制存储在表中的数据,确保数据库数据的完整性、一致性和准确性。约束在定义表的列时设置,主要分为以下几种:
2.2NULL约束
NULL
用于指定列可以接受空值。通常与NOT NULL
约束相对,NULL
表示该列允许为空,即在插入或更新数据时,可以不给该列赋值,让其存储NULL
值。如果在创建表时没有为某列指定
NOT NULL
约束,MySQL 默认允许该列存储NULL
值。如果设置为NOT NULL约束,那么在插入数据时必须设定初值。
接下来我们来演示一下:
CREATE TABLE student(
id BIGINT not NULL,
NAME VARCHAR(50)
);
我们先创建一个表,接着再用desc去查看:
我们可以看到,在上面一栏的约束中,id的NULL值被设置为了NO,意为无默认值,让我们插入数据试一下效果:
INSERT INTO student values (1,'jerry');
INSERT INTO student values (NULL,'TOM');
运行结果如下:
提示信息告诉我们,id那个元素必须设置不为空。
由此观之,确实是只有一个元素插入成功。
2.3UNIQUE约束
UNIQUE
约束用于确保一列或多列中的值在表内是唯一的,即不允许出现重复的值。UNIQUE
约束可以防止插入重复的数据,从而保证数据的完整性。
特点如下:
- 保证唯一性:
UNIQUE
约束确保指定列的值在整个表中是唯一的,但允许有一个空值(NULL
)。- 与主键的区别:一个表只能有一个主键,但可以有多个唯一约束列。
- 组合唯一约束:可以在多列上添加组合唯一约束,确保这些列的组合值在表中是唯一的。
添加UNIQUE约束的方式有俩种,一种是单列唯一约束另一种是多列组合唯一约束,下面附上代码来讲解:
create table stu1(
id1 bigint,
name1 VARCHAR(20)UNIQUE
);
create table stu2(
id2 bigint,
name2 VARCHAR(20),
number BIGINT,
Unique(name2,number)
);
先按照语法创建俩个表:
接下来插入数据验证一下:
我们可以发现当有相同的值时,就没有办法正常插入
整条语句都没有插入成功,同理多列一样没有办法成功,但有下面这一种情况:
组合类型中有一个重复,有一个不同,那么结果还是能插入成功的。
2.4DEFAULT约束
DEFAULT
约束用于设置数据库表中的列的默认值。当插入数据时,如果某一列没有提供值,数据库会自动使用默认值。
这个较为简单我们直接上代码演示:
CREATE table stu (
id bigint,
name varchar(20),
class VARCHAR(20)DEFAULT('六班')
);
继续插入数据调试:
INSERT INTO stu (id, name, class) VALUES (1, 'jerry', '三班'), (2, 'tom', DEFAULT);
2.5PRIMARY KEY主键约束
PRIMARY KEY
主键约束用于唯一标识数据库表中的每一行记录。一个表只能有一个主键,且主键列的值必须唯一,并且不能为 NULL
。主键约束通常用于保证数据的完整性和唯一性。
特点如下:
- 唯一性:主键的值必须是唯一的,不能有重复。
- 非空性:主键列不能包含
NULL
值。- 自动索引:数据库会自动为主键列创建索引,从而加快查询速度。
- 单表唯一:每个表只能有一个主键,但主键可以由一个或多个列组合而成。
附上代码:
create table stu (
id bigint PRIMARY KEY auto_increment,
name varchar(20)
);
解释一下这里面是什么意思:
id BIGINT PRIMARY KEY AUTO_INCREMENT
:id
列是主键,同时使用AUTO_INCREMENT
约束,这样每次插入新记录时,id
会自动递增,保证每条记录的唯一性。
如果我们这样插入:
INSERT INTO stu (name) VALUES ('Alice'), ('Bob'), ('Charlie');
没有为id赋初值,结果发现仍能正常插入,并仍有递增的功能:
2.6FOREIGN KEY外键约束
FOREIGN KEY
外键约束用于在两个表之间建立关系。外键用于引用另一个表的 PRIMARY KEY
或 UNIQUE
列,从而保证数据的引用完整性。通过外键,可以确保某个表中的值必须在另一个表中存在,从而实现数据的关联性。
特点如下:
- 外键是用来在两个表之间建立链接的字段。
- 外键约束确保外键列的值在主表中必须存在。
- 外键可以防止无效数据被插入到表中,确保数据一致性。
先创建父表:
CREATE TABLE departments (id INT PRIMARY KEY,name VARCHAR(50)
);
再创建子表:
CREATE TABLE employees (id1 INT PRIMARY KEY,name2 VARCHAR(50),department_id INT,FOREIGN KEY (department_id) REFERENCES departments(id)
);
此时,employees
表的 id
列是一个外键,让我们查看一下表属性:
此时表中存在外键关系。
INSERT INTO departments (id, name) VALUES (1, 'HR'), (2, 'Engineering');
INSERT INTO employees (id1, name2, department_id) VALUES (101, 'Alice', 1), (102, 'Bob', 2);
插入这俩行代码检验一下:
可以看到效果已经显现。
外键的好处是可以通过外键确保数据的完整性和关系的正确性。
2.7CHECK约束
CHECK
约束用于限制表中列的数据值,以确保数据符合特定条件。它在数据插入或更新时验证数据是否满足特定的规则,从而保证数据的有效性和一致性。
特点如下:
CHECK
约束可以应用于单个列或多个列。- 它通过表达式来定义,表达式的值为
TRUE
表示满足条件,否则不满足。- 任何不满足
CHECK
约束的插入或更新操作都会被拒绝。
CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(50),age INT CHECK (age >= 18)
);
在上面这个表中,为数据赋年龄时只能给>=18,一旦不满足条件就报错。
3.小结
今天的分享到这里就结束了,喜欢的小伙伴点点赞点点关注,你的支持就是对我最大的鼓励,大家加油!
相关文章:

MySQL初学之旅(3)约束
目录 1.前言 2.正文 2.1约束类型 2.2NULL约束 2.3UNIQUE约束 2.4DEFAULT约束 2.5PRIMARY KEY主键约束 2.6FOREIGN KEY外键约束 2.7CHECK约束 3.小结 1.前言 哈喽大家好啊,今儿来继续给大家分享最近学习的MySQL和约束相关的知识点,希望大家一起…...
使用YOLOv9进行图像与视频检测
大家好,YOLOv9 与其前身v8一样,专注于识别和精确定位图像和视频中的对象。本文将介绍如何使用YOLOv9进行图像与视频检测,自动驾驶汽车、安全系统和高级图像搜索等应用在很大程度上依赖于此功能,YOLOv9 引入了比 YOLOv8 更令人印象…...
C# 中的 LINQ:轻松处理集合和数据
C#中的LINQ(Language Integrated Query),这是一个非常强大且实用的功能,可以简化集合操作和数据查询。以下是一篇关于C#中LINQ使用的文章。 引言 LINQ(Language Integrated Query)是C#语言的一个重要特性…...

【征稿倒计时!华南理工大学主办 | IEEE出版 | EI检索稳定】2024智能机器人与自动控制国际学术会议 (IRAC 2024)
#华南理工大学主办!#IEEE出版!EI稳定检索!#组委阵容强大!IEEE Fellow、国家杰青等学术大咖领衔出席!#会议设置“优秀论文”“优秀青年学者报告”“优秀海报”等评优奖项 2024智能机器人与自动控制国际学术会议 &#…...

RHCE的学习(20)
变量5种赋值方式 shell中变量赋值5种方式,其中采用name10的方法称A 直接赋值 nameB read命令 read v1C 使用命令行参数 ($1 $2 $3 ..) name$1D 使用命令的输入 username$(whoami)E 从文件读取 #cut -d : -f1 /etc/passwd > /user.listfor…...

控制器ThinkPHP6
五、控制器中对数组值的返回 在做接口服务时,很多时候回使用数组作为返回值,那么数组如何返回成 json呢? 在 tp6 中返回json 很简单,直接使用 json 进行返回即可,例如: public function index(){$resarra…...

1. Django中的URL调度器 (项目创建与简单测试)
1. 创建 Django 项目 运行以下命令创建一个名为 blog_project 的 Django 项目: django-admin startproject blog_project2. 创建博客应用 Django 中,项目可以包含多个应用。创建一个名为 blog 的应用: cd blog_project python manage.py …...
学习python的第十天之数据类型——dict字典
学习python的第十天之数据类型——dict字典 Python 中的字典(Dictionary)是一个非常强大的内置数据类型,它用来存储键值对(key-value pairs)信息。字典是无序的,这意味着它们不会记录你添加键值对的顺序&am…...

华为Mate 70临近上市:代理IP与抢购攻略
随着科技的飞速发展,智能手机已经成为我们日常生活中不可或缺的一部分。而在众多智能手机品牌中,华为一直以其卓越的技术和创新力引领着行业的发展。近日,华为Mate 70系列手机的发布会正式定档在11月26日,这一消息引发了众多科技爱…...

进程信号
目录 信号入门 1. 生活角度的信号 2. 技术应用角度的信号 3. 注意 4. 信号概念 5. 用kill -l命令可以察看系统定义的信号列表 6. 信号处理常见方式概览 产生信号 1. 通过终端按键产生信号 Core Dump 2. 调用系统函数向进程发信号 3. 由软件条件产生信号 4. 硬件异…...

RT-DETR融合GhostModel V3及相关改进思路
RT-DETR使用教程: RT-DETR使用教程 RT-DETR改进汇总贴:RT-DETR更新汇总贴 《GhostNetV3: Exploring the Training Strategies for Compact Models》 一、 模块介绍 论文链接:https://arxiv.org/pdf/2404.11202v1 代码链接:https:…...
JVM有哪些垃圾回收器
Serial垃圾回收器:单线程收集器,适用于客户端模式下的小型应用。 使用复制算法回收新生代,使用标记-整理算法回收老年代。 在进行垃圾回收时,会停止所有用户线程(Stop-The-World, STW)。Serial Old垃圾回收…...

EWM 打印
目录 1 简介 2 后台配置 3 主数据 4 业务操作 1 简介 打印即输出管理(output management)利用“条件表”那一套理论实现。而当打印跟 EWM 集成到一起时,也需要利用 PPF(Post Processing Framework)那一套理论。而…...
前端文件优化
一、图片优化 计算图片大小 对于一张100*100像素的图片来说,图像上有 10000 个像素点,如果每个像素的值是 RGBA 存储的话,那么也就是说每个像素有 4 个通道,每个通道 1 个字节(8 位 1个字 节)࿰…...

电脑怎么自动切换IP地址
在现代网络环境中,电脑自动切换IP地址的需求日益增多。无论是出于网络安全、隐私保护,还是为了绕过地域限制,自动切换IP地址都成为了许多用户关注的焦点。本文将详细介绍几种实现电脑自动切换IP地址的方法,以满足不同用户的需求。…...
hbase集成phoenix
1.环境 环境准备 三台节点zookeeper三节点hadoop三节点hbase三节点 2.pheonix集成 官网下载地址,需挂梯子,使用官网推荐的对应hbase版本即可 https://phoenix.apache.org/download.html下载及解压 wget https://dlcdn.apache.org/phoenix/phoenix-…...

单片机智能家居火灾环境安全检测
目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在现代社会,火灾安全始终是人们关注的重点问题。随着科技的不…...

Git_2024/11/16
文章目录 前言Git是什么核心概念工作流程常见术语解读Git的优势 Git与SVN对比SVNGit总结 Git配置流程及指令环境配置获取Git仓库本地初始化远程克隆 工作目录、暂存区、版本库文件的两种状态本地仓库操作远程仓库操作Git分支Git标签IntelliJ IDEA使用Git回滚代码 GitHub配置流程…...
Java基础夯实——2.1Java常见的线程创建方式
在 Java 中,线程是实现并发编程的核心。主要有以下三种: 继承 Thread 类实现 Runnable 接口实现 Callable 接口并结合 Future 使用 1. 继承 Thread 类 继承 Thread 类是创建线程的最简单方式之一。通过扩展 Thread 类并重写其 run 方法,可…...
【Docker容器】一、一文了解docker
1、什么是docker? 1.1 docker概念 Docker是一种容器化平台,通过使用容器技术,Docker允许开发人员将应用程序和其依赖项打包到一个独立的、可移植的容器中。每个容器具有自己的文件系统、环境变量和资源隔离,从而使应用程序可以在…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...