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');
3 Réponses :
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.
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!
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);
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
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?