Page 1 sur 1
Requête SQL ... petit stress avec DBDesigner
Posté : 10 mars 2006, 23:43
par Sebe
Salut,
J'ai un petit stress avec la requête que DBDesigner m'a faite
Code : Tout sélectionner
#
# Structure de la table ` promo_epreuve `
#
CREATE TABLE `promo_epreuve` (
`id_epreuve` INT NOT NULL AUTO_INCREMENT,
`epreuve` VARCHAR(20) NOT NULL,
`lieu` VARCHAR(255) NOT NULL,
`date_edition` DATETIME NULL DEFAULT `0000-00-00 00:00:00`,
`km` TINYINT (4) NOT NULL '0',
`acces` VARCHAR(255) NOT NULL,
`parking` VARCHAR(255) NOT NULL,
`secretariat` VARCHAR(255) NOT NULL,
`vestiaire` VARCHAR(255) NOT NULL,
`depart` VARCHAR(255) NOT NULL,
`arrivee` VARCHAR(255) NOT NULL,
`ravito` VARCHAR(255) NOT NULL,
`prix` VARCHAR(255) NOT NULL,
`info` TEXT NOT NULL,
`parcours` TEXT NOT NULL,
`itineraire` TEXT NOT NULL,
`banniere` VARCHAR(45) NOT NULL,
`parcours_img` VARCHAR(20) NOT NULL DEFAULT `defaut_img.jpg`,
`parcours_flash` VARCHAR(20) NOT NULL DEFAULT `defaut_fla.swf`,
`topographie` VARCHAR(20) NOT NULL,
`profil` VARCHAR(20) NOT NULL,
PRIMARY KEY(`id_epreuve`)
);
J'ai déjà ajouté plein de ```````````` mais j'ai toujours une erreur:
MySQL a répondu:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '0000-00-00 00:00:00` ,
`km` TINYINT( 4 ) NOT NULL '0',
`a
Si quelqu'un pouvait me filer un coup de main car je suis loin d'être une bête dans ce genre d'exercice!
Merci
Posté : 11 mars 2006, 00:08
par Cyrano
il manque un "DEFAULT" :
Code : Tout sélectionner
CREATE TABLE `promo_epreuve` (
`id_epreuve` INT NOT NULL AUTO_INCREMENT,
`epreuve` VARCHAR(20) NOT NULL,
`lieu` VARCHAR(255) NOT NULL,
`date_edition` DATETIME NULL DEFAULT `0000-00-00 00:00:00`,
`km` TINYINT (4) NOT NULL DEFAULT '0',
`acces` VARCHAR(255) NOT NULL,
`parking` VARCHAR(255) NOT NULL,
`secretariat` VARCHAR(255) NOT NULL,
`vestiaire` VARCHAR(255) NOT NULL,
`depart` VARCHAR(255) NOT NULL,
`arrivee` VARCHAR(255) NOT NULL,
`ravito` VARCHAR(255) NOT NULL,
`prix` VARCHAR(255) NOT NULL,
`info` TEXT NOT NULL,
`parcours` TEXT NOT NULL,
`itineraire` TEXT NOT NULL,
`banniere` VARCHAR(45) NOT NULL,
`parcours_img` VARCHAR(20) NOT NULL DEFAULT `defaut_img.jpg`,
`parcours_flash` VARCHAR(20) NOT NULL DEFAULT `defaut_fla.swf`,
`topographie` VARCHAR(20) NOT NULL,
`profil` VARCHAR(20) NOT NULL,
PRIMARY KEY(`id_epreuve`)
);
Posté : 11 mars 2006, 00:19
par Truc
attention aux apostrophes inversées autour des valeurs par défaut !! il faut des apostrophes ' et non ` puisqu'il ne s'agit pas de noms de champs mais de valeurs.
Posté : 11 mars 2006, 00:19
par Sebe
Salut Cyrano,
Tu vois que je me suis un peu amélioré depuis mais que j'ai toujours besoin d'une bonne âme pour me venir en aide
Revenons à nos moutons car malheureusement, j'ai toujours une erreur après ta rectification:
MySQL a répondu:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '0000-00-00 00:00:00` ,
`km` TINYINT( 4 ) NOT NULL DEFAULT
A ce propos comment ce fait-il que DBDesigner produit une requête avec des erreurs ... n'y a-t-il rien à y changer (option ou ?)?
Merci
Posté : 11 mars 2006, 00:23
par Sebe
attention aux apostrophes inversées autour des valeurs par défaut !! il faut des apostrophes ' et non ` puisqu'il ne s'agit pas de noms de champs mais de valeurs.
Je viens de voir le message ... je dis quoi après avoir fait ce que tu dis!
Merci
Posté : 11 mars 2006, 00:27
par Sebe
Ok, c'est bon!
Merci à vous deux pour ce Xéme coup de main ... quand on aime, on ne compte pas

