2023年6月21日发(作者:)

SQL语⾔简介SQL语⾔SQL语⾔按照功能划分成以下4个部分:1. DDL(Data Definition Language)数据定义语⾔,它⽤来定义我们的数据库对象,包括数据库、数据表和列。通过使⽤DDL,我们可以创建,删除和修改数据库和表结构。2. DML(Data Manipulation Language)数据操作语⾔,我们⽤它操作和数据库相关的记录,如增加、删除、修改数据表中的记录。3. DCL(Data Control Language)数据控制语⾔,我们⽤它来定义访问极限和安全级别。4. DQL(Data Query Language)数据查询语⾔,我们⽤它查询想要的记录,它是SQL语⾔的重中之重。实际业务中,我们绝⼤多数情况下都是在和查询打交道,因此,学会编写正确且⾼效的查询语句,是学习的重点。SQL是我们与DBMS 交流的语⾔,我们在创建DBMS之前,还需要对它进⾏设计,对于RDBMS来说采⽤的是ER图(Entity RelationshipDiagram),即实体-关系图的⽅式进⾏设计。ER图评审通过后,我们再⽤SQL语句或都可视化管理⼯具(Navicat)创建数据库表。实体-关系图有什么⽤呢?实体-关系图是我们⽤来描述现实世界的概念模型,在这个模型中有3个要素:实体属性关系SQL⼤⼩写的问题,总结如下:1. 表名、表别名、字段名、字段别名都⼩写;2. SQL保留字、函数名、绑定变量等都⼤写。DB、DBS和DBMS的区别是什么DBMS 的英⽂全称是 DataBase Management System,数据库管理系列。实际上它可以对多个数据库进⾏管理,所以你可以理解为DBMS = 多个数据库(DB)+ 管理程序。DB 的英⽂是 DataBase,也就是数据库。数据库是存储数据的集合,你可以把它理解为多个数据表。DBS 的英⽂是 DataBase System,数据库系统。它是更⼤的概念,包括了数据库、数据库管理系统以及数据库管理⼈员DBA。Oracle中的 SQL 是如何执⾏的SQL语句oracle 中sql执⾏SQL在Oracle中的执⾏过程:SQL语句在oracle中经历了民以下的⼏个步骤:1. 语法检查:检查 SQL 拼写是否正确,如果不正确,Oracle 会报语法错误。2. 语义检查:检查 SQL 中的访问对象是否存在。如SQL语句中表名,列名是否正确。3. 权限检查:看⽤户是否具备访问该数据的权限。4. 共享池检查:共享池(Shared Pool)是⼀块内存池,最主要的作⽤是缓存SQL语句和该语句的执⾏计划。Oracle 通过检查共享池是否存在SQL语句的执⾏计划,来判断进⾏软解析,还是硬解析。怎么解理软解析和硬解析呢?在共享池中,Oracle⾸先对SQL语句进⾏Hash运算,然后根据 Hash 值在库缓存(Library Cache)中查找,如果存在SQL语句的执⾏计划,就直接拿来执⾏,直接进⼊“执⾏器”的环节,这就是软解析。如果没有找到 SQL 语句和执⾏计划,Oracle 就需要创建解析树进⾏解析,⽣成执⾏计划,进⼊“优化器”这个步骤,这就是硬解析。5. 优化器:优化器中就是要进⾏硬解析,也就是决定怎么做,⽐如创建解析树,⽣成执⾏计划。6. 执⾏器:当有了解析树和执⾏计划之后,就知道了SQL该怎么被执⾏,这样就可以在执⾏器中执⾏语句了。共享池是Oracle中的术语,包括了库缓存,数据字典缓冲区等。库缓存:我们上⾯已经讲到了库缓存区,它主要缓存SQL语句和执⾏计划。数据字典缓冲区:存储的是 Oracle 中的对象定义,⽐如表、视图、索引等对象。当对SQL语句进⾏解析的时候,如果需要相关的数据,会从数据字典缓冲区中提取。库缓存这⼀个步骤,决定了SQL语句是否需要进⾏硬解析。为了提升SQL的执⾏效率,我们应该尽量避免硬解析,因为在SQL的执⾏过程中,创建解析树,⽣成执⾏计划是很消耗资源的。MySQL 中的 SQL 是如何执⾏的⾸先 MySQL 是典型的 C/S 架构,即 Client/Server架构,服务器端程序使⽤的 mysqld。整体的 MySQL 流程如下图所⽰:可以看到 MySQL 由三层组成:1. 连接层:客户端和服务器端建⽴连接,客户端发送 SQL ⾄服务器端;2. SQL 层:对SQL语句进⾏查询处理;3. 存储引擎层:与数据库⽂件打交道,负责数据的存储和读取。其中SQL 层与数据库⽂件的存储⽅式⽆关,我们来看下 SQL 层的结构:1. 查询缓存: Server如果在查询缓存中发现了这条SQL语句,就会直接将结果返回给客户端;如果没有,就进⼊到解析器阶段。需要说明的是,因为查询缓存往往效率不⾼,所以在MySQL8.0之后注抛弃了这个功能。2. 解析器:在解析器中对SQL 语句进⾏语法分析、语义分析。3. 优化器:在优化器中会确定 SQL 语句的执⾏路径,⽐如是根据全表检索,还是根据索引来检索等。4. 执⾏器:在执⾏之前需要判断该⽤户是否具备权限,如果具备权限就执⾏SQL 查询并返回结果。在MySQL8.0以下的版本,如果设置了查询缓存,这时将查询结果进⾏缓存。。与Oracle 不同的是,MySQL的存储引擎采⽤了插件的形式,每个存储引擎都⾯向⼀种特定的数据库应⽤环境。同时开源的MySQL 还允许开发⼈员设置⾃⼰的存储引擎,下⾯是⼀些常见的存储引擎:1. InnoDB 存储引擎: 它是 MySQL 5.5 版本之后默认的存储引擎,最⼤的特点是⽀持事务、⾏级锁定、外键约束等。2. MyISAM 存储引擎:在 MySQL 5.5 版本之前是默认的存储引擎,不⽀持事务,也不⽀持外键,最⼤的特点就是速度快,占⽤资源少。3. Memory存储引擎:使⽤系统内存作为存储介质,以便得到更快的响应速度。不过如果mysqld进程崩溃,则会导致所有的数据丢失,因此我们只有当数据是临时的情况下才使⽤Memory存储引擎。4. NDB存储引擎:也叫做 NDB Cluster存储引擎,主要⽤于 MySQL Cluster分布式集群环境,类型于Oracle的RAC集群。5. Archive 存储引擎:它有很好的压缩机制,⽤于⽂件归档,在请求写⼊时会进⾏压缩,所以也经常来⽤做仓库。既然⼀条SQL 语句会经历不同的模块,那我们来看⼀下,在不同的模块中,SQL执⾏所使⽤的资源(时间)是怎样的。下⾯我来教你如何在 MySQL中对⼀条 SQL语句的执⾏时间进⾏分析。⾸先查看⼀下 profiling是否开启,开启它可以让 MySQL收集在 SQL执⾏时所使⽤的资源情况,命令如下:select @@profiling;profiling=0 代表关闭,我们需要把 profiling打开,即设置为1:select profiling = 1;然后我们执⾏⼀个 SQL 查询(执⾏任何⼀个):select * from scc_patient;查看当前会话所产⽣的所有 profiles:show profiles;

