MySQL表的进阶知识(上)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL表的进阶知识

一、数据库约束

1、not null

不能为空的约束,比如在学生表当中,学生的学号,姓名就不能为空。

使用演示:

create table student1(id int not null,name varchar(20) not null);

2、unique

表示唯一约束,比如在学生表当中,学生的学号是惟一的,不能有两个学生的学号相同。

使用演示:

create table student2(id int not null unique,name varchar(20) not null);

3、primary key

主键约束,主键约束就是不能为空,并且是惟一的,也就是含有前两个约束条件,在上述市里的student2表中,对id进行not null 和unique约束后,在查看表结构时,就出现id是primary key的结果。

在一张表中只能有一个字段为主键。

使用演示:

create table student3(id int primary key,name varchar(20) not null);

与student2的表结构相同。

4、auto_increment

主键自动增长约束,例如在插入数据时,未插入主键,则就在已插入元组的主键+1,作为新插入元组的主键,主要针对整型类型的主键,默认从一开始。

使用演示:

create table student9(id int primary key auto_increment,name varchar(20));

5、default

默认约束,通常在插入数据时,如果对某一字段没有赋值就默认为null,但是在使用default约束后,默认就是所设置的值。

使用演示:

create table student4(id int primary key,name varchar(20) default "无名氏");

插入一个名字为空的学生信息:

此时默认的名字不再是null,而是无名氏。

6、foreign key

foreign key(参照字段) references 被参照表名(被参照字段);

外键约束,就是一个表的某字段需要参照另一个表中的某一字段,例如:在学生表和班级表中,学生表中的班级就要参照班级表中的班级号。

使用演示:

 create table class(id int primary key,number int not null);
create table student(id int primary key,name varchar(20) not null,class int ,foreign key(class) references class(id));

注意:

  • 在使用外键约束时,参照字段的数值类型和被参照字段的数值类型要一致。
  • 在删除被参照表的某一元组时,若参照表中有元组依赖被参照字段的值时,就无法成功删除。就比如说学生表中有2班的学生,class表在删除2班这一元组时,就无法删除。
  • 参照字段的取值范围就是被参照字段的值。

7、check

check约束主要是插入元组时,对范围进行约束,例如在插入学生分数时,分数不能超过100 ,就可以写成如下所示:

 create table student2(id int primary key,name varchar(20) not null,score int,check(score<=100));

但是 MySQL8之前的版本会忽略check约束,也就是不生效 。

二、插入数据

可以使用select语句的查询结果作为insert的数据进行插入。一般情况下select得到的就是插入表的外键。

这是student表和class表的结构:

例如将查询class表中的所有的id作为数据插入到student表中:

三、设计表

在实际应用过程中通常是在复杂的关系中设计表,需要分析表结构,表之间常见关系有一对一、一对多、多对多。

1、一对一

比如每个班级的班长是唯一的,一个班级只有一个班长,一个班长只能服务一个班级。


2、一对多

一个班级拥有多个学生,多个学生在一个班级。

3、多对多

比如课程和学生之间就是多对多的关系。一门课程对应多个学生,一个学生有多门课程。

在多对多关系中,一般需要建立三个表来进行联系。

对于学生和课程来说,需要建立学生表、课程表、分数表:

学生表:

create table student(id int primary key auto_increment,name varchar(20) not null,sex varchar(2) not null);

课程表:

create table course(id int primary key auto_increment,name varchar(20) not null);

分数表:

create table score(student_id int,course_id int,score double(3,1),
foreign key(student_id) references student(id),
foreign key(course_id) references course(id));

4fad2420b4ef4c6a8dc7e6492d4dcd64.png

MySQL表的进阶知识(下):https://developer.aliyun.com/article/1520466

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
存储 SQL 关系型数据库
MySQL语句详解:从基础到进阶的全面指南
MySQL语句详解:从基础到进阶的全面指南
|
5月前
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
4月前
|
存储 关系型数据库 MySQL
MySQL数据库开发进阶:精通数据库表的创建与管理22
【7月更文挑战第22天】数据库的创建与删除,数据表的创建与管理
48 1
|
5月前
|
JSON 关系型数据库 MySQL
MySQL常用函数解读:从基础到进阶的全方位指南
MySQL常用函数解读:从基础到进阶的全方位指南
|
4月前
|
存储 SQL 关系型数据库
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
|
4月前
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
4月前
|
运维 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在处理MySQL表新增数据记录时,没有正确触发变更事件,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
SQL 关系型数据库 MySQL
ClickHouse(23)ClickHouse集成Mysql表引擎详细解析
ClickHouse的MySQL引擎允许执行`SELECT`查询从远程MySQL服务器。使用`MySQL(&#39;host:port&#39;, &#39;database&#39;, &#39;table&#39;, &#39;user&#39;, &#39;password&#39;[,...])`格式连接,支持简单`WHERE`子句在MySQL端处理,复杂条件和`LIMIT`在ClickHouse端执行。不支持`NULL`值,用默认值替换。系列文章涵盖ClickHouse安装、集群搭建、表引擎解析等主题。[链接](https://zhangfeidezhu.com/?p=468)有更多
245 0
|
5月前
|
SQL 缓存 关系型数据库
MySQL操作全攻略:库、表、数据、事务全面指南
MySQL操作全攻略:库、表、数据、事务全面指南
|
5月前
|
SQL 关系型数据库 MySQL
经验大分享:MySQL(三)数据库表的查询操作【重要】
经验大分享:MySQL(三)数据库表的查询操作【重要】
60 0