Mysql建表3大约束+条件查询、分页语法+难点聚合案例解析

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql建表3大约束+条件查询、分页语法+难点聚合案例解析

1.主键约束

  • 关键字 : primary key

格式一:在创建表时,在写字段的时候进行设置

  • 只能设置一个主键
  • 不能重复插入主键
  • 插入的主键不能为null
CREATE TABLE pk01(
    id INT PRIMARY KEY ,
    `name` VARCHAR(32)
);

格式二:在创建表。声明在列后,声明主键约束

  • 特点:可以将多个列声明成一个主键(联合主键)
CREATE TABLE pk02(
    id INT,
    `name` VARCHAR(20),
    CONSTRAINT PRIMARY KEY(id)
);

格式三:在创建表之后,修改表结构,将列声明成主键

CREATE TABLE pk01(
    id INT ,
    `name` VARCHAR(32)
);
ALTER TABLE pk03 ADD CONSTRAINT PRIMARY KEY(id);

2 .唯一约束

  • 关键字:unique

格式一:在创建表时,在写字段的时候进行设置

* 设置唯一约束的列不可重复插入

* 设置唯一约束的列允许为null值


CREATE TABLE pk01(
    id INT UNIQUE ,
    `name` VARCHAR(32)
);

格式二 : 在创建表。声明在列后,声明主键约束

CREATE TABLE pk02(
    id INT,
    `name` VARCHAR(20),
    CONSTRAINT UNIQUE(id)
);

格式三:在创建表之后,修改表结构,将列声明成主键

CREATE TABLE pk01(
    id INT ,
    `name` VARCHAR(32)
);
ALTER TABLE pk03 ADD CONSTRAINT UNIQUE(id);

3 非空约束

  • 关键字:not null
  • 特点:
  • 被设置的列可以重复插入数据
  • 不允许为null
CREATE TABLE pk01(
    id VARCHAR(20) NOT NULL ,
    `name` VARCHAR(32)
);

4 mysql 特有 自动增长列


关键字: auto_increment


特点:


被自动增长列修饰的列,将自动累加,自己维护列中的数据


限定条件:


被修饰的列的类型,必须是数字类型(int,float,douoble)


必须被键key修饰(主键primary key , 唯一约束 unique)

CREATE TABLE ai01(){
    id INT PRIMARY KEY AUTO_INCREMENT,
    `name` VARCHAR(20)
}

5 补充-----截取小数点 truncate


作业中遇到 ----截取小数点


关键字:truncate(要截取的数,要截取几位);


SELECT cno `课程`, TRUNCATE(AVG(degree),2) `平均成绩` FROM score GROUP BY cno ;


6 访问查询多个表


  • 语法: select * | name from b表1 表1的别名,表2 表1的别名 where 条件;
  • 可通过条件将两表相连
-- 20、查询所有学生的Sname、Cno和Degree列(两表连接)。
SELECT sname,cno,degree FROM student s , score c WHERE s.sno = c.sno ;


7 where 字段 in(多个条件)

  • 可在where 字段后 in括号中写多个查询条件
1. -- 5、 查询Score表中成绩为85,86或88的记录。
2. SELECT * FROM score WHERE degree IN(85,86) OR degree = 88 ;


8 like 模糊查询

  • 字段1 like '%字段2%' : 字段1包含中包含字段2
  • 字段1 like '字段2%' : 字段1以字段2 开始
  • 字段1 like '%字段2' :字段1以字段2 结束
-- 16、查询Student表中不姓“王”的同学记录。
SELECT * FROM student WHERE sname NOT LIKE '王%'; 
- 通过标题(模糊查询)和价格查询书籍
SELECT * FROM book WHERE title LIKE '%二%' AND price = 100 ;


9 分页

  • 关键字:limit 起始索引,每页页数
  • 公式:起始索引 = (页数-1)*每页页数
# 语法 select * from 表名 limit startIndex, pageSize;
# 参数1:startIndex开始索引,从0开始
# 参数2:pageSize 每页个数
# 第一页,每页2条
SELECT * FROM person LIMIT 0,2 ;
# 第二页
SELECT * FROM person LIMIT 2,2 ;
# 第三页
SELECT * FROM person LIMIT 4,2 ;
# 第 pageNum 页  , startIndex = (pageNum-1) * pageSize
# 第二页,每页3条
SELECT * FROM person LIMIT 3,3 ;
# 第6页,每页5条
SELECT * FROM person LIMIT 25,5 ;