2023年6月21日发(作者:)

SQL语⾔简介SQL语⾔SQL语⾔按照功能划分成以下4个部分:1. DDL(Data Definition Language)数据定义语⾔,它⽤来定义我们的数据库对象,包括数据库、数据表和列。通过使⽤DDL,我们可以创建,删除和修改数据库和表结构。2. DML(Data Manipulation Language)数据操作语⾔,我们⽤它操作和数据库相关的记录,如增加、删除、修改数据表中的记录。3. DCL(Data Control Language)数据控制语⾔,我们⽤它来定义访问极限和安全级别。4. DQL(Data Query Language)数据查询语⾔,我们⽤它查询想要的记录,它是SQL语⾔的重中之重。实际业务中,我们绝⼤多数情况下都是在和查询打交道,因此,学会编写正确且⾼效的查询语句,是学习的重点。SQL是我们与DBMS 交流的语⾔,我们在创建DBMS之前,还需要对它进⾏设计,对于RDBMS来说采⽤的是ER图(Entity RelationshipDiagram),即实体-关系图的⽅式进⾏设计。ER图评审通过后,我们再⽤SQL语句或都可视化管理⼯具(Navicat)创建数据库表。实体-关系图有什么⽤呢?实体-关系图是我们⽤来描述现实世界的概念模型,在这个模型中有3个要素:实体属性关系SQL⼤⼩写的问题,总结如下:1. 表名、表别名、字段名、字段别名都⼩写;2. SQL保留字、函数名、绑定变量等都⼤写。DB、DBS和DBMS的区别是什么DBMS 的英⽂全称是 DataBase Management System,数据库管理系列。实际上它可以对多个数据库进⾏管理,所以你可以理解为DBMS = 多个数据库(DB)+ 管理程序。DB 的英⽂是 DataBase,也就是数据库。数据库是存储数据的集合,你可以把它理解为多个数据表。DBS 的英⽂是 DataBase System,数据库系统。它是更⼤的概念,包括了数据库、数据库管理系统以及数据库管理⼈员DBA。Oracle中的 SQL 是如何执⾏的SQL语句oracle 中sql执⾏SQL在Oracle中的执⾏过程:SQL语句在oracle中经历了民以下的⼏个步骤:1. 语法检查:检查 SQL 拼写是否正确,如果不正确,Oracle 会报语法错误。2. 语义检查:检查 SQL 中的访问对象是否存在。如SQL语句中表名,列名是否正确。3. 权限检查:看⽤户是否具备访问该数据的权限。4. 共享池检查:共享池(Shared Pool)是⼀块内存池,最主要的作⽤是缓存SQL语句和该语句的执⾏计划。Oracle 通过检查共享池是否存在SQL语句的执⾏计划,来判断进⾏软解析,还是硬解析。怎么解理软解析和硬解析呢?在共享池中,Oracle⾸先对SQL语句进⾏Hash运算,然后根据 Hash 值在库缓存(Library Cache)中查找,如果存在SQL语句的执⾏计划,就直接拿来执⾏,直接进⼊“执⾏器”的环节,这就是软解析。如果没有找到 SQL 语句和执⾏计划,Oracle 就需要创建解析树进⾏解析,⽣成执⾏计划,进⼊“优化器”这个步骤,这就是硬解析。5. 优化器:优化器中就是要进⾏硬解析,也就是决定怎么做,⽐如创建解析树,⽣成执⾏计划。6. 执⾏器:当有了解析树和执⾏计划之后,就知道了SQL该怎么被执⾏,这样就可以在执⾏器中执⾏语句了。共享池是Oracle中的术语,包括了库缓存,数据字典缓冲区等。库缓存:我们上⾯已经讲到了库缓存区,它主要缓存SQL语句和执⾏计划。数据字典缓冲区:存储的是 Oracle 中的对象定义,⽐如表、视图、索引等对象。当对SQL语句进⾏解析的时候,如果需要相关的数据,会从数据字典缓冲区中提取。库缓存这⼀个步骤,决定了SQL语句是否需要进⾏硬解析。为了提升SQL的执⾏效率,我们应该尽量避免硬解析,因为在SQL的执⾏过程中,创建解析树,⽣成执⾏计划是很消耗资源的。MySQL 中的 SQL 是如何执⾏的⾸先 MySQL 是典型的 C/S 架构,即 Client/Server架构,服务器端程序使⽤的 mysqld。整体的 MySQL 流程如下图所⽰:可以看到 MySQL 由三层组成:1. 连接层:客户端和服务器端建⽴连接,客户端发送 SQL ⾄服务器端;2. SQL 层:对SQL语句进⾏查询处理;3. 存储引擎层:与数据库⽂件打交道,负责数据的存储和读取。其中SQL 层与数据库⽂件的存储⽅式⽆关,我们来看下 SQL 层的结构:1. 查询缓存: Server如果在查询缓存中发现了这条SQL语句,就会直接将结果返回给客户端;如果没有,就进⼊到解析器阶段。需要说明的是,因为查询缓存往往效率不⾼,所以在MySQL8.0之后注抛弃了这个功能。2. 解析器:在解析器中对SQL 语句进⾏语法分析、语义分析。3. 优化器:在优化器中会确定 SQL 语句的执⾏路径,⽐如是根据全表检索,还是根据索引来检索等。4. 执⾏器:在执⾏之前需要判断该⽤户是否具备权限,如果具备权限就执⾏SQL 查询并返回结果。在MySQL8.0以下的版本,如果设置了查询缓存,这时将查询结果进⾏缓存。。与Oracle 不同的是,MySQL的存储引擎采⽤了插件的形式,每个存储引擎都⾯向⼀种特定的数据库应⽤环境。同时开源的MySQL 还允许开发⼈员设置⾃⼰的存储引擎,下⾯是⼀些常见的存储引擎:1. InnoDB 存储引擎: 它是 MySQL 5.5 版本之后默认的存储引擎,最⼤的特点是⽀持事务、⾏级锁定、外键约束等。2. MyISAM 存储引擎:在 MySQL 5.5 版本之前是默认的存储引擎,不⽀持事务,也不⽀持外键,最⼤的特点就是速度快,占⽤资源少。3. Memory存储引擎:使⽤系统内存作为存储介质,以便得到更快的响应速度。不过如果mysqld进程崩溃,则会导致所有的数据丢失,因此我们只有当数据是临时的情况下才使⽤Memory存储引擎。4. NDB存储引擎:也叫做 NDB Cluster存储引擎,主要⽤于 MySQL Cluster分布式集群环境,类型于Oracle的RAC集群。5. Archive 存储引擎:它有很好的压缩机制,⽤于⽂件归档,在请求写⼊时会进⾏压缩,所以也经常来⽤做仓库。既然⼀条SQL 语句会经历不同的模块,那我们来看⼀下,在不同的模块中,SQL执⾏所使⽤的资源(时间)是怎样的。下⾯我来教你如何在 MySQL中对⼀条 SQL语句的执⾏时间进⾏分析。⾸先查看⼀下 profiling是否开启,开启它可以让 MySQL收集在 SQL执⾏时所使⽤的资源情况,命令如下:select @@profiling;profiling=0 代表关闭,我们需要把 profiling打开,即设置为1:select profiling = 1;然后我们执⾏⼀个 SQL 查询(执⾏任何⼀个):select * from scc_patient;查看当前会话所产⽣的所有 profiles:show profiles;