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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
全局流量管理 GTM,标准版 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
相关文章
|
10天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
41 9
|
6天前
|
监控 关系型数据库 MySQL
MySQL自增ID耗尽应对策略:技术解决方案全解析
在数据库管理中,MySQL的自增ID(AUTO_INCREMENT)属性为表中的每一行提供了一个唯一的标识符。然而,当自增ID达到其最大值时,如何处理这一情况成为了数据库管理员和开发者必须面对的问题。本文将探讨MySQL自增ID耗尽的原因、影响以及有效的应对策略。
21 3
|
7天前
|
存储 关系型数据库 MySQL
MySQL 字段类型深度解析:VARCHAR(50) 与 VARCHAR(500) 的差异
在MySQL数据库中,`VARCHAR`类型是一种非常灵活的字符串存储类型,它允许存储可变长度的字符串。然而,`VARCHAR(50)`和`VARCHAR(500)`之间的差异不仅仅是长度的不同,它们在存储效率、性能和使用场景上也有所不同。本文将深入探讨这两种字段类型的区别及其对数据库设计的影响。
18 2
|
11天前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发深度解析####
本文作为技术性文章,深入探讨了PHP与MySQL结合在动态网站开发中的应用实践,从环境搭建到具体案例实现,旨在为开发者提供一套详尽的实战指南。不同于常规摘要仅概述内容,本文将以“手把手”的教学方式,引导读者逐步构建一个功能完备的动态网站,涵盖前端用户界面设计、后端逻辑处理及数据库高效管理等关键环节,确保读者能够全面掌握PHP与MySQL在动态网站开发中的精髓。 ####
|
12天前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
37 3
|
15天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
81 1
|
3天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
15 2
|
1月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
66 0
|
1月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
52 0
|
1月前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
60 0

推荐镜像

更多