Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Cours] Administrez vos BDD avec MySQL

17 mars 2017 à 14:44:06

Bonjour,

Je suis bloqué à la première étape de l'activité 6

je fait une Vue Matérialisé pour gagner en performance:

CREATE TABLE VM_Article_commentaire
ENGINE = InnoDB
SELECT A.id, A.titre, A.resume,
			DATE_FORMAT(A.date_publication, '%d/%m/%Y') AS 'date_publication', U.pseudo,
			COUNT(Commentaire.id) AS 'nombre_commentaire'
FROM Commentaire
RIGHT JOIN Article AS A ON A.id = Commentaire.article_id
INNER JOIN Utilisateur AS U ON A.auteur_id = U.id
GROUP BY A.id
ORDER BY A.date_publication DESC;

Puis je construit mon TRIGGER:

DELIMITER |

CREATE TRIGGER after_insert_commentaire AFTER INSERT
ON Commentaire FOR EACH ROW
BEGIN
	INSERT INTO VM_Article_commentaire (id, nombre_commentaire)
		SELECT NEW.id, COUNT(*) FROM Commentaire
		WHERE id = NEW.id
	ON DUPLICATE KEY UPDATE nombre_commentaire = nombre_commentaire + 1;
END |

DELIMITER ;

Lorsque j'essaie d'inserer un nouveau commentaire Patatra! :o

Message d'erreur que voila:

INSERT INTO Commentaire (article_id, auteur_id, contenu, date_commentaire)
    -> VALUE (1, 4, 'Super nouveau commentaire', NOW());
ERROR 1364 (HY000): Field 'titre' doesn't have a default value

Pourriez-vous éclairer ma lanterne svp :honte:



  • Partager sur Facebook
  • Partager sur Twitter
Enjoy your life (^^,)
17 mars 2017 à 16:43:53

Bonjour,

Tu essayes d'insérer un enregistrement dans la table commentaire qui a une colonne titre qui ne peut être NULL et n'a pas de valeur par défaut ... Soit tu autorises la valeur NULL, soit tu donnes une valeur par défaut, soit tu précises une valeur lors de l'insert ...

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
17 mars 2017 à 17:22:44

Merci pour ta réponse Benzouye.

Le hic c'est que je n'est pas de champ titre dans ma table commentaire.

Par contre j'ai un champ titre dans ma table article (qui corespond au titre d'un article)

De plus le comportement de MySQL est un peu louche car il m'ajoute quand même le commentaire dans la table mais le Trigger ne fonctionne pas :colere:

  • Partager sur Facebook
  • Partager sur Twitter
Enjoy your life (^^,)
20 mars 2017 à 8:15:47

Je vous poste l'état de la base de donnée

+------------------------+
| Tables_in_p2p_blog     |
+------------------------+
| article                |
| categorie              |
| categorie_article      |
| commentaire            |
| utilisateur            |
| vm_article_commentaire |
+------------------------+
article
+------------------+------------------+------+-----+---------+----------------+
| Field            | Type             | Null | Key | Default | Extra          |
+------------------+------------------+------+-----+---------+----------------+
| id               | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| titre            | varchar(200)     | NO   |     | NULL    |                |
| resume           | text             | YES  |     | NULL    |                |
| contenu          | text             | NO   |     | NULL    |                |
| auteur_id        | int(10) unsigned | NO   | MUL | NULL    |                |
| date_publication | datetime         | NO   | MUL | NULL    |                |
+------------------+------------------+------+-----+---------+----------------+
categorie
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| nom   | varchar(150)     | NO   |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
categorie_article
+--------------+------------------+------+-----+---------+-------+
| Field        | Type             | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------+-------+
| categorie_id | int(10) unsigned | NO   | PRI | NULL    |       |
| article_id   | int(10) unsigned | NO   | PRI | NULL    |       |
+--------------+------------------+------+-----+---------+-------+
Commentaire
+------------------+------------------+------+-----+---------+----------------+
| Field            | Type             | Null | Key | Default | Extra          |
+------------------+------------------+------+-----+---------+----------------+
| id               | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| article_id       | int(10) unsigned | NO   | MUL | NULL    |                |
| auteur_id        | int(10) unsigned | YES  | MUL | NULL    |                |
| contenu          | text             | NO   |     | NULL    |                |
| date_commentaire | datetime         | NO   | MUL | NULL    |                |
+------------------+------------------+------+-----+---------+----------------+
Utilisateur
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| pseudo   | varchar(100)     | NO   | UNI | NULL    |                |
| email    | varchar(200)     | NO   | UNI | NULL    |                |
| password | char(40)         | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+


