首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL面试常问:一条语句提交后,数据库都做了什么?

先来看看一条读操作 SQL 的查询过程: 连接器 客户端在提交 SQL 语句之前,你需要先连接上数据库,也就是说要提供用户名密码登陆,这便是连接器发挥作用的时候。...Python 编程可以使用第三方库 DBUtils 来管理数据库连接池。 查询缓存 缓存可以快速返回命中的查询,在使用上的感受就是同一个 SQL,第二次查询时结果是立刻显示的。...为什么这里还要进行权限验证,因为除了sql 还可能有存储引擎,触发器等,在这些对象中,也可能需要调用其它表去获取数据,也需要权限验证,前面的阶段对于触发器,存储引擎这种对象的执行是做不到的。...写操作 首先,可以确定的说,查询语句的那一套流程,更新语句也是同样会走一遍。 与查询流程不一样的是,更新流程还涉及两个重要的日志模块,它们正是redo log(重做日志)和 binlog(归档日志)。...MySQL 如何回滚与恢复数据的?

93420

MySQL中一条更新的SQL如何执行

MySQL 之 -- 一条更新的 SQL 如何执行,一条更新的 SQL 语句如何执行执行流程一条 SQL 的执行流程如图所示:(图片来源于网络) 如图所示:MySQL 数据库主要分为两个层级:服务层和存储引擎层服务层...:server 层包括连接器、查询缓存、分析器、优化器、执行器,包括大多数 MySQL 中的核心功能所有跨存储引擎的功能也在这一层实现,包括存储过程、触发器、视图等。...执行流程 一条 SQL 的执行流程如图所示:(图片来源于网络) 如图所示: MySQL 数据库主要分为两个层级:服务层和存储引擎层 服务层:server 层包括连接器、查询缓存、分析器、优化器、执行器...其中 prepare 和 commit 两个阶段就是 两步提交 若在 prepare 后写入 binlog 阶段出问题,现在这条数据是 prepare 状态,然后我们恢复数据库的时候这条数据的更新操作就会回滚...,不产生变更,若在 commit 出了问题,也会进行回滚,这样可以保证数据的一致性。

