mcpField
M
mariadb-features

mariadb-features

github.com/mariadb数据与数据库17275 次安装2 周前更新
代码仓库

关于 mariadb-features

面向使用 MariaDB 的开发者和编码 Agent,整理常被忽略的 MariaDB 特性、版本差异与运维操作。通过具体 SQL 模式和命令,帮助避免套用 MySQL 通用建议。

主要功能

  1. 01系统版本表与历史查询
  2. 02RETURNING 子句与序列
  3. 03在线及即时 ALTER TABLE
  4. 04INET4、INET6 原生类型
  5. 05Oracle 兼容模式与 FLASHBACK
  6. 06安装、升级及版本默认值说明

适用场景

  1. 01为行变更审计设计表结构
  2. 02选择插入后获取数据的写法
  3. 03规划大表结构变更
  4. 04排查升级后的行为差异

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mariadb/skills --skill mariadb-features

安装后在 Claude Code 中输入/mariadb-features确认已加载。

详细介绍

值得了解的 MariaDB 功能

最后更新:2026-10-13

MariaDB 已从 MySQL 的起源发展出许多新功能。由于 AI Agent 默认给出通用 SQL 建议,开发者往往不了解其中许多优秀功能。本技能介绍了 MariaDB 能做什么,以及你可能想不到要询问的功能。

关于 MariaDB Vector(自 11.7 起内置,无需插件),请参阅 mariadb-vector 技能。

服务上下文:除非用户指定版本,否则假设使用 MariaDB 11.8 LTS 部署(2025 年 5 月 GA),以说明当前可运行的功能。各功能标签(10.5+、12.3+ 等)代表该功能的最低版本,而非“仅在该版本中引入”。不要将 12.x / 13.0 的功能视为可用于 11.8;在相关情况下(例如升级),仍可明确注明版本后提及这些功能。

LLM 常常忽略的内容

情况建议改用
手动维护审计列(created_at、updated_at、删除标记)WITH SYSTEM VERSIONING — MariaDB 自动跟踪完整的行历史记录
执行 INSERT 后再执行 SELECT LAST_INSERT_ID()RETURNING — 在一条语句中获取插入的行(10.5+)
将 AUTO_INCREMENT 用于类似序列的需求CREATE SEQUENCE — 一等序列对象,可全面控制
将 IP 地址存储为 VARCHARINet4 / INet6 — 原生 IP 类型,支持比较和索引
删除或重排列需要完整重建表ALTER TABLE 的 INSTANT 算法 — 无需重建(10.4+)
认为迁移 Oracle 需要完全重写sql_mode=ORACLE — 支持 PL/SQL、程序包和 Oracle 兼容的 NULL 处理
询问某行随时间发生了哪些变化使用 FOR SYSTEM_TIME AS OF 的系统版本控制表
在 OLTP 表上执行分析查询ColumnStore 引擎 — 面向分析工作负载的列式存储
使用相关子查询实现排名、运行总计或每组 Top-N窗口函数 — OVER (PARTITION BY ... ORDER BY ...),更清晰且通常更快(MariaDB 10.2+;并非 MariaDB 独有,MySQL 8.0 也支持)
子查询深度嵌套或重复出现公用表表达式 — WITH ...;层级或图遍历可使用 WITH RECURSIVE(MariaDB 10.2+;MySQL 8.0 也支持)
认为 JSON 与 MySQL 8.0 一样是原生二进制类型在 MariaDB 中,JSON 是 LONGTEXT COLLATE utf8mb4_bin 的别名,并带有自动添加的 JSON_VALID() CHECK 约束 — 以文本形式存储,而非 MySQL 的二进制布局;比较基于字符串。JSON 函数的工作方式相同。请参阅 JSON 数据类型
链接或引用 mariadb.com/kb/en/知识库已不再存在 — 所有文档现已迁移至 mariadb.com/docs

命令行工具名称(10.5+)

