当前位置: 首页 > article >正文

MySQL初学之旅(3)约束

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.kler.cn/a/397463.html

相关文章:

  • HMI FUXA测试
  • 【第三课】Rust变量与数据类型(二)
  • 详解map与multimap容器
  • H3C NX30Pro刷机教程-2024-11-16
  • 基于麒麟服务器操作系统V10版本,部署Nginx服务、MySql服务搭建PHP环境,实现静态网站平台的搭建。
  • TypeORM在Node.js中的高级应用
  • CentOS8 启动错误,enter emergency mode ,开机直接进入紧急救援模式,报错 Failed to mount /home 解决方法
  • Java 简单家居开关系统
  • HTML之表格学习记录
  • fine_tune_tansat2
  • 如何利用知识中台实现客户服务自动化?
  • SpringCloud-使用FFmpeg对视频压缩处理
  • WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇
  • STM32G4的数模转换器(DAC)的应用
  • 从客户需求视角去认识ZLG | 边缘计算网关多种应用
  • 2019计挑赛c语言
  • python的matplotlib实现数据分析绘图
  • 算法---找出一组序列中的第k小(大)的元素
  • 每日算法一练:剑指offer——栈与队列篇(1)
  • OTX 架构开发需求分析
  • JAVA_单例模式
  • 安全生产管理的重要性:现状、痛点与改进之路
  • Android 12.0 第三方app授予DeviceOwner权限调用系统reboot,显示隐藏app,锁屏,禁用app等功能系统层部分实现
  • Java中的HTML元素设置:背景、列表与超链接
  • Docker占用空间太大磁盘空间不足清理妙招
  • 深度学习在边缘检测中的应用及代码分析