Du kan enten finde ud af, om det er derinde først, ved at SELECT
ing af url
, eller du kan lave url
felt unikt:
CREATE TABLE IF NOT EXISTS kompas_url
...
url VARCHAR(1000) UNIQUE,
...
)
Dette vil forhindre MySQL i at indsætte en dublet række, men det vil også rapportere en fejl, når du prøver at indsætte. Dette er ikke godt – selvom vi kan håndtere fejlen, kan det skjule andre. For at omgå dette bruger vi ON DUPLICATE KEY UPDATE
syntaks:
INSERT INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
ON DUPLICATE KEY UPDATE modified_date = NOW()
Dette giver os mulighed for at give en UPDATE
sætning i tilfælde af en dubletværdi i et unikt felt (dette kan omfatte din primære nøgle). I dette tilfælde vil vi sandsynligvis opdatere modified_date
felt med den aktuelle dato.
EDIT: Som foreslået af ~unutbu
, hvis du ikke ønsker at ændre noget på en dublet, kan du bruge INSERT IGNORE
syntaks. Dette fungerer ganske enkelt som følger:
INSERT IGNORE INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
Dette gør ganske enkelt visse typer fejl til advarsler - mest nyttigt er fejlen, der angiver, at der vil være en dublet unik indtastning. Hvis du placerer søgeordet IGNORE
i din erklæring, vil du ikke få en fejl - forespørgslen vil simpelthen blive slettet. I komplekse forespørgsler kan dette også skjule andre fejl, som dog kan være nyttige, så det er bedst at sørge for, at din kode er korrekt, hvis du vil bruge den.