关于 mariadb-features
面向使用 MariaDB 的开发者和编码 Agent,整理常被忽略的 MariaDB 特性、版本差异与运维操作。通过具体 SQL 模式和命令,帮助避免套用 MySQL 通用建议。
主要功能
- 01系统版本表与历史查询
- 02RETURNING 子句与序列
- 03在线及即时 ALTER TABLE
- 04INET4、INET6 原生类型
- 05Oracle 兼容模式与 FLASHBACK
- 06安装、升级及版本默认值说明
适用场景
- 01为行变更审计设计表结构
- 02选择插入后获取数据的写法
- 03规划大表结构变更
- 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 地址存储为 VARCHAR | INet4 / 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* 名称仍作为兼容性符号链接保留,但在精简安装或容器安装中可能不存在。
| 已弃用名称 | 当前名称 |
|---|---|
mysql | mariadb |
mysqldump | mariadb-dump |
mysqladmin | mariadb-admin |
mysqlbinlog | mariadb-binlog |
mysql_upgrade | mariadb-upgrade |
mysql_secure_installation | mariadb-secure-installation |
mysql_install_db | mariadb-install-db |
mysqlcheck | mariadb-check |
mysqlimport | mariadb-import |
mysqlshow | mariadb-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 滚动升级——切勿同时停止所有节点:
- 将一个非主节点从负载均衡器中移除
- 停止该节点,升级二进制文件,然后启动节点
- 确认同步状态:
SHOW STATUS LIKE 'wsrep_local_state';——必须为4(已同步) - 对每个剩余的非主节点重复上述步骤
- 最后升级主节点
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;适用于生成简短的不透明 IDCRC32C()函数和支持可选初始值参数的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步骤:
对于 Galera 集群,请添加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-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会公开引擎特定选项,便于检查索引或列的配置方式
来源
- Monty Widenius:庆祝 MariaDB 成立 15 周年
- MariaDB 与 MySQL 功能对比 — MariaDB 文档
- 系统版本控制表 — MariaDB 文档
- RETURNING — MariaDB 文档
- CREATE SEQUENCE — MariaDB 文档
- 即时 ALTER TABLE — MariaDB 文档
- INet6 数据类型 — MariaDB 文档
- Oracle 兼容性 — MariaDB 文档
- FLASHBACK — MariaDB 文档
此处未涵盖的主题,请参阅 MariaDB 官方文档:mariadb.com/docs。