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;