数据库语句执行过程理解,存储引擎的学习,字符集的理解,加各种sql数据类型理解介绍加之SQL各种数据查询分析和题目专练(1)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 数据库语句执行过程理解,存储引擎的学习,字符集的理解,加各种sql数据类型理解介绍加之SQL各种数据查询分析和题目专练(1)

一. 前言


嗨,您好呀,欢迎来到小杰的mysql学习随笔的博文章节,点进来就是缘分,如果您看目录获悉觉得小杰说的部分东西您还不过清晰,了解,您可以阅览本文给小杰提出宝贵的建议,小杰初次总结学习mysql 或有各式各样的错误,烦请您帮小杰纠正。如果觉着小杰写的不错,麻烦动动小手手给小杰来个三连支持,您的支持是小杰创作的动力喔,  蟹蟹你


前文重点回忆:    数据库是啥?  简单的理解就是对于数据进行存储,查询,管理操作的一款软件。  数据库必须要具备和磁盘一样的对于数据做持久化保存的能力


数据库对比磁盘存储的优势:更加方便,快捷,安全.


连接数据库 : mysql -u root -p

打开选择数据库:           use 库名

操作数据库:

show databases;        显示所有的数据库

use 数据库名字;          选择进入数据库

select database();      显示当前选择数据库

show tables;               显示所有的数据表

show create table 表名;       显示建表语句

desc  表名;                  显示表结构

create table if not exists 表名(字段 类型);       如果表不存在才创建,存在就不创建

drop  table  if exists  表名;                               如果表存在才删除,   不存在就不删除

if  not  exists   才创建     +      if   exists   才删除    (两个出现的原因???) 为了避免报错。 如果没有  if not exists 你创建已经存在的会报错, 如果没有 if exists 你删除不存在的也会报错             (针对数据库创建删除也可用)


insert into 表名(指定字段)  values(指定值);

\q(qiut)   exit               退出mysql

二.你有理解过sql语句的执行过程, 存储引擎(表处理器)是什么吗?

  • 首先mysql是一个典型的C/S 架构,即 Client/Server 架构
  • 也就是典型的请求------响应的模式,  客户端向服务器进程发送一段文本 (mysql语句),服务端处理之后向客户端进程发送一段文本(处理结果)    如下是具体过程

连接层:客户端和服务端建立连接,客户端发送SQL到服务器端


SQL层:对于SQL语句进行查询和处理   (  其中查询缓存其实意义不大,因为维护这块缓存造成的额外开销. 而且每次都要先去这块缓存中查询。每次查询之后还需要跟新查询缓存 在mysql8.0 之后已经是废除掉了)


存储引擎:跟文件系统进行交互,负责数据的存储和获取。

存储引擎

真正进行数据的存储和提取操作的都是存储引擎的事情,SQL层仅作的是mysql语句的查询和处理解析优化


存储引擎还存在一个名字叫做 表处理器 ???


什么是表:表是由一行一行的记录组成的,这个也仅仅只是一个抽象的东西,你有没有想过我们平时从表中读取数据还有向表中写入数据,这些操作究竟是如何映射到物理内存上的操作的呢?   就近是如何将需要写入表中的数据写入到物理存储器中的。。。   (表仅为抽象出来的机构,实际上数据还是需要存储在真实存在的物理的存储器中)   这个如何存入到物理存储器还有从物理存储器中读出表数据的操作正 对应着存储引擎的功能.


存储引擎有很多种,不同种的存储引擎  管理表的存储结构也可能是不同的, 采取的存储算法也是可能不同的。。。       (其实正对  不同的存储结构不同的存储算法,在不同的场景下,使用合适的存储引擎是可以提高对应操作的效率的).

存储引擎官方解释:                                            

最常见的存储引擎:myisam 和  innodb  


MyISAM 存储引擎:在 MySQL 5.5 版本之前是默认的存储引擎,不支持事务,也不支持外键,最大的特点是速度快,占用资源少


InnoDB 存储引擎:它是 MySQL 5.5 版本之后默认的存储引擎,最大的特点是支持事务、行级锁定、外键约束等


一般来说针对小型引用而言,我们往往可以采取myisam 存储引擎,因为他比较简单,效率上高于innode ,  但是它不能支持事务,外键,行级锁 这些问题导致在   高并发的情况下使用innodb更加合适.    

 

应用场景分析(myisam, innodb):  


myisam 管理非事物表,提供高速检索,以及全文搜索能力,所以应用中需要大量执行select操作的时候它是更好的选择


innodb 用于事物处理应用程序,具有众多特性,包括ACID事务支持。如果应用中大量需要进行Insert 或者 update 操作,应该使用innodb,  这样可以提高多用户并发操作的性能


对于存储引擎而言,肯定不是说固定的一定要用哪个,还是需要根据存储引擎的特性结合业务需求来使用合适的存储引擎。

三. mysql中的字符集为啥要是utf-8 如果不是会产生什么问题?

我们知道在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系了, 我们知道在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系


字符映射 :将一个字符映射成二进制数据的过程叫做   编码,将二进制数据映射到一个字符的过程叫做   解码


不同的字符集:描述    某个范围的字符   的  编码规则

字符集发展史

字符范围在不断的扩大,编码规则也越发不同,   至此万国码他来了:  (支持涵盖世界上所有语言的字符)  utf-8 仅仅只是 Unicode 中的一种编码规则的字符集,也是现在Mysql默认使用的

所以我前面建表的时候都是指定的utf8mb4   就是这个原因,如果仅仅只是utf8默认的是1 - 3个字节表示字符,其中会存在一些问题,如果有需要使用4字节编码一个字符的情况下

  • 字符集错了最常见的问题就是乱码,在mysql中会体现出报错

