gpt4 book ai didi

mysql - 如果 MySQL 有自己的模块来完成这些任务,为什么 InnoDB 有自己的解析器和服务器连接模块?

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:55 24 4
gpt4 key购买 nike

据我了解,MySQL 从 SQL 查询创建执行计划,然后使用 innodb(或任何其他存储引擎)执行该计划。如果是这样,那为什么 innodb 存储引擎有自己的解析器、服务器主程序和用户 session 模块呢?看起来 InnoDB 可以作为一个功能齐全的 DBMS 独立运行。

最佳答案

InnoDB 于 1995 年作为一家独立公司成立。创始人希望创建一个独立的 RDBMS 服务器。

直到 2000 年,InnoDB 才开始与 MySQL 密切合作,到 2001 年 3 月,他们宣布了 InnoDB Table Handler,它允许 MySQL 将工作委托(delegate)给存储引擎。

但是 InnoDB 想要支持一些 MySQL 不支持的特性:

  • FOREIGN KEY 约束
  • 专有表选项
  • 交易

MySQL 希望 InnoDB 和其他存储引擎也能实现自己的功能。所以他们允许存储引擎层执行他们自己的 SQL 解析。有许多功能(如 CHECK 约束)由 MySQL 存储独立层验证语法,而无需实现语义。由存储引擎执行额外的解析并实现这些功能。

在某些情况下,InnoDB 存储引擎希望在更高级别实现没有 SQL 支持的功能。

例如,InnoDB 监视器,用于将定期故障排除数据输出到服务器的错误日志,可以不是通过 SET ENGINE INNODB MONITOR=ON 或类似的语法来启用,而是通过创建具有特殊名称的表:

CREATE TABLE innodb_monitor (a INT) ENGINE=INNODB;

无论您在哪个架构中创建此表,也无论您在其中放入什么列。它不需要任何数据行。该名称本身对 InnoDB 来说是特殊的,它是开始将监视器数据记录到日志中的信号。这样他们就不必实现新的配置选项或 SQL 语法!

在更高版本的 MySQL 中,您可以使用 SET GLOBAL innodb_status_output=ON 以一种不太复杂的方式启用监视器。

关于mysql - 如果 MySQL 有自己的模块来完成这些任务,为什么 InnoDB 有自己的解析器和服务器连接模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49122697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com