Exécuter INSERT si la table est vide?
Est-il un moyen de faire une insertion en vertu d'un comte condition, quelque chose comme:
INSERT INTO my_table (colname) VALUES('foo') IF COUNT(my_table) < 1
Fondamentalement, je veux insérer un seul enregistrement par défaut si la table est vide. Je suis de l'utilisation de mysql.
OriginalL'auteur user291701 | 2011-03-15
Vous devez vous connecter pour publier un commentaire.
SÉLECTIONNER au lieu de VALEURS afin d'être en mesure d'étendre la requête avec une clause where.
EXISTE, c'est mieux & test plus rapides que le COMTE
INSERT INTO my_table (colname) SELECT 'foo' FROM DUAL WHERE NOT EXISTS (SELECT * FROM my_table)
INSERT INTO ma_table (colname) SÉLECTIONNEZ 'foo' from (SELECT 'bar') Bar OÙ not EXISTS (SELECT * from ma_table) -- inline table factice
Table en ligne complètement unrequired. C'est MySQL, pas Oracle
OriginalL'auteur RichardTheKiwi
Une façon serait de placer une clé unique sur une colonne. Ensuite, exécutez un REMPLACER:
OriginalL'auteur Jeff Swensen
C'est plus facile à lire:
L'absence d'un
VALUES
est atténué par laSELECT FROM DUAL
qui fournissent les valeurs. leFROM DUAL
n'est pas toujours nécessaire, mais il ne fait pas de mal d'en prévoir bizarre configurations où il est nécessaire (comme l'installation de Percona j'utilise).La
NOT EXISTS
est plus rapide que de faire un compte qui peut être lent sur une table avec un grand nombre de lignes.OriginalL'auteur joehep