VM_Article_commentaire
+--------------------+------------------+------+-----+---------+-------+
| Field              | Type             | Null | Key | Default | Extra |
+--------------------+------------------+------+-----+---------+-------+
| id                 | int(10) unsigned | NO   |     | 0       |       |
| titre              | varchar(200)     | NO   |     | NULL    |       |
| resume             | text             | YES  |     | NULL    |       |
| date_publication   | varchar(10)      | YES  |     | NULL    |       |
| pseudo             | varchar(100)     | NO   |     | NULL    |       |
| nombre_commentaire | bigint(21)       | NO   |     | 0       |       |
+--------------------+------------------+------+-----+---------+-------+


J'ai donc deux champs "titre" .

1 dans la table Article et l'autre dans la vue matérialisée VM_Article_commentaire

Est-ce que le problème est à cause de la jointure sur la vue matérialisée ou mon TRIGGER qui n'est pas bon?

Ou bien autre chose encore?

En attendant de vous lire je retourne revoir les cour une énième fois.:'(

  • Partager sur Facebook
  • Partager sur Twitter
Enjoy your life (^^,)
20 mars 2017 à 9:10:13

Bonjour,

Dans ton TRIGGER, pour un article dont on poste le premier commentaire tu fais un INSERT dans ta vue matérialisée ... sans le titre ... or le titre ne peut être NULL pour cette table (cf. la ligne 17 de ton dernier code) ...

Selon moi, ta solution de vue matérialisée n'est pas la bonne pour résoudre ce problème car tu dois dupliquer trop d'informations dans ta vue ...

Réfléchis plutôt à une autre possibilité (je ne veux pas te spoiler le cours) ...

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
20 mars 2017 à 9:28:17

Bonjour Benzouye,

Merci je comprend enfin mon erreur, désoler il y a des jours où j'ai du mal à faire les connexion^^

Ne spoile surtout pas!

Je vais pouvoir avancer maintenant, encore merci pour cette explication plus détaillé!

  • Partager sur Facebook
  • Partager sur Twitter
Enjoy your life (^^,)
7 avril 2017 à 9:58:40

Bonjour,

Nous sommes deux collaborateurs et nous aimerions travailler en même temps sur MySQL pour créer les bases de données à partir du même serveur (Wampserver), comment faire ? 

Merci

Bien à vous

  • Partager sur Facebook
  • Partager sur Twitter
7 avril 2017 à 14:27:54

@leandremasse cherche du côté des utilisateurs et de leur droit mais aussi les vues
  • Partager sur Facebook
  • Partager sur Twitter
L'important ce n'est pas d'être grand mais c'est être à la hauteur
14 avril 2017 à 20:33:31

Bonsoir chers amis(e)

Je viens par ce petit mot, vous demandez quelques informations. Seul on va plus vite, mais ensemble on va plus loin . 

Je suis entrain de travailler, pour un projet " Implementation et Mobilisation d'un systeme d'information et la gestion des patients d'un pays en voie du 

developpement. Enfin c'est mon projet de fin d'etude. 

J'ai deja fais l'analyse et creer des tables, puis codes mais je suis bloques a la fin pour finaliser et creer l'application. 

Besion des idees si quelq'un peut m'apporter des informations manquantes

Merci

