MySQL数据库之数据库约束,一文带你了解

article/2025/9/28 4:07:50

在这里插入图片描述

前言

从今天开始本系列就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。


全文大约 【1785】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图,让你更好的理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考…

一. 约束

什么是约束呢?约束就是对数据的制约和限定条件,各位小伙伴下面跟着我们的思路走,思考下面问题:

问题:在往已创建表中新增数据时,可不可以新增两行相同列值得数据?

如果可行,会有什么弊端?

数据重复了,那么肯定会白白浪费服务器的存储空间。所以就一定需要对数据进行限制和约束,设定数据填写的限制条件。

1. 主键约束

PRIMARY KEY唯一,标识表中的一行数据,此列的值不可重复,且不能为 NULL。

#1.为表中适用主键的列添加主键约束。
CREATE TABLE subject(
subjectId INT PRIMARY KEY, #课程编号标识每一个课程的编号唯一,且不能为 NULL。
subjectName VARCHAR(20),
subjectHours INT
)charset=utf8;#2.这一条数据会正确插入。
INSERT INTO subject(subjectId,subjectName,subjectHours) VALUES(1,'Java',40);
#3.error主键1已存在,所以插入报错。
INSERT INTO subject(subjectId,subjectName,subjectHours) VALUES(1,'Java',40);

2. 唯一约束

UNIQUE唯一,标识表中的一行数据,不可重复,可以为 NULL。

#1.为表中列值不允许重复的列添加唯一约束。
CREATE TABLE subject(
subjectId INT PRIMARY KEY,
subjectName VARCHAR(20) UNIQUE, #课程名称唯一。
subjectHours INT
)charset=utf8;#2.此条数据会正确插入。
INSERT INTO subject(subjectId,subjectName,subjectHours) VALUES(1,'Java',40);
#3.error课程名称已存在,违反唯一约束。
INSERT INTO subject(subjectId,subjectName,subjectHours) VALUES(2,'Java',40);

3. 自动增长列

AUTO_INCREMENT自动增长,给主键数值列添加自动增长。从1开始,每次加1。不能单独使用,和主键配合。

#1.为表中主键列添加自动增长,避免忘记主键ID序号。
CREATE TABLE subject(
subjectId INT PRIMARY KEY AUTO_INCREMENT,#课程编号主键且自动增长,会从 1 开始根据添加数据的顺序依次加 1
subjectName VARCHAR(20) UNIQUE,
subjectHours INT
)charset=utf8;#2.课程编号自动从1增长。
INSERT INTO subject(subjectName,subjectHours) VALUES('Java',40);
#3.第二条编号为2。
INSERT INTO subject(subjectName,subjectHours) VALUES('JavaScript',30);

4. 非空约束

NOT NULL非空,此列必须有值。

#1.课程名称虽然添加了唯一约束,但是有 NULL 值存在的可能,要避免课程名称为 NULL。
CREATE TABLE subject(
subjectId INT PRIMARY KEY AUTO_INCREMENT,
subjectName VARCHAR(20) UNIQUE NOT NULL,
subjectHours INT
)charset=utf8;#2.error课程名称约束了非空。
INSERT INTO subject(subjectName,subjectHours) VALUES(NULL,40);

5. 默认值约束

DEFAULT 值为列赋予默认值,当新增数据不指定值时,书写DEFAULT,以指定的默认值进行填充。

#1.当存储课程信息时,若课程时长没有指定值,则以默认课时 20 填充。
CREATE TABLE subject(
subjectId INT PRIMARY KEY AUTO_INCREMENT,
subjectName VARCHAR(20) UNIQUE NOT NULL,
subjectHours INT DEFAULT 20
)charset=utf8;#2.课程时长以默认值 20 填充。
INSERT INTO subject(subjectName,subjectHours) VALUES('Java',DEFAULT);

6. 引用完整性约束

这个引用完整性约束,我们解释一下哈。指的是数据的一致性和正确性。

完整性约束是指数据库的内容必须随时遵守的规则。若定义了数据完整性约束,MySQL会负责数据的完整性,每次更新数据时,MySQL都会测试新的数据内容是否符合相关的完整性约束条件,只有符合完整性的约束条件的更新才被接受。

