Você pode descobrir se está lá primeiro, por
SELECT
por url
, ou você pode fazer o url
campo exclusivo:CREATE TABLE IF NOT EXISTS kompas_url
...
url VARCHAR(1000) UNIQUE,
...
)
Isso impedirá o MySQL de inserir uma linha duplicada, mas também relatará um erro quando você tentar inserir. Isso não é bom - embora possamos lidar com o erro, ele pode disfarçar outros. Para contornar isso, usamos o
ON DUPLICATE KEY UPDATE
sintaxe:INSERT INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
ON DUPLICATE KEY UPDATE modified_date = NOW()
Isso nos permite fornecer um
UPDATE
no caso de um valor duplicado em um campo exclusivo (isso pode incluir sua chave primária). Nesse caso, provavelmente queremos atualizar o modified_date
campo com a data atual. EDITAR: Conforme sugerido por ~unutbu , se você não quiser alterar nada em uma duplicata, você pode usar o
INSERT IGNORE
sintaxe. Isso simplesmente funciona da seguinte forma:INSERT IGNORE INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
Isso simplesmente transforma certos tipos de erros em avisos - mais útil, o erro que informa que haverá uma entrada única duplicada. Se você colocar a palavra-chave
IGNORE
em sua declaração, você não receberá um erro - a consulta será simplesmente descartada. Em consultas complexas, isso também pode ocultar outros erros que podem ser úteis, portanto, é melhor certificar-se duplamente de que seu código está correto se você quiser usá-lo.