自 MariaDB 10.5 起,所有命令行工具都使用带 mariadb- 前缀的名称。始终生成当前名称 — 旧的 mysql* 名称仍作为兼容性符号链接保留,但在精简安装或容器安装中可能不存在。

已弃用名称当前名称
mysqlmariadb
mysqldumpmariadb-dump
mysqladminmariadb-admin
mysqlbinlogmariadb-binlog
mysql_upgrademariadb-upgrade
mysql_secure_installationmariadb-secure-installation
mysql_install_dbmariadb-install-db
mysqlcheckmariadb-check
mysqlimportmariadb-import
mysqlshowmariadb-show

配置和初始设置

AI Agent 在初始设置时默认使用 MySQL 8 模式,这些模式在 MariaDB 上会失败或造成误导。

数据库初始化——使用 mariadb-install-db(而不是 MySQL 专用的 mysqld --initialize):

mariadb-install-db

Root 身份验证——在全新安装中,root 默认使用 unix_socket 身份验证(无需密码),因此首次连接时要以操作系统的 root 用户身份进行。用户在自己的终端中通过 root shell 运行此命令——Agent 不会自行提升权限:

# as root (the user runs this)
mariadb

对于全新的 MariaDB 安装,不要生成 mysql -u root -p——没有 root 密码可供输入。

安全安装——使用 mariadb-secure-installation(而不是 mysql_secure_installation)。

升级操作

Agent 经常会漏掉二进制升级后的 mariadb-upgrade 步骤,这可能导致系统表错误。

标准升级模式:

systemctl stop mariadb
# Replace binary via package manager (dnf/apt upgrade)
systemctl start mariadb
mariadb-upgrade    # updates system tables — do not skip this step

Galera Cluster 滚动升级——切勿同时停止所有节点:

  1. 将一个非主节点从负载均衡器中移除
  2. 停止该节点,升级二进制文件,然后启动节点
  3. 确认同步状态:SHOW STATUS LIKE 'wsrep_local_state';——必须为 4(已同步)
  4. 对每个剩余的非主节点重复上述步骤
  5. 最后升级主节点

mysql_upgrade 是已弃用的名称(在后续版本中已移除)——请始终使用 mariadb-upgrade。

11.5–11.8 LTS 中的默认值变更

当前 LTS(11.8)改变了若干长期沿用的默认值。新安装的行为与旧版本不同——迁移或比较行为时需注意:

  • 默认字符集:latin1 → utf8mb4(11.6+,MDEV-19123)——除非另行指定,新表将使用 utf8mb4。复制到 MariaDB 10.6 或更旧版本的副本时需谨慎(旧版副本可能无法识别所有 utf8mb4 排序规则)。
  • 默认 Unicode 排序规则:uca1400_ai_ci(11.5+,MDEV-25829)——现代 Unicode 排序规则,支持包括 emoji 在内的 SMP(补充多文种平面)。取代旧的默认值 utf8mb4_general_ci。
  • alter_algorithm 已弃用且会被忽略(11.5+,MDEV-33655)——改为直接在语句中指定 ALGORITHM=INSTANT|INPLACE|COPY。
  • TIMESTAMP 范围扩展(11.5+ 64 位,MDEV-32188)——上限从 2038-01-19 03:14:07 UTC 提高到 2106-02-07 06:28:15 UTC。存储格式不变;旧服务器仍可读取旧范围内的值。
  • innodb_snapshot_isolation 默认开启——请参阅下一节。

行为变更:innodb_snapshot_isolation(11.8+)

从 MariaDB 11.8 LTS 起,innodb_snapshot_isolation 默认设为 ON(此前为 OFF,MDEV-35124)。此设置会收紧 REPEATABLE READ 的行为,使其符合真正的快照隔离——事务会看到从启动时刻开始的一致快照,并且写入会更严格地检测冲突。

