2011-03-12 5 views
0

J'ai une table avec un champ unique uniq_field. quelle méthode ajouter est mieux - d'abord vérifier si l'enregistrement avec une valeur unique existe ou simplement ajouter un enregistrement et mysql va vérifier par lui-même?champ unique mysql

+2

cela dépend de l'action que vous allez prendre en cas de doublon –

+0

si DUPLICATE alors rien ajouter – kusanagi

Répondre

2

cela dépend de l'action que vous prenez va en cas de double
solutions possibles peuvent être affichées dans un tel code pseudo

switch action 
    case "do nothing": 
     INSERT IGNORE 
    case "delete existing then add new one": 
     REPLACE INTO 
    case "update existing": 
     ON DUPLICATE UPDATE 
    default: 
     select first and then apply necessary logic 
1

Cela dépend de la façon dont vous voulez le gérer dans votre code. Si vous voulez simplement vous assurer que cet élément existe, vous pouvez faire ce qu'on appelle une mise à jour de clé en double - ce qui signifie que la ligne est remplacée si elle est déjà présente - mais si ce n'est pas le cas, elle est mise à jour.

En savoir plus sur ce sujet ici: http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

1

bien pour cette table

+--------+---------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+--------+---------+------+-----+---------+-------+ 
| id  | int(11) | NO | PRI | 0  |  | 
| unique | int(11) | NO | UNI | NULL |  | 
+--------+---------+------+-----+---------+-------+ 

Ce code renvoie false

$result = mysql_query("insert into tab1 values(1, 1), (2, 1)"); 

echo ($result)?($result):"false"; 

Bien que ce code renvoie 1

$result = mysql_query("insert into tab1 values(1, 1), (2, 2)"); 

echo ($result)?($result):"false"; 

Il semble que si vous voulez afficher un message, vous devez vérifier les valeurs que vous base de données et affiche une erreur. Si vous ne voulez pas afficher ce qui a réellement causé et erreur, vous pouvez directement interroger.