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

MySQL Discussion :

Suppression d'un enregistrement automatique dans mysql


Sujet :

MySQL

  1. #1
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut Suppression d'un enregistrement automatique dans mysql
    Bonjour.

    Concernant les Triggers qui me permettrait de supprimer des enregistrements selon un intervalle de temps.
    Exemple, je fais un enregistrement d'un mot de passe unique et il s'efface au bout de 10 jours automatiquement ou presque.

    J'ai vu ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE TRIGGER deleteRows AFTER UPDATE,INSERT ON myTable
    FOR EACH ROW BEGIN
        DELETE FROM myTable WHERE Datum = NOW()
    END;
    Est-ce que je dois indiquer une date dans un champ de ma table? On applique ça comment un Trigger?
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 064
    Points
    19 064
    Par défaut
    Salut dancom5.

    Ce n'est pas le rôle d'un déclencheur (trigger) de lancer un traitement à une date donnée.
    Vous devez utiliser un "event" : https://dev.mysql.com/doc/refman/5.7...scheduler.html

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Merci.

    Je n'ai jamais toucher aux tâches Cron jusqu'à maintenant.

    Le plus simple serait que je fasse une requête delete que j'exécute quand j'entre dans la page.

    Mais, après avoir tenté de le faire, ça ne fonctionne pas.

    Dans mon CRUD, j'ai mis ceci à Edit.PHP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sqldel = "DELETE * FROM auth WHERE submitdate < DATE_SUB(NOW(), INTERVAL 30 DAY)";
    $querydel = $dbConn->prepare($sqldel);
    $querydel->execute();
    et ma table, j'ai mis comme champ submitdate et NOW() pour enregistrer la date dans mon fichier add.php.

    Et j'obtiens comme erreur quand j'exécute edit.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Uncaught exception 'PDOException' with  message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You  have an error in your SQL syntax; check the manual that corresponds to  your MySQL server version for the right syntax to use near '* FROM auth  WHERE submitdate < DATE_SUB(NOW(), INTERVAL 30 DAY)' at line 1' in ...\edit.code.php on line 26
    Et je suis bloqué la.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 064
    Points
    19 064
    Par défaut
    Salut dancom5.

    Je vous ai dit de vous diriger vers un event !
    Je n'ai jamais parlé ni de la crontab (linux) ni du planificateur de tâches (windows).

    Voici un exemple. Toutes les secondes, vous aurez une insertion dans la table test.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    (
      `id`  int unsigned  NOT NULL AUTO_INCREMENT,
      `maj` TIMESTAMP(6)  DEFAULT current_timestamp(6),
      `val` varchar(255)  NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    DROP PROCEDURE IF EXISTS repeter
    --------------
     
    --------------
    CREATE PROCEDURE repeter ()
    DETERMINISTIC
    NO SQL
    BEGIN
      INSERT INTO `test` (`val`) value ('ca marche');
    END
    --------------
     
    --------------
    CREATE EVENT event_repeter
            ON SCHEDULE
            EVERY 1 SECOND
            STARTS CURRENT_TIMESTAMP
            ENDS   CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
            ON COMPLETION PRESERVE ENABLE
            DO BEGIN
               CALL repeter();
            END
    --------------
     
    --------------
    SET GLOBAL event_scheduler = ON
    --------------
     
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    Et voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    --------------
    select * from test
    --------------
     
    +----+----------------------------+-----------+
    | id | maj                        | val       |
    +----+----------------------------+-----------+
    |  1 | 2017-03-11 08:00:41.296698 | ca marche |
    |  2 | 2017-03-11 08:00:42.317370 | ca marche |
    |  3 | 2017-03-11 08:00:43.319175 | ca marche |
    |  4 | 2017-03-11 08:00:44.320106 | ca marche |
    |  5 | 2017-03-11 08:00:45.321465 | ca marche |
    |  6 | 2017-03-11 08:00:46.322630 | ca marche |
    |  7 | 2017-03-11 08:00:47.324239 | ca marche |
    |  8 | 2017-03-11 08:00:48.325939 | ca marche |
    |  9 | 2017-03-11 08:00:49.342500 | ca marche |
    | 10 | 2017-03-11 08:00:50.327977 | ca marche |
    | 11 | 2017-03-11 08:00:51.329898 | ca marche |
    | 12 | 2017-03-11 08:00:52.330668 | ca marche |
    | 13 | 2017-03-11 08:00:53.331729 | ca marche |
    | 14 | 2017-03-11 08:00:54.332684 | ca marche |
    | 15 | 2017-03-11 08:00:55.333496 | ca marche |
    | 16 | 2017-03-11 08:00:56.333897 | ca marche |
    | 17 | 2017-03-11 08:00:57.335941 | ca marche |
    | 18 | 2017-03-11 08:00:58.350696 | ca marche |
    | 19 | 2017-03-11 08:00:59.354616 | ca marche |
    | 20 | 2017-03-11 08:01:00.356983 | ca marche |
    | 21 | 2017-03-11 08:01:01.358102 | ca marche |
    | 22 | 2017-03-11 08:01:02.359312 | ca marche |
    +----+----------------------------+-----------+
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    C'est un script que je dois créer qui serait exécuté dans le panneau de control de mon hébergement?

    Que je dois adapter à mes besoins.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  6. #6
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 064
    Points
    19 064
    Par défaut
    Salut dancom5.

    Vous partez dans trente-six directions à la fois, et du coup, on ne sait plus très bien ce que vous cherchez à faire.
    1) Est-ce la suppresion suivante que vous désirez faire : "DELETE FROM myTable WHERE Datum = NOW()" ?
    2) Est-ce un script que vous désirez exécuter à partir de la crontab ?
    3) Est-ce un script qui sera exécuter quand vous entrez dans une page php en partriculier.
    Car ces trois possibilités ne sont pas du tout pareil !

    La première solution consiste à fait un "event" (vous avez l'exemple), qui consiste à faire un déclenchement, chaque jour, à "00:00:01".
    Ainsi la suppression "DELETE FROM myTable WHERE Datum = NOW()" pourra se faire chaque début de journée.

    La deuxième solution consiste à programmer dans la crontab, quand vous désirez déclencher un script.
    Voir pour cela le forum "Linux".

    La troisième solution consiste à placer dans votre page principale de votre site, un programme écrit en php qui va purger les lignes de votre table.
    Voir forum php/mysql.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  7. #7
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Bonjour Artemus24.

    J'ai mis ceci dans mon début de page en index.php principale comme troisième solution, ça fait bien ce que je veux faire. Mais, j'aimerais bien par un Crontab mais je ne sais pas quoi mettre comme ligne (Crontab qui se trouve dans mon cpanel).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbConn->query("DELETE FROM `auth` WHERE submitdate<DATE_SUB(NOW(), INTERVAL 10 DAY);");
    Votre première solution, je n'ai aucune idée comment l'appliquer ni où le faire celui de l'event.

    Mon hébergement est sous linux mais mon host test est sous Windows.

    Merci pour vous donner la peine de m'aider.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  8. #8
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 064
    Points
    19 064
    Par défaut
    Salut dancom5.

    Citation Envoyé par Dancom5
    Mais, j'aimerais bien par un Crontab mais je ne sais pas quoi mettre comme ligne (Crontab qui se trouve dans mon cpanel).
    En ce qui concerne la crontab, vous trouverez des explications dans le lien suivant :
    --> https://doc.ubuntu-fr.org/cron

    Par exemple "crontab 1 0 * * * chemin_vers_votre_script_sous_linux".
    Votre script, sous linux, se déclenchera tous les jours à "00:01:00", c'est-à-dire 1 minutes après minuit.

    Citation Envoyé par Dancom5
    Votre première solution, je n'ai aucune idée comment l'appliquer ni où le faire celui de l'event.
    Vous devez le faire dans phpmyadmin. Cela se fait de la même façon qu'une création de table ou une procédure stockée.
    L'exemple que je vous ai proposé, consiste à insérer une ligne toutes les secondes durant 1 minutes.
    C'est un script en ligne de commande avec un habillage afin d'illuster le fonctionnement de l'Event.
    Dans l'onglet "sql" de votre base de données, sous phpmyadmin, vous mettez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    DROP PROCEDURE IF EXISTS repeter;
     
    DELIMITER $$
    CREATE PROCEDURE repeter ()
    DETERMINISTIC
    NO SQL
    BEGIN
      INSERT INTO `test` (`val`) value ('ca marche');
    END $$
     
    CREATE EVENT event_repeter
    	ON SCHEDULE
    	EVERY 1 SECOND
    	STARTS CURRENT_TIMESTAMP 
    	ENDS   CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
    	ON COMPLETION PRESERVE ENABLE
    	DO BEGIN
    	   CALL repeter();
    	END$$
     
    DELIMITER ;
     
    SET GLOBAL event_scheduler = ON;
    Pour arrêter le scheduler, vous tapez au même endroit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET GLOBAL event_scheduler = Off;
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  9. #9
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par Artemus24;9081109

    En ce qui concerne la crontab, vous trouverez des explications dans le lien suivant :
    --> [URL
    https://doc.ubuntu-fr.org/cron[/URL]

    Par exemple "crontab 1 0 * * * chemin_vers_votre_script_sous_linux".
    Votre script, sous linux, se déclenchera tous les jours à "00:01:00", c'est-à-dire 1 minutes après minuit.
    Pour le Cron, je n'ai qu'accès au ce control-ci:
    Nom : crontab.jpg
Affichages : 267
Taille : 116,1 Ko

    En faite, c'est la ligne que je dois mettre à commande.
    si ça serait que ça à mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbConn->query("DELETE FROM `auth` WHERE submitdate<DATE_SUB(NOW(), INTERVAL 10 DAY);");
    ça serait facile. Je n'aurais qu'à établir les temps.

    Pour les events, je vais regarder cela après avoir épuisé toutes autres solutions.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  10. #10
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 064
    Points
    19 064
    Par défaut
    Salut dancom5.

    Citation Envoyé par Dancom5
    Pour le Cron, je n'ai qu'accès au ce control-ci:
    Ce que vous me montrez, est une interface graphique. Vous faites exactement de la même façon en ligne de commande.
    Ce sont les mêmes paramètres que vous devez préciser.

    --> Minute : 1
    --> Heure : 0
    --> jour : *
    --> mois : *
    --> année : *
    --> jour de la semaine : *
    --> commande : le chemin d'accès à votre script bach qui va contenir ce que vous désirez faire.

    Citation Envoyé par Dancom5
    En faite, c'est la ligne que je dois mettre à commande.
    Dans le cas de la crontab, vous devez créer un script en bash par exemple, qui va exécuter un script php.
    Et dans ce script php, vous devez faire la connexion à la base de données, exécuter votre ou vos requêtes, fournir un compte-rendu du traitement consultable et fermer la connexion à votre base de données.
    Bien sûr, vous devez spécifier le compte, le mot de passe, l'hôte et le nom de la base de données, dans le script php.

    Je trouve que vous vous compliquez l'existence !

    Alors qu'avec l'Event, et en reprenant mon exemple, vous n'avez presque rien à faire.
    Si vous ne maitrisez pas bien MySql, autant faire cela dans la page principale de votre site.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE EVENT event_repeter
    	ON SCHEDULE
    	EVERY 1 DAY
    	STARTS '2017-03-14 00:01:00'
    	ON COMPLETION PRESERVE ENABLE
    	DO
    		DELETE FROM `auth` WHERE submitdate<DATE_SUB(NOW(), INTERVAL 10 DAY;
    	END$$
    A vérifier car j'ai fait cela de mémoire.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. [MySQL] suppression d'un enregistrement automatique dans mysql sans intervention d'un script PHP
    Par dancom5 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/03/2017, 11h51
  2. enregistrement automatique dans BDD
    Par voyageurdumonde dans le forum Requêtes
    Réponses: 9
    Dernier message: 18/04/2013, 00h36
  3. Réponses: 0
    Dernier message: 26/04/2010, 13h37
  4. [AC-2007] Formulaire et enregistrement automatique dans une table
    Par Mat08 dans le forum Modélisation
    Réponses: 14
    Dernier message: 16/07/2009, 14h08
  5. Enregistrement automatique dans Excel
    Par kfmystik dans le forum Excel
    Réponses: 2
    Dernier message: 01/08/2008, 11h37

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