MySQL基础概念和SQL(1)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 1.概念1.1.什么是MySQL开源、轻量级的一款关系型数据库,在业内有着广泛应用。1.2.关系型数据库、非关系型数据库按照组织数据的方式进行分类,数据库可以分为关系型、非关系型两种。两者各自的特点如下

1.概念

1.1.什么是MySQL

开源、轻量级的一款关系型数据库,在业内有着广泛应用。

1.2.关系型数据库、非关系型数据库

按照组织数据的方式进行分类,数据库可以分为关系型、非关系型两种。两者各自的特点如下

关系型 非关系型
用表格来组织数据,一个表里是一类数据 用各种数据结构(如文档、键值对、列族等)来存储数据
存储的数据是结构化数据,对数据的长度、类型有严格约束 存储的数据可以是半结构化、非结构化的,对数据的长度、类型没有严格约束
数据之间(表之间)可以通过主键、外键之间建立起很强的关系 数据之间相对独立,没有建立起很强关联关系的方式
用 SQL 语言来操作数据,提供了强大的事务管理和 ACID 特性 没有固定的查询语言,通常使用类似于文档的 API 来查询数据,一般不支持事务和ACID
适用于需要高度结构化数据和高度数据一致性的应用场景 适用于需要高度可伸缩性、高速度读写、大数据处理等场景

1.3.库、表、字段

库、表、字段,可以理解为三者组成了数据库的层级结构,就像小区、单元楼、户之间的关系。


库(Database):库是一组相关的表的集合,可以看作是一个存储数据的容器。在数据库中,一个库通常对应一个应用程序或一个业务领域。


表(Table):表是一组有结构的数据集合,由若干行和若干列组成。每行表示一个记录,每列表示一种属性。表是数据库的核心,一个库可以包含多个表。


字段(Column):字段是表中的一列,用于存储一种特定类型的数据。字段具有一个名字和一个数据类型,可以包含整数、浮点数、字符串等不同类型的数据。每个字段还可以有约束条件,如主键、外键、非空约束等,用于保证数据的完整性和一致性。

主键:

表中一条数据的唯一标识,在同一个表中不允许重复,类似于一条数据的身份证号码。

外键:

用于关联两个表。两个表之间的外键值是相同的。

索引:

索引可以理解为一个

2.数据类型

MySql中常用的数据类型可以分为三类:

  • 数值
  • 字符串
  • 日期/时间

