• MySQL数据库约束与表的设计


    在这里插入图片描述

    请添加图片描述

    ⭐️前言⭐️

    本文主要介绍MySQL数据库中一些常用的约束,以及表的设计方法。

    🍉博客主页: 🍁【如风暖阳】🍁
    🍉精品Java专栏【JavaSE】【备战蓝桥】、【JavaEE初阶】【MySQL】【数据结构】
    🍉欢迎点赞 👍 收藏留言评论 📝私信必回哟😁

    🍉本文由 【如风暖阳】 原创,首发于 CSDN🙉

    🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言

    🍉博客中涉及源码及博主日常练习代码均已上传码云(gitee)GitHub


    请添加图片描述

    请添加图片描述

    MySQL数据库约束与表的设计

    🍅1.数据库约束

    1.1 约束类型

    • NOT NULL - 指示某列不能存储 NULL 值。
    • UNIQUE - 保证某列的每行必须有唯一的值。
    • DEFAULT - 规定没有给列赋值时的默认值。
    • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
    • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

    1.2 NULL约束

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

    drop table if exists student;
    create table student(id int not null ,name varchar(20));
    
    • 1
    • 2

    在这里插入图片描述

    1.3 UNIQUE:唯一约束

    指定某列为唯一的、不重复的。

    drop table if exists student;
    create table student(id int unique ,name varchar(20));
    
    • 1
    • 2

    在这里插入图片描述

    1.4 DEFAULT:默认值约束

    指定插入数据时,name列为空,默认值unknown

    drop table if exists student;
    create table student(id int unique ,name varchar(20) default 'unknown');
    
    • 1
    • 2

    在这里插入图片描述

    1.5 PRIMARY KEY:主键约束

    指定某列为主键,作为标识需要保证唯一性(主键primary key其实就是unique和not null的结合)

    drop table if exists student;
    create table student(id int primary key ,name varchar(20));
    
    • 1
    • 2

    在这里插入图片描述
    对于整数类型的主键,常搭配自增auto_increment来使用,默认每次加一。

    drop table if exists student;
    create table student(id int primary key auto_increment,name varchar(20));
    insert into student values (null,'张三'),(null,'李四');
    select * from student;
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    1.6 FOREIGN KEY:外键约束

    外键将子表与父表关联起来,且被关联的父表的列必须是primary key或者unique

    语法:

    foreign key (字段名) references 父表();
    
    • 1

    比如两张表:学生表和班级表

    • 班级表classes:id为主键
    drop table if exists classes;
    create table classes (id int primary key auto_increment,name varchar(20));
    
    • 1
    • 2
    • 学生表student:一个学生对应一个班级,一个班级对应多个学生。id为主键,classes_id为外键,关联班级表id。
    drop table if exists student;
    create table student (id int primary key auto_increment,name varchar(20),classes_id int,foreign key (classes_id) references classes(id));
    
    • 1
    • 2

    必须保证学生表里的每个记录,班级id(classes_id)必须在班级表中存在;
    也就是说父表(classes)对子表(student)产生了约束,同时子表也会对父表产生约束,在删除父表中的某条记录时,如果该记录被子表引用,也无法删除(比如在classes表中有班级id 3被子表student 中的某一个学生引用,则若想直接删除父表中3这条记录,则无法直接删除)。

    🍅2.表的设计

    在项目实际生产时,我们可能面对的是多个实体,所以在着手建立数据库之前,需要先根据实体的关系来完成表的设计,所以引出来下边的三大范式。

    2.1 一对一

    人与其账户一对一
    在这里插入图片描述
    在这里插入图片描述

    2.2 一对多

    一个班级包含多个学生,但一个学生只能属于一个班级
    在这里插入图片描述

    在这里插入图片描述

    2.3 多对多

    学生表和课程表
    一个学生可以选多门课程,一个课程可以被多个学生选择
    两个表多对多时常常需要第三个中间表来做关联。
    在这里插入图片描述
    在这里插入图片描述


    ⭐️最后的话⭐️

    总结不易,希望uu们不要吝啬你们的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁

    请添加图片描述

  • 相关阅读:
    120、第一时间,处理线上问题,避免更多烦恼
    电脑mp4格式视频打不开怎么解决?
    视频下载为什么需要大带宽服务器?
    【Designing ML Systems】第 5 章 :特征工程
    WinForm简洁有效的项目框架结构
    Spark系列之Spark应用程序运行机制
    开创性的区块链操作系统项目——去中心化的战舰游戏
    金仓数据库KingbaseES数据库管理员指南--12模式对象的管理
    【QT】QRadioButton的使用(17)
    百度C++研发工程师面试题(最新整理)
  • 原文地址:https://blog.csdn.net/qq_60856948/article/details/126181885