2010-04-02 9 views

Répondre

9

Vous pouvez savoir si elle est là d'abord, par SELECT ING par url, ou vous pouvez faire le uniques champ url:

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

Cela arrêtera MySQL d'insérer un double ligne, mais il signale également une erreur lorsque vous essayez d'insérer. Ce n'est pas bon, même si nous pouvons gérer l'erreur, cela pourrait en cacher d'autres. Pour contourner ce problème, nous utilisons la syntaxe ON DUPLICATE KEY UPDATE:

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 déclaration UPDATE dans le cas d'une valeur en double dans un champ unique (ce qui peut inclure votre clé primaire). Dans ce cas, nous souhaitons probablement mettre à jour le champ modified_date avec la date actuelle.

EDIT: Comme suggéré par ~unutbu, si vous ne voulez pas changer quoi que ce soit sur un double, vous pouvez utiliser la syntaxe INSERT IGNORE. Cela fonctionne simplement comme suit:

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

Cela tourne simplement certains types d'erreurs dans les avertissements le plus utile, l'erreur qui indique, il y aura une entrée en double unique. Si vous placez le mot clé IGNORE dans votre relevé, vous n'obtiendrez pas d'erreur: la requête sera simplement supprimé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 voulez l'utiliser.

+0

Y a-t-il un autre moyen alors de mettre à jour le DUPLICATE? comme vérifier s'il y a déjà url = http: //example.com? –

+0

comme query2 = "" "SELECT * FROM kompas_url WHERE url ==% s" "" –

+2

Il y a aussi 'INSERT IGNORE', qui ignorera simplement l'instruction insert si l'insertion conduirait à une duplication d'une clé unique. – unutbu

Questions connexes