MySQL表的进阶知识(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
6天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(1)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
8天前
|
分布式计算 DataWorks MaxCompute
DataWorks产品使用合集之需要将mysql 表(有longtext类型字段) 迁移到odps,但odps好像没有对应的类型支持,该怎么办
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
12天前
|
SQL 关系型数据库 MySQL
mysql sql语句删除一个库下的所有表
mysql sql语句删除一个库下的所有表
|
1天前
|
关系型数据库 MySQL
蓝易云 - 如何修复MySQL中损坏的表
最后,为了防止数据丢失,定期备份数据是非常重要的。
9 3
|
4天前
|
存储 SQL 关系型数据库
【MySQL技术内幕】4.1-索引组织表
【MySQL技术内幕】4.1-索引组织表
9 0
|
6天前
|
存储 关系型数据库 MySQL
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(4)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
6天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(3)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
7天前
|
分布式计算 DataWorks MaxCompute
DataWorks产品使用合集之新创建的工作空间,任务提交了,但是周期实例里面没任何数据,是什么导致的
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
11天前
|
SQL 存储 关系型数据库
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
18 1