2.1.数值

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 Bytes (-128,127) (0,255) 小整数值
SMALLINT 2 Bytes (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 Bytes (-8 388 608,8 388 607) (0,16 777 215) 大整数值

INT或INTEGER 4 Bytes (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值

BIGINT 8 Bytes (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615)

FLOAT 4 Bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度 浮点数值

DOUBLE 8 Bytes (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度 浮点数值

DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

2.2.字符串

类型 大小 用途

CHAR 0-255 bytes 定长字符串

VARCHAR 0-65535 bytes 变长字符串

TINYBLOB 0-255 bytes 不超过 255 个字符的二进制字符串

TINYTEXT 0-255 bytes 短文本字符串

BLOB 0-65 535 bytes 二进制形式的长文本数据

TEXT 0-65 535 bytes 长文本数据

MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据

MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据

LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据

LONGTEXT 0-4 294 967 295 bytes 极大文本数据

2.3.日期/时间

类型 大小 ( bytes) 范围 格式 用途

DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值

TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间

YEAR 1 1901/2155 YYYY 年份值

DATETIME 8 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' YYYY-MM-DD hh:mm:ss 混合日期和时间值

TIMESTAMP 4 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYY-MM-DD hh:mm:ss 混合日期和时间值,时间戳

3.结构化查询语言

结构化查询语言分为四类:

  • DDL,数据库定义语言
  • DML,数据操作语言
  • DQL,数据查询语言
  • DCL,数据控制语言

3.1.DDL

DDL,数据库定义语言,用来操作库、表、字段,用来对他们进行创建、删除、修改。

建库:

create database 名字 (character set utf8);


括号中是可填参数,建库时可以指定字符集。


create table 表名{


id bigint,


name varchar(25)


} (engine=innodb default charset=utf8);

括号中是可填参数,建表的时候可以指定引擎和字符集,不指定的话会用默认的引擎和字符集。


修改表结构:


修改字段:


alter table 表名 add 字段名 数据类型;


alter table 表名 drop 字段名;


alter table 表名 modify 字段名 数据类型;


alter table 表名 change 原始列名 新列名 数据类型;


修改表名:


rename table 原始表名 to 新表名;


修改表字符集


alter table 表名 character set 字符集名;


删除表


drop table 表名;

3.2.DML

DML,数据操作语言,用来对表中的数据进行增删改查。

查询:

select * from 表名;插入:

insert into 表名 (列名1,列名2,…) value(值1,值2,…);

注意列名和值一一对应。

批量插入:

insert into student values(2,'chen',22),(2,'chen',22);

更新:

update 表名 set 列名 =新值 where 约束条件;

不跟约束条件的话表里的数据会全改

批量更新:

updata 表名 set 列名1 =新值,列名2=新值,….,where 约束条件;

不跟约束条件的话数据会全改

3.3.DCL

DCL,数据控制语言,定义权限。用来控制数据库、表、字段、用户的访问权限和安全级别

常用关键字:grant、revoke等。

创建用户并分配权限:

create user 'usertest'@'%' indentified by '123456';


grant all privileges on mydb.* to 'usertest'@'%';




revoke delete on mydb.* from 'usertest'@'%'


查看权限:


show grants for 'usertest'@'%';

entified by '123456';


grant all privileges on mydb.* to 'usertest'@'%';


回收权限:


revoke delete on mydb.* from 'usertest'@'%'


查看权限:


show grants for 'usertest'@'%';

3.4.DQL

DQL,数据查询语言,SQL中最常用也是最核心的内容。

注意:本文的DQL暂时只限定于单表查询,多表联查在下一篇文章聊MySQL的高级内容时会细聊

3.4.1.结果集

查询出来的结果叫结果集,会以表的形式呈现,这张表是张虚拟的表,并不真实存在,存放在内存里面。


3.4.2.取别名

可以为表、字段取别名,如:


select username as un,password as pw from sys_user su where su.name='admin';

可以为表、字段取别名,如:


select username as un,password as pw from sys_user su where su.name='admin';


3.4.3.查列

select 列1,列2……from 表名;


3.4.4.条件查询

通过where后面的条件来约束查询的范围,where后面可以跟很多条件运算符

d26b6dd4161e49e5bdd6d2921b177207.png

3.4.5.模糊查询

通配符:

‘_’ 一个下划线代表任意单个字符

‘%’百分号表示任意个字符。

注意:通配符必须由单引号引起来,否则会报错。

a34c3898eb5c42779c44ab9dfa6c9a00.png

3.4.6.去重

d6de4565183b4106a979f3fc038a687e.png

3.4.7.字段运算

字段运算的前提是都为数值型

6a434211f98b4b54a287b31764412b83.png

3.4.8.排序

使用order by来对查询结果按字段进行排序,默认是升序

image.png

也可以指定为升序或者降序:

ASC指定为升序,DESC指定为降序,此处以ASC为例:

b94322fab80a4d959e027a162cd01988.png

3.4.9.聚合函数

mysql有一些内置函数用来求最大、最小、平均值、总数等。

e7085f407b834247bffc2121e6639534.png

3.4.10.分组

使用group by可以按照字段对结果集进行分组,想显示分组字段外的其他字段用group_concat函数:

95e97335259e467a8ad3fbfa93c4f8ed.png

分组函数可以与聚合函数联合起来用,这样聚合函数的范围会限定在每一个分组内部:

d685954d53164c4892681c3e00fd1cb0.png

分组函数是对结果集进行分组,所以自然可以和条件函数一起联合使用:


3.4.11.having函数

havingwhere的效果不一样!!!

having写在group by的后面,分组后对数据过滤。

where写在group by的前面,分组前对数据过滤。

having可以用聚合函数,因为操作的是一个分组

where不可以用聚合函数,因为操作的是单个数据

where是让不满足条件的数据从分组里干掉,

having是干掉含有不满足条件的分组

having函数:

104698a371d049af99cca8329efed8ce.png

where函数:

image.png

3.4.12.分页查询

limit 起始位(0开始),查几位(包括当前位)

3c93c8858bd347ebb14e4d1a6eb2d82b.png

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
22
分享
相关文章
【YashanDB知识库】如何将mysql含有group by的SQL转换成崖山支持的SQL
本文探讨了在YashanDB(崖山数据库)中执行某些SQL语句时出现的报错问题,对比了MySQL的成功执行结果。问题源于SQL-92标准对非聚合列的严格限制,要求这些列必须出现在GROUP BY子句中,而SQL:1999及更高版本允许非聚合列直接出现在选择列中。YashanDB和Oracle遵循SQL-92标准,因此会报错。文章提供了两种解决方法:使用聚合函数处理非聚合列,或将GROUP BY与ORDER BY拆分为两层查询。最后总结指出,SQL-92标准更为严谨合理,建议开发者遵循此规范以避免潜在问题。
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
55 9
MySQL的架构与SQL语句执行过程
MySQL架构分为Server层和存储引擎层,具有高度灵活性和可扩展性。Server层包括连接器、查询缓存(MySQL 8.0已移除)、分析器、优化器和执行器,负责处理SQL语句;存储引擎层负责数据的存储和读取,常见引擎有InnoDB、MyISAM和Memory。SQL执行过程涉及连接、解析、优化、执行和结果返回等步骤,本文详细讲解了一条SQL语句的完整执行过程。
65 3
【YashanDB 知识库】如何将 mysql 含有 group by 的 SQL 转换成崖山支持的 SQL
在崖山数据库中执行某些 SQL 语句时出现报错(YAS-04316 not a single-group group function),而这些语句在 MySQL 中能成功执行。原因是崖山遵循 SQL-92 标准,不允许选择列表中包含未在 GROUP BY 子句中指定的非聚合列,而 MySQL 默认允许这种操作。解决办法包括:使用聚合函数处理非聚合列或拆分查询为两层,先进行 GROUP BY 再排序。总结来说,SQL-92 更严格,确保数据一致性,MySQL 在 5.7 及以上版本也默认遵循此标准。
MySQL原理简介—10.SQL语句和执行计划
本文介绍了MySQL执行计划的相关概念及其优化方法。首先解释了什么是执行计划,它是SQL语句在查询时如何检索、筛选和排序数据的过程。接着详细描述了执行计划中常见的访问类型,如const、ref、range、index和all等,并分析了它们的性能特点。文中还探讨了多表关联查询的原理及优化策略,包括驱动表和被驱动表的选择。此外,文章讨论了全表扫描和索引的成本计算方法,以及MySQL如何通过成本估算选择最优执行计划。最后,介绍了explain命令的各个参数含义,帮助理解查询优化器的工作机制。通过这些内容,读者可以更好地理解和优化SQL查询性能。
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
9月前
|
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
226 13
|
9月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
135 9
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
677 1