MySQL数据库约束与表的设计

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 本文主要介绍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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
关系型数据库 MySQL 数据库
MySQL数据库——约束
MySQL数据库——约束
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
31 0
|
28天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
28天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
4月前
|
数据库
如何解决逻辑删除is_del与数据库唯一约束冲突
如何解决逻辑删除is_del与数据库唯一约束冲突
39 0
|
17天前
|
SQL 关系型数据库 MySQL
DDL语言之常见约束(mysql)
DDL语言之常见约束(mysql)
|
2月前
|
存储 关系型数据库 MySQL
【mysql】—— 表的约束
【mysql】—— 表的约束
|
2月前
|
数据库
SQLSERVER 2014 删除数据库定时备份任务提示失败DELETE 语句与 REFERENCE 约束“FK_subplan_job_id“冲突
SQLSERVER 2014 删除数据库定时备份任务提示失败DELETE 语句与 REFERENCE 约束“FK_subplan_job_id“冲突
|
3月前
|
存储 关系型数据库 MySQL
MySQL技能完整学习列表5、数据库操作——3、索引(Indexing)——4、约束(Constraints)
MySQL技能完整学习列表5、数据库操作——3、索引(Indexing)——4、约束(Constraints)
40 0
|
4月前
|
存储 SQL 关系型数据库