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

Administration MySQL Discussion :

De quoi dois-je me méfier sur j'ai plis 63000 entrées


Sujet :

Administration MySQL

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut De quoi dois-je me méfier sur j'ai plis 63000 entrées
    Bonjour,

    Je suis en train d'importer des données collectées sur le terrain,
    J'ai une table avec un champ ID qui s'omcrémente. Je suis déjà au 62'290 enregistrement.
    J'ai une autre table qui en a plus de 80'000.

    Si je m'arrete m'intenant, ce que le champs ID est de type int(4). Etant donnée que le chifre de 80'000 va etre multilié par 1.5, je me demande si j'ai bien fait d'avoir choisi int(4). N'aurais-je pas du choisir int(8) ou int(16).

    J'ai peur d'artivé en staturation. Ceci dit, je viens de faire une recherche et il semble qu'un int(4) peut avoir 2147483647 enregistrements. Es-ce bien juste.

    Simplement, actuellement, j'importe que 4 mois de mesures et ce n'est qu'un début. J'imagine pas le nombre d'entrée que j'aurais dans une année.

    Afin d'éviter des problème, que veriez-vous pour assurer une grande marge d'neregistrement....
    Voyez-vous?
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonne journée,

    Mets tes champs auto-increment en : INT(11) UNSIGNED.
    Tu seras tranquille.

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Merci!
    En fait, j'ai pas fait attention et je viens de voir que dans l'une de ces tables, mon champs ID est un
    bigint(8)
    alors que le premier est un
    int(4).

    Oui volontier que je change en en int(11) unsigned. Mais es-ce que le bigint(8) est une solution équivalente à int(11) unsigned, ou bigint(8) est une erreur, ou un mauvais choix?

    Merciiii
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Merci pour vos réponses.
    J'ai réussi a modifier une table mais pas l'autre. Comment pourrais-je forcer le changement?
    Nom : Screen Shot 2018-05-03 at 1.09.35 PM.png
