MariaDB: SEQUENCE, o gerador de números que o AUTO_INCREMENT não consegue ser
Sequences são objetos independentes que geram números: servem para várias tabelas, para números de protocolo e para migrar do Oracle ou PostgreSQL.

Pense na maquininha de senha do banco: ela não pertence a um guichê. Qualquer guichê chama o próximo número. O AUTO_INCREMENT é o oposto: cada tabela tem a sua senha, presa nela.
Este artigo faz parte da série MariaDB além do MySQL: dez recursos que existem no MariaDB e não existem no MySQL Community. Exemplos escritos para MariaDB 11.4 LTS (e 11.7+ quando indicado), comparados com MySQL 8.4 LTS.
O que é uma sequence?
Um objeto do banco, criado com CREATE SEQUENCE (MariaDB 10.3+), que entrega o próximo número quando alguém pede. Não está amarrado a uma coluna nem a uma tabela.
┌──────────────────┐
pedidos ────▶│ seq_protocolo │◀──── chamados
devolucoes ─▶│ próximo: 1047 │◀──── aplicação (antes do INSERT)
└──────────────────┘
Na prática
CREATE SEQUENCE seq_protocolo
START WITH 1000
INCREMENT BY 1
CACHE 50;
SELECT NEXTVAL(seq_protocolo); -- 1000
SELECT NEXT VALUE FOR seq_protocolo; -- 1001 (sintaxe do padrão SQL)
SELECT LASTVAL(seq_protocolo); -- 1001 (último desta sessão)
-- Como valor padrão de coluna
CREATE TABLE chamados (
protocolo BIGINT DEFAULT NEXTVAL(seq_protocolo) PRIMARY KEY,
assunto VARCHAR(200)
);
-- Ajustar depois de uma importação
SELECT SETVAL(seq_protocolo, 50000);
O que dá para fazer que o AUTO_INCREMENT não faz
- Um contador para várias tabelas (pedidos e devoluções com o mesmo protocolo sequencial).
- Saber o número antes do INSERT, útil para montar registros pai e filho na aplicação.
- Incrementos e ciclos:
INCREMENT BY 10,MAXVALUE,CYCLE. - Migração de Oracle e PostgreSQL, que usam sequences em todo lugar.
E no MySQL?
O MySQL 8.4 só tem AUTO_INCREMENT. A gambiarra clássica é uma tabela-contador com UPDATE ... SET id = LAST_INSERT_ID(id + 1), que funciona mas serializa todo mundo numa linha só.
Cuidados
- Sequence tem buracos. Rollback não devolve número, e o CACHE perde os números reservados se o servidor reiniciar. Se a lei exige numeração sem lacunas (nota fiscal, por exemplo), sequence não é a ferramenta.
- A sequence é, por baixo, uma tabela especial: aparece em
SHOW FULL TABLEScom o tipo SEQUENCE.
A série completa: MariaDB além do MySQL
- Tabelas temporais (System Versioning) para viajar no tempo dos dados
- Períodos de aplicação e WITHOUT OVERLAPS para reservas sem conflito
- SEQUENCE, o gerador de números que o AUTO_INCREMENT não consegue ser
- INSERT e DELETE ... RETURNING, uma ida ao banco em vez de duas
- Modo Oracle (SQL_MODE=ORACLE) para migrar PL/SQL com menos dor
- Multi-master síncrono que já vem na caixa
- Banco colunar para análise sem sair do SQL
- Sharding transparente com tabelas distribuídas
- Thread pool gratuito para milhares de conexões
- Busca vetorial com índice HNSW para IA e RAG
Ainda decidindo entre os dois? Leia MySQL ou MariaDB: qual é o melhor? e o guia definitivo de MySQL.
Quer dominar a base que os dois compartilham?
MariaDB nasceu do MySQL, e tudo o que é fundamento (modelagem, índices, transações, replicação, otimização) vale para os dois. É isso que eu ensino no livro Aprendendo MySQL: Prática, Teoria, Laboratórios, Desafios e Projetos: 292 páginas, 10 laboratórios guiados, 277 exercícios e 4 desafios com gabarito, e uma máquina virtual pronta para você quebrar (e consertar) à vontade.
Conheça o livro e leia a degustação gratuita.
Bora trocar ideia?
Se este artigo te ajudou (ou te fez discordar, que também vale), me siga no LinkedIn e no Instagram. Lá eu posto bastidores de banco de dados, história da computação e histórias de produção que ninguém conta em curso oficial.
Sobre o autor: Alexandre Almeida atua com bancos de dados há mais de 25 anos, foi instrutor oficial de MySQL e Oracle para mais de 1.000 alunos e escreveu Aprendendo MySQL: Prática, Teoria e Laboratórios.
Fontes: MariaDB Server Documentation (MariaDB Knowledge Base), notas de release do MariaDB Server, MySQL 8.4 Reference Manual. Imagem de capa: ilustração gerada por IA (mão puxando uma senha de uma maquininha de atendimento).