Declaração MySQL REPLACE – Inserir ou atualizar linhas em uma tabela

Declaração MySQL REPLACE

A declaração MySQL REPLACE permite inserir um novo registro em uma tabela do MySQL, caso o registro ainda não exista, ou atualizar um registro já existente. Funciona como se fosse uma declaração INSERT, mas sem apresentar erros se tentamos inserir um registro já inserido na tabela – em vez disso, valores das colunas podem ser alterados. Uma “combinação” de INSERT com UPDATE.

Para determinar se um registro (linha) já existe na tabela, são usados os valores de chave primária ou coluna com constraint UNIQUE na tabela. Se a tabela não possuir esses índices, a declaração REPLACE funciona como um INSERT simples.

Para usar o REPLACE em MySQL é necessário ter privilégios para executar as instruções INSERT e DELETE.

Como inserir uma nova linha com REPLACE no MySQL

Sintaxe:

REPLACE [INTO] nomeTabela(lista_colunas)
VALUES(lista_valores);

Como podemos ver, uma sintaxe bem parecida com a da declaração INSERT!

Vejamos um exemplo.

Exemplos

Vejamos como inserir e modificar registros em uma tabela no MySQL usando a declaração REPLACE.

Primeiramente, criamos uma nova tabela para testes:

# Tabela para testes da declaração REPLACE
CREATE TABLE paises (
  IdPais Tinyint AUTO_INCREMENT,
  nomePais VARCGAR(25) UNIQUE NOT NULL,
  nomeCapital VARCGAR(50) NOT NULL,
  CONSTRAINT pk_id_pais PRIMARY KEY(IdPais)
);

Populamos a tabela com alguns registros:

INSERT INTO paises(nomePais, nomeCapital)
VALUES
('Argentina','Buenos Aires'),('Brasil','Brasilia'),
('Equador','Quito'),('Namíbia','Windhoek'),
('Bélgica','Bruxelas'),('China','Pequim'),
('Espanha','Sevilha'),('Marrocos','Rabat');

Note que um dos registros tem um valor errado – a capital da Espanha é Madrid, e não Sevilha. Vamos consertar isso posteriormente.

Vamos visualizar a tabela com seu conteúdo:

SELECT * FROM paises;

Declaração REPLACE MySQL

As linhas foram inseridas com sucesso, mas um dos registros – Espanha – foi inserido com valor errado para sua capital, que é Madrid, e não Sevilha. Vamos inserir o registro novamente, como uma nova linha, usando uma declaração INSERT comum:

INSERT INTO paises(nomePais, nomeCapital)
VALUES ('Espanha','Madrid');

Erro REPLACE MySQL

Note que foi gerado um erro, pois o país Espanha já está cadastrado – e a coluna nomePais possui a restrição UNIQUE configurada, o que significa que não são aceitos valores repetidos nesta coluna.

Vamos usar agora a instrução REPLACE para trocar os dados do país incorreto:

REPLACE INTO paises(IdPais, nomePais, nomeCapital)
VALUES (7, 'Espanha', 'Madrid');

Note que fornecemos nesta declaração o ID do país (7), valor da chave primária do registro, para que o valor atual seja substituído, e não um novo registro criado.

Vamos visualizar a tabela modificada:

SELECT * FROM paises;

Atualizar dados com REPLACE no MySQL

Note que o nome da capital foi alterado, sem alterar o valor da chave primária – exatamente como uma declaração UPDATE faria.

Mas, o que acontece se eu não fornecer a chave primária ao executar um REPLACE? Vamos testar isso.

A capital da Namíbia é Windhoek, como está registrado na tabela. Mas existe um nome aportuguesado para esta cidade: Vinduque. Vamos tentar trocar o nome da capital da Namíbia usando REPLACE, mas agora sem fornecer o valor da chave primária (que é 4):

REPLACE INTO paises(nomePais, nomeCapital)
VALUES ('Namíbia', 'Vinduque');

Vejamos o que aconteceu:

SELECT * FROM paises;

Inserir registros com REPLACE em banco de dados MySQL

Neste caso, foi usado o valor padrão da coluna IdPais, pois não fornecemos um valor para a chave primária. E, no caso, trata-se de uma coluna de auto incremento, e assim valor padrão é um novo numero na sequência de valores – ou seja, uma nova chave primária (no caso, 10).

Não ocorreu um update da linha Namíbia, o que podemos ver claramente pois o Id do país (chave primária) mudou – isso indica que o registro atual foi excluído e um novo registro foi criado.

E se o registro não existisse previamente na tabela? O que ocorreria ao tentar usar o REPLACE?

Neste caso um novo registro é criado. Tente isso com exercício – use o REPLACE com os seguintes dados:

  • País: Angola
  • Capital: Luanda

Se quiser, poste o código usado e o resultado obtido nos comentários aqui abaixo – e quaisquer dúvidas que vocês tenham!

Até!

Sobre Fábio dos Reis (1376 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*