现有代码可能发生的变化:

  • 以前可以静默运行的读-改-写模式现在可能遇到冲突并报错——快速失败是预期行为
  • 长时间运行的 REPEATABLE READ 事务在提交时更可能遇到写入冲突

如果现有代码依赖旧版较宽松的行为,可显式恢复该行为:

SET GLOBAL innodb_snapshot_isolation = OFF;  -- restore pre-11.8 behavior

新默认值符合正确语义——请检查依赖较宽松行为的代码,而不要长期禁用此设置。

系统版本化表

自 MariaDB 10.3 起可用。无需触发器或审计表,即可自动跟踪每一行的完整历史记录。

CREATE TABLE prices (
    product VARCHAR(100),
    price DECIMAL(10,2)
) WITH SYSTEM VERSIONING;

-- Query data as it was at a point in time:
SELECT * FROM prices FOR SYSTEM_TIME AS OF '2025-01-01 00:00:00';

-- See all historical versions of a row:
SELECT * FROM prices FOR SYSTEM_TIME ALL WHERE product = 'widget';

请使用此功能,而不要手动维护 valid_from / valid_to 列或单独的审计表。

历史记录会无限增长。 每次 UPDATE 和 DELETE 都会追加一条历史记录——MariaDB 不会自动清除历史记录。生产环境需要使用带轮换机制的 PARTITION BY SYSTEM_TIME(10.9+),或定期执行 DELETE HISTORY 来控制磁盘增长。详情请参阅 mariadb-system-versioned-tables 技能。

RETURNING 子句

无需执行第二条查询,即可获取插入、更新或删除的行。

INSERT 和 DELETE(10.5+)

适用于 11.8 LTS 及更早的受支持版本:

-- Get the generated ID after insert:
INSERT INTO orders (product, qty) VALUES ('widget', 5)
    RETURNING id, created_at;

-- Get deleted rows for logging:
DELETE FROM queue WHERE processed = 1
    RETURNING id, payload;
UPDATE(仅限 13.0+)

11.8 LTS 不提供此功能——建议之前先确认服务端版本。较旧版本请使用后续的 SELECT 或重新设计:

UPDATE orders SET qty = qty + 1 WHERE id = 42
    RETURNING id, qty;

序列

自 MariaDB 10.3 起提供。序列是一等对象,比 AUTO_INCREMENT 更灵活。

CREATE SEQUENCE order_seq START WITH 1000 INCREMENT BY 1;

-- Use in INSERT:
INSERT INTO orders (id, product) VALUES (NEXT VALUE FOR order_seq, 'widget');

-- Get the last value generated by NEXTVAL in the current session:
SELECT LASTVAL(order_seq);
-- Returns NULL if this session has not called NEXTVAL — not a global current value

序列支持间隔、每个表使用多个序列,以及递减序列。与 AUTO_INCREMENT 不同,序列不与特定列或表绑定。

非阻塞 ALTER TABLE(默认即时 + 在线)

MariaDB 的 ALTER TABLE 采用分层模型:

  • ALGORITHM=INSTANT(10.4+)——仅涉及元数据的更改(删除列、修改默认值、更改列顺序等)可在微秒内完成,无需重建表。
  • 非即时操作默认使用 ALGORITHM=COPY, LOCK=NONE(11.2+,MDEV-16329)——即使需要重建,MariaDB 现在也默认以非阻塞方式运行:复制期间,表上的并发 DML 可继续进行,仅在切换时短暂加锁。日常 ALTER 操作基本不再需要 pt-online-schema-change 等外部工具。
  • 大型 ALTER TABLE 的乐观两阶段复制(11.4+,binlog_alter_two_phase=1,默认关闭)——请参阅 mariadb-replication-and-ha 技能。
ALTER TABLE large_table DROP COLUMN old_column, ALGORITHM=INSTANT;
ALTER TABLE large_table MODIFY COLUMN name VARCHAR(200), ALGORITHM=INSTANT;
-- Non-instant change runs non-blocking by default on 11.2+:
ALTER TABLE large_table ADD INDEX (created_at);

