MySQL

Discussion dans 'Web, design' créé par sebge2, 11 Août 2003.

Statut de la discussion:
Fermée.
  1. Offline
    sebge2 Touriste
    Bonjour

    j'aimerais savoir a quoi ca sert exactemnet le auto_incremnet ... parce qu'apparement il faut en avoir un par table car quand je clique view data (avec webmin) il me dit :
    "This table contains no data. Data in this table cannot be edited because it has no primary key."

    A quoi sert cette primary key ? et comment fait on lorsque l'on enregistre une ligne ?
    $query_connectes=@mysql_query("INSERT INTO essai VALUES('id,'date','prenom','email'')",$ConnectID);

    pour la colone id je ne comprend pas le principe lorsque l'on enregistre

    <TABLE width="100%" border=1>
    <TBODY>
    <TR bgColor=#9999ff>
    <TD><B>Field name</B></TD>
    <TD><B>Type</B></TD>
    <TD><B>Allow nulls?</B></TD>
    <TD><B>Key</B></TD>
    <TD><B>Default value</B></TD>
    <TD><B>Extras</B></TD></TR>
    <TR bgColor=#cccccc>
    <TD><A href="edit_field.cgi?db=test&table=essai&idx=0">id</A></TD>
    <TD>int(11)</TD>
    <TD>Non</TD>
    <TD>Primary</TD>
    <TD> </TD>
    <TD>auto_increment </TD></TR>
    <TR bgColor=#cccccc>
    <TD><A
    href="edit_field.cgi?db=test&table=essai&idx=1">date</A></TD>
    <TD>varchar(20)</TD>
    <TD>Oui</TD>
    <TD>None</TD>
    <TD> </TD>
    <TD> </TD></TR>
    <TR bgColor=#cccccc>
    <TD><A
    href="edit_field.cgi?db=test&table=essai&idx=2":pfrt:renom</A></TD>
    <TD>varchar(50)</TD>
    <TD>Oui</TD>
    <TD>None</TD>
    <TD> </TD>
    <TD> </TD></TR>
    <TR bgColor=#cccccc>
    <TD><A
    href="edit_field.cgi?db=test&table=essai&idx=3">email</A></TD>
    <TD>varchar(55)</TD>
    <TD>Oui</TD>
    <TD>None</TD>
    <TD> </TD>
    <TD> </TD></TR></TBODY></TABLE>


    merci
    sebge2, 11 Août 2003
    #1
  2. Offline
    tu mélanges plusieurs choses:

    Tout d'abord la primarey key. En base de données, chaque ligne d'une table doit être identifiée de manière unique (normalement). Si une colonne comporte des données qui sont unique par ligne, tu devrais déclarer cette colonne comme primary key. De plus, quand il existe une primary key, les moteurs de BD actuels l'utilisent pour indexer les lignes afin de les retrouver plus rapidement (si on fait une recherche sur la primary key hein, pas sur une autre colonne qui elles ne sont pas indexées).

    Quand à l'auto_increment, c'est une manière d'avoir un hamp qui s'auto_incrémente. Avant de déclarer un champ auto_increment, il fait qu'il soit d'un type numérique.
    Une fois fait, quand tu feras un insert dans ta table, tu devras mettre une valeur pour ta colonne auto_increment. Cette valeur peut être n'importe quoi, Mysql va remttre la bonne, mais tu dois en mettre une (Attention, j'ai pas vérifié ça, à toi de faire les tests nécessaires).

    VOilà, j'espère que tu y vois plus clair. Tu me pardonneras de ne pas avoir lu ton code html, mais ça me fait chier de chercher ce que tu as voulu écrire, c'est plus simple si tu mets sans les balises HTML ....
    a plus,
    TheFornicator, 11 Août 2003
    #2
  3. Offline
    keep3r ex membre
    l explication est hasardeuse...

    pour simplifier, TOUTES les tables d'une base de données doivent possèder une PRIMARY KEY, c'est à dire une clé unique permettant d'identifier un enregistrement d'une base de donnée. Cette primary key peut être un seul champ de l'enregistrement (soit auto_increment, soit que tu génère toi même (par exemple un numéro de facture) ), ou peut-être la somme de plusieurs champs (exemple : nom,prénom,date de naissance sont une clé primaire de la table personnes)

    pour l'auto incrément tu n'as pas besoin de spécifier le champ dans ta clause INSERT, si la valeur est nulle le moteur MySQL génère une nouvelle valeur pour le champ (auto_increment). Si tu en spécifie une ce sera celle ci qui sera prise en compte...
    keep3r, 11 Août 2003
    #3
  4. Offline
    je ne suis pas d'accord sur ta primary key.... enfin, ton explication est plus complète, c'est vrai, mais un détail manque cependant. Toute table ne dois pas forcément posséder une primary key, si aucune primary key n'est définie, alors, la ligne entière sera la primary key. Quand au champs auto_increment de mysql, si je me souviens bien, le champs DOIT apparaître dans le ligne de l'insert car il vérifie le nombre de champs dans l'insert par rapport au nombre de champs de la table. Ou alors, il faut nommer les champs à insérer un à un, ce qui n'est pas pratique pour une longue liste de champs.

    là, s'est plus complet comme ça...
    :twisted:
    TheFornicator, 11 Août 2003
    #4
  5. Offline
    keep3r ex membre
    quand je dis une table doit avoir une primary key, je parles de tables bien faites :D

    ensuite pour les insert ton explication est valable aussi comme la mienne, je pensais évidemen aux insert des champs à spécifier. Mais d'expérience il est fréquent de ne pas insérer tous les champs et donc de ne spécifier que ce que l'on insère.
    keep3r, 11 Août 2003
    #5
  6. Offline
    sebge2 Touriste
    merci pour vos réponses :D
    sebge2, 11 Août 2003
    #6
  7. Offline
    niafron ex membre
    *TUUUT* nan je ne suis pas du tout d'accord
    pour moi il ne faut pas faire aparaitre le champ ID dans un insert

    il est bcp mieux de nommer les champs
    1) un autre lecteur comprendra de koi il en retourne plus rapidement
    2) ca evite de faire des boulette
    3) on est sur de tout mettre ;)
    niafron, 11 Août 2003
    #7
Statut de la discussion:
Fermée.