Jora.

  • Partager sur Facebook
  • Partager sur Twitter
9 mai 2017 à 9:02:18

Bonjour, 

Je travail les bases de données en entreprise et j'ai donc commencé à suivre ce cours, seulement, je suis sur DB2, et je voulais savoir, sachant que je suis à l'exercice Activité_partie2, si il était possible que je puisse tout de même rendre l'exercice pour une correction, même si du coup certaines requêtes diffèrent sur DB2.

Lerenard Charly

  • Partager sur Facebook
  • Partager sur Twitter
11 mai 2017 à 10:46:12

@Belle JoraItoua donne plus de précision quel langage as-tu utilisé, quel type d'application veux-tu ? Du desk, android ou IOS ou tous à la fois

@CharlyLerenard1 si tu suis ce cours tu dois rendre les devoirs correspondants au tuto DB2 ce n'est pas MySQL c'est comme si à la fac on t'enseigne du Java et que sur les TP tu demandes à faire tes codes en C# ou C++ vu qu'ils sont tous des langages objets

  • Partager sur Facebook
  • Partager sur Twitter
L'important ce n'est pas d'être grand mais c'est être à la hauteur
12 mai 2017 à 14:22:47

Hum d'accord LordBeerus, merci pour ton avis
  • Partager sur Facebook
  • Partager sur Twitter
2 juin 2017 à 13:03:31


Bonjour,

J'en suis au chapitre sur les jointures de tables du cours "administrez vos bdd avec MySQL".

J'effectue une requête sur 2 tables: Animal et Espece et je dois afficher le commentaire (de la table Espece) concernant l'animal 'Cartouche' (de la table Animal). La table Espece contient 4 entrées, correspondant aux 4 especes utilisées dans l'exercice.

Logiquement, vue ma requête, seul le commentaire concernant l'espèce à laquelle appartient l'animal 'Cartouche' devrait s'afficher. Or tous les commentaires (des 4 espèces) s'affichent.

J'ai bien sûr la possibilité d'effacer toutes les tables et de recommencer :( mais j'aimerais autant savoir d'où peut venir l'erreur et essayer de la résoudre....

Merci d'avance de votre aide ;)

  • Partager sur Facebook
  • Partager sur Twitter
2 juin 2017 à 15:31:03

Bonjour,

Dans le ON tu as une erreur : Espece.id au lieu de Espece_id ...

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
2 juin 2017 à 17:29:29

ah ben oui tout de suite ça va mieux !

pas les yeux en face des trous ce matin !

Merci Benzouye :)

  • Partager sur Facebook
  • Partager sur Twitter
20 juin 2017 à 12:16:03

Bonjour,

J'ai le même problème que cette personne, mais je n'ai pas trouvé la réponse dans le forum...

Est-ce que quelqu'un pourrait m'aider?

Merci!


raphaelaboussou a écrit:

Bonjour,

J'ai fini l'installation de MySQL sur mon PC, et j'ai lancé l'invite de commande et inséré le chemin d'accès au dossier "bin". Mais quand je tape la syntaxe pour me connecter: <mysql -u root -p > ; Je reçois comme message d'erreur < 'mysql' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier>.

Que dois-je faire?

Ensuite, faut-il ,à chaque fois, inséré le chemin d'accès au dossier 'bin'  avant de taper la commande "mysql..."?



  • Partager sur Facebook
  • Partager sur Twitter
20 juin 2017 à 12:39:12

Bonjour 

Tu dois aller dans les paramètre de système de ton pc. Tu cherche 'variables d’environnement' et tu modifie le path en y ajoutant le chemin d'accès à la suite de ce qui est existant séparé par un ;

  • Partager sur Facebook
  • Partager sur Twitter
13 juillet 2017 à 20:05:01

Salut! Je vous fecilite pou votre cours, motre methodologie me plait beaucoup. Merci beaucoup, ce cours m'a beaucoup aidÉ. Mais, je n'arrive toujours pas a bien comprendre la notion d'enregistrement de ma base de donnee. J'aimerais avoir une explication supplementaire la-dessus.
  • Partager sur Facebook
  • Partager sur Twitter