Posté : 11 mars 2006, 00:39
par Sebe
Dans le même ordre d'idée, qu'est-ce que je doit mettre comme valeur à un champs pour pouvoir entrer un nombre à virgule?
Merci
Posté : 11 mars 2006, 01:05
par Truc
pas vraiment dans le même ordre d'idée mais un type
DECIMAL fera l'affaire.
Posté : 11 mars 2006, 10:47
par Sebe
pas vraiment dans le même ordre d'idée mais un type
DECIMAL fera l'affaire.
Ben étant donné que cela concernait cette table ... merci
Encore une petite chose et je pense que ce sera bon:
Je voudrais introduire une clef étrangere où la valeur par défaut est '0' dans une autre table (pleine de données) mais en rapport avec cette table. Voici une idée de la table:
Code : Tout sélectionner
#
# Structure de la table `acrho_course`
#
CREATE TABLE `acrho_course` (
`id_course` int(11) unsigned NOT NULL auto_increment,
`nom_course` varchar(45) default NULL,
`date` date NOT NULL default '0000-00-00',
`pat_chal` enum('C','P') NOT NULL default 'P',
`lieu` varchar(45) default NULL,
`kilometrage` float(5,3) default NULL,
`nbre_part` int(11) default NULL,
`matricule` int(11) NOT NULL default '0',
`publier` enum('O','N') NOT NULL default 'N',
PRIMARY KEY (`id_course`)
) TYPE=MyISAM AUTO_INCREMENT=232 ;
#
# Contenu de la table `acrho_course`
#
INSERT INTO `acrho_course` VALUES (1, 'La Gallo Romaine', '2004-03-27', 'P', 'Blicquy', '12.200', 500, 0, 'N');
INSERT INTO `acrho_course` VALUES (2, '12ème Jogging du Printemps', '2004-02-28', 'C', 'Bury', '10.200', 485, 0, 'N');
INSERT INTO `acrho_course` VALUES (3, 'Jogging du Mont de la Trinité', '2003-11-11', 'P', 'Kain', '12.730', 630, 0, 'N');
...
Je verrais bien ceci:
Code : Tout sélectionner
KEY `promo_epreuve_FKIndex1` (`promo_epreuve_id_epreuve`) int(11) NOT NULL default '0'
mais je ne sais pas si cela se fait est comment l'inclure dans ma table déjà existante sans qu'il y ait des dommages.
Merci
Posté : 11 mars 2006, 12:46
par Truc
j'ai pas vraiment compris l'interet d'une clé étrangère qui serait initialisée à 0. puisque des la création ce champ doit contenir la valeur qui met les 2 tables en relation.
Pour ajouter un champ suffit de faire comme ceci (en ajustant à tes besoins

) :
ALTER TABLE nom_table ADD nom_nouveau_champ VARCHAR(25) DEFAULT '0' NOT NULL ;
Posté : 12 mars 2006, 00:32
par Sebe
j'ai pas vraiment compris l'interet d'une clé étrangère qui serait initialisée à 0. puisque des la création ce champ doit contenir la valeur qui met les 2 tables en relation.
Ok, je dois donc obligatoirement faire une relation même si ce sont des champs vides pour quelques-unes ... donc on mettra 1!
Pour ajouter un champ suffit de faire comme ceci (en ajustant à tes besoins

) :
ALTER TABLE nom_table ADD nom_nouveau_champ VARCHAR(25) DEFAULT '0' NOT NULL ;
C'est simplement un champs que j'inclus mais comment faire pour lui dire que c'est une clé étrangére?
Merci
Posté : 12 mars 2006, 01:11
par Truc
Tu ferais mieux d'enlever ce [Résolu] si ce n'est pas le cas pour plus de passage et donc de réponses
Pour les clé étrangère me semble qu'il ne faut pas les préciser pour les tables MyIsam suffit donc de mettre en relation lors de la requete les 2 champs en question.
avec un JOIN ou directement dans la clause WHERE (WHERE champ1 = champ 2).
Posté : 12 mars 2006, 09:15
par Cyrano
Une clé étrangère initialisée à 0 est utile quand on stocke par exemple des arborescences hierarchiques dans une même table et une ligne peut faire référence à une ligne parente ou à aucune ligne puisque se trouvant elle-même au sommet de la hiérarchie.
Par exemple, des menus divisés en rubriques, sous-rubriques, sous-sous-rubriques, etc... Les titres principaux n'auront pas de rubrique parente puisque ce seront eux même les titres des rubriques principales, donc sur ces lignes-là, il sera normal d'avoir une clé étrangère à 0, les autres ayant en valeur la clé primaire des rubriques parentes.
Mais dans la mesure où la clé étrangère dans une table fait référence à une clé primaire provenant d'une autre table, c'est beaucoup moins cohérent.
Posté : 12 mars 2006, 23:28
par Sebe
Tu ferais mieux d'enlever ce [Résolu] si ce n'est pas le cas pour plus de passage et donc de réponses
C'est à dire que le problème initial est arrangé mais qu'une question en apporte une autre et comme cela concernait cette même table ... tu vois ma logique! Maintenant, c'est vrai que j'aurais peut-être dù retirer le [Résolu]
En tout cas merci à vous deux