Du kan antingen ta reda på om den finns där först, genom att SELECT
ing av url
, eller så kan du skapa url
fält unikt:
CREATE TABLE IF NOT EXISTS kompas_url
...
url VARCHAR(1000) UNIQUE,
...
)
Detta kommer att hindra MySQL från att infoga en dubblettrad, men det kommer också att rapportera ett fel när du försöker infoga. Det här är inte bra – även om vi kan hantera felet kan det dölja andra. För att komma runt detta använder vi ON DUPLICATE KEY UPDATE
syntax:
INSERT INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
ON DUPLICATE KEY UPDATE modified_date = NOW()
Detta gör att vi kan tillhandahålla en UPDATE
uttalande i fallet med ett dubblettvärde i ett unikt fält (detta kan inkludera din primärnyckel). I det här fallet vill vi förmodligen uppdatera modified_date
fält med aktuellt datum.
EDIT: Som föreslagits av ~unutbu
, om du inte vill ändra något på en dubblett kan du använda INSERT IGNORE
syntax. Detta fungerar helt enkelt enligt följande:
INSERT IGNORE INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
Detta förvandlar helt enkelt vissa typer av fel till varningar - det mest användbara är felet som säger att det kommer att finnas en dubblett av en unik post. Om du placerar nyckelordet IGNORE
i ditt uttalande kommer du inte att få ett felmeddelande – frågan kommer helt enkelt att tas bort. I komplexa frågor kan detta även dölja andra fel som dock kan vara användbara, så det är bäst att dubbelt se till att din kod är korrekt om du vill använda den.