MySQL数据库的约束+进阶版新增与查询-1

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL数据库的约束+进阶版新增与查询

数据库约束的类型

NOT NULL型

某一列不能存储null值,在创建表的时候,将不能为空的列加上这个约束

create table 表名(属性 类型 not null,…)

本示例就以学生的id不能为空演示

下面插入数据:

UNIQUE 型

保证某列的每行必须有唯一的值,也是在创建表的时候进行约束

测试用例:

DEFAULT:默认值约束

下面设置默认值:

如果我们在创建表的过程中,如果name输入为空,那么此时表中会把其设置为默认值匿名

PRIMARY KEY:主键约束

是一个很重要的约束条件,对于一个表来说,只能指定一列来作为主键约束,并且我们可以发现主键约束的这一列不允许重复,也不允许为空,结合了unique和not null约束

下面我们在深入的了解一下,自增主键,这个一般适用于序号的增加

测试用例:

注意自增主键也是可以自己手动设置的,如果你这次特别指定了这次id从10开始,那么后面插入的数据将会从11开始插起,10之前没用的就用不了了。


FOREIGN KEY:外键约束

外键约束针对的是两张表而言的,将两张表进行关联,这里我们以学生表和班级表为例,学生表中有classsort对应着班级表的id,通过id就可以把学生表和班级表相关联起来了


学生表是依赖于班级表的,所以我们先创建一个班级表,学生表就称为子表,班级表被称为父表,我们可以利用外键约束,将学生表中的classid与班级表中的id相关联即可

本例中的外键约束sql语句如下:

create table student(id int primary key auto_increment,name varchar(20),classid int ,foreign key (classid) references class(id));

d8400b7fc62e6bfab67f867ac98d8c45_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAdG8gS2VlcA==,size_20,color_FFFFFF,t_70,g_se,x_16.png

注意:

1 外键约束是两张表之间的关联,所以子表中的记录(classid)要在父表中存在(id)

2 对子表插入(修改),其范围都必须在父表之内(本例中,班级表中的id总共有3个,那么在给子表classid输入值的时候,只能在1到3之间)

3 对于父表,如果子表引用了其中的属性(id),那就不可以删除和更改,除非子表是没有对那个属性引用(如果父表中现在有个id为4的,子表没有引用这个id),那么才可以操作!

外键约束的工作原理

在对子表插入新的数据的时候,会根据对应的值前往父表查询,查询到了之后才可以进行插入操作,这里的查询就是依据索引来完成的(外键约束就要求父表被引用的这一列必须有索引,索引会根据primary key或者unique自动创建索引)

新增操作

这里的新增操作不是之前所学的一列一列插入,而是整表的进行插入,但是有一点必须注意,类型必须对应上


insert into 表1 select 表2中选取对应表1的字段 from 表2;

先创建如下的三个表:

开始测试:

第三个表多了一个age,那么我们在插入的时候就和student1的类型匹配上就可以了

另外对于新增操作也可以搭配我们之前学过的分页去重,条件处理


聚合查询

聚合函数

关于聚合查询是不同于我们之前学过的增删查改正对于列而言,这里是针对于行与行的运算


count(字段) 返回查询的数据总量

sum(字段) 返回查询的数据的总和

avg(字段) 返回值是数据的平均值

max(字段) 返回查询数据的最大值

min(字段) 返回查询数据的最小值

这里除了第一个函数意外,其他四个返回值如果不是数字是没有意义的


select 聚合函数 from 表名;

以count为例:

表示chinese数据有7行

sum函数:

这里的聚合函数搭配了条件语句,计算总分但是是语文成绩大于70分的人的总分


聚合函数对每行的使用,结果计算与null无关,就是假如有第八行数据,第八行的三列成绩设置为null,对其使用聚合函数计算,其计算结果null是不会参与的,依旧还是按照7个人算平均值等

聚合函数也是可以设置称别名的


group by子句

group by子句是根据行的值相等就分为一组,我们可以通过一组示例代码来理解一下什么是group by 子句

测试用例:

create table display(
id int primary key auto_increment,
name varchar(20) not null,
role varchar(20) not null,
salary numeric(11,2)
);
insert into display(name, role, salary) values
('张三','服务员', 1000.20),
('李四','游戏陪玩', 2000.99),
('孙悟空','游戏角色', 999.11),
('猪八戒','游戏角色', 333.5),
('小乔','游戏角色', 700.33),
('王五','董事长', 12000.66);