1.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL中一条更新的SQL如何执行

    MySQL 之 -- 一条更新的 SQL 如何执行,一条更新的 SQL 语句如何执行执行流程一条 SQL 的执行流程如图所示:(图片来源于网络) 如图所示:MySQL 数据库主要分为两个层级:服务层和存储引擎层服务层...:server 层包括连接器、查询缓存、分析器、优化器、执行器,包括大多数 MySQL 中的核心功能所有跨存储引擎的功能也在这一层实现,包括存储过程、触发器、视图等。...执行流程 一条 SQL 的执行流程如图所示:(图片来源于网络) 如图所示: MySQL 数据库主要分为两个层级:服务层和存储引擎层 服务层:server 层包括连接器、查询缓存、分析器、优化器、执行器...其中 prepare 和 commit 两个阶段就是 两步提交 若在 prepare 后写入 binlog 阶段出问题,现在这条数据是 prepare 状态,然后我们恢复数据库的时候这条数据的更新操作就会回滚...,不产生变更,若在 commit 出了问题,也会进行回滚,这样可以保证数据的一致性。

    93010

    MySQL笔记-基本架构

    Server 层 主要有连接器(Connector)、查询缓存(Cache)、分析器(Parser)、优化器(Optimizer)和执行器(Executor)等,包括了 MySQL 的大部分核心功能以及所有内置函数...值得一提的是,MySQL 8.0 版本已删除了查询缓存功能,可见该功能比较鸡肋。 分析器 主要功能:对 SQL 语句进行词法分析和语法分析。 1....是因为有时候 SQL 语句要操作的表不只是 SQL 字面上的那些(例如触发器要在执行过程中才能确定),因此权限检查在这里进行。 存储引擎 以上述 SELECT 语句为例,执行步骤如下: 1....Support 表示该引擎是否可用(DEFAULT 表示默认值);Comment 是描述信息;Transactions 表示是否支持事务;XA 表示是否支持分布式事务;Savepoints 表示是否支持回滚...Server 主要有连接器、查询缓存、分析器、优化器和执行器等,包括了 MySQL 的大部分核心功能以及所有内置函数,所有跨存储引擎的功能都在这一层实现,例如存储过程、触发器、视图等。

    52830

    Python操作SQLite数据库

    () conn.close() SQLite是内嵌在Python中的轻量级、基于磁盘文件袋额数据库管理系统,不需要安装和配置服务,支持使用SQL语句来访问数据库。...该数据库使用C语言开发,支持大多数SQL91标准,支持原子的、一致的、独立的和持久的事务,不支持外键限制;通过数据库级的独占性和共享性锁定来实现独立事务,当多个线程同时访问同一个数据库并试图写入数据时,...):创建一个 cursor; cursor.execute():执行一个 SQL 语句; connection.execute():通过调用光标(cursor)方法创建了一个中间的光标对象,然后通过给定的参数调用光标的...SQL 语句; connection.executescript():是一个由调用光标(cursor)方法创建的中间的光标对象的快捷方式,然后通过给定的参数调用光标的 executescript 方法...():该方法回滚自上一次调用 commit() 以来对数据库所做的更改; connection.close():该方法关闭数据库连接; cursor.fetchone():获取查询结果集中的下一行,返回一个单一的序列

    1.5K20

    一条SQL是怎么执行的

    (Lost connection to MySQL server during query) # 当连接成功后连接器会从权限表中查询当前连接用户所拥有的权限,如果在连接过程中被授予了新的权限并不会当即更新...# 因为MySQL在执行过程中临时使用的内存是管理在连接对象里面的,所以在有多个长连接线程时服务器的内存占用会很高,此时最好可以定时断开后重连缓存器 -> 用于缓存查询结果,下次执行SQL...(3):redo log是循环写的,空间固定会用完,用完就刷盘再清空undo log - 撤销日志bash 代码解读复制代码(1):undo log用于回滚事务,直接从undo log中取到原始值(2...,我们在来看MySQL写语句的执行顺序,与读语句相同的是写语句也会依次经过连接器、分析器、优化器、执行器,不同点在于执行器层,以一条update语句为例perl 代码解读复制代码(1):执行器首先会调用引擎在...log中写入更新前的旧值以便回滚数据 |(4):更新Buffer Pool中的值 |(5):将新的数据写入redo log Buffer

    6110

    mysql 知识总结

    查询缓存,有则返回,mysql 8.0版本后移除,因为有更新或条件不同则缓存失效作用不大。分析器,进行sql语法分析。优化器,选择最优方案,生成执行计划。执行器,根据执行计划,调用存储引擎接口执行。...死锁死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。日志慢查询日志记录执行时间超过阈值的 SQL 语句。...与Binlog差别:Binlog 是逻辑日志,效率低,理论上无限大.Redolog 是物理日志,效率高,循环写.回滚日志(Undolog)记录用于回滚的日志。对于插入,只记录主键,回滚时删除则可。...对于删除和修改,除了原记录外还记录用于 MVCC 的字段。事务在快照读时,会生成一个读视图,基于回滚日志生成。查询优化减少 select 中的字段数量,避免使用复杂查询。使用索引。...多主一从用于多源复制,即汇总多个不同库的数据到一个库中。垂直或水平分库之后,可能使用此模式。主从复制实现原理主库开启 binlog。从库两个线程,一个 IO 线程,一个 SQL 线程。

    16610

    SqlAlchemy 2.0 中文文档(八十)

    由于默认值通常被实现为嵌入在 INSERT 语句中的 SQL 表达式,或者是服务器端表达式,再次根据 INSERT 字符串的结构触发,这些默认值无法根据每个参数集有条件地触发,因此 Python 端默认值与...特别是Query和Session对象在 API 和行为上有一些明显的区别,这些区别从根本上改变了许多基本操作的方式,特别是构建高度定制的 ORM 查询和处理过时的会话状态、提交和回滚。...所有对象在每次commit()和每次rollback()后都会过期。回滚后,待定对象被清除,删除的对象移回持久状态。...特别是Query和Session对象在 API 和行为上有一些明显的差异,这些差异从根本上改变了许多基本操作的方式,特别是构建高度定制的 ORM 查询和处理过时的会话状态、提交和回滚。...在每个commit()和每个rollback()之后,所有对象都会过期。回滚后,待处理对象被清除,删除的对象移回持久状态。

    20310

    你可能不知道的mysql

    执行sql过程 客户端 -> 连接器 -> 分析器 -> 优化器 -> 执行器 -> 存储引擎 连接器:连接上数据库,长连接 分析器:分析语法(包含解析器和预处理器,解析器生成解析树,预处理器判断字段存在歧义...) 优化器:选择正确的索引进行优化执行 执行器:执行具体sql返回结果 mysql的两个重要日志 redo-log(重做日志):固定大小的循环缓存,InnoDB使用,即使重启,只要记录到了redo-log...undo-log(回滚日志):记录修改的状态和回滚信息,利用这个实现mvcc(多版本并发控制),系统会自动判断回滚日志什么时候会被删除。用于回滚操作。...覆盖索引:当我们查询的时候只需要查询出id字段的时候就可以直接使用单个索引来完成,不需要进行回表操作,减少搜索次数。...无法使用索引的情况 如果对字段做了函数计算,就用不上索引了 如果触发隐式转换也用不上索引了 字符集不同触发转换也无法使用索引 查看相关命令 show processlist命令查看Waiting for

    56610

    「春招系列」MySQL面试核心25问(附答案)

    > 连接器(验证用户身份,给予权限) -> 查询缓存(存在缓存则直接返回,不存在则执行后续操作)-> 分析器(对SQL进行词法分析和语法分析操作) -> 优化器(主要对执行的sql优化选择最优的执行方案方法...Truncate删除表中的所有数据,这个操作不能回滚,也不会触发这个表上的触发器,TRUNCATE比Delete更快,占用的空间更小。...Drop命令从数据库中删除表,所有的数据行,索引和权限也会被删除,所有的DML触发器也不会被触发,这个命令也不能回滚。...回滚段要足够大。要删除表用drop;若想保留表而将表中数据删除,如果与事务无关,用truncate即可实现。如果和事务有关,或老是想触发trigger,还是用delete。...回滚日志作用:1)能够在发生错误或者用户执行 ROLLBACK 时提供回滚相关的信息 2) 在整个系统发生崩溃、数据库进程直接被杀死后,当用户再次启动数据库进程时,还能够立刻通过查询回滚日志将之前未完成的事务进行回滚

    53330

    Python快速学习第九天--安装并操作Mysql数据库

    如果关闭了连接但还有未提交的事务,它们会隐式地回滚——但是只有在数据库支持回滚的时候才可以。所以如果不想完全依靠隐式回滚,就应该每次在关闭连接前进行提交。...Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。...(sql) # 向数据库提交 db.commit() except: # 发生错误时回滚 db.rollback() 对于支持事务的数据库, 在Python数据库编程中,当游标建立之时...commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。...错误处理 DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常: 异常 描述 Warning 当有严重警告时触发,例如插入数据是被截断等等。

    1.3K80

    《逆袭进大厂》第十一弹之MySQL25问25答

    SQL执行的全部过程 Server层按顺序执行sql的步骤为: 客户端请求-> 连接器(验证用户身份,给予权限) -> 查询缓存(存在缓存则直接返回,不存在则执行后续操作)-> 分析器(对SQL进行词法分析和语法分析操作...) 简单概括: 连接器:管理连接、权限验证; 查询缓存:命中缓存则直接返回结果; 分析器:对SQL进行词法分析、语法分析;(判断查询的SQL字段是否存在也是在这步) 优化器:执行计划生成、选择索引; 执行器...Truncate删除表中的所有数据,这个操作不能回滚,也不会触发这个表上的触发器,TRUNCATE比Delete更快,占用的空间更小。...Drop命令从数据库中删除表,所有的数据行,索引和权限也会被删除,所有的DML触发器也不会被触发,这个命令也不能回滚。...回滚日志作用:1)能够在发生错误或者用户执行 ROLLBACK 时提供回滚相关的信息 2) 在整个系统发生崩溃、数据库进程直接被杀死后,当用户再次启动数据库进程时,还能够立刻通过查询回滚日志将之前未完成的事务进行回滚

    48420

    【预备知识篇】Python3 MySQL 数据库连接

    (sql) # 执行sql语句 db.commit()except: # 发生错误时回滚 db.rollback() 以下代码使用变量向SQL语句中传递参数: ......user_id...Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。...sql) # 向数据库提交 db.commit() except: # 发生错误时回滚 db.rollback() 对于支持事务的数据库, 在Python数据库编程中,当游标建立之时...commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。...错误处理 DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常: 异常 描述 Warning 当有严重警告时触发,例如插入数据是被截断等等。

    76430

    python使用上下文管理器实现sqlite3事务机制

    2、sqlite3 sqlite3是一个嵌入式的文件数据库,无须开启额外的进程和端口,就可以通过文件读取的方式实现数据库的操作。优点是轻量级并且支持事务和触发器等高级特性。..., ('Tom',)) 可以看到通过with语句打开了数据库的句柄,执行数据库操作后,我们并没有管理句柄的释放和事务回滚。...代码的输出是: 1 (6, u'Tom', 10) 当打开raise Exception()的注释,表示在插入的过程中遇到了异常。这时候所有connection中未被提交的数据将被回滚。...那么,这些如何做到的呢? 上下文管理是通过类SqliteDB中的__enter__和__exit__两个魔法函数实现的。...2、逻辑上,enter函数之后,便开始执行with_body内的代码,with_body里的代码包含sql语句和一些业务逻辑,这里说明一下,只要是抛出异常就会触发事务的回滚机制,而不会区分到底是sql语句执行异常还是业务逻辑出现的异常

    2.8K120

    Python - sqlite3 轻量数据库使用

    , data) 查询数据 我们已经建好表,并且插入了三条数据,现在来查询特定条件下的数据: # 查询数学成绩大于90分的学生 sql_text_3 = "SELECT * FROM scores WHERE..., (who, age)) 4 connection.execute(sql [, optional parameters]) 该例程是上面执行的由光标(cursor)对象提供的方法的快捷方式,它通过调用光标...6 connection.executemany(sql[, parameters]) 该例程是一个由调用光标(cursor)方法创建的中间的光标对象的快捷方式,然后通过给定的参数调用光标的 executemany...8 connection.executescript(sql_script) 该例程是一个由调用光标(cursor)方法创建的中间的光标对象的快捷方式,然后通过给定的参数调用光标的 executescript...11 connection.rollback() 该方法回滚自上一次调用 commit() 以来对数据库所做的更改。 12 connection.close() 该方法关闭数据库连接。

    1.6K20

    C# 数据操作系列 - 17 Dapper ——号称可以与ADO.NET 同台飙车的ORM

    多数据查询 Dapper的查询相当简单: var result = connection.Query("select * from Persion"); 传入一个SQL语句,返回一个可枚举对象。...commandType = null); 我们就以最常用的三个为例,给大伙分析一下参数以及调用方式: cnn 一个数据库连接,所以Dapper不负责管理数据库连接,这部分由我们手动管理 sql 传入的...splitOn 默认情况下以Id 作为两个对象之间的区分 3....QueryMultiple 这个另外一种查询方式,对于SQL语句来说,没有明显的限制,所以我们有时候可以传入多个查询SQL语句进去,然后分别获取来自各个表的查询数据: string sql = "SELECT...不只是查询 Dapper当然不只有查询这一项功能,Dapper支持使用存储过程、insert、update、delete等其他的SQL语句进行操作数据库。

    2.1K40

    hhdb客户端介绍(41)

    以下是一些具有代表性的MySQL客户端代码片段示例,涵盖了连接数据库、执行查询以及处理结果的基本操作。...这些示例使用MySQL的官方连接器(如MySQL Connector/Python)来展示如何在Python中进行数据库操作。当然,你也可以选择其他编程语言和相应的MySQL连接器来实现类似的功能。...异常处理: 在生产环境中,应该更细致地处理异常,比如记录日志、回滚事务等。 资源管理: 确保在使用完数据库连接和游标后正确关闭它们,以避免资源泄漏。 SQL注入: 使用参数化查询来防止SQL注入攻击。...在上面的示例中,为了简洁起见,没有展示参数化查询的用法。参数化查询示例为了避免SQL注入,你应该使用参数化查询而不是直接拼接字符串来构建SQL语句。...中使用MySQL连接器来连接数据库、执行查询以及处理查询结果。

    5810
    领券