Substituir Versus inserir em SQL

estou a fazer o seguinte tutorial SQL: http://sql.learncodethehardway.org/book/ex11.html

e neste exercício o autor diz no segundo parágrafo:

Nesta situação, quero substituir o meu disco por outro tipo, mas ... mantenha a identificação única. O problema é que teria de apagar/inserir numa transacção para torná-lo Atómico, ou teria de fazer uma actualização completa.

Alguém pode explicar-me qual é o problema de fazer um Actualizar, e Quando {[15] } podemos escolher substituir em vez de actualizar?

o código de actualização:

UPDATE person SET first_name = "Frank", last_name = "Smith", age = 100
    WHERE id = 0;

aqui está o código de substituição:

REPLACE INTO person (id, first_name, last_name, age)
    VALUES (0, 'Frank', 'Smith', 100);

editar: acho que outra pergunta que tenho é porque é que alguma vez faria uma remoção/inserção em vez de apenas uma actualização, como é discutido na secção citada?

Author: jcm, 2015-04-09

4 answers

De acordo com a documentação , a diferença é:

O REPLACE funciona exactamente como o INSERT, excepto que se uma linha antiga da tabela tiver o mesmo valor que uma nova linha para uma chave primária ou um índice único, a antiga linha é apagada antes de a nova linha ser inserida.

Então o que faz:

  • tente corresponder a linha usando um dos índices disponíveis;
  • Se a linha não existir já: adicione uma nova;
  • Se a linha existir já: apague a linha existente e adicione uma nova depois.

Quando é que usar isto se pode tornar útil em declarações separadas {[[0]} e update?

  • Você pode chamar isso com segurança, e você não tem que se preocupar com as linhas existentes (uma declaração vs. duas);
  • Se quiser que os dados relacionados sejam removidos quando inserting / updating, você pode usar replace: Ele apaga todos os dados relacionados também);
  • Quando os gatilhos precisam de disparar, e espera-se uma má razão., bem).
 13
Author: Patrick Hofman, 2015-04-09 13:42:19

O primeiro Substituto não é amplamente compreendido em todos os motores de base de dados.

A segunda substituição insere / actualiza um registo com base na chave primária. Embora com o update você possa especificar condições mais elaboradas:

UPDATE person SET first_name = 'old ' + first_name WHERE age > 50

A actualização também não cria registos.

 3
Author: FooLman, 2015-04-09 13:31:50

A actualização alterará o valor dos registos existentes na tabela com base em condições particulares. Então você pode mudar um ou muitos registros em uma única consulta.

Inserir ou substituir irá inserir um novo registo se os registos não estiverem presentes na tabela que será substituída. a substituição só funcionará se e apenas se indicar o valor principal da chave na consulta inserir ou substituir. Se você se esquecer de adicionar o valor do campo chave primário do que um novo registro será criado na tabela.

Exemplo de caso:-

Actualização: o cálculo dos salários deve ser feito com base numa fórmula que utilize os valores da coluna. Neste caso, você sempre vai usar a consulta de atualização como usando uma única consulta que você pode atualizar vários registros.

Inserir ou substituir: já mencionado na ligação que partilhou.

 1
Author: Rajen Raiyarela, 2015-04-09 13:46:01

UPDATE não terá efeito se a linha não existir.

Onde o INSERT ou {[2] } Irão inserir se a linha não existir ou substituir os valores se existir.

 0
Author: Stanislovas Kalašnikovas, 2015-04-09 13:35:44