sql >> Database >  >> RDS >> Mysql

Python mysql controleren op duplicaat voor invoegen

Je kunt er eerst achter komen of het erin zit, door SELECT via url , of u kunt de url uniek veld:

CREATE TABLE IF NOT EXISTS kompas_url
    ...
    url VARCHAR(1000) UNIQUE,
    ...
)

Dit voorkomt dat MySQL een dubbele rij invoegt, maar het rapporteert ook een fout wanneer u probeert in te voegen. Dit is niet goed - hoewel we de fout aankunnen, kan het anderen verhullen. Om dit te omzeilen, gebruiken we de ON DUPLICATE KEY UPDATE syntaxis:

INSERT INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
ON DUPLICATE KEY UPDATE modified_date = NOW()

Dit stelt ons in staat om een ​​UPDATE statement in het geval van een dubbele waarde in een uniek veld (dit kan uw primaire sleutel bevatten). In dit geval willen we waarschijnlijk de modified_date . bijwerken veld met de huidige datum.

BEWERKEN: Zoals voorgesteld door ~unutbu , als u niets wilt wijzigen aan een duplicaat, kunt u de INSERT IGNORE gebruiken syntaxis. Dit werkt eenvoudig als volgt:

INSERT IGNORE INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())

Dit verandert eenvoudig bepaalde soorten fouten in waarschuwingen - het handigst is de fout die aangeeft dat er een dubbele unieke invoer zal zijn. Als u het trefwoord IGNORE . plaatst in uw verklaring, krijgt u geen foutmelding - de query wordt gewoon verwijderd. Bij complexe zoekopdrachten kan dit ook andere fouten verbergen die nuttig kunnen zijn, dus het is het beste om er dubbel zeker van te zijn dat uw code correct is als u deze wilt gebruiken.




  1. PESSIMESTIC LOCK werkt niet met Spring Data die toegang heeft tot MySQL

  2. Waarom zijn de mysql_-functies van PHP verouderd?

  3. TSQL CASE met if-vergelijking in SELECT-instructie

  4. Hoe de testdatabase van Django alleen in het geheugen uit te voeren?