语法: CONSTRAINT 引用名 FOREIGN KEY(列名) REFERENCES 被引用表名(列名)

详解: FOREIGN KEY引用外部表的某个列的值,新增数据时,约束此列的值必须是引用表中存在的值。

#1.创建专业表。
CREATE TABLE Speciality(
id INT PRIMARY KEY AUTO_INCREMENT,
SpecialName VARCHAR(20) UNIQUE NOT NULL
)CHARSET=utf8;#2.创建课程表(课程表的SpecialId 引用专业表的 id)。
CREATE TABLE subject(
subjectId INT PRIMARY KEY AUTO_INCREMENT,
subjectName VARCHAR(20) UNIQUE NOT NULL,
subjectHours INT DEFAULT 20,
specialId INT NOT NULL,
#3.引用专业表里的 id 作为外键,新增课程信息时,约束课程所属的专业。
CONSTRAINT fk_subject_specialId  FOREIGN KEY(specialId) REFERENCES Speciality(id)
)charset=utf8;#4.专业表新增数据。
INSERT INTO Speciality(SpecialName) VALUES('Java');
INSERT INTO Speciality(SpecialName) VALUES('C#');#5.课程信息表添加数据
#专业 id 为 1,引用的是专业表的 Java。
INSERT INTO subject(subjectName,subjectHours) VALUES('Java',30,1);
#专业 id 为 2,引用的是专业表的 C#。
INSERT INTO subject(subjectName,subjectHours) VALUES('C#MVC',10,2);

注意:

创建关系表时,一定要先创建主表,再创建从表。

当两张表存在引用关系,要执行删除操作,一定要先删除从表(引用表),再删除主表(被引用表)。


二. 结语

最后在这里对本文核心要点进行总结:

  1. 约束就是对数据的限制这样可以避免无效数据,垃圾数据的存在。

  2. 常用的约束有主键约束、唯一约束、非空约束需要各位小伙伴熟练掌握哦。


http://chatgpt.dhexx.cn/article/kNp907IP.shtml

相关文章

数据库的约束和设计

约束 作用 对表中的数据进行进一步的限制, 保证数据的正确性, 有效性和完整性 种类 primary key : 主键约束unique : 唯一约束not null : 非空约束default : 默认值foreign key : 外键约束auto_increment : 自增约束(适用于int数据类型) 主键约束 特点 非空且唯一 注意事项 …

MySQL:数据库的约束

目录 1.数据库约束 1.1 非空:not null 1.2 唯一:unique ​​​​​​​ 1.3 默认值:default 1.4 列描述:comment 1.5 主键约束:primary key 1.6 外键约束 1.7 综合案例 2.插入查询结果 3.聚合函数 4.group by…

oracle数据库:约束

约束简介 约束是数据库用来确保数据满足业务规则的手段,不过在真正的企业开发中,除了主键约束这类具有强需求的约束,像外键约束,检查约束更多时候仅仅出现在数据库设计阶段,真实环境却很少应用,更多是放到…

[数据库]表的约束

