MySQL

Statut
N'est pas ouverte pour d'autres réponses.

sebge2

Elite
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
 
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,
 
K

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 a dit:
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...
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:
 
K

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.
 
1er
OP
sebge2

sebge2

Elite
merci pour vos réponses :D
 
N

niafron

ex membre
TheFornicator a dit:
keep3r a dit:
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...
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:
*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 ;)
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut