Cria arquivos SQL de migração padronizados. Use when: criar migration, criar SQL, alterar banco, nova tabela, nova coluna, alterar tabela, migration SQL, update SQL, arquivo SQL, database change. Naming: update_YYYYMMDDhhmm_<N>_descricao.sql com sequencial auto-detectado.
Skill para criar arquivos SQL de atualização do banco de dados seguindo o padrão de naming e sequenciamento do projeto Akti.
update_YYYYMMDDhhmm_<N>_descricao.sql
| Parte | Descrição | Exemplo |
|---|---|---|
update_ | Prefixo fixo obrigatório |
update_YYYYMMDDhhmm | Data e hora do momento da criação (sempre atual, nunca sugerida) | 202604011430 |
<N> | Sequencial numérico auto-detectado (ver regra abaixo) | 4 |
descricao | Snake_case descritivo, sem acentos | adicionar_coluna_status |
<N>O sequencial é um número inteiro que garante ordenação entre migrações. Para determiná-lo:
/sql/ e /sql/prontos/<N> de cada arquivo que siga o padrão update_*_<N>_*.sql<N> (legado, ex: update_202603301000_descricao.sql sem sequencial), ignorá-los no cálculo — não atribuir número a eles retroativamente<N> = maior <N> encontrado + 1<N>, iniciar em 0YYYYMMDDhhmm (ano 4 dígitos, mês 2, dia 2, hora 2, minuto 2, sem separadores)1. Listar arquivos em /sql/ e /sql/prontos/
2. Extrair <N> de nomes que sigam update_*_<N>_*.sql
(regex: update_\d{12}_(\d+)_.+\.sql)
3. Se encontrou algum N: próximo = max(N) + 1
4. Se não encontrou nenhum: próximo = 0
1. Obter data/hora atual (terminal: Get-Date -Format "yyyyMMddHHmm" ou date +%Y%m%d%H%M)
2. Montar: update_<datetime>_<N>_<descricao>.sql
3. Garantir que descricao está em snake_case, sem acentos, sem espaços
O arquivo SQL deve seguir estas regras:
-- Migration: <descrição legível>
-- Criado em: DD/MM/YYYY HH:MM
-- Sequencial: <N>
-- Usar IF NOT EXISTS / IF EXISTS para idempotência quando possível
-- Usar transações quando múltiplas operações dependem entre si
-- Exemplo CREATE TABLE:
CREATE TABLE IF NOT EXISTS `nome_tabela` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`tenant_id` INT NOT NULL,
-- ... colunas ...
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX `idx_tenant` (`tenant_id`),
CONSTRAINT `fk_tenant` FOREIGN KEY (`tenant_id`) REFERENCES `akti_master`.`tenant_clients`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Exemplo ALTER TABLE:
-- Verificar existência antes de adicionar coluna (MySQL 8+):
ALTER TABLE `nome_tabela` ADD COLUMN IF NOT EXISTS `nova_coluna` VARCHAR(100) DEFAULT NULL;
-- Para MySQL 5.7 (sem IF NOT EXISTS em ALTER), usar procedure:
-- SET @sql = (SELECT IF(
-- (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
-- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'nome_tabela' AND COLUMN_NAME = 'nova_coluna') = 0,
-- 'ALTER TABLE `nome_tabela` ADD COLUMN `nova_coluna` VARCHAR(100) DEFAULT NULL',
-- 'SELECT 1'
-- ));
-- PREPARE stmt FROM @sql;
-- EXECUTE stmt;
-- DEALLOCATE PREPARE stmt;
/sql/<nome_completo>.sql/sql/prontos/ — isso é feito manualmente após aplicar no DB de testeReportar:
/sql/prontos/ após validar"utf8mb4_unicode_ci como collation padrãoInnoDB como enginecreated_at e updated_at em tabelas novas/sql/ → Migrations pendentes (não aplicadas)
↓ (aplicar no DB de teste)
/sql/prontos/ → Aplicadas no teste, pendentes para produção
↓ (deploy em produção)
Deletar ou arquivar → Aplicadas em produção