MariaDB 虽源自 MySQL 分叉(诞生于Oracle 收购 MySQL 之后),但历经一段时间发展,如今在开源数据库领域已获得引领性地位。在近几次主要版本更新中,这款数据库不仅增添了很多独特功能,提升了与 MySQL 的兼容性,还通过一系列重磅举措吸引 Oracle SQL 用户迁移至MariaDB。
以下是 MariaDB一些强大且实用的新功能梳理:
1、灵活的 Oracle 兼容性
自 10.3 版本起,MariaDB 持续增强 Oracle 兼容性功能,极大简化了从 Oracle 到 MariaDB 的迁移流程。
Oracle 兼容功能采用选择性激活机制。用户只需执行 SET SQL_MODE='ORACLE' 命令,即可在特定 SQL 语句组中启用该模式,同时现有 MariaDB 行为在可行情况下保持不变。
多数 Oracle 兼容特性聚焦于支持 Oracle SQL 语法,尤其是在与 ANSI SQL 或 MariaDB 存在差异之处。例如,Oracle SQL 允许直接使用存储过程名称调用,而无需 CALL 关键字。
从 MariaDB 12.0 开始,Oracle 兼容模式在底层行为方面也有重大改进。如今,单个触发器可针对多个 INSERT/UPDATE/DELETE 事件执行,这一特性在 Oracle SQL 中早已存在,但此前在 MariaDB 中手动实现极为困难。
此外,MariaDB 公司还提供迁移工具,可分析 Oracle SQL DDL 导出文件(仅含数据定义,不含实际数据),评估其在 MariaDB Oracle 兼容模式下的运行效果。
2、创新 AI 功能:MCP 服务器与向量类型
人工智能功能正逐渐融入各类数据驱动的软件产品,MariaDB 也不例外,且其 AI 功能极具实用性,并非营销噱头。
MariaDB 11.8 引入原生 VECTOR 数据类型,为在数据库中嵌入文本相似性信息提供新途径。借助这一功能,用户可将 MariaDB 作为构建自然语言查询、推荐系统、检索增强生成(RAG)解决方案以及通用机器学习任务的引擎。大量繁重工作可直接在数据库内完成,避免与外部应用程序频繁交互。
另一个重要 AI 更新使 MariaDB 成为现有 AI 代理的有力扩展。模型上下文协议(Model Context Protocol,MCP)为大型语言模型(LLMs)与外部工具(如网络搜索)通信提供通用方法。MariaDB 现提供自身 MCP 服务器组件,使 LLMs 能够轻松查询 MariaDB 实例。同时,用户还可利用 OpenAI、Gemini 或开放的 Huggingface 模型嵌入,对数据库中存储的文档执行语义搜索。
3、增强的 JSON 功能
NoSQL 数据库赋予开发者使用开放模式(以 JSON 文档定义)存储数据的自由。此后,传统 SQL 数据库纷纷添加原生 JSON 功能,在不摒弃传统 SQL 正式模式的前提下,为用户提供 NoSQL 灵活性。
MariaDB 设有专门列类型,可接受 JSON 格式文本,并支持通过约束自动验证。若希望 JSON 数据遵循严格数据类型,可为特定键添加约束(例如,确保 year 键始终为有效整数,可使用 JSON_VALID CHECK 约束)。
在 SELECT 查询中,用户可通过键从 JSON 列提取数据:
sqlSELECT id, name, JSON_QUERY(attr, '$.dates.release') AS release_year FROM movies;
还可按值过滤数据:
sqlSELECT id, name FROM movies WHERE JSON_VALUE(attr, '$.dates.release') = 1981;
为更高效操作 JSON,用户可创建映射到文档键的虚拟列,并基于这些虚拟列构建索引:
sqlALTER TABLE movies ADD COLUMNrelease_year SMALLINT AS (JSON_VALUE(attr, '$.dates.release'));CREATE INDEX releaseyears ON movies(release_year);
此外,用户无需提取 JSON 数据即可进行修改。JSON_INSERT、JSON_ARRAY_APPEND 和 JSON_REMOVE 等函数使用户能够比在 MariaDB 外部手动调整数据更快速、可靠地完成原地转换。
4、扩展优化器提示
经验丰富的数据库开发人员期望对查询执行方式进行精细控制。MariaDB 长期以来提供提示(或称“修饰符”),如 SELECT 语句中的 HIGH_PRIORITY 和 FORCE INDEX。
MariaDB 12.0 引入全新优化器提示,支持以行内注释格式(使用 /*+ 和 */ 作为分隔符)对特定表、索引以及全局应用提示。
扩展提示并非日常使用必备,它们用于强制启用或禁用通常可正常工作的行为,但在某些特定场景下,明确控制可带来更优效果。例如,INDEX_MERGE 提示可指示查询优化器在对多个列进行索引扫描时使用特定索引,且不使用其他索引。这有助于加速具有众多索引的表上的查询,或处理缺乏覆盖特定查询的复合索引的情况。不过,用户切勿仅凭理论判断优化效果,应始终使用 EXPLAIN 语句和查询优化来验证其实际加速作用。
其他新提示在故障排除和性能提升方面均具价值。例如,MAX_EXECUTION_TIME 提示可在指定毫秒数后中止特定查询,防止“病态”查询过度占用系统资源,也可作为调试运行时间过长查询的工具。
5、新增 XML 类型
MariaDB 12.3 引入全新的 XMLTYPE 列类型,虽目前功能有限,但为未来发展奠定基础。目前,该类型仅接受最大 4GB 的字符串,并允许使用 UPDATEXML 函数选择性替换 XML 内容。尽管尚未实现 XML 验证或模式强制执行功能,但这些功能将在后续版本中推出,使 XMLTYPE 在功能上更接近 Oracle 兼容标准,为未来功能扩展开辟道路。
6、更多差异性功能与兼容性考量
随着 MariaDB 不断发展并走出独特道路,它引入诸多 MySQL 中未有的功能,如动态或虚拟列。然而,反之亦然,部分 MySQL 功能在 MariaDB 中尚未出现。
例如,MySQL 资源组功能虽已提出,但实现仍需进一步努力。其他功能,如对 MySQL 用于 JSON 的“packed”(二进制)存储格式的支持,可能永远不会与 MariaDB 兼容。
由于 MariaDB 和 MySQL 在全局事务 ID 方法上存在差异且不兼容,用户可将 MariaDB 服务器作为 MySQL 服务器的副本,但反之则不可行。不过,这也意味着用户只需确保两个数据库版本兼容即可,利用复制功能可以实现从 MySQL 到 MariaDB 的迁移。