IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Suppression de données automatique


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 148
    Par défaut Suppression de données automatique
    Bonjour,

    J'aimerais supprimer des données qui datent d'il y a plus de 14j dans ma base de données.
    J'ai essayé quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE EVENT DeleteEveryTwoWeeks
    ON SCHEDULE EVERY 1 DAY
    STARTS '2019-12-06 08:00:00'
    DO
    SET SQL_SAFE_UPDATES = 0;
    DELETE FROM maTable WHERE DATEDIFF(CURDATE(), date) > 14;
    Mais je vois que la suppression dans ma base de données ne se fait pas.

    Le SET SQL_SAFE_UPDATES = 0; est là sinon j'ai une erreur
    Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 0.000 sec
    Et j'ai l'impression de devoir le faire chaque jour pour pouvoir exécuter la requête de suppression.

    Y aurait-il une autre solution?
    Que faire pour que l'événement se lance correctement, et est-il possible de vérifier si l'événement s'est exécuté grâce à des logs?

    Je vous remercie

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 602
    Billets dans le blog
    10
    Par défaut
    bonjour.

    Vu que "date" est un mot réservé SQL, votre requête devrait être rejetée : il faut encadrer cette colonne (si c'est bien son nom) par des quotes inversées puisqu'a priori votre SGBD est MySQL
    Le plus simple est d'éviter d'utiliser des mots réservés comme nom d'objet.
    Mais vu le message d'erreur, c'est plus probablement qu'aucune colonne ne s'appelle "date" dans votre table

    Par ailleurs, le nom de l'event "DeleteEveryTwoWeeks" est mal choisi : il ne va pas se produire une fois toutes les deux semaines, mais tous les jours (ON SCHEDULE EVERY 1 DAY). Par contre, il va supprimer les éléments datant d'au moins deux semaines. Ce n'est pas la même chose

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 148
    Par défaut
    Bonjour,

    Effectivement le nom de l'événement n'avait aucun sens, merci de me l'avoir fait remarquer. Je voulais faire autre chose à la base et j'ai complètement oublié de changer le nom de l'événement...

    Par contre, je confirme que j'avais bien une colonne nommée "date".
    Dans le doute, je l'ai simplement renommée "ddate" pour effectuer un test, et j'ai toujours le message d'erreur si je ne modifie pas cette valeur SET SQL_SAFE_UPDATES = 0; juste avant (non je n'ai pas oublié de modifier "date" par "ddate" dans la requête SQL, je le précise car je sais que ça aurait pu m'arriver )

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 602
    Billets dans le blog
    10
    Par défaut
    L'event a été modifié, il faut donc publier le nouveau code et le (nouveau ?) message d'erreur associé à son exécution

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 148
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE EVENT DeleteRecordsOlderThanTwoWeeks
    ON SCHEDULE EVERY 1 DAY
    STARTS CURRENT_TIMESTAMP  --- current_timestamp seulement pour tester l'événement tout de suite et ne pas attendre demain ou lundi
    DO
    SET SQL_SAFE_UPDATES = 0;
    DELETE FROM maTable WHERE DATEDIFF(CURDATE(), ddate) > 14;
    Le message d'erreur reste exactement le même
    Je tiens à préciser que j'ai le message d'erreur lorsque j'exécute cette requête seule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM maTable WHERE DATEDIFF(CURDATE(), ddate) > 14;
    Je n'ai pas le message d'erreur au moment où j'exécute mon CREATE EVENT

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 602
    Billets dans le blog
    10
    Par défaut
    Pouvez-vous communiquer également le script complet du CREATE TABLE.

    Et que donne l'ordre SELECT équivalent exécuté sur cette même table ? (remplacez juste DELETE par SELECT * pour tester)

  7. #7
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 956
    Par défaut
    Bonsoir,

    Personnellement je remplacerais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM maTable WHERE DATEDIFF(CURDATE(), ddate) > 14
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM maTable WHERE  ddate) < dateadd(CURDATE(), INTERVAL -14 DAY)
    histoire de ne pas avoir à recalculer l'écart de date à chaque ligne ...

Discussions similaires

  1. Problème d'espace disponible après suppression de données
    Par carjo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/03/2006, 15h48
  2. Suppression de données
    Par ledaker dans le forum Access
    Réponses: 3
    Dernier message: 10/03/2006, 17h10
  3. actualisation d'une base de données automatiquement
    Par klimero dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 19/01/2006, 18h07
  4. [C#] Limites de C# quand a la suppression de données
    Par Anonymous dans le forum Windows Forms
    Réponses: 6
    Dernier message: 28/01/2005, 23h18
  5. Suppression de données
    Par Julien Dufour dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/12/2004, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo