Puede averiguar si está allí primero, SELECT
ing por url
, o puede hacer que la url
campo único:
CREATE TABLE IF NOT EXISTS kompas_url
...
url VARCHAR(1000) UNIQUE,
...
)
Esto evitará que MySQL inserte una fila duplicada, pero también informará un error cuando intente insertar. Esto no es bueno, aunque podemos manejar el error, podría disfrazar a otros. Para solucionar esto, usamos ON DUPLICATE KEY UPDATE
sintaxis:
INSERT INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
ON DUPLICATE KEY UPDATE modified_date = NOW()
Esto nos permite proporcionar una UPDATE
declaración en el caso de un valor duplicado en un campo único (esto puede incluir su clave principal). En este caso, probablemente queramos actualizar la modified_date
campo con la fecha actual.
EDITAR: Según lo sugerido por ~unutbu
, si no desea cambiar nada en un duplicado, puede usar INSERT IGNORE
sintaxis. Esto simplemente funciona de la siguiente manera:
INSERT IGNORE INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
Esto simplemente convierte ciertos tipos de errores en advertencias; lo más útil es el error que indica que habrá una entrada única duplicada. Si coloca la palabra clave IGNORE
en su declaración, no obtendrá un error, la consulta simplemente se eliminará. Sin embargo, en consultas complejas, esto también puede ocultar otros errores que podrían ser útiles, por lo que es mejor asegurarse doblemente de que su código sea correcto si desea usarlo.