• 【MySQL】 MySQL的增删改查(进阶)--壹


    本节目标:

    • 数据库约束
    • 表的关系

    🛫数据库约束

    🌴约束类型

    • NOT NULL - 指示某列不能存储 NULL 值。

    • UNIQUE - 保证某列的每行必须有唯一的值。

    • DEFAULT - 规定没有给列赋值时的默认值

    • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

    • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

    • CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句

    🎋NOT NULL约束

    创建表时,可以指定某列不为空

    比如我们先创建一个student表,我们对里面的id列进行约束为不能为null;

    创建如下:

    DROP TABLE IF EXISTS student;
    CREATE TABLE student (
    	id INT NOT NULL,
    	sn INT,
    	name VARCHAR(20),
    	qq_mail VARCHAR(20)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查看表结构如下:
    在这里插入图片描述
    我们可以看到id行列是显示不可为null的

    接下来我们插入数据试一下
    在这里插入图片描述
    结果也是意料之中,插入null数据时就直接报错了

    🎍UNIQUE:唯一约束

    指定sn列为唯一的、不重复的

    这里我们重新设置一下表结构,对sn进行约束为唯一约束

    DROP TABLE IF EXISTS student;
    CREATE TABLE student (
    	id INT NOT NULL,
    	sn INT UNIQUE,
    	name VARCHAR(20),
    	qq_mail VARCHAR(20)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    我们对表结构进行查询可以看到,sn列发生了明显变化
    在这里插入图片描述
    接下来我们依旧插入数据进行测试
    在这里插入图片描述
    发现如果sn相同就会进行报错

    🌳DEFAULT:默认值约束

    指定插入数据时,若列为空,则为默认值

    我们重新设置一下student表,对name进行默认值约束,若为null,则为默认值:遇事问春风乄

    设置如下:

    -- 重新设置学生表结构
    DROP TABLE IF EXISTS student;
    CREATE TABLE student (
    	id INT NOT NULL,
    	sn INT UNIQUE,
    	name VARCHAR(20) DEFAULT '遇事问春风乄',
    	qq_mail VARCHAR(20)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    我们查看表结构后发现
    在这里插入图片描述
    Default列的name行不再为null,而为我们设置的默认值

    我们来进行测试一下,插入一个name为null的数据
    在这里插入图片描述
    我们看到查询后name为默认值

    注意事项:只适用于指定列插入数据,且该列不是受约束的列

    🎄PRIMARY KEY:主键约束

    指定列为主键

    主键 是关系表中记录的唯一标识

    使用主键应注意以下几点:

    • 每个表只能定义一个主键。

    • 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。

    • 一个字段名只能在联合主键字段表中出现一次。

    • 联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。这是最小化原则。

    这里我创建以下student表

    -- 重新设置学生表结构
    DROP TABLE IF EXISTS student;
    CREATE TABLE student (
    	id INT PRIMARY KEY,
    	sn INT UNIQUE,
    	name VARCHAR(20) DEFAULT '遇事问春风乄',
    	qq_mail VARCHAR(20)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    表结构如下:
    在这里插入图片描述
    我们发现上述表格可以理解为:主键是 NOT NULL 和 UNIQUE 的结合

    对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1
    使用如下:

    -- 主键是 NOT NULLUNIQUE 的结合,可以不用 NOT NULL
    id INT PRIMARY KEY auto_increment
    
    • 1
    • 2

    注意事项:是当前表里使用的最大值+1

    🍀FOREIGN KEY:外键约束

    外键用于关联其他表的主键或唯一键

    语法如下:

    foreign key (字段名) references 主表()
    
    • 1

    MySQL 外键约束(FOREIGN KEY是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

    外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜,其它的水果都是不能购买的。

    主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。

    定义外键时,需要遵守下列规则:

    • 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。

    • 必须为主表定义主键。

    • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。

    • 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。

    • 外键中列的数目必须和主表的主键中列的数目相同。

    • 外键中列的数据类型必须和主表主键中对应列的数据类型相同。

    接下来我们设计一个案例如下:

    • 创建班级表classes,id为主键
    DROP TABLE IF EXISTS classes;
    CREATE TABLE classes (
    	id INT PRIMARY KEY auto_increment,
    	name VARCHAR(20),
    	desc1 VARCHAR(100)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id

    表结构如下:
    在这里插入图片描述

    使用注意事项放在上面了,这里博主偷个懒,就不演示了;

    🌲CHECK约束

    CHECK约束添加规则

    1. CHECK 约束用于限制列中的值的范围。

    2. Check约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围,在列中更新数据时,所要输入的内容必须满足Check约束的条件,否则将无法正确输入。

    3. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

    4. 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

    使用如下:

    drop table if exists test_user;
    create table test_user (
    	id int,
    	name varchar(20),
    	sex varchar(1),
    	check (sex ='男' or sex='女')
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    表结构如下:
    在这里插入图片描述
    表结构没有什么变化,我们再来看看添加数据吧

    添加数据如下:
    在这里插入图片描述
    查询如下:
    在这里插入图片描述
    当我们输入其他值时
    在这里插入图片描述
    就会爆出错误!

    🛬表的设计

    大概可以分为以下三种

    🚩一对一

    在这里插入图片描述

    🚩一对多

    在这里插入图片描述

    🚩多对多

    在这里插入图片描述

    ⭕总结

    关于《【MySQL】 MySQL的增删改查(进阶)–壹》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

  • 相关阅读:
    郑州直销系统开发为什么需要不断地过滤人?
    Kubernetes — Calico
    如何搭建普罗米修斯 Prometheus
    自动驾驶感知算法实战11——多传感器融合感知方案详解
    EaselJS 源码分析系列--第二篇
    大数据学习之一文学会Spark【Spark知识点总结】
    MySQL故障排查与生产环境优化
    会计部门通过数字化工作流程提高生产力
    MyBatis 框架入门理论与实践
    [附源码]java毕业设计学生实习管理系统
  • 原文地址:https://blog.csdn.net/m0_71731682/article/details/133138777