← Voltar para 1. Identificadores & Chaves
1. Identificadores & Chaves

BIGINT UNSIGNED AUTO_INCREMENT

Chave primária de 64 bits para tabelas massivas (padrão em frameworks modernos como Laravel).

💾 Espaço em Disco: 8 Bytes (64 bits) 📏 Limites: De 0 até 18.446.744.073.709.551.615 (Unsigned)

Ocupa o dobro do espaço de um INT (8 bytes em vez de 4), mas permite até 18 quintilhões de registros. Frameworks modernos como Laravel utilizam BIGINT UNSIGNED como padrão (`$table->id()`) para garantir que nenhuma tabela esgote seus IDs, mesmo em sistemas de grande escala.

✅ Quando Usar

  • •Tabelas que crescem rapidamente: pedidos, itens_pedido, logs_acesso, mensagens_chat, notificações, movimentações.
  • •Como padrão geral de chave primária caso queira total padronização no banco inteiro.

🚫 Quando NÃO Usar

  • •Tabelas auxiliares estáticas minúsculas (ex: estados_brasileiros com 27 linhas), onde `TINYINT` ou `INT` economiza memória em milhões de FKs.
  • •ATENÇÃO NO DRAWDB: Nunca crie uma FK `INT` apontando para uma PK `BIGINT`! O MySQL recusará criar a Foreign Key (Erro 150 / 3780).

📐 Configuração no DrawDB

Type:
BIGINT
Size / Values:
Vazio
Default:
Vazio
MySQL / MariaDB
BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY
PostgreSQL
BIGSERIAL PRIMARY KEY
SQLite
INTEGER PRIMARY KEY AUTOINCREMENT
🗄️ SQL DDL (Pronto para Importar no DrawDB)
CREATE TABLE usuarios (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(150) NOT NULL UNIQUE
);

CREATE TABLE logs_auditoria (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    usuario_id BIGINT UNSIGNED NOT NULL,
    acao VARCHAR(100) NOT NULL,
    criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_logs_usuario
        FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
        ON DELETE CASCADE
);
🐘 Exemplo Prático em PHP 8 + PDO
<?php
declare(strict_types=1);

// Em PHP de 64-bits (padrão atual), o tipo `int` suporta até 9 quintilhões (PHP_INT_MAX).
$usuarioId = 9876543210;

$stmt = $pdo->prepare('
    INSERT INTO logs_auditoria (usuario_id, acao)
    VALUES (:usuario_id, :acao)
');
$stmt->bindValue(':usuario_id', $usuarioId, PDO::PARAM_INT);
$stmt->bindValue(':acao', 'LOGIN_SUCESSO', PDO::PARAM_STR);
$stmt->execute();

$logId = (int) $pdo->lastInsertId();