sql >> Databasteknik >  >> RDS >> Mysql

Python mysql kontrollera efter dubblett innan du infogar

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.




  1. Hur man separerar text med hjälp av delsträng

  2. Konvertera SQL-dump till JSON?

  3. stöder rails postgres adapter ssl?

  4. INFOGA ... PÅ DUPLIKATNYCKELUPPDATERING med VAR?