14 juillet 2017 à 12:52:53

Bonjour,

BlanGuerno a écrit:

la notion d'enregistrement de ma base de donnee

En base de données relationnelle, un enregistrement est un élément d'une table, une ligne. Par exemple, si tu as une table "article" destinée à stocker les articles d'un blog, chaque article stocké dans la table est un enregistrement.

Je ne sais pas si c'est cela que tu entendais par enregistrement ...

Sinon peux-tu mettre un lien vers la partie du cours qui évoque cette notion ?

-
Edité par Benzouye 14 juillet 2017 à 12:53:36

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
18 juillet 2017 à 18:39:03

Bonjour,

J'ai un problème concernant l'insertion de donnée dans une table via le fichier csv.

Le Problème est que seul la première ligne apparait dans la table après la saisie les commandes du cours.

Que dois-je faire?

-
Edité par Halim.2.0 18 juillet 2017 à 18:51:45

  • Partager sur Facebook
  • Partager sur Twitter
25 juillet 2017 à 20:34:12

Bonjour, 

je suis en train de corriger les premières activités du cours, et voici ce que donne une des activités :

Que dois-je faire ?

  • Partager sur Facebook
  • Partager sur Twitter
26 juillet 2017 à 14:58:28

Bonjour,

Concernant le cours sur l'administration d'une base de données avec MySQL, je bloque sur la dernière activité du cours.

Je souhaite implémenter un trigger dont voici le code :

DELIMITER |
CREATE TRIGGER after_insert_article AFTER INSERT
ON Article FOR EACH ROW
BEGIN
	INSERT INTO VM_Nombre_com_article (article_id, nb_com)
	VALUES (NEW.id, 0);
	IF (New.resume IS NULL OR TRIM(New.resume) = '') THEN
		UPDATE Article
		SET resume = SUBSTR(New.contenu, 1, 150)
		WHERE id = NEW.id;
	END IF;
END |
DELIMITER ;

Je ne comprends pas pourquoi cela ne fonctionne pas. J'ai l'impression que :

  • soit le code dans IF n'est pas exécuté (ce qui signifierait que ma condition n'est jamais vérifiée, et pourtant !)
  • soit il est exécuté, mais MySQL me réponds avec un message d'erreur :
#1442 - Can't update table 'Article' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Si vous avez la solution, du moins me mettre sur la voie, ce serait génial.

Merci d'avance.

Vincent

-
Edité par vincent48 26 juillet 2017 à 14:59:15

  • Partager sur Facebook
  • Partager sur Twitter

Vincent ERHART

Formateur / Développeur web

31 août 2017 à 16:19:28

Bonjour, je suis à l'exercice des jointure de tables. Lorsque je fais 

mysql> SELECT description FROM Espece WHERE id = 1;
+---------------------------------------------------------------------------+
| description                                                               |
+---------------------------------------------------------------------------+
| Bestiole à quatre pattes qui aime les caresses et tire souvent la langue  |
+---------------------------------------------------------------------------+
1 row in set (0.00 sec)

 Puis:

mysql> SELECT Espece.description 
    -> FROM Espece 
    -> INNER JOIN Animal 
    ->     ON Espece.id = Animal.espece_id 
    -> WHERE Animal.nom = 'Cartouche';
Empty set (0.00 sec)


Je ne comprend pas pourquoi. Pouvez-vous m'aider SVP.


  • Partager sur Facebook
  • Partager sur Twitter
31 août 2017 à 17:14:35

Bonjour,

Et si tu fais :

SELECT *
FROM Animal
WHERE nom = 'Cartouche'

Qu'obtiens-tu ? Il n'y a peut-être aucun animal du nom de Cartouche ...

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
31 août 2017 à 22:49:24

