MySQL增删改查【进阶篇】万字图文超详细讲解(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL增删改查【进阶篇】万字图文超详细讲解(上)

一.创建数据库约束


1.1约束类型


not null - 指示某列不能存储 null值。

unique - 保证某列的每行必须有唯一的值。

default - 规定没有给列赋值时的默认值。

primary key - 是 (not null 和 unique )的结合确保某列(或两个列多个列的结合)有唯一标识有助于更容易更快速地找到表中的一个特定 的记录。

foreign key - 保证一个表中的数据匹配另一个表中的值的参照完整性。

check - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。


1.2not null约束


创建表时,可以指定某列不为空:

如果插入空值就会报错

可以多设置not null来限制多列


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


8dbeba943e5049ddb66cf379e6157797.png


1.3unique :唯一约束(约束列)


**指定sn列为唯一的、不重复的:


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


重复输入带有 unique列约束列的值会插入失败


453c20082d614d11a96a835f5feadc6f.png


1.4default :默认值约束


指定插入数据时,name列为空,默认值可以自己设置例如"匿名":

create table student (
id int not null,
sn int unique,
name varchar(20) default 'unkown'
);

d66c224fb543450a98ea0eb7c51a7ae1.png

1.5primary key : 主键约束(常用)


指定id列为主键:(有primary key 约束条件存在就可以省去null约束和唯一约束)

但是主键只能对一个列进行约束

create table student (
id int  primary key,
sn int unique,
name varchar(20) 
);

c37cadab654343a0ae9c31c4a77ec6fe.png

对于整数类型的主键,常配搭自增长auto_increment来使用,插入数据对应字段不给值时,使用最大

值+1。

create table student (
id int  primary key auto_increment,
sn int unique,
name varchar(20) default 'unkown'
);

5c298e696cdd45df9263ffafaa7d6482.png

我们可以在插入时输入id可是不输入,再插入后数据库的表会自己生成自增主键约束那个列来进行自增长+1

9a99f802fdd446b89e38d0323fd8e447.png


如果我们在插入中没有进行默认自增长插入,当我们想插入的某一值后,再进行默认自增主键插入后,会在我们刚插入的数据后进行自增长

a64e7ea80f994dde8400feeadce1af6b.png

1.6foreign key : 外键约束(两表进行关联)


创建学生表student,一个学生对应一个班级,一个班级对应多个学生
我们可以创建两个表,班级表来当做"父表" 学生表来当成"子表"


12c5e320cd7b4d48a52727f25af0db30.png

classes_id为外键,关联班级表id
create table student (
id int  primary key auto_increment,
name varchar(20),
classId int,
foreign key (classesId) references class(classId)
);

这里我们就用classId来进行班级和学生进行了关联

bb41f892966b4ec5987d6c440a7c3750.png


这里我们在student子表进行插入班级Id为100时,当创建父表没有这个classId列中没有100就会报错,所以student子表插入失败



1fa0116a302c43b3b8710080614b7999.png

当我们进行将原classId进行修改后100可以发现,会发生修改错误,修改的classId在附表class中存在的classId中存在,我峨嵋你就会插入成功


bf8d67ce9b3a4c8f9c296d59f6d14885.png


当我们想要删除父表class中的classId时我们会发现,我们并不能删除或者修改,也就是当class 与 student中由classId这已关联就不可以在父表class进行删除或者修改有关联的classId了,同理我们可以删除class 与 student中由classId这无关联的数据


76963b10fbb44046be7040df524a849e.png

二.表的顺序


2.1 一对一


一对一就是输入一个信息就可以找到这个人:如这身份证就是这个人的独特唯一身份信息

29c094669c25499a89bea9d660557122.png


2.2 一对多


就是一条信息对应一个群体,例如:一个班级了有很多学生,我们可以知道这个班级里学生的学号,如上述外键约束同理


9bc58000fe8c4f0c9345acf2231cf980.png


2.3 多对多


代表不同的对象相互之间都是由关系,但不是相互的唯一的信息,如: 大学中高数这一门课程,这节课可以由很多班级或者院校的同学去上课,学生也可以选择去上一些大学物理,大学英语这样课.


2.4语句示例


– 创建课程表:


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

创建学生-课程的中间表:

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

三.新增


3.1新增进阶操作


创建两张表,当我们发现这两张表 列个数相同,数据类型相同,我们就可以执行 insert into B select * from A;
这样我们就可以完成插入,成功将A表的数据插入B表中


71fcff53c3f84ce8b798f8104d4c212d.png


我们删除B表重现创建与A表列相同数据类型想反的表B;输入insert into B select name,id from A;

注解:当我们进行两个表插入时,我们只需要列表个数相同,并且列表数据类型相等就可以进行插入,但是这样操作大多数没有意义,新增语句操作后是存储到硬盘中,所以我们要注意此操作,防止弄巧成拙.


df9042716b53481c9fd12705073e343a.png


四.查询


4.1聚合查询(单表查询)

4.11聚合函数


函数 ------------------------ 说明

COUNT(expr) 返回查询到的数据的 数量

SUM(expr) 返回查询到的数据的 总和,不是数字没有意义

AVG(expr) 返回查询到的数据的 平均值,不是数字没有意义

MAX(expr) 返回查询到的数据的 最大值,不是数字没有意义

MIN(expr) 返回查询到的数据的 最小值,不是数字没有意义

select count(列名) from 表名;


count 是我们在查询中查询输入列名的总行数

4f03fa7e6a1143b5b8e312d00d71e54d.png

我们发现chinese这一列也是8行,但是在我们查询中只会显示出7行,这就代表带有null的行数是不会计入count查询结果中

acaa4e7dc88f43b09cca6dc3dd2fe6df.png

当我们进行有null的行和无null行的两个列进行count查询会发现只会查询没有null行的数据所以id有10行但是count只查询9行


2a03ebdf5e144bba9874b0c833c68cc3.png

sum操作:根据这(一列或者多列)进行整体相加(只能针对数字进行运算,不能针对字符串进行运算)

我们也可以用where来进行条件操作

dd81d1ddc006437ea7c59522c8745163.png

8328b34853b74e51ad2dcde975ed62cf.png


11bf10151e654c18af97820c5ba7ff1f.png


avg(平均数)

max(最大数)

min(最小数)

这些查询语句都和上述类似就简单略过了.


ffde98fb001c4a8fbd90d55284b9a70a.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
mysql 简单的sql语句,入门级增删改查
介绍MySQL中的基本SQL语句,包括数据的增删改查操作,使用示例和简单的数据表进行演示。
mysql 简单的sql语句,入门级增删改查
|
7月前
|
SQL 关系型数据库 MySQL
【MySQL】基本查询(表的增删改查)-- 详解(上)
【MySQL】基本查询(表的增删改查)-- 详解(上)
|
13天前
|
关系型数据库 MySQL Java
Servlet+MySQL增删改查 原文出自[易百教程] 转载请保留原文链接: https://www.yiibai.com/geek/1391
对于任何项目开发,创建,读取,更新和删除(CRUD)记录操作是应用程序的一个最重要部分。
52 20
|
5月前
|
JavaScript 关系型数据库 MySQL
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
69 0
|
2月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
69 1
|
2月前
|
关系型数据库 MySQL
MySQL表的增删改查(基础篇详细详解)
MySQL表的增删改查(基础篇详细详解)
43 5
|
2月前
|
关系型数据库 MySQL 数据库
mysql的增删改查
本文介绍了MySQL数据库中进行增删改查操作的基本语法和注意事项,包括如何添加、修改和删除数据。
54 2
|
4月前
|
JavaScript 关系型数据库 MySQL
node连接mysql,并实现增删改查功能
【8月更文挑战第26天】node连接mysql,并实现增删改查功能
89 3
|
4月前
|
关系型数据库 MySQL 大数据
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
272 2
|
4月前
|
关系型数据库 MySQL 数据库
MySQL数据库的增删改查
MySQL数据库的增删改查
23 0