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.');
}