通过角色名来分组: select * from display group by role;


1af2333d9ed3c9e2bd8fa9a86f5b1309_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAdG8gS2VlcA==,size_20,color_FFFFFF,t_70,g_se,x_16.png


我们可以发现role这一列有着相同的行,分组之后在第二个表只显示了第一个,这就是根据role来分组,相同的值被分到了同一组,显示了第一个


结合聚合函数对group by进行使用

167f2d7c9bae8db61e864b9ab5fba2b8_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAdG8gS2VlcA==,size_20,color_FFFFFF,t_70,g_se,x_16.png

从这里可以更好的看出组中的数据,比如游戏角色组中,有三个人,最高的确实是999.11,最低的是333.50


having使用

having是使用在分组之后进行筛选条件,接着引用上面的例子进行使用

执行语句:select role ,avg(salary) as avg from display group by role having avg>1000;

与where区别

where也是可以筛选条件的,但是where适用的是分组之前,如果对行与行数据分组,那么分组之后必须使用having!


MySQL数据库的约束+进阶版新增与查询-2

https://developer.aliyun.com/article/1504236

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
3月前
|
人工智能 安全 机器人
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
410 12
无代码革命:10分钟打造企业专属数据库查询AI机器人
|
2月前
|
SQL 人工智能 关系型数据库
如何实现MySQL百万级数据的查询?
本文探讨了在MySQL中对百万级数据进行排序分页查询的优化策略。面对五百万条数据,传统的浅分页和深分页查询效率较低,尤其深分页因偏移量大导致性能显著下降。通过为排序字段添加索引、使用联合索引、手动回表等方法,有效提升了查询速度。最终建议根据业务需求选择合适方案:浅分页可加单列索引,深分页推荐联合索引或子查询优化,同时结合前端传递最后一条数据ID的方式实现高效翻页。
131 0
|
26天前
|
存储 安全 关系型数据库
MySQL数据库约束条件概述及其重要性讨论。
正确地实现并管理好各类紧缩条件将直接影响到企业信息管理水平与服务质量,在当今大数据背景下更显得格外重要;任何设计师都需要深刻理解其原理与运作机晰承担起责任使得所托管资料安全稳固同时又具备良好伸缩灵活度迎合日益复杂商务需求变动.
85 11
|
25天前
|
存储 关系型数据库 MySQL
使用命令行cmd查询MySQL表结构信息技巧分享。
掌握了这些命令和技巧,您就能快速并有效地从命令行中查询MySQL表的结构信息,进而支持数据库维护、架构审查和优化等工作。
156 9
|
5月前
|
并行计算 关系型数据库 MySQL
如何用 esProc 将数据库表转储提速查询
当数据库查询因数据量大或繁忙变慢时,可借助 esProc 将数据导出为文件进行计算,大幅提升性能。以 MySQL 的 3000 万行订单数据为例,两个典型查询分别耗时 17.69s 和 63.22s。使用 esProc 转储为二进制行存文件 (btx) 或列存文件 (ctx),结合游标过滤与并行计算,性能显著提升。例如,ctx 并行计算将原查询时间缩短至 0.566s,TopN 运算提速达 30 倍。esProc 的简洁语法和高效文件格式,特别适合历史数据的复杂分析场景。
|
3月前
|
关系型数据库 MySQL 数据库
MySQL报错:未知系统变量'tx_isolation'及隔离级别查询
记住,选择合适的隔离级别,就像是在风平浪静的湖面上找到适合的划船速度——既要快到能赶上午饭(性能),又不至于翻船(数据一致性问题)。
187 3
|
3月前
|
SQL 关系型数据库 MySQL
MySQL 进行 select 查询时 where 条件中 in 的value数过多却导致无记录返回
MySQL 进行 select 查询时 where 条件中 in 的value数过多返回不符合预期怎么办?会不会遇到bug了?
200 0
|
4月前
|
缓存 JSON 关系型数据库
MySQL 查询优化分析 - 常用分析方法
本文介绍了MySQL查询优化分析的常用方法EXPLAIN、Optimizer Trace、Profiling和常用监控指标。
|
6月前
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
6月前
|
数据库
【YashanDB知识库】数据库用户所拥有的权限查询
【YashanDB知识库】数据库用户所拥有的权限查询

热门文章

最新文章

推荐镜像

更多