Dans ma base de données, j'ai un grand nombre de tables qui contiennent des dates. Ce sont des dates d'expiration pour être précis.
Actuellement, j'exécute les commandes suivantes pour supprimer toutes les lignes qui sont plus anciennes qu'une date spécifiée en utilisant:
DELETE FROM tablename WHERE DATE(datepoint) < '2019-03-18'
1) Y at-il une façon de rechercher et de supprimer dans une base de données entière au lieu de changer manuellement le nom de la table et d'exécuter la commande à chaque fois?
3 Réponses :
Vous pouvez utiliser une fonction PHP, de toute façon je ne recommanderais pas de supprimer des enregistrements, filtrez simplement vos requêtes pour les 3 derniers mois uniquement
Pensez peut-être à avoir des dates d'expiration dans leur propre table EXPIRY_DATES. Cela semble être un concept important dans votre domaine. Demandez ensuite à vos autres tables d'indiquer la date d'expiration correcte à l'aide d'une clé étrangère. L'utilisation de règles de suppression en cascade à partir de EXPIRY_DATES effacerait les enregistrements de toutes les tables enfants lorsque vous supprimez une date d'expiration de EXPIRY_DATES.
vous devez utiliser une procédure (ou une fonction):
Définissez une procédure:
mysql> CALL delete_from_table(@table1); mysql> CALL delete_from_table(@table2); mysql> CALL delete_from_table(@table3);
Procédure CALL:
mysql> CREATE PROCEDURE delete_from_table(OUT table_name char(20)) -> BEGIN -> delete from table_name WHERE DATE(datepoint) < '2019-03-18'; -> END// mysql> delimiter ;
Si par "base de données" vous entendez toutes les tables d'une base de données, alors la réponse est peut-être, mais vous devrez utiliser SQL dynamique pour cela.
"Y a-t-il un moyen de rechercher et de supprimer à la place de toute une base de données au lieu de changer manuellement le nom de la table et d'exécuter la commande à chaque fois?" Non, laissez-moi vous dire que vous avez beaucoup de noms de table qui conservent les données mais avec des nombres comme nom de table.
"mais vous devriez utiliser du SQL dynamique pour cela." @TimBiegeleisen SQL dynamique n'aidera pas non plus. Clauses
PREPARE/EXECUTEdans MySQL peut également exécuter une seule instruction MySQL à la fois.@RaymondNijland ... ou écrivez un script dans un outil externe tel que Bash ou Java.
en effet @TimBiegeleisen qui est une option, ou PHP car
mysqliest balisé