MariaDB 10.3 支持 Sequence 序列对象吗与 MySQL 8.0 自增列区别?

文章导读
MariaDB 从 10.3 版本(2018 年 5 月 12 日资料确认)起正式支持 Sequence 序列对象,而 MySQL 8.0(2018 年发布)仍依赖自增列,两者在重启后自增值持久性上存在关键差异——MySQL 5.7 重启后自增 ID 会回退,MySQL 8.0 则保持持久化。
📋 目录
  1. 原因分析
  2. 解决方案
  3. 注意事项
  4. 参考来源
A A

MariaDB 10.3 支持 Sequence 序列对象吗与 MySQL 8.0 自增列区别?

核心结论:MariaDB 从 10.3 版本(2018 年 5 月 12 日资料确认)起正式支持 Sequence 序列对象,而 MySQL 8.0(2018 年发布)仍依赖自增列,两者在重启后自增值持久性上存在关键差异——MySQL 5.7 重启后自增 ID 会回退,MySQL 8.0 则保持持久化。

原因分析

MariaDB 10.3 引入 Sequence 的主要目的是方便 Oracle 用户迁移。在 MariaDB 10.3 中,sequence 是特殊的表,和表使用相同的 namespace,因此表和序列的名字不能相同(CSDN 博客,2018 年 7 月 26 日)。这意味着如果已存在名为 seq1 的表,则无法创建同名序列。

MySQL 8.0 与早期版本的核心区别在于自增列持久性。经典测试场景:一张 InnoDB 表包含 ID 自增主键,插入 17 条记录后删除第 15~17 条记录,重启 mysqld 服务进程,再插入一条记录。在 MySQL 5.7 及更早版本中,该记录的 ID 是 15;在 MySQL 8.0 版本中,该记录的 ID 是 18(2025 年 1 月 23 日资料)。这是因为 MySQL 8.0 引入了持久性 auto_increment 机制,而 MariaDB 10.2 在 MySQL 8.0 GA 发行版之前就已经引入了此特性。

解决方案

1. MariaDB 10.3 创建和使用 Sequence

创建 sequence 的标准语法:

CREATE SEQUENCE seq1 START WITH 1 INCREMENT BY 1 cache 100;

默认使用 sequence 的命令:

select nextval(seq1);

如需开启与 Oracle 一致的 nextval 语法,可临时执行:

SET GLOBAL sql_mode = 'ORACLE';

永久生效需写入 my.cnf 文件。注意:创建 sequence 时 innodb_force_primary_key 开关需要关闭,有资料指出这可能是个 bug(2018 年 5 月 12 日资料)。

2. MySQL 8.0 自增列持久化配置

MySQL 8.0 默认已开启自增持久化,无需额外配置。如需验证,可执行以下测试:

CREATE TABLE test_auto (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50));
INSERT INTO test_auto VALUES (NULL, 'test1');
-- 记录当前 AUTO_INCREMENT 值,重启服务后继续插入验证

对于 MySQL 5.7 及更早版本,如需升级至 8.0 获得持久化特性,需注意身份验证插件变更:MySQL 8.0 开始将 caching_sha2_password 作为默认身份验证插件,可能影响应用程序 jdbc 驱动兼容性。最快解决方法:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

或在 my.cnf 中永久配置:

[mysqld]
default_authentication_plugin = mysql_native_password

MariaDB 10.4 身份验证插件仍为 mysql_native_password,没有发生改变(截至 2026 年 4 月 5 日资料)。

MariaDB 10.3 支持 Sequence 序列对象吗与 MySQL 8.0 自增列区别?

3. 存储引擎选择建议

MariaDB 10.1 版本使用 Percona XtraDB 代替 MySQL 的 InnoDB,XtraDB 是 InnoDB 存储引擎的增强版。但从 MariaDB 10.3.7 和更高的版本中,使用的是 InnoDB,它的实现与 MySQL 中的 InnoDB 有很大的不同(2025 年 1 月 23 日资料)。在这些版本中,InnoDB 不再与 MySQL 发行版本相关联。

注意事项

1. **命名冲突风险**:MariaDB 10.3 中 sequence 和表使用相同的 namespace,创建序列前需确认不存在同名表,否则会报错。

2. **innodb_force_primary_key 开关问题**:创建 sequence 时该开关需要关闭,有用户反馈这可能是个 bug,生产环境需提前测试(2018 年 5 月 12 日资料)。

3. **版本升级兼容性**:从 MySQL 5.7 升级至 8.0 时,默认身份验证插件从 mysql_native_password 变为 caching_sha2_password,可能导致旧版应用程序连接失败。建议升级前先测试应用兼容性。

4. **MySQL 社区版并发性能**:有专业用户指出,mysql 社区版的并发性和扩展性是较差的,如果生产系统用的是 mysql 社区版,应尽快切换为 percona server 或 mariadb(2024 年 1 月 3 日资料)。

5. **MariaDB 与 MySQL 功能差异**:虽然两者大多数功能兼容,但某些特性如 CHECK 约束,MySQL 8.0.16 版本前仅语法兼容无实际校验,而 PostgreSQL 原生完全遵循 ACID 原则(2026 年 4 月 26 日资料)。

参考来源

来源:CSDN 博客 - MariaDB 10.3 深入理解序列_查询 mariadb 的 sequence(2018 年 7 月 26 日)

来源:博客园 - MySQL 与 MariaDB 核心特性比较详细版 v1.0(2024 年 1 月 3 日/2021 年 7 月 20 日)

来源:技术文章 - MySQL 运维进阶指南(2025 年 1 月 23 日)

来源:技术对比文章 - MySQL 8.0 与 MariaDB 10.4 关键新特性对比(截至 2026 年 4 月 5 日)