●🧑个人主页:你帅你先说. ●📃欢迎点赞👍关注💡收藏💖 ●📖既选择了远方,便只顾风雨兼程。 ●🤟欢迎大家有问题随时私信我! ●🧐版权:本文由[你帅…

MySQL数据库,数据的约束

目录 1.数据的约束 1.1约束的类型 1.2NULL约束 1.3UNIQUE约束 1.4DEFAULT约束 1.5PRIMARY KEY约束 1.6FOREIGN KEY约束 1.数据的约束 首先,创建一个名为test的数据库: mysql> create database test charset utf8; Query OK, 1 row affected …

MySQL数据库(数据库约束)

目录 数据库约束 数据库约束的类型: null约束 : unique约束(唯一约束): default约束(默认值约束): primary key约束(主键约束): for…

数据库中的8种常见约束定义

数据库中常见约束的定义理解和应用(附代码) 首先来说数据库中约束的定义是什么? 约束定义:按照表中的数据规则,如果存在违反约束的数据行为,行为就会被阻止。 一般在创建表之后就会创建相关列的约束&#…

基础SQL第二课:约束

一、约束: 什么是约束? 为了确保表中的数据的完整性(准确性、正确性),为表添加一些限制。是数据库中表设计的一个最基本规则。使用约束可以使数据更加准确,从而减少冗余数据(脏数据)。 数据库完整性约束分…

sublime解决中文乱码问题

首先找到你选择的build-system,如下图所示: 第二步:找到preferences下的browse packages,点击进入目录 第三步:找到对应的.sublime-build文件 第四步:打开文件,将"env": {"LANG&…

sublime text 3211 安装中文包

sublime text 3211 安装中文包 安装步骤: 1、打开Sublime Text3,选择Preferences ->Package Contorol 2、在Sublime Text3 弹窗输入install package,选择对应命令,然后鼠标点击安装install package 3、等待一会Sublime Text3 的 insta…

Sublime 中文命名乱码(显示为方框)

今天在使用Sublime中发现,将文件名以部分文字以中文命名,非中文部分能正常显示,中文部分显示不出来。如下图所示 这里就是python能显示出来,其他的汉字就变成了方框。与此对应的现象还有部分文本的部分内容显示为繁体 &#xff0…

解决sublime汉化后部分中文显示为繁体字

解决sublime汉化后部分中文显示为繁体字 1. 问题描述2. 解决方法3. 修正之后的效果 1. 问题描述 使用插件下载汉化包之后,部门字体仍显示为繁体,如下图 这种字体看着实在是别扭的不行 2. 解决方法 找到首选项 -> 设置 添加以下内容 "font_o…

关于sublime中文上下跳动错位的解决方法

关于sublime中文上下跳动错位的解决方法 在preferences-settings打开 增加"font_options":[“gdi”] 对比效果如下:

Sublime text文本编辑器中文乱码解决方法

Sublime text 出现中文乱码的解决方法 问题描述 Sublime text文本编辑器用起来感觉挺好的,它的代码补全功能非常不错,界面也很漂亮。 最近在学习C语言,我感觉Dev-C的界面比较朴实,代码补全功能操作性太强。因此,我会…

Sublime Text3 中文错位解决办法

在使用prettytable库打印列表时偶然发现,相同的中英文混合字符串表格在Windoows控制台以及NotePad上能对齐显示,在SublimeText3以及EmEditor上无法对齐显示: Windoows控制台(能对齐显示): EmEditor&…

sublime离线插件安装

一、首先需要安装Package Control 参考官网:Installation - Package Control中的方法。 其中分联网自动下载安装和手动两种。本文介绍手动的。 Click the Preferences > Browse Packages… menuBrowse up a folder and then into the Installed Packages/ fold…

解决 Sublime Text 中文样式显示异常问题

目录 一、问题背景 二、问题解决 1)在工具栏中选择 Preferences → Settings ,打开配置文件 2)在右侧界面添加下方代码块中的内容, CtrlS 保存 三、效果展示 一、问题背景 最近在单位的Mac系统中使用Sublime Text感觉良好&a…

sublime text里面中文字体显示异常解决方案

sublime text下载之后一开始转成中文之后,会出现中文显示异常的问题,比如下图中“门”字显示异常 通过如下的设置可以解决该问题: 首选项--》设置 在该位置添加如下内容: {"font_options": ["gdi"],"dp…

Linux sublime设置中文,Sublime Text 3 设置为Ubuntu 14.04默认编辑器并支持中文

Ubuntu 14.04下设置Sublime Text 3支持中文输入 发现Sublime Text不支持中文,我用的是Fctix,查了好长时间教程搞定了,在此分享并记录下,最后附上本次所需文件的下载地址。 1、 复制如下的代码为sublime_imfix.c文件并放到sublime_…

sublime匹配汉字

需要处理的文本 GET/aaa/v1/xxx【门户】获取商机列表信息 POST/aaa/v1/xxx创建商机接口 POST/aaa/v1/xxx/approve审核渠道报备商机 GET/aaa/v1/xxx/areaSales根据区域编码获取对应的销售负责人(渠道经理) POST/aaa/v1/xxx/assign分派渠道报备商机 POST/aaa/v1/xxx/convert/ord…