0
votes

L'insertion mysql si elle n'existe pas ne fonctionne pas en créant des clés en double

bien que j'utilise l'instruction mysql "insert ignore"

pour insérer une ligne dans une table appelée software

je veux m'assurer de ne pas insérer un logiciel qui existe déjà dans la table .

ma table s'appelle software et je veux insérer

un nouveau logiciel dans cette table mais si c'est déjà

existe dans la table, je veux sauter l'insertion

ma table ressemble à ceci:

+----+-----------+
| id | name      |
+----+-----------+
|  1 | software1 |
|  2 | software2|
|  3 | software3   |
|  4 | software4   |
|  5   software4
+----+-----------+

j'ai utilisé "insérer ignorer" mais cela crée toujours des clés en double

MariaDB [db]> insert ignore into software values (5,'software4');


2 commentaires

Comment votre table est-elle définie, notamment en ce qui concerne les clés ou les index (uniques)?


@koren est-ce que l'une des réponses a été utile?


3 Réponses :


0
votes
INSERT INTO software (id, name)
SELECT 4, 'software4'
FROM software
WHERE NOT EXISTS(
SELECT 1 FROM software WHERE name = 'software4'
) LIMIT 1;
DEMOThis will insert the record, only when the name is not already existing.

4 commentaires

insérer dans le logiciel vs sélectionner parmi ignorer . Êtes-vous sûr que cela correspond à ce que vous prétendez?


Si vous ne me fournissez pas une énigme à tester, vous devez la tester. Mais je suis presque sûr que cela fonctionne :)


"WHERE" n'est pas autorisé sans "FROM".


Oui, tu as raison. J'ai édité mon article avec une démo et une solution fonctionnelle!



1
votes

vérifier: https://mariadb.com/kb/en/library/ insérer-ignorer / "En utilisant le mot-clé IGNORE, toutes les erreurs sont converties en avertissements, ce qui n'arrêtera pas l'insertion de lignes supplémentaires."

Si vous ne souhaitez pas avoir d'entrées en double dans le nom, rendez-les UNIQUES:

CREATE TABLE t1 (x int UNIQUE);


0 commentaires

1
votes

Commencez par rendre la colonne name unique afin d'être sûr qu'il n'y a pas d'entrées en double:

Logiciel ALTER TABLE ADD UNIQUE (nom);

Et puis utilisez INSERT IGNORE ... qui ne INSERT que s'il n'existe toujours pas


0 commentaires