我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL中常见的六个约束类型详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL中常见的六个约束类型详解

前言

在向数据表中插入数据时,有的时候对于插入的数据是有特殊要求的,比如学生成绩不能为空,学生学号不能重复等等,这个时候约束就派上用场了。

约束类型是通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。这一章我们主要介绍六个常见的MySQL约束类型。

1. not null

保证指定不能存储NULL值,如果插入NULL则插入失败。

我们定义两张数据表,分别是student表和student_copy表,student表设定相关约束,student_copy表作为其对照表,不设置任何约束来观察两者的区别。

student表中id定义了not null,所以id这一行的NULL = NO,意思是这一行数据不能为NULL,否则会插入失败。

student_copy表中没有进行任何约束,所以任何字段的NULL = YES,意味着用户可以随意插入空值而不会报错。

Q:not null约束下除了显式的指定插入NULL会报错外,隐式的NULL会报错吗?

NULL指定有两种方式,分别是显式和隐式。

显式指的是插入时设定该列为NULL,而隐式指的是插入时对该列没有赋值,而这一列又没有指定默认值,系统默认的默认值是NULL,所有这中情况下也会触发插入控制的错误。

2. unique

保证某列的每行必须有唯一的值,也就是说,指定列的每行数据都不能重复。

下面两张图分别是对student表和student_copy表的操作,student表的id列设置了unique约束,所以在插入同样的id = 1时会显示重复操作。

student_copy表中没有进行任何约束,意味着用户可以随意插入任意值而不会报错。

Q:unique约束下插入NULL值会报错吗?

其实这个问题在刚才已经操作过了,student表中插入id = NULL,系统并不会报错。unique只是保证存储的值唯一,它可以是空值,但空值也得唯一,再插入NULL就会报错。

3. default

规定没有给列赋值时的默认值,换句话说就是,插入数据时没有给指定列的值,那么其值就是defalut指定的默认值。

student表指定了name字段设置了default约束之后,default这一列就有了名字。当插入数据时,没有指定name这一列,那么name这列就会按照我们设置的默认值 = '未命名'来填充。

而student_copy表没有设置default约束,所以当插入数据时,没有指定的列会按照系统默认的默认值来填充,也就是NULL。

4. primary key

not null + unique 的结合,保证某列具有唯一标识且不能存储NULL值。

前几个约束类型都是可以同时给多个列设置的,但是primary key一张表中只有能约束一列,使用primary key约束的列被称为主键

和unique类型,插入的数据如果重复了,那么后一条数据会插入失败,并且插入的数据不能为NULL。

一个表中只能由一列时主键,不能同时有多列是主键。设计表的时候,一般最好设定一个主键,常见的主键都是数字形式的。

自增主键auto_increment

在实际开发中,往往有一系列的策略来保证主键不重复,最常见的方法就是设置自增主键,系统可以自动给数据分配,用户也可以同时手动进行干预,因为MySQL中内置了自增主键功能,所以使用非常简单.

下图中id这一列就变成了自增主键,用户在插入数据时,就可以不必手动干预了.

Q:执行以下操作,猜想该表的查询结果是什么?

已知Id字段设置为自增主键.

张三的id = null,由于自增主键按照顺序它的id = 1;李四的id = 1,主键不能重复,李四的id和张三的id重复,所以插入失败;继续插入李四数据,此时设置id = 4,没有和原有数据重复,所以插入成功;王五的id = null,按照自增主键接着上一个顺序往下走,所以它的id = 5;

那么我们来看一下结果:

 

5. foreign key

外键用于关联其他表的主键,保证一个表中的数据匹配另一个表中的值的参照完整性。

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

下面我们举个例子来理解下,我们现在创建两张表并想把它们关联起来,应该如何操作呢?

首先思考一下这个对应关系,一个学生对应一个班级,一个班级对应多个学生.在学生表中id为主键,那我们可以设置学生class_id为外键,去关联比班级表.

创建班级表class,设置classsId为主键


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

创建学生表student,设置id为主键


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

MUL表示外键约束;

外键的使用规则

学生表中的插入的班级Id,必须在班级表中存在;

班级表是空的,这个时候插入学生表数据并给class_id = 1,而班级号在班级表中是空的,所以插入失败.学生表指定的这个外键约束,必须是班级表的主键;外键约束建立好了以后,此时班级表中的班级id就不能再随意修改或删除;

我们无法将班级表中id = 1的记录修改为id = 20,因为学生表中的张三依赖于班级表id = 1这样的结果.

外键的缺点

加入假如我们有下面这样一个商品-订单关联的两张表

此时我们可以使用订单表中的商品id和商品表中的商品id建立外键约束,但是当订单表中有了一个商品Id为1的记录时,就无法删除商品表中的id = 1的记录了,那么这个数据就会持久的存下去,但是商品不一定永久存在,很有可能就下架了,这就是外键在关联某些表时的矛盾所在.

