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 :

Synchroniser l'auto incrément de 2 tables


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2013
    Messages : 2
    Par défaut Synchroniser l'auto incrément de 2 tables
    Bonjour,

    j'aimerais synchroniser la valeur de l'auto incrément de 2 tables disons table1 et table2.

    Je suis obligé de garder des auto increments.

    Quand je lance la commande suivante ça fonctionne:
    ALTER TABLE table2 AUTO_INCREMENT=10

    Mais quand je fais une fonction qui retourne 10, ça ne fonctionne pas.

    ALTER TABLE table2 AUTO_INCREMENT= Retourne10()

    Idem si je déclare une variable, que je la renseigne avec la valeur de retour de ma fonction Retourne10()

    ALTER TABLE table2 AUTO_INCREMENT=ma_variable

    J'ai également essayé de modifier directement la valeur dans la table information_schema.tables, mais je n'ai pas l'accès.

    Avez vous des idées ?
    Comment modifier l'auto incrément depuis la valeur de retour d'une fonction ?

    Merci,
    Willy

  2. #2
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 917
    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 917
    Par défaut
    Salut clio_Td.

    Dans "AUTO_INCREMENT", la seule valeur possible est une constante.
    Tu ne peux pas mettre une fonction ni une variable et encore moins un paramètre.
    Tu as deux solutions possibles.

    1) soit tu utilises les variables suivantes :
    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
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    CREATE TABLE `test` (
      id      integer unsigned NOT NULL auto_increment,
      article CHAR(10)         NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE INDEX idx (`article`,`id`)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
      AUTO_INCREMENT=1
    --------------
     
    --------------
    SET @@session.auto_increment_increment = 10
    --------------
     
    --------------
    SET @@session.auto_increment_offset    = 10
    --------------
     
    --------------
    INSERT INTO `test` (`article`) VALUES ('bleu'),('rouge'),('vert'),('bleu'),('rouge'),('vert'),('bleu'),('rouge'),('vert')
    --------------
     
    --------------
    select * from `test` order by id
    --------------
     
    +----+---------+
    | id | article |
    +----+---------+
    | 10 | bleu    |
    | 20 | rouge   |
    | 30 | vert    |
    | 40 | bleu    |
    | 50 | rouge   |
    | 60 | vert    |
    | 70 | bleu    |
    | 80 | rouge   |
    | 90 | vert    |
    +----+---------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    2) soit tu passes par une requête préparée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set @alt = 'alter table test auto_increment=5';
    prepare            stmt from @alt;
    execute            stmt;
    deallocate prepare stmt;
    Tu ne peux pas utiliser le '?' pour faire le passage du paramètre.
    Cela provoque une erreur de syntaxe.
    Mais rien ne t'empêche de construire ta requête en concaténant la valeur que tu désires.

    @+

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2013
    Messages : 2
    Par défaut
    Bonjour Artemus24,

    merci pour la réponse.

    J'ai utilisé la seconde solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set @alt = 'alter table test auto_increment=5';
    prepare            stmt from @alt;
    execute            stmt;
    deallocate prepare stmt;
    Ça fonctionne avec une modification pour concaténer la chaîne de caractère avec le résultat de ma fonction.

    Encore merci,
    Willy

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

Discussions similaires

  1. Récuperer la valeur de l'auto-incrément d'une table
    Par dyron dans le forum Doctrine2
    Réponses: 4
    Dernier message: 07/12/2012, 13h58
  2. Comment obtenir un champs auto incrémenté dans une table DBase IV ?
    Par souminet dans le forum Bases de données
    Réponses: 1
    Dernier message: 11/12/2007, 13h55
  3. Réponses: 5
    Dernier message: 09/03/2007, 19h39
  4. [TABLE] auto-incrément corrompu
    Par metheorn dans le forum Access
    Réponses: 2
    Dernier message: 29/05/2006, 12h10
  5. Compactage de tables Paradox avec auto-incrément
    Par Unusual_FL dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/09/2004, 15h05

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