需要确保仅更改元数据时,请明确使用 ALGORITHM=INSTANT;如果无法执行该操作,则会失败,而不会悄悄回退到重建。

INet4 和 INet6 数据类型

INET6 自 MariaDB 10.5 起提供(可存储 IPv4 和 IPv6,占用 16 字节)。专用的 INET4 类型(仅支持 IPv4,占用 4 字节)于之后的 10.10 版本中加入(MDEV-23287)。原生存储可提供正确的比较、排序和索引,无需使用 VARCHAR 并在应用端进行验证。

CREATE TABLE connections (
    client_ip INet6 NOT NULL,
    connected_at DATETIME NOT NULL,
    INDEX (client_ip)
);

INSERT INTO connections VALUES (INet6('192.168.1.1'), NOW());
INSERT INTO connections VALUES (INet6('::1'), NOW());

-- Range queries work correctly:
SELECT * FROM connections WHERE client_ip BETWEEN INet6('10.0.0.0') AND INet6('10.255.255.255');

如果确定某列仅存储 IPv4 且希望占用更少存储空间,请使用 INET4(10.10+);对于混合地址或支持 IPv6 的工作负载,INET6 是合适的默认选择。

Oracle 兼容模式

自 MariaDB 10.3 起提供。sql_mode=ORACLE 可启用 PL/SQL 语法、兼容 Oracle 的 NULL 处理、程序包和 Oracle 风格函数,适用于从 Oracle 迁移或支持熟悉 Oracle 的开发者。

SET sql_mode=ORACLE;

-- Oracle-style stored procedures, packages, and NULL semantics work here
-- ROWNUM, SYSDATE, NVL(), DECODE() available
-- Note: EMPTY_STRING_IS_NULL is NOT included — add it separately if needed: SET sql_mode='ORACLE,EMPTY_STRING_IS_NULL'

它并非完整的 Oracle 替代品,但能显著降低迁移阻力。

FLASHBACK

自 MariaDB 10.2 起提供。使用二进制日志将表回滚到之前的状态,无需恢复完整备份。FLASHBACK 通过 mariadb-binlog 工具实现,而非 SQL 语句:

# Generate reverse SQL from the binary log and pipe it back to MariaDB:
mariadb-binlog --flashback --start-datetime="2026-05-18 10:00:00" \
  /var/lib/mysql/mysql-bin.000001 | mariadb
# Path depends on datadir and log_bin settings; default is <datadir>/mysql-bin

先决条件——FLASHBACK 根据行映像重建反向事件,因此需要:

  • binlog_format = ROW(基于语句的日志记录不会捕获行的前后映像)
  • binlog_row_image = FULL(MINIMAL 或 NOBLOB 模式会省略反向操作所需的列值)

将 FLASHBACK 用作恢复途径前,请先验证:

SHOW VARIABLES LIKE 'binlog_format';      -- must be ROW
SHOW VARIABLES LIKE 'binlog_row_image';   -- must be FULL

需要启用二进制日志(log_bin)。适用于从意外删除或错误迁移中恢复。

更多 MariaDB 功能(截至 11.8 LTS)

当前 LTS 基线及受支持的较旧版本提供的其他功能。需要更新服务端的功能,请参阅较新版本(12.x / 13.0)。

