Attribuer une valeur lors de la création d'une table

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Attribuer une valeur lors de la création d'une table

par iptima » 04 nov. 2006, 10:21

Cyrano,

Pardon pour mon manque de culture !

Merci de la précision, salvatrice.

Bonne journée,

I.

par Cyrano » 04 nov. 2006, 10:14

Parce que tu as mis en type TINYINT : un TINYINT signé va de -126 à +127 : un TINYINT NON signé ira de 0 à +255 : pour utiliser des nombres plus importants, il faut un type approprié : SMALLINT, MEDIUMINT ou simplement INT. Et pour une clé primaire, utilise le type choisi en non signé, par exemple INT UNSIGNED.

par iptima » 04 nov. 2006, 10:10

J'ai essayé d'utiliser la syntaxe proposé par Ultiny, à savoir :

Code : Tout sélectionner

CREATE TABLE `user` ( `id` tinyint(4) NOT NULL auto_increment, `name` varchar(55) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
A priori, ça semble fonctionner, mais je rencontre un bug qui me semble étrange.

Lorsque j'indique la valeur "1", ça marche.

Lorsque j'indique la valeur "100", ça marche.

Mais ça ne fonctionne plus passé la valeur "127" ! que j'inscrive dans ma requête "AUTO_INCREMENT=127" ou que cette valeur soit atteinte par des enregistrements successifs auto-incrémentés.

Ainsi, à partir de la valeur 127, phpMyAdmin m'indique aorès mon insertion :

Code : Tout sélectionner

MySQL a répondu: #1062 - Duplicate entry '127' for key 1
Je n'y connais pas grand'chose en informatique, mais il me semble que 127 (soit 2 puissance 7 -1 - non, ne riez pas !) n'est pas une valeur au hasard : erreur logique ?

Merci beaucoup.

Cordialement,

V.

par Ultiny » 04 nov. 2006, 03:04

Exactement à cause de ce message que tu a posté :P
En quoi ça répond à la question ?
comment attribuer dynamiquement une première valeur (par exemple 10001) à mon champ "identifiant" lors de la création ?

par Ajoloca » 04 nov. 2006, 03:03

Tu n'as pas compris que c'était pas la personne qui à posé la question, mais celle qui a répondu.

par Ultiny » 04 nov. 2006, 02:59

Eh bien alors où est ton problème ? Puisque je suis le deuxième à te dire qu'il faut faire de la sorte ?

Tu la mets en dur ou tu utilise cette methode, ta pas le choix, le SQL c'est pas aussi flexible que le PHP.

[EDIT] Désolé Ajoloca, je te prenais pour le posteur du sujet.

par Ajoloca » 04 nov. 2006, 02:57

C'est ce qui a été dit dans la première réponse
Bonjour,

Je ne comprends pas bien ton but mais pour faire démarrer l'auto incrémentation à une valeur donnée, à la fin de la création de la table tu ajoutes
AUTO_INCREMENT [=] value
comme ceci
CREATE TABLE table_name(
id INT UNSIGNED AUTO_INCREMENT,
....
))ENGINE=engine AUTO_INCREMENT = 10001;
Si ta table existe avec
ALTER TABLE ....

par Ultiny » 04 nov. 2006, 02:55

Code : Tout sélectionner

CREATE TABLE `user` ( `id` tinyint(4) NOT NULL auto_increment, `name` varchar(55) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10001 ;

par Ajoloca » 04 nov. 2006, 02:49

En quoi ça répond à la question ?
comment attribuer dynamiquement une première valeur (par exemple 10001) à mon champ "identifiant" lors de la création ?

par Ultiny » 04 nov. 2006, 02:43

Si tu utilise l'auto-increment ce sera :

Code : Tout sélectionner

CREATE TABLE `user` ( `id` tinyint(4) NOT NULL auto_increment, `name` varchar(55) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
où AUTO_INCREMENT=1 est l'offset de départ.

Sinon c'est comme ça :

Code : Tout sélectionner

CREATE TABLE `user` ( `id` tinyint(4) NOT NULL auto_increment, `name` varchar(55) NOT NULL default 'Anonyme', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
où Anonyme est la valeur par default de la colone name si on ne donne rien comme valeur.

C'est pratique par exemple pour un profil, pour mettre par exemple N/A lorsque l'utilisateur n'a pas renseigné les champs ou noavatar.jpg pour sa photo s'il n'en mets pas.

par Ajoloca » 04 nov. 2006, 02:32

La question est
Aussi comment attribuer dynamiquement une première valeur (par exemple 10001) à mon champ "identifiant" lors de la création ?

par Ultiny » 04 nov. 2006, 02:28

MySQL sait faire lui même l'auto-incrément tout de même, c'est l'une des fonctionnalité les plus utilisée, tu ne devrais pas te compliquer la vie :

Code : Tout sélectionner

CREATE TABLE `user` ( `id` TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` VARCHAR( 55 ) NOT NULL ) ENGINE = innodb;

par iclo » 04 nov. 2006, 00:43

Salut,

Je pense qu'il serait intéressant que tu nous expliques plus en détails ce que tu souhaites faire. Car la structure de base de donnée que tu envisages n'est pas vraiment une solution normalisée, et peut donc poser pas mal de problèmes par la suite. Donc si tu veux avoir des avis plus complêts, il faudrait qu'on en sache plus...

par Ajoloca » 03 nov. 2006, 23:37

Bonjour,

Je ne comprends pas bien ton but mais pour faire démarrer l'auto incrémentation à une valeur donnée, à la fin de la création de la table tu ajoutes
AUTO_INCREMENT [=] value
comme ceci
CREATE TABLE table_name(
id INT UNSIGNED AUTO_INCREMENT,
....
))ENGINE=engine AUTO_INCREMENT = 10001;
Si ta table existe avec
ALTER TABLE ....

Attribuer une valeur lors de la création d'une table

par iptima » 03 nov. 2006, 22:10

Bonjour,

Je voudrai créer une table MySql dynamiquement à partir de Php.

Ainsi, un visiteur indique sa ville dans un formulaire et une table au nom de sa ville est créée (si elle n'existe pas déjà dans ma base) avec comme premier enregistrement l'identité de ce visiteur.

Jusque là, je sais comment y arriver.

En revanche, je souhaiterai que la table ainsi générée comporte un champ "identifiant" dont le numéro s'incrémente au fur et à mesure des enregistrements grâce à Php. Pour calculer un identifiant à un enregistrement suivant, je récupère la dernière valeur attribuée dans ma table, je l'incrémente, puis je retourne la nouvelle valeur avec le nouveau enregistrement.

Aussi comment attribuer dynamiquement une première valeur (par exemple 10001) à mon champ "identifiant" lors de la création ?

Je n'ai rien trouvé dans la documentation de MySql, mais peut-être suis-je passé à côté.

En tout cas, merci de votre aide.

Cordialement,

I.