2010-04-30 7 views
7

Con Reemplazar en, si tengo dos campos. Nombre Apellido. La tabla tiene a John Smith, si tuviera que ejecutar REPLACE INTO tblNames (FirstName, LastName) VALUES (John, Jones) ¿Reemplazaría a Smith con Jones o crearía un nuevo nombre?Reemplazar SQL en la pregunta

¿Qué determina si se trata de una Actualización o y Insertar?

Respuesta

0

Depende de la clave principal y/o las restricciones únicas que se encuentren en la tabla. Si no hay una clave principal o restricciones únicas, no es diferente de una instrucción INSERT básica.

La documentación da una explicación bastante clara: http://dev.mysql.com/doc/refman/5.0/en/replace.html

0

Hay dos operadores diferentes para la inserción y actualización

update tblNames set FirstName="John", LastName="Smith" where FirstName="John" and LastName="Jones" 

esto va a cambiar el nombre de John Jones a John Smith

insert into tblNames (FirstName, LastName) values ("John", "Smith") 

esta voluntad agregue una nueva entrada (pero puede fallar si ya hay John Smith en la tabla y hay una restricción única en FirstName/LastName)

+0

Cuando estaba respondiendo no había ninguna etiqueta "mysql", por lo que mis ejemplos de código son estándar – UserControl

+0

¿Hay alguna forma de evitar el error en la inserción si el registro ya existe? – Matt

+0

Puede realizar 'seleccionar' para verificar si la entrada ya existe antes de actualizar o insertar. No estoy seguro acerca de MySQL, pero en SQL Server incluso puede evitar la selección. El escenario típico: Conjunto tblNames actualización ... donde key-condición si @@ recuento de filas = 0 - el número de filas afectadas por la última declaración (es decir, la actualización) inserción en tblNames .... lo siento, para la respuesta tardía, espero que esto ayude – UserControl

8
REPLACE 
INTO tblNames (FirstName, LastName) 
VALUES ('John', 'Jones') 

Si hay una restricción única de ningún tipo sobre FirstName, LastName o su combinación, y es violado, los registros se elimina y se inserta con los nuevos valores.

El registro será reemplazado si alguna de las condiciones se cumple:

  • FirstName es UNIQUE y hay una John en la tabla,
  • LastName es UNIQUE y hay una Jones en la tabla,
  • FirstName, Lastname es UNIQUE y hay John Jones en la tabla.

Tenga en cuenta que REPLACE operación es una INSERT posiblemente después de una DELETE que afectará siempre la mesa.

En las versiones más recientes de MySQL, debe usar INSERT … ON DUPLICATE KEY UPDATE.

+0

Así que si John Smith está en la mesa, y le envío a John Jones, qué comando sql debo usar para que Inserte a John Jones, pero si envío a John Smith, no hace nada. – Matt

+0

@Matt: publique la salida de 'SHOW CREATE TABLE tblNames' – Quassnoi

+0

No hay tabla todavía ..Esta es una planificación hipotética :) – Matt