Suite à des recherches infructueuses dans la doc Mysql et google, je me permets de demander de l'aide ici car j'ai un problème pour créer un nouvel utilisateur (cf: cours )
Lorsque je tape la commande suivante dans mysql (celle indiquée dans le cours):
GRANT ALL PRIVILEGES ON elevage.* TO 'xxxx'@'localhost' IDENTIFIED BY 'xxxxxx';
(que j'ai rempli correctement au niveau du nom d'utilisateur et du mot de passe)
la console me retourne l'erreur qui suit:
ERROR 1064 (42000): 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 'IDENTIFIED BY 'XXXX'' at line 1
Mon souci est à l'import du fichier 'Animal.csv' ( dont le chemin est E:\TutoDB\ProjMysql\Animal.csv )
Mysql me renvoie:
ERROR 1148 (42000): The used command is not allowed with this MySQL Version
J'ai essayé plusieurs commandes, en remplaçant les \ par des / pour le chemin du fichier, en ajoutant \n\r pour les fins de lignes.
Voici la commande du cours:
LOAD DATA LOCAL INFILE 'animal.csv'
INTO TABLE Animal
FIELDS TERMINATED BY ';' ENCLOSED BY '"'
LINES TERMINATED BY '\n' -- ou '\r\n' selon l'ordinateur et le programme utilisés pour créer le fichier
(espece, sexe, date_naissance, nom, commentaires);
Je n'ai pas vérifié que ce code fonctionne.. ou pas.
Mais dans un premier temps, je pense qu'il serait bon d'ajouter un caractere d'échappement avant l'apostrophe devant ordinateur.
LINES TERMINATED BY '\n' -- ou '\r\n' selon l'ordinateur et le programme utilisés pour créer le fichier
LINES TERMINATED BY '\n' -- ou '\r\n' selon l ICI -> \'ordinateur et le programme utilisés pour créer le fichier
Autant pour moi, j'ai mis ces instructions sans les commentaires dans la console:
LOAD DATA LOCAL INFILE 'animal.csv'
INTO TABLE Animal
FIELDS TERMINATED BY ';' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(espece, sexe, date_naissance, nom, commentaires);
Merci Eric.
Je recherche le fichier de conf "my.cnf" pour le modifier, mais introuvable... peut-être qu'on ne le trouve que sous Mac et Linux...
Apparemment, lorsqu'il y a un code erreur 1148 sur cette commande c'est qu'elle est désactivé coté client (LOCAL), ça, c'est si j'ai bien compris la cause. Le remède se situerai donc dans "my.cnf"
dans l'activité à la fin de la partie 2, il est dit :
En dehors de la page principale, il existe trois type de pages : une page utilisateur, reprenant les articles écrits par un utilisateur triés par date, une page catégorie, qui affiche les articles d’une catégorie, également triés par date, et enfin une page article, qui affiche un article complet ainsi que ses commentaires par ordre chronologique.
Il est donc question de pages... il me semble donc que l'activité ne consiste pas seulement à remplir le fichier SQL, mais à tester le résultat de création de tables et les requêtes dans un navigateur web.
Donc je pose la question, est-ce que l'activité consiste uniquement à remplir le fichier SQL fourni ou faut-il créer une sorte de mini projet avec un langage de programmation associé, PHP ou autre ?
Vous devez renvoyer un fichier zip contenant le fichier .sql contenant les requêtes de création de toutes les tables de la base de données (y compris les tables fournies), ainsi que les éventuelles requêtes de création de clés et/ou d’index.
Notez qu’à l’exception de la clé primaire, aucune clé et aucun index n’est créé pour ces deux tables. N’hésitez pas à en rajouter si vous le jugez nécessaire (sans modifier les requêtes fournies).
Si j'ai bien compris, dans le cas où il faudrait rajouter des clés étrangères ou autres clés et index, il ne faut pas les rajouter dans la requête de création de la table elle-même mais faire une requête ALTER TABLE à la suite pour les rajouter. Ma question concerne les tables qu'on rajoute, est-ce qu'on peut mettre les clés étrangères dans les requêtes de création des tables elles-mêmes ou il faut faire une requête ALTER TABLE à la suite pour les rajouter ?
il ne faut pas les rajouter dans la requête de création de la table elle-même mais faire une requête ALTER TABLE à la suite pour les rajouter. Ma question concerne les tables qu'on rajoute, est-ce qu'on peut mettre les clés étrangères dans les requêtes de création des tables elles-mêmes ou il faut faire une requête ALTER TABLE à la suite pour les rajouter ?
Je pense qu'il est plus judicieux de faire des ALTER TABLE qui sont distincts et donc plus visibles que si tu modifies simplement le CREATE TABLE.
Mais cela est reste subjectif et va dépendre de ton correcteur ... comme souvent ...
norit a écrit:
Faut croire que non, si plusieurs personnes se posent la question.
Benzouye a écrit:
L'énoncé de l'activité dit:
Vous devez renvoyer un fichier zip contenant le fichier .sql contenant les requêtes de création de toutes les tables de la base de données (y compris les tables fournies), ainsi que les éventuelles requêtes de création de clés et/ou d’index.
Là c'est carrément clair ... Il n'est absolument pas question de créer des fichiers applicatifs (PHP ou autres), seulement du SQL ...
je viens vers vous car je suis dans la partie "Sous-requêtes" paragraphe "sous-requête renvoyant une ligne" où l'exemple ci-après est donné et je ne le comprends pas :
SELECT id, sexe, nom, espece_id, race_id
FROM animal
WHERE (id, race_id) = (
SELECT id, espece_id
FROM race
WHERE id = 7);
Alors il y a plusieurs choses que je ne comprends pas :
1 : pourquoi faire une telle requête quand on obtiens le même résultat avec :
SELECT id, sexe, nom, espece_id, race_id
FROM animal
WHERE id = 7;
Est-ce que cela ne ralentit pas le moteur de faire une telle sous-requête alors qu'on obtient le même résultat sans sous-requête ni jointure ?
2 : la sous-requête renvoie le résultat 7, 2 dans la table race hors lorsque l'on fait la requête entière on obtient
id sexe nom espece_id race_id
7 F Caroline 1 2
Le 7 de la sous requête correspond bien à l'id de la requête mais le 2 est d'origine espece_id changé en race_id dans notre requête principale. Quel intérêt ? Parce que là dans ma bdd l'id 7 correspond à un chien femelle berger blanc, hors si je prends la sous-requête seule, ça correspond au sphinks qui n'a pas de correspondance dans la table "animal".
Du coup je suis perdue et ça m'embête de continuer plus loin le cours si je n'ai pas compris ceci, je pense que les jointures et sous-requêtes sont importantes.
Merci par avance à la bonne âme qui saura m'expliquer tout ça :/
Je suis entrain d'étudier le chapitre 2 de la 2ème partie "Clés primaires et étrangères" et dans ce cours on nous demande de créer une table "espece" qui aura un lien avec la table "Animal" que l'on a déjà créée. Ce lien sera une clé étrangère que l'on crééra sur une colonne espece_id (appartenant à la table "Animal"). Après avoir suivi toutes ces instructions, je ne devrais pas rencontrer de problème normalement. Alors pour vérifier que notre clé étrangère fonctionne on nous demande de rajouter une entrée dans la table "Animal" :
et normalement je devrais avoir ce message :
Mais comme par "je ne sais qu'elle formule magique", ma clé étrangère ne fonctionne pas et la ligne qu'on essaie de créer pour voir si notre clé fonctionne est quand même rajouter à ma table alors que le moteur que j'utilise pour les deux tables et le "INNO DB". Et au cas où vous doutiez de moi, voici mon code pour créer la clé :
fathismael a écrit: Toujours en attente d'un super-man ! Je suis bloqué et je n'aime pas avancé sur les autres cours quand je suis bloqué. @Benzouye une petite idée ?
Bonsoir tout le monde,
Je suis entrain d'étudier le chapitre 2 de la 2ème partie "Clés primaires et étrangères" et dans ce cours on nous demande de créer une table "espece" qui aura un lien avec la table "Animal" que l'on a déjà créée. Ce lien sera une clé étrangère que l'on crééra sur une colonne espece_id (appartenant à la table "Animal"). Après avoir suivi toutes ces instructions, je ne devrais pas rencontrer de problème normalement. Alors pour vérifier que notre clé étrangère fonctionne on nous demande de rajouter une entrée dans la table "Animal" :
et normalement je devrais avoir ce message :
Mais comme par "je ne sais qu'elle formule magique", ma clé étrangère ne fonctionne pas et la ligne qu'on essaie de créer pour voir si notre clé fonctionne est quand même rajouter à ma table alors que le moteur que j'utilise pour les deux tables et le "INNO DB". Et au cas où vous doutiez de moi, voici mon code pour créer la clé :
Je te déconseille de mélanger PHP et SQL pour l'instant, reste en mode console ...
Si un animal avec un espece_id = 5 est inséré sans erreur , il n'y a que deux possibilités :
soit il existe dans la table Espece un id 5
soit il n'existe pas d'id 5 dans la table Espece, et la table Animal n'a pas de contrainte de clé étrangère active
Il faut vérifier que ta contrainte de clé étrangère a bien été créée.
Par exemple avec :
USE INFORMATION_SCHEMA;
SELECT TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = "le nom de ta base"
AND TABLE_NAME = "Animal"
AND REFERENCED_COLUMN_NAME IS NOT NULL;
Est-ce qu'il n'y a qu'avec le PHP que je peux utiliser l'extension PDO ? Par exemple, je ne pourrais pas l'utiliser avec le JAVA ?
Benzouye a écrit:
fathismael a écrit:
Pourquoi me déconseilles-tu d'utiliser PHP et MySQL ensemble ?
Pour suivre le cours normalement, apprendre à manipuler la console, et ne pas combiner les erreurs PHP et MySQL ...
En fait, j'ai voulu utiliser la console pour ce cours mais MySQL n'était pas placé dans le bon dossier (Il était dans le dossier WAMP). ce qui fait que quand j'essayais de me connecter au serveur grâce à la console, cette dernière m'affichait des erreurs et... j'ai un peu eu la flemme de chercher comment régler ce problème alors j'ai continué avec la méthode que je connaissais (PHP). Mais là, je suis entrain de télécharger un autre MySQL pour utiliser la méthode du cours. Ne pourrai-je pas déplacer celui de mon dossier WAMP pour suivre ce cours ?
fathismael a écrit:
La console m'a paru bien plus compliquer
Elle te permet pourtant de saisir directement tes requêtes sans te soucier de l'interface avec PHP ...
Est-ce qu'il n'y a qu'avec le PHP que je peux utiliser l'extension PDO ?
Oui, PDO signifie PHP Data Object ...
fathismael a écrit:
je ne pourrais pas l'utiliser avec le JAVA ?
Non, mais Java dispose aussi d'API pour communiquer avec les base de données, notamment le connecteur JDBC ...
Mais le problème reste le même ... Entraîne toi avec la console ou au pire avec une interface graphique type Adminer, PHPMyAdmin, MySQL Workbench, etc.
Est-ce qu'il n'y a qu'avec le PHP que je peux utiliser l'extension PDO ?
Oui, PDO signifie PHP Data Object ...
fathismael a écrit:
je ne pourrais pas l'utiliser avec le JAVA ?
Non, mais Java dispose aussi d'API pour communiquer avec les base de données, notamment le connecteur JDBC ...
Mais le problème reste le même ... Entraîne toi avec la console ou au pire avec une interface graphique type Adminer, PHPMyAdmin, MySQL Workbench, etc.
Je voudrais signaler quelque chose qui me semble incohérent...dans le chapiture 22, sur les conditions sur les fonctions d'agrégations.
Il est évoqué la fonction COALESCE() et il est dit qu'il ne faut pas que les lignes de regroupement retournent des valeur NULL, ce que je peux comprendre.
Ceci dit, le requête qui illustre cela dessous est une requête avec une jointure interne (donc avec INNER JOIN), or ce type de jointure, si je ne me trompe pas, est justement le type de jointure qui ne renvoie que les lignes pour lesquelles il y a des correspondances entre les tables...Donc on n'est pas censé avec des valeurs NULL de retournée. Pour cela, il y aurai fallu faire avec une requête avec LEFT JOIN ou RIGHT JOIN, qui elles, peuvent renvoyer des valeurs nulles.
LOAD DATA LOCAL INFILE 'animal.csv' INTO TABLE Animal FIELDS TERMINATED BY ';' ENCLOSED BY '"' LINES TERMINATED BY '\n' (espece, sexe, date_naissance, nom, commentaires);
J'ai fait quelques recherche et la totalité des solutions que j'ai essayé n'ont pas marché. J'ai même réessayer en me connectant à la Database avec l'utilisateur root avec la ligne de commande suivante :
mysql -u root -p --local-infile somedatabase
Mais ça n'a pas fonctionné, j'ai toujours le même message d'erreur, et je suis dans l'impossibilité absolue d'importer ce fichier CSV dans ma base de donnée. Je pourrais contourner l'obstacle en ajoutant les données lignes par lignes, mais ça me frustrerais trop de ne pas régler ce problème ...
Je me demande si le problème ne vient pas du fait qu'on est à la version 8.0 de MySQL à présent ...
Je ne sais pas si OC pratique la "magie informatique" (je viens d'inventer ce truc) mais il me semble fortement que ça soit le cas.
Je vous explique:
Je suis à la partie 4 de ce cours, c'est-à-dire la partie sur les fonctions temporelles et j'ai terminé les exos. Du coup je devais faire l'activité qui suit mais j'ai pris un peu de temps pour faire l'activité et passer à l'autre partie, genre 6/7 jours. Aujourd'hui, je me force à continuer et à faire l'activité mais voilà, l'activité a disparu du cours complétement. J'ai essayé de voir si l'activité fait partie du cours si l'on se déconnecte mais elle n'en faisait pas partie. En gros, on dirait que le cours a été soit mis-à-jour et donc l'activité n'était plus utile ou soit ils l'ont retiré que pour moi vu que je prenais trop de temps pour la faire. Quoi qu'il en soit, c'était une activité très intéressante. Je regrette vraiment de ne pas l'avoir fait quand elle était à ma portée. J'espere que quelqu'un m'aidera à la retrouver.
Et puis voilà ma question, est-ce que vous avez déjà rencontré ce genre de situation?
Dominique SAUVIGNON