← Voltar para 2. Numéricos Inteiros
2. Numéricos Inteiros

INT / INTEGER (Com e Sem Sinal)

O tipo inteiro padrão de 4 Bytes para quantidades de estoque, contadores, pontos e durações em segundos.

💾 Espaço em Disco: 4 Bytes (32 bits) 📏 Limites: Signed: -2.147.483.648 a +2.147.483.647 | Unsigned: 0 a 4.294.967.295

Quando não usado como chave primária, o INT (ou INTEGER) é o cavalo de batalha para números inteiros do dia a dia. Se o valor nunca puder ser negativo (como visualizações de vídeo, tempo em segundos), marque como UNSIGNED no MySQL ou adicione uma restrição CHECK (valor >= 0). Se puder ficar negativo (como saldo de pontos de fidelidade ou ajuste de estoque), mantenha SIGNED.

✅ Quando Usar

  • •Quantidade de produtos em estoque (`estoque_atual INT NOT NULL DEFAULT 0`).
  • •Contador de acessos, curtidas, downloads ou duração de vídeo em segundos.
  • •Armazenar valores monetários em centavos caso a equipe adote o padrão Money Pattern (ex: R$ 19,90 = 1990 centavos).

🚫 Quando NÃO Usar

  • •NUNCA use INT para armazenar CPF, CNPJ, CEP ou Telefone! Números de documentos e telefones começam com zero (`01234567890`) e o INT apaga os zeros à esquerda, além de estourar o limite de 32 bits em CNPJs e telefones com DDI.

📐 Configuração no DrawDB

Type:
INT ou INTEGER
Size / Values:
Vazio
Default:
0
MySQL / MariaDB
INT (ou INT UNSIGNED)
PostgreSQL
INTEGER
SQLite
INTEGER
🗄️ SQL DDL (Pronto para Importar no DrawDB)
CREATE TABLE estoque_produtos (
    produto_id INT UNSIGNED PRIMARY KEY,
    quantidade_disponivel INT NOT NULL DEFAULT 0,
    quantidade_reservada INT UNSIGNED NOT NULL DEFAULT 0,
    atualizado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
🐘 Exemplo Prático em PHP 8 + PDO
<?php
declare(strict_types=1);

// Atualização atômica de estoque no banco via PDO
$produtoId = 10;
$qtdComprada = 3;

$stmt = $pdo->prepare('
    UPDATE estoque_produtos
    SET quantidade_disponivel = quantidade_disponivel - :qtd
    WHERE produto_id = :id AND quantidade_disponivel >= :qtd
');
$stmt->bindValue(':qtd', $qtdComprada, PDO::PARAM_INT);
$stmt->bindValue(':id', $produtoId, PDO::PARAM_INT);
$stmt->execute();

if ($stmt->rowCount() === 0) {
    throw new RuntimeException('Estoque insuficiente para concluir a reserva.');
}