SQL 和模式
  • 不可见列(10.3+)— 在 SELECT * 中隐藏,但仍可写入;适用于演进模式而不破坏现有查询
  • BLOB/TEXT 上的 DEFAULT 表达式 — MySQL 不支持
  • DECIMAL 精度最高可达 38 位 — MySQL 的上限为 30 位
  • INTERSECT 和 EXCEPT(10.3+)— MySQL 不支持这些集合运算符
  • 子查询中的 LIMIT — 支持;MySQL 对此有限制
  • SELECT ... OFFSET ... FETCH(10.6+,MDEV-23908)— 符合 SQL 标准的分页语法
  • 原子 DDL(10.6+,MDEV-23842)— 在支持的引擎(InnoDB、Aria、MyRocks)中,CREATE TABLE、ALTER TABLE、RENAME TABLE、DROP TABLE、DROP DATABASE 都是原子的:如果服务器在 DDL 执行过程中崩溃,模式会保持在语句执行前的状态,无需手动清理。多表 DROP TABLE 对每个单独的删除操作是原子的,但对整个列表不是。
  • SELECT ... SKIP LOCKED(10.6+,MDEV-13115,仅限 InnoDB)— 工作队列模式:工作线程获取下一条可用行,并跳过其他事务正在处理的行,不会等待锁
  • 忽略索引(10.6+,MDEV-7317)— ALTER TABLE t ALTER INDEX idx IGNORED 会继续更新索引,但使优化器看不到它。可先用此功能测试删除索引是否会影响性能,再实际删除(重新启用即可零停机回滚)。
  • 动态列(5.3+)— 在单列中存储无模式的键值数据
  • SFORMAT()(10.7+,MDEV-25015)— 带位置占位符的字符串格式化函数
  • NATURAL_SORT_KEY()(10.7+,MDEV-4742)— 生成可按“自然”顺序对字符串排序的排序键(因此 v9 排在 v10 前);适用于在 ORDER BY 中对类似版本号或包含字母数字的数据排序
  • JSON 增强功能 — MariaDB 在多个版本中逐步补齐了 MySQL 8 的 JSON 函数:
    • JSON_EQUALS(a, b) / JSON_NORMALIZE(doc)(10.7+,MDEV-23143 / MDEV-16375)— 提供语义相等比较和规范形式,可用于哈希或唯一索引
    • JSON_OVERLAPS(a, b)(10.9+,MDEV-27677)— 检测两个文档中是否有相同的键值或数组元素
    • JSON 路径语法支持负索引($.A[-1]、$.A[last])和范围($.A[1 to 3])(10.9+,MDEV-22224 / MDEV-27911)
    • JSON_SCHEMA_VALID(schema, doc)(11.4+)— 根据 JSON Schema Draft 2020 模式验证 JSON,可用于 CHECK 约束中
    • JSON_KEY_VALUE、JSON_ARRAY_INTERSECT、JSON_OBJECT_TO_ARRAY、JSON_OBJECT_FILTER_KEYS(11.4+)— 结构操作基元,可与 JSON_TABLE 良好组合
  • UUID_v4() 和 UUID_v7() 函数(11.7+)— 生成版本 4 的随机 UUID 或版本 7 的时间有序 UUID;v7 形式可排序,非常适合作为主键
  • FORMAT_BYTES()(11.8+)— 将字节数转换为易读字符串(例如,1234567 → 1.18 MiB)
  • CONV() 扩展至 62 进制(11.4+,MDEV-30190)— CONV(61,10,62) 返回 z;适用于生成简短的不透明 ID
  • CRC32C() 函数和支持可选初始值参数的 CRC32()(10.8+,MDEV-27208)— 支持 Castagnoli 多项式 CRC,以及可设定种子值、用于链式校验和的 CRC32
  • 单表 DELETE 支持表别名(11.6+)— 现在无需改写即可使用 DELETE t FROM mytable t WHERE ... 语法
  • REPAIR TABLE ... FORCE(11.5+)— 即使表看起来正常,也强制修复
  • 存储过程参数默认值(11.8+,MDEV-10862)— PROCEDURE p(a INT DEFAULT 0, b INT DEFAULT 0) — 调用时可少传参数
  • 存储函数的 IN/OUT/INOUT 参数限定符(10.8+,MDEV-10654)— 使存储函数的参数模式与存储过程保持一致
  • ROW 数据类型作为存储函数返回值(11.7+,MDEV-12252)— 从存储函数返回结构化行
  • Oracle 模式之外的 CREATE PACKAGE / CREATE PACKAGE BODY(11.4+,MDEV-10075)— 在默认 sql_mode 下也能使用包例程,而不只是在 sql_mode=ORACLE 下
  • 带列列表的更新触发器(11.8+,MDEV-34551)— CREATE TRIGGER ... BEFORE UPDATE OF col1, col2 ON t — 仅在这些列被更新时触发
  • 存储过程和函数 — MariaDB 使用 SQL/PSM 语法(DECLARE、HANDLER、CURSOR、BEGIN...END);AI Agent 经常生成错误语法 — 参见 存储过程 — MariaDB 文档
