sql查询视图的基本结构和详细结构 sqlite3数据库怎么看表,视图之间的关系?
浏览量:4181
时间:2023-04-10 16:19:40
作者:采采
sqlite3数据库怎么看表,视图之间的关系?
;的菜单栏有一个键 "显示图表窗格 ",这是显示图表的关键。选择一个表,然后单击此键查看关系表。要查看表之间的关系,只需将其他表拖到窗口中。视图是一个查询语句视图,使用时是一个表。但是,只能更新单个基表的行和列投影。视图主要用于映射模式到外部模式。有时,查询和子查询会被应用太多次,视图也被用来增加可读性。sql 数据库系统的体系结构是两级模式结构?
SQL数据库系统的体系结构不是两级模式结构,而是三级模式结构。SQL数据库的数据架构基本上是三层结构。在SQL中,关系模式被称为 "基础表 "存储模式(内部模式)称为 "存储文件 "子模式(外部模式)被称为 "查看 "一个元组称为一行;该属性称为列。本文将分析Mysql中下一条sql语句的执行过程,包括sql的查询将如何在Mysql内部流动,以及SQL语句的更新是如何完成的。在分析之前,我先给大家展示一下MySQL的基础架构,了解一下MySQL由哪些组件组成,可以帮助我们理解和解决这些问题。一个MySQL基础架构分析1.1 MySQL基础架构概述下图是MySQL的简要架构图。从下图中,你可以清楚地看到用户是如何 的SQL语句在MySQL内部执行。让 下面我们简单介绍一下下图中涉及到的一些组件的基本功能,帮助你理解这个图,这些组件的功能将在1.2节详细介绍。连接器:认证与权限相关(登录MySQL时)。查询缓存在执行一条查询语句的时候,会先查询缓存(MySQL版以后去掉了,因为这个功能不是很实用)。如果解析器不;如果没有命中缓存,SQL语句将通过解析器。说白了,解析器首先要看你的SQL语句是干什么用的,然后检查你的SQL语句的语法是否正确。优化器:按照MySQL认为最好的方案实现。执行器执行该语句,然后从存储引擎返回数据。简单来说,MySQL主要分为服务器层和存储引擎层:服务器层:主要包括连接器、查询缓存、分析器、优化器、执行器等。,跨存储引擎的所有功能。都是在这一层实现的,比如存储过程、触发器、视图、函数等。,而且还有一个通用的日志模块,binglog日志模块。存储引擎:主要负责数据存储和读取,采用可替换插件架构,支持InnoDB、MyISAM、Memory等多种存储引擎,其中InnoDB引擎自带日志模块redolog模块。现在最常用的存储引擎是InnoDB,从MySQL 5 . 5 . 5版开始就被视为默认的存储引擎。1.2服务器层基本组件介绍1)连接器连接器主要是与认证和权限相关的功能,就像一个高级门卫。它主要负责用户登录数据库和用户认证。;的身份,包括检查账户密码、权限等操作。如果用户 的帐户密码已过,连接器将在权限表中查找该用户的所有权限,然后该连接中权限的逻辑判断将取决于此时读取的权限数据,也就是说,只要连接持续打开,即使管理员修改了用户 的权限。2)查询缓存(MySQL版后移除)查询缓存主要用于缓存我们执行的SELECT语句以及该语句的结果集。连接建立后,执行查询语句时,会先查询缓存。Mysql会先检查这条sql是否已经执行,并以Key-Value的形式缓存在内存中,其中Key是查询预期,Value是结果集。如果命中缓存键,将直接返回给客户端。如果未命中,则执行后续操作,完成后缓存结果,方便下次调用。当然,当实际执行缓存查询时,用户 的权限,以及该表是否有查询条件。不建议对MySQL查询使用缓存,因为在实际的业务场景中,查询缓存失效可能会非常频繁。如果更新一个表,该表上的所有查询缓存都将被清空。对于不经常更新的数据,仍然可以使用缓存。因此,在大多数情况下,我们一般不 不建议使用查询缓存。MySQL版之后,删除了缓存功能,官方认为实际应用场景中该功能较少,所以干脆删除了。3)如果MySQL没有 t命中缓存,它将进入分析器。分析器主要用来分析SQL语句是干什么用的。分析器也会分为几个步骤:第一步是词法分析。SQL语句由多个字符串组成。首先,您必须提取关键字,例如select、用于查询的表、字段名称、查询条件等等。完成这些操作后,你将进入第二步。第二步,语法分析,主要是判断你输入的sql是否正确。MySQL的语法。完成这两步,MySQL就准备开始执行了,但是怎么执行,怎么执行才是最好的结果?这时候优化器就需要发挥作用了。4)优化器和放大器;;的作用是实现它认为最优的执行方案(有时可能不是最优的,本文涉及到对这部分知识的深入讲解),比如使用多个索引时如何选择索引,查询多个表时如何选择关联顺序。可以说优化器之后,可以说如何执行这个语句已经决定了。5)当执行者选择执行方案时,MySQL准备开始执行。在执行之前,它会检查用户是否有权限。否则,它将返回一条错误消息。如果有权限,它会调用引擎的接口,返回接口执行的结果。两句话分析2.1查询语句说了这么多,那么一条sql语句是如何执行的呢?其实我们的sql可以分为两种,一种是查询,一种是更新(添加、更新、删除)。让 s先分析一下查询语句,如下:select * from tb_student A where和张三。结合以上描述,让 s分析一下这条语句的执行过程:先检查语句是否有权限,如果没有,直接返回错误信息。如果有,在Mysql8.0版本之前,我们会先查询缓存,以这条sql语句为关键字查询内存中是否有结果。如果有直接缓存,如果没有,我们将执行下一步。由分析器进行词法分析,提取sql语句的关键元素,比如提取上面的语句是query select,提取要查询的表名为tb_student,需要查询所有列,查询条件为该表的id1。然后判断这条sql语句是否存在语法错误,比如关键词是否正确等。如果没有问题,执行下一步。接下来,优化器确定执行方案。上面的sql语句可以有两种执行方案:a .首先查询名为 "张三 "在学生表中,然后判断年龄是否为18岁。首先找出18岁的学生,然后查询名字是 "张三 "。然后优化器根据自己的优化算法选择最高效的方案(优化器认为有时候不一定是最好的)。然后确认执行计划后,就准备开始执行了。检查权限。如果没有权限,将返回一条错误消息。如果有权限,会调用数据库引擎接口,返回引擎的执行结果。2.2上面的update语句是一个查询sql的执行过程,所以让 让我们看看update语句是如何执行的。sql语句如下:update tb_student A set where。张三,让 s修改张三 年代。实际数据库中肯定不会设置年龄字段,否则由技术负责人键入。其实这个语句基本会遵循上一次查询的流程,但是在进行更新的时候必须记录日志,这就要引入日志模块。MySQL和的日志模块binlog(归档日志)可以被所有的存储引擎使用,我们常用的InnoDB引擎也自带了日志模块redo log(重做日志),所以我们将在InnoDB模式下讨论这条语句的执行过程。流程如下:首先查询张三的数据,如果有缓存,也会使用。然后获取查询语句,把年龄改成19,然后调用引擎的API接口写这一行数据。InnoDB引擎将数据保存在内存中,并记录重做日志。此时重做日志进入准备状态,然后告诉执行人执行完成,可以随时提交。收到通知后,执行器记录binlog,然后调用引擎接口,提交重做日志作为提交状态。更新完成。这里肯定有同学会问,为什么要用两个日志模块,而不是一个日志模块?这是因为MySQL没有 t一开始用InnoDB engine(InnoDB engine是其他公司作为插件插入MySQL的),MySQL 的引擎是MyISAM,但是我们知道重做日志是InnoDB引擎独有的,其他存储引擎都没有。这样一来,就不会有崩溃安全的能力(即使数据库非正常重启,之前提交的记录也不会丢失),binlog日志只能用于存档。It 不是那样的。;不可能只使用一个日志模块,但是InnoDB引擎支持通过重做日志处理事务。然后,有些同学会问,我用两个日志模块,但是可以 不会这么复杂吧?为什么重做日志引入了准备提交前状态?这里我们用归谬法来解释为什么要这样做。先写重做日志直接提交,再写binlog。假设写完重做日志后,机器挂起,binlog日志没有写,那么机器重启后,机器会通过重做日志恢复数据,但此时binlog没有记录数据,所以后面备份机器时会丢失,同时主从同步也会丢失这些数据。首先写binlog,然后重做log。假设binlog完成,机器异常重启。因为没有重做日志,所以无法还原计算机。这篇文章是有记录的,但是binlog有记录,所以和上面一样,数据会不一致。如果重做日志分两个阶段提交,会有所不同。编写binglog后,提交Redlog会防止上述问题,从而保证数据的一致性。那么问题来了。是否存在极端情况?假设重做日志处于提交前状态,binglog已经完成。如果此时出现异常重启会怎么样?这个要看MySQL的处理机制,MySQL的处理过程是这样的:判断重做日志是否完整,如果完整,立即提交。如果重做日志只是预提交,而不是提交状态,此时会判断binlog是否完整,如果完整就提交重做日志,如果不完整就回滚事务。这就解决了数据一致性的问题。第三,MySQL主要分为服务器层和引擎层。服务器层主要包括连接器、查询缓存、分析器、优化器和执行器,还有一个日志模块(binlog),所有执行引擎都可以共享,redolog只有InnoDB才有。引擎层是插件,主要包括MyISAM、InnoDB、Memory等等。查询语句的执行流程如下:权限检查(如果命中缓存)-查询缓存-分析器-优化器-权限检查-执行器。引擎更新语句的执行流程如下:分析器-权限检查-执行器。版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。