Casi
siempre al intentar ingresar registros duplicados, tenemos problemas con los
diferentes errores que nos arroja el sistema por razones obvias y nos detiene
todo el proceso de inserción de datos.
Para
prevenir esto podemos utilizar lo siguiente, de acuerdo a cada situación:
IGNORE: Ignora el registro a insertar si
ya existe.
INSERT IGNORE
INTO tabla
(id, valor, ...)
VALUES
(25, 'valor, ...)
REPLACE: "funciona exactamente como INSERT, excepto que si un valor de la tabla tiene el
mismo valor que un nuevo registro para un índice PRIMARY KEY o UNIQUE , el
antiguo registro se borra antes de insertar el nuevo.
Tenga en
cuenta que a menos que la tabla tenga un índice PRIMARY KEY, o UNIQUE usar un
comando REPLACE no tiene sentido. Es equivalente
a INSERT, ya que no hay índice para
determinar si un nuevo registro duplica otro".
Ejemplo:
REPLACE INTO
table_name(column_name1,column_name2,…)
VALUES(value1,value2,…)
En este
caso en la base de datos en la tabla offices este ejemplo insertará el registro
como nuevo:
REPLACE INTO offices(officecode,city)
VALUES(8,'San Jose')
Si
volvemos a utilizar replace, en la tabla offices como el ejemplo siguiente, San
José será reemplazado por San Mateo
REPLACE INTO offices(officecode,city)
VALUES(8,'San Mateo')
DUPLICATE
KEY UPDATE:
Actualiza la fila existente por la nueva a insertar, aunque tenga llaves.
Supongamos
que insertamos el siguiente dato:
INSERT
INTO
`library_lending`
(`user_name`,
`date`, `book_name`)
VALUES
('buddy', '2013-12-05', 'The-Hound-of-the-Baskervilles');
Ahora dos
dias despues intentamos:
INSERT
INTO
`library_lending`
(`user_name`,`date`,`book_name`)
VALUES
('buddy','2013-12-05','A-Study-in-Scarlet');
Y nos
aparece el error:
Error
Code: 1062. Duplicate entry 'buddy-2013-12-05' for key 'user_date'
Aqui en
esta ocación colocamos en acción el query:
INSERT
INTO
`library_lending`
(`user_name`,`date`,`book_name`)
VALUES
('buddy','2013-12-05','A-Study-in-Scarlet')
ON
DUPLICATE KEY UPDATE `book_name` = 'A-Study-in-Scarlet';
Ya solo
quedas que crees tu script en el lenguaje de tu preferencia para automatizar
los procesos.
Webs Consultadas:
http://www.mysqltutorial.org/mysql-replace.aspx
http://techdo.me/today-i-learned-insert-and-update-rows-with-mysql-on-duplicate-key-update/
https://dev.mysql.com/doc/refman/5.0/es/replace.html