Restrições em Tabelas MySQL

Em MySQL, os campos são configurados por padrão para aceitar valores nulos. Porém, em muitos cenários práticos, é necessário garantir que os campos não sejam nulos para manter a integridade dos dados.

-- Exemplo de tabela com campos não nulos
CREATE TABLE turma (
    nome_turma VARCHAR(20) NOT NULL,
    sala VARCHAR(20) NOT NULL
);

-- Tentativa de inserção falha devido à restrição NOT NULL
INSERT INTO turma(nome_turma) VALUES('Turma A');
-- Erro: O campo 'sala' não pode ser nulo

Valores Padrão (DEFAULT)

O MySQL permite definir valores padrão para campos que não recebem um valor explícito durante a inserção.

-- Tabela com valores padrão
CREATE TABLE pessoa (
    nome VARCHAR(20) NOT NULL,
    idade TINYINT UNSIGNED DEFAULT 0,
    genero CHAR(2) DEFAULT 'M'
);

-- Inserção utilizando valores padrão
INSERT INTO pessoa(nome) VALUES('João');
-- Resultado: João, 0, M

Comentários em Colunas (COMMENT)

É possível adicionar descrições às colunas para documentação, visíveis apenas nos metadados da tabela.

-- Tabela com comentários
CREATE TABLE funcionario (
    id INT PRIMARY KEY COMMENT 'Identificador único',
    nome VARCHAR(50) NOT NULL COMMENT 'Nome completo'
);

-- Visualizando os comentários
SHOW CREATE TABLE funcionario;

Preenchimento com Zeros (ZEROFILL)

Esta propriedade formata a exibição numérica, preanchendo com zeros à eqsuerda até atingir o comprimento especificado.

-- Tabela com ZEROFILL
CREATE TABLE produtos (
    codigo INT(5) UNSIGNED ZEROFILL,
    nome VARCHAR(30)
);

INSERT INTO produtos VALUES(12, 'Caneta');
-- Exibição: 00012, Caneta

Chave Primária (PRIMARY KEY)

A chave primária identifica unicamente cada regisrto em uma tabela. MySQL suporta chaves primárias simples e compostas.

-- Tabela com chave primária simples
CREATE TABLE cliente (
    id INT UNSIGNED PRIMARY KEY,
    nome VARCHAR(30) NOT NULL
);

-- Tabela com chave primária composta
CREATE TABLE matricula (
    aluno_id INT,
    disciplina_id INT,
    PRIMARY KEY(aluno_id, disciplina_id)
);

Auto Incremento (AUTO_INCREMENT)

Gera automaticamente valores sequenciais para a chave primária.

-- Tabela com auto incremento
CREATE TABLE pedido (
    id INT PRIMARY KEY AUTO_INCREMENT,
    descricao TEXT
);

-- Inserções com valores gerados automaticamente
INSERT INTO pedido(descricao) VALUES('Pedido 1');
INSERT INTO pedido(descricao) VALUES('Pedido 2');

Chave Única (UNIQUE)

Garante que os valores em uma coluna sejam distintos, permitindo valores nulos.

-- Tabela com chave única
CREATE TABLE usuario (
    email VARCHAR(50) UNIQUE,
    nome VARCHAR(30)
);

-- Inserções válidas e inválidas
INSERT INTO usuario VALUES('user@email.com', 'Ana'); -- OK
INSERT INTO usuario VALUES('user@email.com', 'Pedro'); -- Erro
INSERT INTO usuario VALUES(NULL, 'Carlos'); -- OK

Chave Estrangeira (FOREIGN KEY)

Estabelece relações entre tabelas, garantindo integridade referencial.

-- Tabela principal
CREATE TABLE departamento (
    id INT PRIMARY KEY,
    nome VARCHAR(30)
);

-- Tabela com chave estrangeira
CREATE TABLE funcionario (
    id INT PRIMARY KEY,
    nome VARCHAR(30),
    depto_id INT,
    FOREIGN KEY (depto_id) REFERENCES departamento(id)
);

-- Inserções válidas e inválidas
INSERT INTO departamento VALUES(1, 'TI');
INSERT INTO funcionario VALUES(100, 'Maria', 1); -- OK
INSERT INTO funcionario VALUES(101, 'José', 2); -- Erro (departamento inexistente)

Tags: MySQL Restrições banco-de-dados chave-primária chave-estrangeira

Publicado em 8-3 16:42