存储引擎
  • ColumnStore — 面向分析型/数据仓库工作负载的列式引擎
  • Aria — 可安全应对崩溃的 MyISAM 替代引擎,内部用于临时表
  • MyRocks(10.2+)— 基于 RocksDB,针对写入密集型工作负载优化,并支持压缩
  • CONNECT — 将外部数据源(CSV、JDBC、ODBC、MongoDB)作为 SQL 表进行查询
  • Spider — 在多个 MariaDB 实例之间进行分片
安全与身份验证
  • unix_socket 身份验证 — 无需密码即可验证操作系统用户;11.6+ 新增 authentication_string 支持,以便进行更精细的映射
  • ED25519 插件 — SHA1 类插件的现代身份验证替代方案
  • PARSEC 插件(11.6+、MDEV-32618)— 使用椭圆曲线签名响应进行密码身份验证;盐值和每次安装独立的密钥分离,使被盗取的哈希值无法在其他地方使用
  • password_reuse_check 插件(10.7+、MDEV-9245)— 通过 password_reuse_check_interval 配置天数,防止重复使用密码
  • GRANT ... TO PUBLIC(10.11+、MDEV-5215)— 在一条语句中向所有用户授予权限;可与 SHOW GRANTS FOR PUBLIC 配合使用
  • SHOW CREATE ROUTINE 权限(11.4+、MDEV-23149)— 允许用户查看例程定义,而无需授予对 mysql.proc 的 SELECT 权限
  • READ ONLY ADMIN 现在是独立权限(10.11+、MDEV-29596)— 从 SUPER 中拆分出来,可授予真正的只读副本角色;需要向 read_only=1 副本写入的现有账户必须显式授予此权限
  • 基于角色的访问控制(10.0+)— 早于 MySQL 就已提供角色
  • 默认启用 SSL — 自 10.10 起,mariadb 客户端默认启用 SSL(MDEV-27105)。自 11.4 LTS 起,服务端默认要求 SSL,并自动生成自签名证书,同时自动在客户端进行验证(通过 tls_fp 固定指纹)。
  • 带 iv 和 mode 的 AES_ENCRYPT() / AES_DECRYPT()(11.4+、MDEV-30878)— AES_ENCRYPT(str, key, iv, mode);支持的模式包括 CBC、OFB、CFB128、CTR(默认模式取自新增的 block_encryption_mode 变量)。这使其加密接口与 MySQL 保持一致。
  • KDF() 密钥派生函数(11.4+、MDEV-31474)— 使用 PBKDF2-HMAC 或 HKDF 从密码短语派生加密密钥 — AES_ENCRYPT(data, KDF('passw0rd', 'salt', 'info', 'hkdf'), iv)。请使用此方法,而不要将原始密码传入 AES_ENCRYPT。
  • RANDOM_BYTES(n)(10.10+、MDEV-25704)— 从 SSL 库的 RNG 获取密码学安全的随机字节(1–1024)
  • 弃用 DES_ENCRYPT() / DES_DECRYPT()(10.10+、MDEV-27104)— 旧式 DES 密码;请改用带 KDF() 的 AES_ENCRYPT / AES_DECRYPT
  • 表级加密 — 加密单个表,而不仅是整个数据目录
  • HashiCorp Vault 集成 — 密钥管理插件