四. SQL中常用的数据类型和表常见字段约束学习

  • SQL数据类型分类:串数据类型,数值数据类型,日期时间数据类型
  • 数据类型合适定义的重要性:
  • 数据库还有表一般是非常大的,一个数据类型其实就代表数据库表中的一整列数据的数据类型,如果类型定义出现问题,比如不够存储呀等等,我们就相当于是需要修改表的一整列的类型,这个是很危险的,(因为可能导致数据的丢失)  更改数据的列不是一件小事情  (重视类型定义很有必要)

上述中比较重要的三种串数据类型的介绍我都全部框起来了,我们使用比较多的也就是这三种串类型.


分析char  和  varchar的差异性  (是蛮必要的):


char(len):定长串,意思就是说长度是固定的,在建表的时候就固定住对应字段 (列)的长度,不论你传入的串长度是小于里面的固定len 还是等于 len 都是固定的len 长度,说白了就是   存储空间固定分配        (注意  不可以存储长度 > len 的串)  数据丢失,固定长度不合适


varchar(len):变长串,意思就是长度可以是不定的,你写入多长的串就给多大的存储空间(位)进行存储,当然 还是不可以超过  len 的限制

数值数据类型主要也就是如下的  decimal(位数,小数点后位数),float , int  tinyint

注意 unsigned 的修饰,这个属于表字段修饰了, 后面会说

对应  time 类型的数据输出   curtime();  sql中的当前时间查询函数

对应datetime类型的输出    now() sql中当前时间的查询函数,按照年月日时分秒形式

  • 常见常用表字段约束

  • 主键很重要,主键是每一行记录的唯一标识,几乎每一个表都需要设置主键 primary key
  • 而且主键一般都会设置成 auto_increment 实现自动的递增.

上述图片是很常用的建表方式,基本上是特别规范了,也涵盖了上面介绍的很多知识点,大家可以结合实例再理解,自己再去敲一下

  • 同样在末尾我们还可以进行auto_increment 自动递增的值的设置  在  确定字符集之前

五. SQL中的select你是真的有够会用吗?

一个字段代表的就是一列         一个固定值的字段代表的是一行:     姓名:代表的是姓名字段这一列,   姓名 = '张三'  代表的是指定 名字 = 张三的这一行(记录)

之前解释过上述知识小点,此处再明确一下,字段意思就是列,字段值固定就是代表这个固定字段值标记的行(记录)    

  •   如下就是emp 表的整体结构和存储的数据,  后序的所有操作全部基于这个表
  • select 查询多个列(多个字段)
语法形式:  select 指定字段1, 指定字段2, 指定字段3... from 表名;

eg:  

  • select 查询全部列
  • 语法形式:select  *  from 表名;       // 查询表中所有列,很容易使用,但是其实真正我们将来工作的时候是不建议使用, 检索出不必要的多余列 (降低检索性能)   +    不能明确指定检索的字段名   *   通配符:通配所有列(字段)

eg:


  • select 条件查询    (查询固定字段,指定字段的行)
  • 语法形式:   select * from 表名 where  约束字段(条件约束);

如下是where的条件语句中可以使用的  各种运算符 和 限制约束

  • 再解释一下  like 的使用     like一般搭配  %  和  _一同使用:   _含义是匹配任意的一个字符,     %  匹配任意的多个字符


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
83 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
4天前
|
SQL 存储 移动开发
HTML5 Web SQL 数据库详解
Web SQL 数据库是 HTML5 中的一种本地存储技术,允许在浏览器中使用 SQL 语言操作本地数据,支持离线访问和事务处理,适用于缓存数据和小型应用。然而,其存储容量有限且仅部分现代浏览器支持,标准已不再积极维护,未来可能被 IndexedDB 和 localStorage 等技术取代。使用时需谨慎考虑兼容性和发展前景。
|
7天前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
18 2
|
21天前
|
SQL 监控 关系型数据库
MySQL数据库中如何检查一条SQL语句是否被回滚
检查MySQL中的SQL语句是否被回滚需要综合使用日志分析、事务状态监控和事务控制语句。理解和应用这些工具和命令,可以有效地管理和验证数据库事务的执行情况,确保数据的一致性和系统的稳定性。此外,熟悉事务的ACID属性和正确设置事务隔离级别对于预防数据问题和解决事务冲突同样重要。
30 2
|
1月前
|
SQL Java OLAP
Hologres 入门:实时分析数据库的新选择
【9月更文第1天】在大数据和实时计算领域,数据仓库和分析型数据库的需求日益增长。随着业务对数据实时性要求的提高,传统的批处理架构已经难以满足现代应用的需求。阿里云推出的 Hologres 就是为了解决这个问题而生的一款实时分析数据库。本文将带你深入了解 Hologres 的基本概念、优势,并通过示例代码展示如何使用 Hologres 进行数据处理。
127 2
|
1月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
61 0
|
2月前
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
59 0
|
2月前
|
SQL 数据处理 数据库
|
2月前
|
Java 数据库连接 数据库
告别繁琐 SQL!Hibernate 入门指南带你轻松玩转 ORM,解锁高效数据库操作新姿势
【8月更文挑战第31天】Hibernate 是一款流行的 Java 持久层框架,简化了对象关系映射(ORM)过程,使开发者能以面向对象的方式进行数据持久化操作而无需直接编写 SQL 语句。本文提供 Hibernate 入门指南,介绍核心概念及示例代码,涵盖依赖引入、配置文件设置、实体类定义、工具类构建及基本 CRUD 操作。通过学习,你将掌握使用 Hibernate 简化数据持久化的技巧,为实际项目应用打下基础。
69 0
|
2月前
|
SQL 存储 监控
下一篇
无影云桌面