MySQL数据库约束与表的设计

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 本文主要介绍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));


微信图片_20230111121249.png

1.3 UNIQUE:唯一约束


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

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


微信图片_20230111121246.png

1.4 DEFAULT:默认值约束


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


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


微信图片_20230111121242.png

1.5 PRIMARY KEY:主键约束


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


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


微信图片_20230111121235.png

对于整数类型的主键,常搭配自增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;


微信图片_20230111121232.png


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 一对一


人与其账户一对一


微信图片_20230111121227.png


微信图片_20230111121224.png

2.2 一对多

一个班级包含多个学生,但一个学生只能属于一个班级


微信图片_20230111121220.png

微信图片_20230111121217.png



2.3 多对多

学生表和课程表

一个学生可以选多门课程,一个课程可以被多个学生选择

两个表多对多时常常需要第三个中间表来做关联。

微信图片_20230111121214.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(4-2)作者——LJS[含MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法]
24MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法(4-2) 学不会你来砍我!!!
|
5月前
|
关系型数据库 MySQL
MYSQL-多表操作-外键约束
MYSQL-多表操作-外键约束
|
5月前
|
关系型数据库 MySQL
MYSQL:约束(主键约束)
MYSQL:约束(主键约束)
|
1月前
|
Ubuntu 关系型数据库 MySQL
ubuntu使用aliyun源+mysql删除有外键约束的数据+查看特定目录的大小
ubuntu使用aliyun源+mysql删除有外键约束的数据+查看特定目录的大小
34 4
|
2月前
|
SQL 关系型数据库 MySQL
MySQL中外键的使用及外键约束策略
这篇文章讨论了MySQL中使用外键的重要性,包括外键的概念、不使用外键可能导致的问题、如何设置外键约束以及不同的外键约束策略(如CASCADE和SET NULL),并通过示例演示了这些概念。
MySQL中外键的使用及外键约束策略
|
2月前
|
存储 关系型数据库 MySQL
MySQL数据库基础:约束
约束是对数据库表中字段施加的规则,确保数据的正确性、有效性和完整性。主要分为非空约束、唯一约束、默认约束、主键约束和外键约束。非空约束禁止字段值为null;唯一约束确保字段值唯一,允许null值重复;默认约束设定默认值;主键约束结合非空与唯一约束,并可设为自增型;外键约束则通过关联其他表的主键,保证数据一致性。检查约束确保字段值满足特定条件。
45 1
|
3月前
|
数据采集 关系型数据库 MySQL
在 MySQL 中使用约束
【8月更文挑战第11天】
58 0
在 MySQL 中使用约束
|
5月前
|
SQL 关系型数据库 MySQL
MySQL----约束
MySQL----约束
34 1
|
5月前
|
数据采集 关系型数据库 MySQL
MySQL数据库基础第三篇(约束)
MySQL数据库基础第三篇(约束)
|
5月前
|
关系型数据库 MySQL
MYSQL约束(自增长,以及非空约束)
MYSQL约束(自增长,以及非空约束)