如果我们既希望拥有外键约束的校验功能,同时也希望可以解决当前的矛盾,那么我们可以进行逻辑删除:给商品单独添加一列,标识数据是否有效,设定flag = 1表示记录有效,flag = 0表示记录无效.需要删除的商品,可以直接把它的标识改为0,逻辑上标识已经删除了该商品,但实际上该数据还在表中存储,并不是真正意义上的物理删除.

6. check

保证列中的值符合指定的条件。

总结

到此这篇关于MySQL中常见的六个约束类型的文章就介绍到这了,更多相关MySQL常见约束类型内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL中常见的六个约束类型详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql中常见的约束

mysql 中常见的约束包括:主键约束、外键约束、唯一约束、非空约束、自增约束和检查约束。这些约束有助于确保数据完整性、提高数据质量、维护关系完整性并增强性能。MySQL 中常见的约束在 MySQL 数据库中,约束是一种确保数据完整性和一
mysql中常见的约束
2024-05-01

MySQL六种约束的示例详解

目录什么是约束外键约束什么是约束作用于表上的规则,限制存储在表中的数据约束分类:约束描述关键字非空约束该字段数据不能为nullNOT NULL唯一约束该字段数据唯一不重复UNIQUE主键约束一行数据的唯一标识(非空且唯一)PRIMAR
2023-02-21

mysql中常见的约束是什么

这篇文章主要为大家展示了“mysql中常见的约束是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中常见的约束是什么”这篇文章吧。常见约束1、NOT NULL:非空,该字段的值必填2
2023-06-20

MySQL中常见的约束有哪些

这篇“MySQL中常见的约束有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL中常见的约束有哪些”文章吧。1、非
2023-06-27

MySQL六种约束的示例详解(全网最全)

目录一、概述二、约束演示三、外键约束1、 什么是外键约束2、 不使用外键有什么影响3、 添加外键的语法4、 删除/更新行为5、 演示删除/更新行为四、主键id到底用自增好还是uuid好五、实际开发尽量少用外键一、概述概念: 约束是作用于表
2022-07-26

C#泛型约束中的引用详解

本篇内容介绍了“C#泛型约束中的引用详解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C# 泛型约束中的引用/值类型约束使用 C# 泛型,编
2023-06-17

Mysql中的CHECK约束特性详解

功能说明在mysql 8.0.16以前, CREATE TABLE允许从语法层面输入下列CHECK约束,但实际没有效果:CHECK (expr)在 MySQL 8.0.16,CREATE TABLE添加了针对所有存储引擎的表和列的CH
2022-08-08

OSPF中常见的六种LSA详解

OSPF中常见的六种LSA详解 1类LSA2类LSA3类LSA5类LSA4类LSA7类LSAOSPF中计时器 在OSPF协议中,使用LSA来传递路由信息和拓扑信息,因此了解不同的LSA的内容和其功能,对了解OSPF协议的路由形成有很大帮
2023-08-18

MySQL数据库表中的约束详解

目录mysql表中的约束(constraint)约束分类非空约束唯一性约束复合约束主键约束自增列-AUTO_INCREMENTlzqXVuAOKT外键约束FOREIGN KEY约束CHECK约束DEFAULT约束MySQL表中的约束(con
2023-03-02

MySQL数据库中的外键约束详解

外键是关系数据库中一种重要的数据完整性约束,它用于建立表与表之间的关联关系。外键约束指定了一个表的列或一组列必须存在于另一个表的主键或唯一键中。在MySQL中,外键约束使用FOREIGN KEY关键字来定义。以下是外键约束的详细解释:1.
2023-09-22

C++中常见的数据类型问题详解

C++中常见的数据类型问题详解,需要具体代码示例在C++中,数据类型是编程的基础。了解和正确使用不同的数据类型是编写高效,可靠代码的关键。在C++中,常见的数据类型包括整型,浮点型,字符型,布尔型和自定义类型。每个类型都有其自身的特点和用途
2023-10-22

MySQL中布尔类型的常见问题解决

MySQL中布尔类型的常见问题解决在MySQL数据库中,布尔类型通常被表示为TINYINT(1),其中0代表false,1代表true。虽然布尔类型看似简单,但在使用过程中也可能会遇到一些常见的问题。本文将针对MySQL中布尔类型的常见问
MySQL中布尔类型的常见问题解决
2024-03-15

mysql中常见的数据类型有哪些?

mysql 提供多种数据类型来存储不同类型的数据,包括整数类型、浮点数类型、定点类型、字符类型、时间和日期类型以及其他类型。这些数据类型具有不同的特性和用途,用于满足不同数据的存储需求。MySQL 中常见的数据类型MySQL 提供多种数据
mysql中常见的数据类型有哪些?
2024-04-26

深入了解Python中常见的数据类型

Python数据类型详解:探索Python中的常见数据类型引言:在Python编程语言中,数据类型是非常重要的概念。了解数据类型的特性以及如何正确使用它们,可以在编写Python程序时提高效率,减少错误。本文将详细探索Python中常见的
深入了解Python中常见的数据类型
2024-01-20

编程热搜

目录