Implementação e Gerenciamento de Constraints no MySQL

1. Chave Primária (PRIMARY KEY)

A chave primária é fundamental para a integridade dos dados, garantindo que cada registro em uma tabela seja único. Uma tabela aceita apenas uma chave primária, que por definição não permite valores nulos (NOT NULL) e proíbe duplicidade.

1.1 Definição de Chaves Primárias

Existem três formas principais de definir uma chave primária no MySQL:

A. Diretamente no campo:

CREATE TABLE colaboradores (
    id_colaborador INT PRIMARY KEY AUTO_INCREMENT,
    nome VARCHAR(100) NOT NULL,
    cargo VARCHAR(50)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

**B. Ao final da definição das colunas (Chave Composta):**Utilziada quando a unicidade depende da combinação de duas ou mais colunas.

CREATE TABLE itens_pedido (
    codigo_pedido INT,
    codigo_produto INT,
    quantidade INT DEFAULT 1,
    PRIMARY KEY (codigo_pedido, codigo_produto)
) ENGINE=InnoDB;

**C. Via alteração de tabela (ALTER TABLE):**Caso a tabela já exista e não possua uma chave primária definida.

-- Adicionando a restrição a uma coluna existente
ALTER TABLE produtos ADD PRIMARY KEY (sku_produto);

-- Modificando uma coluna para ser chave primária
ALTER TABLE clientes MODIFY id_cliente INT PRIMARY KEY;

1.2 Remoção de Chave Primária

Para remover uma chave primária, não é necesssário especificar o nome da coluna, pois existe apenas uma por tabela.

ALTER TABLE itens_pedido DROP PRIMARY KEY;

2. Atributo AUTO_INCREMENT

O AUTO_INCREMENT é utilizado frequentemente com chaves primárias numéricas para gerar sequências automáticas de identificação.

2.1 Regras de Utilização

  • Deve ser aplicado a uma coluna que possua um índice (geralmente PRIMARY KEY ou UNIQUE).
  • Apenas uma coluna por tabela pode ter este atributo.
  • O tipo de dado deve ser obrigatoriamente numérico (INT, BIGINT, etc).
CREATE TABLE categorias (
    id_categoria INT PRIMARY KEY AUTO_INCREMENT,
    descricao VARCHAR(50)
);

-- Inserindo dados para disparar o incremento
INSERT INTO categorias (descricao) VALUES ('Eletrônicos');
-- O sistema gera automaticamente o valor para id_categoria

2.2 Manipulação do Valor de Incremento

É possível redefinir o próximo valor a ser utilizado pelo motor do banco de dados:

-- Define que o próximo ID será 1000
ALTER TABLE categorias AUTO_INCREMENT = 1000;

3. Restrição de Unicidade (UNIQUE)

Diferente da chave primária, a constraint UNIQUE permite valores nulos (NULL) e uma tabela pode conter múltiplas colunas com essa restrição.

3.1 Criando Índices Únicos

-- Na criação da tabela
CREATE TABLE contas_usuario (
    id_usuario INT PRIMARY KEY,
    email VARCHAR(150) UNIQUE,
    cpf CHAR(11) NOT NULL,
    CONSTRAINT uc_cpf UNIQUE (cpf)
);

-- Em uma tabela existente
ALTER TABLE contas_usuario ADD UNIQUE (email);

3.2 Excluindo uma Constraint UNIQUE

No MySQL, a restrição UNIQUE é tratada como um índice. Para removê-la, utiliza-se o comando de remoção de índice:

ALTER TABLE contas_usuario DROP INDEX email;

4. Chave Estrangeira (FOREIGN KEY)

As chaves estrangeiras estabelecem o relacionamento entre tabelas, garantindo a integridade referencial. Elas impedem que um registro "filho" aponte para um "pai" inexistente.

4.1 Criando Relacionamentos

Para criar uma chave estrangeira, a coluna de referência na tabela pai deve ser preferencialmente uma chave primária.

-- Definindo durante a criação
CREATE TABLE vendas (
    id_venda INT PRIMARY KEY AUTO_INCREMENT,
    data_venda DATE,
    id_cliente INT,
    FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente)
);

-- Adicionando a uma tabela existente com nome personalizado
ALTER TABLE vendas 
ADD CONSTRAINT fk_venda_cliente 
FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente);

4.2 Removendo Chaves Estrangeiras

A remoção exige o nome específico da constraint definida no benco de dados.

ALTER TABLE vendas DROP FOREIGN KEY fk_venda_cliente;

Tags: MySQL sql-constraints database-design InnoDB relational-database

Publicado em 7-31 02:46