J'essaye d'écrire un script qui va copier toutes les données de la table a vers la table b si la table a existe. Le tableau b est exactement la même structure que la table a si elle existe, bien que ce ne soit pas le cas. Je suis capable de copier en utilisant la déclaration suivante: INSERT INTO 'B' SELECT * FROM 'A'
, mais je ne sais pas où utiliser IF EXISTS
, ou si je peux même déterminer si je effectuer l'insertion. J'essaie de le faire en SQL seulement car il sera exécuté en tant que script .sql à partir de la ligne de commande.Table de sauvegarde MySQL si elle existe
Répondre
MySQL seulement:
DROP PROCEDURE IF EXISTS myupdate;
DELIMITER //
CREATE PROCEDURE myupdate()
BEGIN
DECLARE found VARCHAR(64);
SET found = (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = Database() AND TABLE_NAME = 'A');
IF found = 'types' THEN
INSERT INTO B SELECT * FROM A;
SELECT 'A into B';
ELSE
SELECT 'A not found';
END IF;
END;//
DELIMITER ;
CALL myupdate();
DROP PROCEDURE myupdate;
vous Extension au goût comparant la définition de la colonne dans INFORMATION_SCHEMA.COLUMNS A & B si vous besoin d'un contrôle plus précis.
Très gentil, merci! J'ai trouvé que je devais mettre un 'COMMIT;' après 'INSERT INTO B SELECT * FROM A;' et cela a fonctionné juste ainsi. – ashurexm
J'ai légèrement modifié votre code pour le rendre réutilisable pour plusieurs tables. – ashurexm
Tables multiples? Hardcode Je présume, si vous avez un moyen d'interroger un nom de table dynamique, je serais tout ouïe (bien que du point de vue de la maintenance, le code de production devrait s'appuyer sur des tables et échouer de manière transparente bien sûr) – Wrikken
Vous pouvez le faire en procédant comme suit:
select count(*) from my_tables where table_name='b';
If count>0 then
update b...;
else
create table b;
insert into my_tables(table_name) values('b');
insert into b...;
end if;
J'ai accepté la réponse de Wrikken mais j'utilise ceci comme mon code final. J'ai besoin de réutiliser la procédure qu'il a fournie pour plusieurs tables, donc je l'ai légèrement modifié. Il suppose que la table de sauvegarde a déjà été créée.
DROP PROCEDURE IF EXISTS tableUpdate;
DELIMITER //
CREATE PROCEDURE tableUpdate(name VARCHAR(32))
BEGIN
DECLARE cnt tinyint(1);
DECLARE btable VARCHAR(36);
SET btable = CONCAT(name,'BAK');
SET cnt = (SELECT COUNT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'TAA' AND TABLE_NAME = name);
IF cnt > 0 THEN
SET @q:= CONCAT('INSERT INTO ',CONCAT(btable,CONCAT(' SELECT * FROM ',name)));
PREPARE stmt FROM @q;
EXECUTE stmt;
COMMIT;
ELSE
SELECT 'No update necessary.';
END IF;
END;//
DELIMITER ;
CALL tableUpdate('A');
DROP PROCEDURE tableUpdate;
- 1. Tronquer une table SQLite si elle existe?
- 2. Comment détecter si une table existe? MySql
- 3. ligne de mise à jour mysql si elle existe
- 4. MySql - Créer une table si elle n'existe pas? Sinon tronquer?
- 5. Déposer une vue DB2 si elle existe
- 6. PostgreSQL créer table si existe pas
- 7. Vérifier si la table existe
- 8. ADO.Net Excel, Vérifier si une table existe?
- 9. Vérifier si la table existe dans C#
- 10. Sauvegarde SQL incrémentielle de mysql
- 11. Comment utiliser wikipedia api si elle existe?
- 12. stratégie de sauvegarde Mysql
- 13. mysql sauvegarde question
- 14. Créer une table si elle n'existe pas
- 15. création d'une table si elle n'existe pas
- 16. MySQL: Insérer si la clé étrangère existe
- 17. Comment puis-je vérifier si la colonne de la table mysql existe?
- 18. Mysql Query: Where clause si Existe
- 19. php - Détermine si une image existe et si elle l'affiche
- 20. MySQL - Sauvegarde et chargement
- 21. Vérifier si la table d'accès existe
- 22. oracle sql: mise à jour si elle existe d'autre insérer
- 23. Vérifiez si une table existe dans où
- 24. modifier le type de champ MySQL si existe domaine
- 25. Sauvegarde de MySQL dans WampServer
- 26. restaurer sauvegarde mysql
- 27. MySQL: Comment ajouter une colonne si elle n'existe pas déjà?
- 28. si elle existe, mise à jour, insérer autre nouveau record
- 29. PostgreSQL: contrainte, Insérer une valeur dans la colonne uniquement si elle existe dans une autre table
- 30. Comment vérifier si un index existe sur un champ de table dans MySQL?
Pouvez-vous expliquer plus au sujet de votre cas d'utilisation? Pourquoi ne sauriez-vous pas, a priori, si 'B' existe? – VeeArr
Il s'agit de mettre à jour la base de données des utilisateurs. Ceux sur une ancienne version n'auront pas de table du tout. Ceux sur la dernière version auront une table dont les données doivent être conservées – ashurexm