MySQL初学之旅(3)约束

news/2024/11/21 15:17:28/

6b12b0ad42c84fccbe8203574122f807.jpeg


目录

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去查看:

 f0e3c1c8e2fe450c970e05951b4b73ee.png

我们可以看到,在上面一栏的约束中,id的NULL值被设置为了NO,意为无默认值,让我们插入数据试一下效果:

INSERT INTO student values (1,'jerry');
INSERT INTO student values (NULL,'TOM');

运行结果如下:

f28c324a63fe476a89fbd516cbf40dfe.png 提示信息告诉我们,id那个元素必须设置不为空。

0a5b16d7b51245d9bc816ea79e5e4ba3.png

由此观之,确实是只有一个元素插入成功。

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)
);

先按照语法创建俩个表:
9d8b46a3a0dc489fa17f2d7cf89c3fa0.pngf25954965bf74487ace71a134e9f6eac.png

接下来插入数据验证一下:

ce8122ef1b8e4987b49a00f71a56e586.png

我们可以发现当有相同的值时,就没有办法正常插入

fa96ba4c90f34220ad8d711f8d17c8e6.png

整条语句都没有插入成功,同理多列一样没有办法成功,但有下面这一种情况:

9942bb8cfb6940d28f461ff884671021.png

组合类型中有一个重复,有一个不同,那么结果还是能插入成功的。 

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);

8672b1b8ff024162ac3fe398af5093ac.png

2.5PRIMARY KEY主键约束

PRIMARY KEY 主键约束用于唯一标识数据库表中的每一行记录。一个表只能有一个主键,且主键列的值必须唯一,并且不能为 NULL。主键约束通常用于保证数据的完整性和唯一性。

特点如下:

  • 唯一性:主键的值必须是唯一的,不能有重复。
  • 非空性:主键列不能包含 NULL 值。
  • 自动索引数据库会自动为主键列创建索引,从而加快查询速度。
  • 单表唯一:每个表只能有一个主键,但主键可以由一个或多个列组合而成。

附上代码:

create table stu (
id bigint PRIMARY KEY auto_increment,
name varchar(20)
);

解释一下这里面是什么意思:

id BIGINT PRIMARY KEY AUTO_INCREMENTid 列是主键,同时使用 AUTO_INCREMENT 约束,这样每次插入新记录时,id 会自动递增,保证每条记录的唯一性。

dcc862a848be41629410e0bce64e2a0b.png

如果我们这样插入:

INSERT INTO stu (name) VALUES ('Alice'), ('Bob'), ('Charlie');

 没有为id赋初值,结果发现仍能正常插入,并仍有递增的功能:

bbe0dcf19e684d2984b4268717a6f525.png

2.6FOREIGN KEY外键约束

FOREIGN KEY 外键约束用于在两个表之间建立关系。外键用于引用另一个表的 PRIMARY KEYUNIQUE 列,从而保证数据的引用完整性。通过外键,可以确保某个表中的值必须在另一个表中存在,从而实现数据的关联性。

特点如下:

  • 外键是用来在两个表之间建立链接的字段。
  • 外键约束确保外键列的值在主表中必须存在。
  • 外键可以防止无效数据被插入到表中,确保数据一致性。

先创建父表:

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 列是一个外键,让我们查看一下表属性:

deb7bc8cdfd64ec3996e15a8fb0d6ffa.png

此时表中存在外键关系。

INSERT INTO departments (id, name) VALUES (1, 'HR'), (2, 'Engineering');
INSERT INTO employees (id1, name2, department_id) VALUES (101, 'Alice', 1), (102, 'Bob', 2);

插入这俩行代码检验一下: 

8904078b30f94d0e809a98219703d057.pngafd750e8ff8c466face6463d871eb123.png

可以看到效果已经显现。

外键的好处是可以通过外键确保数据的完整性和关系的正确性。

2.7CHECK约束

CHECK 约束用于限制表中列的数据值,以确保数据符合特定条件。它在数据插入或更新时验证数据是否满足特定的规则,从而保证数据的有效性和一致性。

特点如下:

  • CHECK 约束可以应用于单个列或多个列。
  • 它通过表达式来定义,表达式的值为 TRUE 表示满足条件,否则不满足。
  • 任何不满足 CHECK 约束的插入或更新操作都会被拒绝。
CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(50),age INT CHECK (age >= 18)
);

在上面这个表中,为数据赋年龄时只能给>=18,一旦不满足条件就报错。 

3.小结

今天的分享到这里就结束了,喜欢的小伙伴点点赞点点关注,你的支持就是对我最大的鼓励,大家加油!


http://www.ppmy.cn/news/1548788.html

相关文章

【AIGC】破解ChatGPT!如何使用高价值提示词Prompt提升响应质量

文章目录 为什么高价值提示词如此重要?🔍1.1 提升响应的相关性和准确性1.2 节省时间与资源1.3 增强用户体验 了解ChatGPT的工作原理🧠2.1 语言模型的训练过程2.2 上下文理解与生成2.3 限制与挑战 高价值提示词的核心要素✍️3.1 清晰明确的指…

C语言基本知识 2.2void 函数

在C语言中, void 是一个重要的关键字,具有多种用途,以下是详细介绍: 函数返回值类型声明 - 当函数不需要返回任何值时,可以将函数的返回值类型声明为 void 。例如: void printMessage() { printf(…

计算机毕业设计 | SpringBoot+vue汽车资讯网站 汽车购买咨询管理系统(附源码+论文)

1,绪论 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理汽车资讯网站的相关信息成为必然…

ros2 humble 安装 navigation2

安装 Nav2 包&#xff1a; 在安装 ROS 2 的 navigation2 软件包时&#xff0c;你需要将 替换为你安装的 ROS 2 版本的名称&#xff08;如 foxy, galactic, humble 等&#xff09;。因此&#xff0c;正确的命令格式为&#xff1a; sudo apt install ros-<ros2-distro>-n…

03 —— Webpack 自动生成 html 文件

HtmlWebpackPlugin | webpack 中文文档 | webpack中文文档 | webpack中文网 安装 npm install --save-dev html-webpack-plugin 下载html-webpack-plugin本地软件包 npm i html-webpack-plugin --save-dev 配置webpack.config.js让webpack拥有插件功能 const HtmlWebpack…

Tomcat和Nginx原理说明

Tomcat Tomcat 是一个开源的 Java 应用服务器&#xff0c;它由多个关键组件组成。这些组件共同协作&#xff0c;实现了 Servlet 容器的功能。以下是 Tomcat 的核心组件说明及其逻辑架构的示意图。 1. Tomcat 核心组件说明 (1) Server 描述&#xff1a;Tomcat 的顶级组件&…

c++--------《set 和 map》

c--------《set 和 map》 1 set系列的使⽤1.1 set类的介绍1.2 set的构造和迭代器1.3 set重要接口 2 实现样例2.1: insert和迭代器遍历使⽤样例&#xff1a;2.2: find和erase使⽤样例&#xff1a; 练习3.map系列的使用3.1 map类的介绍3.1.1 pair类型介绍 3.2 map的数据修改3.3mu…

豆瓣书摘 | 爬虫 | Python

获取豆瓣书摘&#xff0c;存入MongoDB中。 import logging import timeimport requests from bs4 import BeautifulSoup from pymongo import MongoClientheaders {accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,image/apng,*/*;q0.8,…