Mysql
 sql >> Base de données >  >> RDS >> Mysql

Python mysql vérifie les doublons avant l'insertion

Vous pouvez soit savoir s'il s'y trouve d'abord, par SELECT par url , ou vous pouvez créer l'url champ unique :

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

Cela empêchera MySQL d'insérer une ligne en double, mais il signalera également une erreur lorsque vous essayez d'insérer. Ce n'est pas bon - bien que nous puissions gérer l'erreur, cela pourrait en masquer d'autres. Pour contourner ce problème, nous utilisons le ON DUPLICATE KEY UPDATE syntaxe :

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

Cela nous permet de fournir une UPDATE dans le cas d'une valeur en double dans un champ unique (cela peut inclure votre clé primaire). Dans ce cas, nous souhaitons probablement mettre à jour la modified_date champ avec la date actuelle.

MODIF : Comme suggéré par ~unutbu , si vous ne voulez rien changer sur un doublon, vous pouvez utiliser le INSERT IGNORE syntaxe. Cela fonctionne simplement comme suit :

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

Cela transforme simplement certains types d'erreurs en avertissements - le plus utilement, l'erreur qui indique qu'il y aura une entrée unique en double. Si vous placez le mot-clé IGNORE dans votre instruction, vous n'obtiendrez pas d'erreur, la requête sera simplement abandonnée. Dans les requêtes complexes, cela peut également masquer d'autres erreurs qui pourraient être utiles, il est donc préférable de s'assurer que votre code est correct si vous souhaitez l'utiliser.