INT UNSIGNED AUTO_INCREMENT
⭐ Essencial 💾 4 Bytes (32 bits)Chave primária numérica sequencial padrão (1, 2, 3...) ideal para a maioria das tabelas relacionais.
O tipo INT UNSIGNED AUTO_INCREMENT (ou SERIAL no PostgreSQL) gera automaticamente um número inteiro único e sequencial a cada novo registro inserido. Por ocupar apenas 4 bytes e ser inserido em ordem crescente, o índice B-Tree da chave primária permanece extremamente rápido e sem fragmentação em disco.
✅ Quando Usar (Casos Ideais)
- • Chave primária (id) de tabelas com até ~2 bilhões de registros (usuários, produtos, categorias, clientes).
- • Chaves estrangeiras (usuario_id, categoria_id) que apontam para tabelas com PK do tipo INT.
- • Sistemas internos onde o ID sequencial rápido melhora a performance de JOINs.
🚫 Quando NÃO Usar (Armadilhas)
- • Tabelas de altíssimo volume que podem ultrapassar 4 bilhões de linhas (logs, eventos de IoT, transações financeiras globais) — nesses casos, use BIGINT.
- • URLs públicas sensíveis onde você não quer que concorrentes descubram quantos clientes ou pedidos você tem (ex: /pedido/105 vs /pedido/106) — combine com um UUID público.
📐 Como Configurar no DrawDB Abrir DrawDB ↗
INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
SERIAL PRIMARY KEY (ou INT GENERATED ALWAYS AS IDENTITY)
INTEGER PRIMARY KEY AUTOINCREMENT
📋 Exemplos Reais de Colunas com INT:
CREATE TABLE categorias (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(80) NOT NULL
);
CREATE TABLE produtos (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
categoria_id INT UNSIGNED NOT NULL,
nome VARCHAR(120) NOT NULL,
CONSTRAINT fk_produtos_categoria
FOREIGN KEY (categoria_id) REFERENCES categorias(id)
ON DELETE RESTRICT ON UPDATE CASCADE
);
<?php
declare(strict_types=1);
// 1. Inserindo registro sem informar o ID (o banco gera via AUTO_INCREMENT)
$stmt = $pdo->prepare('INSERT INTO categorias (nome) VALUES (:nome)');
$stmt->bindValue(':nome', 'Eletrônicos', PDO::PARAM_STR);
$stmt->execute();
// 2. Recuperando o ID gerado pelo banco convertendo para int do PHP
$novoId = (int) $pdo->lastInsertId();
echo "Categoria criada com ID: {$novoId}\n";
// 3. Buscando por ID com validação e PDO::PARAM_INT
$idBusca = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if ($idBusca === false || $idBusca === null || $idBusca <= 0) {
throw new InvalidArgumentException('ID inválido.');
}
$stmt = $pdo->prepare('SELECT id, nome FROM categorias WHERE id = :id');
$stmt->bindValue(':id', $idBusca, PDO::PARAM_INT);
$stmt->execute();
$categoria = $stmt->fetch(PDO::FETCH_ASSOC);