mysql> SELECT *
    -> FROM Animal
    -> WHERE nom = 'Cartouche';
Empty set (0.01 sec)
  • Partager sur Facebook
  • Partager sur Twitter
1 septembre 2017 à 0:22:27

Bonjour ! Je travail sur l'activité partie 6 du cours sur MySQL, et je suis bloqué à la première consigne : 

"Sur la page d’accueil, on affiche le nombre de commentaires de chaque article. On veut éviter de calculer cela à chaque affichage de la page.  Il faut donc stocker ce nombre quelque part, et automatiser sa mise à jour afin que l’information soit toujours exacte"

Donc j'ai créé une nouvelle colonne (nbre_de_comm) sur la table Article, puis j'ai écris la procédure suivante pour la remplir :

Et lorsque je vérifie j'obtiens un total de 6 commentaires :

Alors que je qu'il y en a 10...

Pouvez vous m'aidez à remplir correctement ma colonne s'il vous-plaît ?

Charly

-
Edité par CharlyLerenard1 1 septembre 2017 à 0:25:03

  • Partager sur Facebook
  • Partager sur Twitter
1 septembre 2017 à 8:56:22

@wakidaisho : Donc il n'y a aucun animal appelé Cartouche, c'est normal que ta requête ne remonte rien ...

@charlylerenard1 : La logique serait d'initialiser la valeur de la colonne nbre_de_comm une première fois, puis de mettre en place un TRIGGER AFTER INSERT ON commentaire et un TRIGGER AFTER DELETE ON commentaire, pour mettre à jour cette valeur à chaque nouveau commentaire.

Pour initialiser la valeur de ta colonne, ta procédure est farfelue ... Tu pourrais d'ailleurs faire cela sans procédure, avec un UPDATE avec une jointure sur une sous-requête :

UPDATE article A
INNER JOIN (
    SELECT article_id, COUNT(*) AS nb_comment
    FROM commentaire
    GROUP BY article_id
) C
SET A.nbre_de_comm = C.nb_comment;

Et le TRIGGER contiendra un simple UPDATE utilisant l'article_id d'un nouveau commentaire :

UPDATE article
SET nbre_de_comm = nbre_de_comm + 1
WHERE id = NEW.article_id;

Et sur suppression d'un commentaire :

UPDATE article
SET nbre_de_comm = nbre_de_comm - 1
WHERE id = OLD.article_id;

-
Edité par Benzouye 1 septembre 2017 à 8:58:09

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
1 septembre 2017 à 9:16:39

Bonjour, oui en effet j'avais compris l'idée ;)

Je suivis le tp à la lettre pourtant. Bref. Du coup j'essais d'inserer de la données. Mais je rencontre tout de même un problème.

mysql> INSERT INTO Animal (sexe, date_naissance, nom, commentaires,espece_id) VALUES
    -> ('F', '2008-02-20 15:45:00', 'Canaille', NULL, 12345);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`Elevage`.`Animal`, CONSTRAINT `fk_espece_id` FOREIGN KEY (`espece_id`) REFERENCES `Espece` (`id`))



  • Partager sur Facebook
  • Partager sur Twitter
1 septembre 2017 à 9:33:18

Wakidaisho a écrit:

je rencontre tout de même un problème.

a foreign key constraint fails CONSTRAINT `fk_espece_id` FOREIGN KEY (`espece_id`) REFERENCES `Espece` (`id`))
Cela signifie que tu essayes d'insérer un animal avec une valeur pour espece_id (ici 12345) qui n'existe pas dans la table espece ... C'est le principe des clés étrangères ... Il faut que espece_id de la table animal corresponde à un id de la table espece ...
  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
1 septembre 2017 à 10:54:14

Je suis désolé, je suis en mode apprentis. Oui en effet, maintenant que tu le dis... C'est soit un chien, un chat, Tortue ou perroquet ^^  Ou j'insère une Espece 12345. 

Sorry...

  • Partager sur Facebook
  • Partager sur Twitter