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

Requêtes MySQL Discussion :

LOCK TABLES et TRUNCATE TABLE


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 32
    Points : 29
    Points
    29
    Par défaut LOCK TABLES et TRUNCATE TABLE
    ne font pas bon menage ??

    sur un script, a chaque appel de page je veut migrer des enregistrements d'une table vers une autre, puis vider la table source ...

    comme plusieurs utilisateurs peux acceder en meme temps a la page, je ne voudrais pas que les enregistrements soit entres 2 fois ...

    ainsi je m'etais dis de faire un LOCK TABLES des 2 tables en WRITE ...
    ensuite faire un INSERT INTO truc SELECT * FROM blabla
    puis de faire un TRUNCATE TABLE blabla
    et enfin un UNLOCK TABLES ...

    (je travaille en php)

    j'ai essaye, et j'obtiens l'erreur suivante ....

    User Message : TRUNCATE TABLE ntevent.eventslist; [nativecode=1192 ** Can't execute the given command because you have active locked tables or an active transaction]
    alors voila je ne comprend pas :/
    etant donne que tout ceci est cense etre fait avec le meme resource de connection mysql en php, c'est cense etre considere comme un seul thread non ? donc je peux faire ce que je veux non ?

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Bonjour,

    Apparemment TRUNCATE n'est pas compatible avec LOCK (car il implique une destruction puis une recréation de la table).

    cf http://dev.mysql.com/doc/mysql/en/delete.html user comment #2 :

    > If you issue a DELETE with no WHERE clause, all rows are
    > deleted. If you do this in AUTOCOMMIT mode, this works as
    > TRUNCATE. See section 13.1.9 TRUNCATE Syntax.

    Note, however, that TRUNCATE will not work if you have a lock on the table, because a TRUNCATE involves dropping and re-creating the table.

    If you do a DELETE with no WHERE clause on a locked table, it seems that MySQL is intelligent enough to realise this, because it still works, even though the equivalent TRUNCATE would not because of the lock. In this case MySQL must not be translating it to a TRUNCATE.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 32
    Points : 29
    Points
    29
    Par défaut
    ok genial, donc suffit que je remplace mon truncate par 'DELETE * FROM table_name' ?

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 20/11/2008, 19h08
  2. conseil truncate table ?
    Par donny dans le forum Oracle
    Réponses: 7
    Dernier message: 02/03/2007, 10h33
  3. [MySQL] Problème avec TRUNCATE TABLE
    Par philippef dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/01/2006, 15h41
  4. truncate table
    Par illegalsene dans le forum Oracle
    Réponses: 6
    Dernier message: 27/10/2005, 17h29
  5. commande SQL truncate table xxx
    Par Yogy dans le forum SQL
    Réponses: 1
    Dernier message: 07/10/2004, 15h57

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