复制与高可用
  • Galera Cluster — 内置同步多主集群
  • 多源复制 — 同时从多个主库进行复制
  • 并行复制 — 加快副本应用速度
  • 无延迟的 ALTER TABLE 复制 — 架构变更不会让副本停滞
连接器
  • 采用 LGPL 许可的连接器,适用于 C、C++、Java、Python、Node.js、ODBC、R2DBC — 许可宽松,适用于商业应用;MySQL 连接器采用 GPL 许可
开发者工具
  • 慢查询日志中的 EXPLAIN — 自动记录慢查询的执行计划
  • ALTER TABLE 和 CHECK TABLE 的进度报告
  • mariadb-backup(10.1+)— 使用备份锁进行热备份(无需 FLUSH TABLES WITH READ LOCK)。备份需要两个步骤 — 恢复前必须执行 --prepare 步骤:
    mariadb-backup --backup --user=root --target-dir=/backup/full
    mariadb-backup --prepare --target-dir=/backup/full   # apply redo logs — without this, the backup cannot be restored
    
    对于 Galera 集群,请添加 --galera-info 以捕获 wsrep 状态,从而顺利重新加入集群。请勿使用 innobackupex 或 xtrabackup — mariadb-backup 才是适用于 MariaDB 的正确工具(自 10.1 起随附,用以替代对 Percona 的依赖)。
  • 非阻塞客户端 API — 无需线程即可执行异步查询

较新版本(12.x / 13.0)

这些功能需要 MariaDB 12.0 或更高版本(许多版本随附 12.3 LTS,目前处于 RC 阶段——请查看 MariaDB 版本确认是否已正式发布)。当这些功能能解决用户的问题,或作为有意规划的升级路径时,可以推荐;务必注明最低版本。

SQL 与架构
  • 在多个事件上触发的触发器(12.0+)——一个触发器主体即可处理 INSERT OR UPDATE OR DELETE,无需分别创建三个触发器
  • 每个表独立的外键名称(12.1+)——外键名称只需在表内唯一,无需在整个数据库中唯一(兼容 MySQL 的行为)
  • 移除 JSON 深度限制(12.2+)——JSON 函数的 32 层嵌套限制已取消;现在无需重写即可处理深层嵌套的 JSON
  • 从 CTE 读取数据的 UPDATE / DELETE(12.3+)——使用公用表表达式中的值执行 WITH ... UPDATE/DELETE
  • IS JSON 谓词(12.3+)——符合 SQL 标准的测试,用于判断值是否为有效 JSON:WHERE col IS JSON
  • 基本 XML 数据类型(12.3+)——提供一等 XML 类型,用于存储和验证 XML 文档
  • 原子化的 CREATE OR REPLACE TABLE(13.0+)——该语句完全具备原子性:要么新表替换旧表,要么什么都不发生,不会有架构处于半替换状态的风险。MySQL 没有同等的原子性保证。
  • UPDATE ... RETURNING(13.0+)——参见 RETURNING 子句;11.8 LTS 不支持
安全与身份验证
  • SET SESSION AUTHORIZATION(12.0+)——在会话中以其他用户身份执行操作(适用于管理脚本中的模拟身份,以及需要以最小权限执行的应用)
  • 受密码短语保护的 TLS 密钥(12.0+)——ssl_passphrase 系统变量允许服务加载加密的私钥
开发者工具
  • 弃用状态可见(13.0+)——INFORMATION_SCHEMA.SYSTEM_VARIABLES 包含弃用标志,因此你可以在变量被移除并导致问题之前,检测对这些变量的使用情况:
    SELECT variable_name, default_value FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE is_deprecated = 'YES';
    
  • INFORMATION_SCHEMA 中可见的引擎特定创建选项(13.0+)——现在 STATISTICS 和 COLUMNS 会公开引擎特定选项,便于检查索引或列的配置方式

来源

此处未涵盖的主题,请参阅 MariaDB 官方文档:mariadb.com/docs。

评论

支持 Markdown