Question

Je travaille en PHP.

Veuillez indiquer la méthode appropriée pour insérer de nouveaux enregistrements dans la base de données, qui possède un champ unique. J'insère beaucoup d'enregistrements dans un lot et je veux juste que les nouveaux soient insérés et je ne veux pas d'erreur pour l'entrée en double.

Existe-t-il un seul moyen de créer d’abord un SELECT et de voir si l’entrée est déjà présente avant INSERT - et d’insérer uniquement lorsque SELECT ne renvoie aucun enregistrement? J'espère que non.

J'aimerais demander à MySQL d'ignorer ces insertions sans erreur.

Merci

Était-ce utile?

La solution

Vous pouvez utiliser la syntaxe INSERT ... IGNORER si vous ne voulez rien faire quand il y a un enregistrement en double.

Vous pouvez utiliser la syntaxe REPLACE INTO si vous le souhaitez. écraser un ancien enregistrement avec un nouveau avec la même clé.

Vous pouvez également utiliser INSÉRER ... ON DUPLICATE KEY UPDATE si vous souhaitez effectuer une mise à jour de l’enregistrement lorsque vous rencontrez un doublon.

Edit: Je pensais ajouter quelques exemples.

Exemples

Disons que vous avez une table nommée tbl avec deux colonnes, id et valeur . Il y a une entrée, id = 1 et valeur = 1. Si vous exécutez les instructions suivantes:

REPLACE INTO tbl VALUES(1,50);

Vous avez toujours un enregistrement, avec id = 1 valeur = 50. Notez toutefois que l’ensemble de l’enregistrement a d'abord été supprimé, puis réinséré. Puis:

INSERT IGNORE INTO tbl VALUES (1,10);

L'opération s'exécute correctement, mais rien n'est inséré. Vous avez toujours id = 1 et valeur = 50. Enfin:

INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;

Vous avez maintenant un seul enregistrement avec id = 1 et valeur = 200.

Autres conseils

Vous pouvez utiliser les déclencheurs . .

Vérifiez également le ce guide d'introduction aux déclencheurs .

À quoi ressemble le schéma de base de données?

Vous pouvez ajouter une colonne d'identifiant qui auto incrémentation pour chaque insertion, afin de garantir des lignes uniques.

Question: Je crée une base de données avec des clients. Je sais que vous utilisez les " insert " déclaration pour insérer des informations dans la base de données, mais comment puis-je m'assurer de ne pas saisir à nouveau les mêmes informations client?

Réponse: Vous pouvez vous assurer que vous n'insérez pas d'informations en double en utilisant la condition EXISTS.

Par exemple, si vous avez une table nommée clients avec une clé primaire de client_id, vous pouvez utiliser l'instruction suivante:

INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);

Cette instruction insère plusieurs enregistrements avec une sous-sélection.

Si vous souhaitez insérer un seul enregistrement, vous pouvez utiliser la déclaration suivante:

INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);

L'utilisation de la table double vous permet de saisir vos valeurs dans une instruction select, même si elles ne sont actuellement pas stockées dans une table.

à partir de http://www.techonthenet.com/sql/insert.php

Essayez de créer une table en double, de préférence une table temporaire, sans la contrainte unique et effectuez votre chargement en bloc dans cette table. Sélectionnez ensuite uniquement les éléments uniques (DISTINCT) de la table temporaire et insérez-les dans la table cible.

$duplicate_query=mysql_query("SELECT * FROM student") or die(mysql_error());
$duplicate=mysql_num_rows($duplicate_query);
if($duplicate==0)
{
    while($value=mysql_fetch_array($duplicate_query)
    {
        if(($value['name']==$name)&& ($value['email']==$email)&& ($value['mobile']==$mobile)&& ($value['resume']==$resume))
        {
            echo $query="INSERT INTO student(name,email,mobile,resume)VALUES('$name','$email','$mobile','$resume')";
            $res=mysql_query($query);
            if($query)
            {
                echo "Success";
            }
            else
            {
                echo "Error";
            }
            else
            {
                echo "Duplicate Entry";
            }
        }
    }
}
else
{
    echo "Records Already Exixts";
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top