MySQL数据库约束与表的设计

MySQL数据库约束与表的设计_第1张图片

⭐️前言⭐️

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

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

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

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

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


请添加图片描述

内容导读

  • MySQL数据库约束与表的设计
    • 1.数据库约束
      • 1.1 约束类型
      • 1.2 NULL约束
      • 1.3 UNIQUE:唯一约束
      • 1.4 DEFAULT:默认值约束
      • 1.5 PRIMARY KEY:主键约束
      • 1.6 FOREIGN KEY:外键约束
    • 2.表的设计
      • 2.1 一对一
      • 2.2 一对多
      • 2.3 多对多

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

MySQL数据库约束与表的设计_第2张图片

1.3 UNIQUE:唯一约束

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

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

MySQL数据库约束与表的设计_第3张图片

1.4 DEFAULT:默认值约束

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

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

MySQL数据库约束与表的设计_第4张图片

1.5 PRIMARY KEY:主键约束

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

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

MySQL数据库约束与表的设计_第5张图片
对于整数类型的主键,常搭配自增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;

MySQL数据库约束与表的设计_第6张图片

1.6 FOREIGN KEY:外键约束

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

语法:

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

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

  • 班级表classes:id为主键
drop table if exists classes;
create table classes (id int primary key auto_increment,name varchar(20));
  • 学生表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));

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

2.表的设计

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

2.1 一对一

人与其账户一对一
MySQL数据库约束与表的设计_第7张图片
MySQL数据库约束与表的设计_第8张图片

2.2 一对多

一个班级包含多个学生,但一个学生只能属于一个班级
MySQL数据库约束与表的设计_第9张图片

MySQL数据库约束与表的设计_第10张图片

2.3 多对多

学生表和课程表
一个学生可以选多门课程,一个课程可以被多个学生选择
两个表多对多时常常需要第三个中间表来做关联。
MySQL数据库约束与表的设计_第11张图片
MySQL数据库约束与表的设计_第12张图片


⭐️最后的话⭐️

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

请添加图片描述

你可能感兴趣的:(MySQL,数据库,mysql,java)