Affichages : 135
Taille : 72,2 Ko

    Mercis!!
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Vous avez un souci de foreign key, vous pouvez pour la modification, mettre ne pause les fk et puis les réactiver

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SET FOREIGN_KEY_CHECKS=0;
     
    -- modifier l'id en unsigned
     
    SET FOREIGN_KEY_CHECKS=1;

    Mais avant faites un dump de votre DB

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    A noter que normalement, la colonne qui porte la clé étrangère est au même format que la colonne cible. Donc si tu changes le format d'un côté, il faut aussi changer l'autre.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut Pierrot10.

    Citation Envoyé par Pierrot10
    je me demande si j'ai bien fait d'avoir choisi int(4). N'aurais-je pas du choisir int(8) ou int(16).
    Ce qui est entre parenthèse après "int" désigne le nombre de chiffres à l'affichage.
    Cela n'a aucun rapport avec la donnée stockée.
    Pour le type "integer", on peut stocker une valeur allant de -2.147.483.648 jusqu'à +2.147.483.647
    Si vous n'utilisez pas les nombres négatifs, autant mettre "integer unsigned".
    Ce qui donne une valeur allant de 0 jusqu'à 4.294.967.295.
    --> https://dev.mysql.com/doc/refman/8.0...ger-types.html

    Citation Envoyé par Pierrot10
    Afin d'éviter des problème, que veriez-vous pour assurer une grande marge d'enregistrement....
    Soit vous définissez votre colonne auto incrémenté "id" dans le type "integer unsigned, comme je vous l'ai indiqué ci-dessus.
    Soit vous passez au type "bigint unsigned" dont le stockage des valeurs va de 0 jusqu'à 2^64-1.

    Même en utilisant le type "integer", vous avez de la marge avant d'arriver, comme vous dites, à la saturation.

    Pour modifier vos colonnes auto incrémentés, je vous donne un exemple ci-après.
    Soit deux tables, 'père' et 'fils' avec leur contenu et leur description.
    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
    --------------
    select * from pere
    --------------
     
    +---------+---------+
    | pere_id | libelle |
    +---------+---------+
    |      10 | rouge   |
    |      20 | vert    |
    |      30 | jaune   |
    |      40 | bleu    |
    |      50 | default |
    +---------+---------+
    --------------
    describe pere
    --------------
     
    +---------+------------------+------+-----+---------+-------+
    | Field   | Type             | Null | Key | Default | Extra |
    +---------+------------------+------+-----+---------+-------+
    | pere_id | int(10) unsigned | NO   | PRI | NULL    |       |
    | libelle | char(20)         | NO   |     | NULL    |       |
    +---------+------------------+------+-----+---------+-------+
    --------------
    select * from fils
    --------------
     
    +---------+---------+----------+
    | fils_id | pere_id | nuance   |
    +---------+---------+----------+
    |       5 |      10 | carmin   |
    |      10 |      10 | cinabre  |
    |      15 |      20 | pomme    |
    |      20 |      30 | citron   |
    |      25 |      30 | ambre    |
    |      30 |      30 | moutarde |
    +---------+---------+----------+
    --------------
    describe fils
    --------------
     
    +---------+------------------+------+-----+---------+-------+
    | Field   | Type             | Null | Key | Default | Extra |
    +---------+------------------+------+-----+---------+-------+
    | fils_id | int(10) unsigned | NO   | PRI | NULL    |       |
    | pere_id | int(10) unsigned | NO   | MUL | NULL    |       |
    | nuance  | char(20)         | NO   |     | NULL    |       |
    +---------+------------------+------+-----+---------+-------+
    --------------
    commit
    --------------
     
    --------------
    select        *
            from  `fils` as f
     
      inner join  `pere` as p
               on  p.pere_id = f.pere_id
    --------------
     
    +---------+---------+----------+---------+---------+
    | fils_id | pere_id | nuance   | pere_id | libelle |
    +---------+---------+----------+---------+---------+
    |       5 |      10 | carmin   |      10 | rouge   |
    |      10 |      10 | cinabre  |      10 | rouge   |
    |      15 |      20 | pomme    |      20 | vert    |
    |      20 |      30 | citron   |      30 | jaune   |
    |      25 |      30 | ambre    |      30 | jaune   |
    |      30 |      30 | moutarde |      30 | jaune   |
    +---------+---------+----------+---------+---------+
    Vous remarquerez la numérotation des colonnes 'père_id' et 'fils_id'.
    A tout hasard, je donne la requête liant les deux tables.

    Voici la modification de la colonne 'fils_id' qui est la clef primaire de la table 'fils'.
    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
    --------------
    alter table `fils` drop column `fils_id`
    --------------
     
    --------------
    alter table `fils` add column `fils_id` bigint unsigned not null auto_increment primary key first
    --------------
     
    --------------
    select * from fils
    --------------
     
    +---------+---------+----------+
    | fils_id | pere_id | nuance   |
    +---------+---------+----------+
    |       1 |      10 | carmin   |
    |       2 |      10 | cinabre  |
    |       3 |      20 | pomme    |
    |       4 |      30 | citron   |
    |       5 |      30 | ambre    |
    |       6 |      30 | moutarde |
    +---------+---------+----------+
    --------------
    describe fils
    --------------
     
    +---------+---------------------+------+-----+---------+----------------+
    | Field   | Type                | Null | Key | Default | Extra          |
    +---------+---------------------+------+-----+---------+----------------+
    | fils_id | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
    | pere_id | int(10) unsigned    | NO   | MUL | NULL    |                |
    | nuance  | char(20)            | NO   |     | NULL    |                |
    +---------+---------------------+------+-----+---------+----------------+
    --------------
    commit
    --------------
    J'ai détruis et recréé la colonne 'fils_id'.
    On remarque que la numérotation s'est faite de 1 en 1.

    Maintenant, je modifie la colonne 'pere_id' qui est une clef primaire, mais aussi une clef étrangère.

    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
    --------------
    alter table `fils` drop foreign key `FK_01`
    --------------
     
    --------------
    alter table `fils` modify `pere_id` bigint unsigned not null
    --------------
     
    --------------
    select * from fils
    --------------
     
    +---------+---------+----------+
    | fils_id | pere_id | nuance   |
    +---------+---------+----------+
    |       1 |      10 | carmin   |
    |       2 |      10 | cinabre  |
    |       3 |      20 | pomme    |
    |       4 |      30 | citron   |
    |       5 |      30 | ambre    |
    |       6 |      30 | moutarde |
    +---------+---------+----------+
    --------------
    describe fils
    --------------
     
    +---------+---------------------+------+-----+---------+----------------+
    | Field   | Type                | Null | Key | Default | Extra          |
    +---------+---------------------+------+-----+---------+----------------+
    | fils_id | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
    | pere_id | bigint(20) unsigned | NO   | MUL | NULL    |                |
    | nuance  | char(20)            | NO   |     | NULL    |                |
    +---------+---------------------+------+-----+---------+----------------+
    --------------
    commit
    --------------
     
    --------------
    alter table `pere` drop primary key
    --------------
     
    --------------
    alter table `pere` modify `pere_id` bigint unsigned not null auto_increment primary key
    --------------
     
    --------------
    select * from pere
    --------------
     
    +---------+---------+
    | pere_id | libelle |
    +---------+---------+
    |      10 | rouge   |
    |      20 | vert    |
    |      30 | jaune   |
    |      40 | bleu    |
    |      50 | default |
    +---------+---------+
    --------------
    describe pere
    --------------
     
    +---------+---------------------+------+-----+---------+----------------+
    | Field   | Type                | Null | Key | Default | Extra          |
    +---------+---------------------+------+-----+---------+----------------+
    | pere_id | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
    | libelle | char(20)            | NO   |     | NULL    |                |
    +---------+---------------------+------+-----+---------+----------------+
    --------------
    Comme on peut le voir, j'ai changé le type de la colonne 'pere_id'.
    Maintenant, je vais renuméroter la colonne 'père_id' de 1 en 1.

    Ce qui donne :
    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
    alter table `fils` add CONSTRAINT `FK_01` FOREIGN KEY (`pere_id`) REFERENCES `pere` (`pere_id`) ON DELETE CASCADE ON UPDATE CASCADE
    --------------
     
    --------------
    describe fils
    --------------
     
    +---------+---------------------+------+-----+---------+----------------+
    | Field   | Type                | Null | Key | Default | Extra          |
    +---------+---------------------+------+-----+---------+----------------+
    | fils_id | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
    | pere_id | bigint(20) unsigned | NO   | MUL | NULL    |                |
    | nuance  | char(20)            | NO   |     | NULL    |                |
    +---------+---------------------+------+-----+---------+----------------+
    --------------
    update `pere`, (select @x:=0) as x set pere_id = (@x:=@x+1)
    --------------
     
    --------------
    select * from pere
    --------------
     
    +---------+---------+
    | pere_id | libelle |
    +---------+---------+
    |       1 | rouge   |
    |       2 | vert    |
    |       3 | jaune   |
    |       4 | bleu    |
    |       5 | default |
    +---------+---------+
    --------------
    select * from fils
    --------------
     
    +---------+---------+----------+
    | fils_id | pere_id | nuance   |
    +---------+---------+----------+
    |       1 |       1 | carmin   |
    |       2 |       1 | cinabre  |
    |       3 |       2 | pomme    |
    |       4 |       3 | citron   |
    |       5 |       3 | ambre    |
    |       6 |       3 | moutarde |
    +---------+---------+----------+
    --------------
    commit
    --------------
     
    --------------
    select        *
            from  `fils` as f
     
      inner join  `pere` as p
               on  p.pere_id = f.pere_id
    --------------
     
    +---------+---------+----------+---------+---------+
    | fils_id | pere_id | nuance   | pere_id | libelle |
    +---------+---------+----------+---------+---------+
    |       1 |       1 | carmin   |       1 | rouge   |
    |       2 |       1 | cinabre  |       1 | rouge   |
    |       3 |       2 | pomme    |       2 | vert    |
    |       4 |       3 | citron   |       3 | jaune   |
    |       5 |       3 | ambre    |       3 | jaune   |
    |       6 |       3 | moutarde |       3 | jaune   |
    +---------+---------+----------+---------+---------+
    Comme on le constate, la numérotation de la colonne 'père_id' s'est aussi répercutée dans la table 'fils', à cause de la clef étrangère.

    Il y a aucune difficulté à modifier une clef primaire, ou une clef étrangère, comme on peut le voir dans cet exemple.

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

  8. #8
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Hello
    Merci pour toutes vos réponses.
    Je vais regardé ceci en détail!!!
    Bonne soirée
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Vous avez un souci de foreign key, vous pouvez pour la modification, mettre ne pause les fk et puis les réactiver

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SET FOREIGN_KEY_CHECKS=0;
     
    -- modifier l'id en unsigned
     
    SET FOREIGN_KEY_CHECKS=1;

    Mais avant faites un dump de votre DB
    Bonour,
    je suis toujours bloqué avec ce message. J'ai vidé mes deux tables 'collections' et 'measures'
    la table measures est liée avec collection avec le champs 'collections_id_collection'

    J'ai aussi selctionné la table 'measures' puis l'onget SQL pour saisir la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET FOREIGN_KEY_CHECKS=0;
    Après avoir appuyé sur "GO", je n'ai pas eu de message d'erreur, mais qaund j'essaye anouveau de changer la valeur du int et de le définir comme unsigned, j'ai le meme message d'erreur, que précédement:

    Est-ce que je saisi la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET FOREIGN_KEY_CHECKS=0;
    correctement?

    EDIT: En fait je viens de constaté que j'arrive bien à changer la valuer du int de 4 à 11, mais c'est quand j'essaye de mettre ce champs comme 'unsigned' que le message d'erreur est généré..
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut Pierrot10.

    Je vous ai communiqué un exemple pour changer les identifiants des deux tables 'pere' et 'fils' qui sont liés par une clef étrangère.
    Avez-vous compris mon exemple ?

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

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    si tu ne veux pas (trop) te prendre la tête :

    • tu exportes toute ta base de données,
    • tu sauvegarde le fichier !
    • tu ouvres une copie du fichier dans Notepad++
    • dans Notepad++, avec "Rechercher/Remplacer", tu remplaces les int(4) en int(11) UNSIGNED
    • tu importes toute ta base de données dans phpMyAdmin (SQL),

  12. #12
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    si tu ne veux pas (trop) te prendre la tête :

    • tu exportes toute ta base de données,
    • tu sauvegarde le fichier !
    • tu ouvres une copie du fichier dans Notepad++
    • dans Notepad++, avec "Rechercher/Remplacer", tu remplaces les int(4) en int(11) UNSIGNED
    • tu importes toute ta base de données dans phpMyAdmin (SQL),
    Ha oui, c'est pas bête ca
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  13. #13
    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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut Pierrot10.

    Int(4) ou int(11) c'est toujours de l'integer.
    Ce qui est entre parenthèse sert à l'affichage et non au stockage dans la base de données.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/10/2015, 20h33
  2. je dois cliquer 2 fois sur le bouton de mon formulaire !
    Par intik dans le forum Zend Framework
    Réponses: 4
    Dernier message: 11/10/2011, 19h34
  3. Je dois cliquer 2 fois sur le bouton pour valider mon formulaire !
    Par intik dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/10/2011, 11h34
  4. Réponses: 6
    Dernier message: 14/04/2009, 09h14

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