10 难点一 【聚合avg+count+分组+截取小数点】


分析:


select cname 要查询的课程


TRUNCATE(AVG(degree),2) 对该列进行 计算平均分并截取小数点


FROM score s , course c 要查询的表,并写明表的别名


WHERE s.cno = c.cno 条件查询,将两个表根据对应的外键进行两表相连


GROUP BY cname 对课程名进行分组,平均分就可计算分组后的课程单 列平均分


HAVING COUNT(degree) >= 5 对其分组后进行条件约束,只对其满足条件的分组进行计数单列平均分

-- 19、查询Score表中至少有5个成绩记录的课程的平均分数。
SELECT cname , TRUNCATE(AVG(degree),2) FROM score s , course c WHERE s.cno = c.cno GROUP BY cname HAVING COUNT(degree) >= 5 ; 


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
缓存 网络协议 Linux
DNS解析工具使用案例
关于如何在Windows和Linux操作系统下使用DNS解析工具的案例,包括查看和清空DNS缓存、使用whois查询工具以及安装和使用dig工具进行DNS记录查询。
19 2
DNS解析工具使用案例
|
1月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
31 2
zabbix agent集成percona监控MySQL的插件实战案例
|
2月前
|
JavaScript 前端开发 UED
Javaweb之javascript的小案例的详细解析
通过上述步骤,我们得到了一个动态更新的实时时钟,这个简单的JavaScript案例展示了定时器的使用方法,并讲解了如何处理日期和时间。这个案例说明了JavaScript在网页中添加动态内容与交互的能力。对于涉足JavaWeb开发的学习者来说,理解和运用这些基础知识非常重要。
36 11
|
2月前
|
存储 关系型数据库 MySQL
MySQL bit类型增加索引后查询结果不正确案例浅析
【8月更文挑战第17天】在MySQL中,`BIT`类型字段在添加索引后可能出现查询结果异常。表现为查询结果与预期不符,如返回错误记录或遗漏部分数据。原因包括索引使用不当、数据存储及比较问题,以及索引创建时未充分考虑`BIT`特性。解决方法涉及正确运用索引、理解`BIT`的存储和比较机制,以及合理创建索引以覆盖各种查询条件。通过`EXPLAIN`分析执行计划可帮助诊断和优化查询。
|
2月前
|
开发者
告别繁琐代码,JSF标签库带你走进高效开发的新时代!
【8月更文挑战第31天】JSF(JavaServer Faces)标准标签库为页面开发提供了大量组件标签,如`<h:inputText>`、`<h:dataTable>`等,简化代码、提升效率并确保稳定性。本文通过示例展示如何使用这些标签实现常见功能,如创建登录表单和展示数据列表,帮助开发者更高效地进行Web应用开发。
31 0
|
2月前
|
UED 存储 自然语言处理
【语言无界·体验无疆】解锁Vaadin应用全球化秘籍:从代码到文化,让你的应用畅游世界每一个角落!
【8月更文挑战第31天】《国际化与本地化实战:构建多语言支持的Vaadin应用》详细介绍了如何使用Vaadin框架实现应用的国际化和本地化,提升用户体验和市场竞争力。文章涵盖资源文件的创建与管理、消息绑定与动态加载、日期和数字格式化及文化敏感性处理等方面,通过具体示例代码和最佳实践,帮助开发者构建适应不同语言和地区设置的Vaadin应用。通过这些步骤,您的应用将更加灵活,满足全球用户需求。
35 0
|
2月前
|
前端开发 API 开发者
【React状态管理新思路】Context API入门:从零开始摆脱props钻孔的优雅之道,全面解析与实战案例分享!
【8月更文挑战第31天】React 的 Context API 有效解决了多级组件间状态传递的 "props 钻孔" 问题,使代码更简洁、易维护。本文通过电子商务网站登录状态管理案例,详细介绍了 Context API 的使用方法,包括创建、提供及消费 Context,以及处理多个 Context 的场景,适合各水平开发者学习与应用,提高开发效率和代码质量。
25 0
|
16天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
18天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
158 11
|
2月前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~

推荐镜像

更多
下一篇
无影云桌面