Publicité
+ Répondre à la discussion Actualité déjà publiée
Page 1 sur 3 123 DernièreDernière
Affichage des résultats 1 à 20 sur 49
  1. #1
    Expert Confirmé
    Avatar de yiannis
    Inscrit en
    septembre 2005
    Messages
    1 495
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 495
    Points : 2 570
    Points
    2 570

    Par défaut La FAQ MySQL - commentaires & suggestions

    La FAQ MySQL a subi un gros lifting : passage au format standard Développez.com, ajout de plus de 50 questions/réponses ; elle est désormais disponible à l'adresse : http://mysql.developpez.com/faq/.

    J'ai également le plaisir de remplacer Florian en tant que responsable de la FAQ, contactez-moi pour toute question, suggestion, critique...
    Les nouvelles Q/R ont été conçues à partir des questions fréquemment posées sur le forum ; nous espérons ainsi que cette FAQ répondra à vos problèmes les plus courants.

    D'autre part n'hésitez pas à poster vos propositions de Questions avec les réponses dans cette enfilade, vous pourrez de cette manière contribuer à son évolution.
    "Ce besoin de remords qui précède le Mal, que dis-je ! qui le crée..." E. CIORAN

  2. #2
    Invité régulier
    Inscrit en
    août 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : août 2004
    Messages : 12
    Points : 9
    Points
    9

    Par défaut

    Excellentissime, ça fait une heure que je cherche une fonction de date.

    Je viens de la trouver en 2 minutes...

    Bravo et merci!

  3. #3
    Membre du Club
    Inscrit en
    mai 2004
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : mai 2004
    Messages : 74
    Points : 41
    Points
    41

    Par défaut

    tres bonne faq qui convient aux debutants qu'aux personnes un peu plus expérimentées je constate avec joie que developpez.com est toujours une source sure pour les recherches

  4. #4
    Nouveau Membre du Club
    Inscrit en
    octobre 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 50
    Points : 33
    Points
    33

    Par défaut

    Salut,


    Je regarde cette faq pour la première fois.
    J'y voit plein d'infos intéressantes.
    J'y voit pas la réponse à mon problème: comment interfacer une appli ASP.NET avec MySQL, quel driver utiliser?
    Une info qui pourrait intéresser pas mal de gens!

    Philippe

  5. #5
    Membre actif
    Inscrit en
    octobre 2004
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 145
    Points : 154
    Points
    154

    Par défaut

    Trés bonne FAQ, relativement complete.
    Est-il prévu de rajouter des infos sur MaxDB ?

    pour le lynx, il existe un driver ODBC pour MySQL qui te permet d'interfacer MySQL avec une appli .net. Tu peux le trouver ici.

  6. #6
    Nouveau Membre du Club
    Inscrit en
    octobre 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 50
    Points : 33
    Points
    33

    Par défaut

    Oui, et il y a aussi cet article sur une connexion OLEDB
    http://morpheus.developpez.com/MySQLDotNet/
    A mon avis la FAQ devrait intégrer un pointeur vers ces 2 sources d'info.
    Philippe

  7. #7
    Rédacteur
    Avatar de Giovanny Temgoua
    Étudiant
    Inscrit en
    novembre 2003
    Messages
    3 830
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2003
    Messages : 3 830
    Points : 3 625
    Points
    3 625

    Par défaut

    Bonjour,

    Bon je débute encore avec MYSQL et dans le cadre d'un TP, on doit l'utiliser (sous EasyPHP 1.6) et comme je cherchais comment utiliser les transactions, en fouillant l'aide j'ai touvé cette solution. Voilà si elle vous semble interessante....

    Testé sous EasyPHP 1.6 qui utilise la version 3.23.49 de MySQL.
    [QR]Utiliser les transactions sous MySQL 3.23.xxx

    Le format par défaut des tables crées sous EasyPHP ne supporte pas les transactions (MyISAM). Il faut utiliser un format comme InnoDb qui n'est pas activé par défaut sous MySQL 3.23.xx, par exemple le serveur MySQL fournit avec EasyPHP 1.6 et en général pour les versions inférieures à la 4.1.

    Avant toute chose, il convient de connaître les moteurs de stockage supportés par votre serveur. Utilisez la commande et regardé la valeur de la variable have_innodb. Si celle-ci vaut No, cà ne vaut pas peine de continuer, si c'est Yes, vous pouvez d'ores et déjà créer des tables de ce format. Le paragraphe qui suit traite du cas où vous aurez la valeur Disabled qui signifie que le serveur supporte cette fonctionnalité mais qu'elle n'est pas activée.

    Il existe deux possibilités :
    1/se procurer le serveur MySQL-MAX qui est une version de MySQLd compilée avec --with-innodb qui active le support de InnoDb
    2/configurer le fichier my.ini situé dans <HOMEDRIVE>\Windows

    Pour réaliser la seconde solution, il faut aller dans le fichier my.ini et effacer (si elle existe) la ligne --skip-innodb et la remplacer au moins par l'option innodb_data_file_path qui spécifie le chemin des bases Innodb. par défaut, le repertoire de base sera celui où mysql stocke les données. Sinon utilisez innodb_data_home_dir pour spécifier un repertoire.

    Voilà, vous n'avez plus qu'à redémarrer le serveur et utilisez les instructions Begin (pour les versions de MySQL antérieures à la 4.0.11) ou Start transaction, commit pour valider les données et Rollback pour les annuler.
    A+

  8. #8
    Provisoirement toléré Avatar de Maximilian
    Inscrit en
    juin 2003
    Messages
    2 622
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 2 622
    Points : 2 595
    Points
    2 595

    Par défaut

    FAQ mise à jour avec les Q/R de le lynx, ren0 et King Kaiser.

    Pensez au bouton

  9. #9
    Rédacteur
    Avatar de Eric Berger
    Homme Profil pro Eric Berger
    Développeur .NET
    Inscrit en
    octobre 2002
    Messages
    344
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Berger
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : octobre 2002
    Messages : 344
    Points : 668
    Points
    668

    Par défaut

    Proposé par berceker united dans la rubrique PHP
    Citation Envoyé par berceker united
    Un INSERT comme un UPDATE (Mysql) ?

    Les insert sont de cette forme.
    Code :
    INSERT INTO ma_table (mes_champs) VALUES (mes_valeurs)
    Mais vous pouvez le faire a la forme update
    Code :
    INSERT ma_table SET (mes_champs = mes valeurs)
    Attention ceci est propre à Mysql et ne fait pas partie de la Norme SQL

  10. #10
    Rédacteur
    Avatar de Giovanny Temgoua
    Étudiant
    Inscrit en
    novembre 2003
    Messages
    3 830
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2003
    Messages : 3 830
    Points : 3 625
    Points
    3 625

    Par défaut

    Moi ce que je voudrais savoir c'est l'avantage de cette méthode au insert traditionnel....

  11. #11
    Rédacteur
    Avatar de Eric Berger
    Homme Profil pro Eric Berger
    Développeur .NET
    Inscrit en
    octobre 2002
    Messages
    344
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Berger
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : octobre 2002
    Messages : 344
    Points : 668
    Points
    668

    Par défaut

    certains trouveront peut-être plus lisible d'avoir des paires champ/valeur plutôt que d'avoir les champs puis les valeurs.... sinon personellement je n'y vois pas d'avantages.

  12. #12
    Expert Confirmé Sénior
    Avatar de berceker united
    Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    3 142
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2005
    Messages : 3 142
    Points : 4 360
    Points
    4 360

    Par défaut

    Il peut y avoir un petit avantage lorsqu'ont souhaite faire des requêtes dynamiquements.
    D'un coté il y a la relation champs=valeur et en parametre c'est soit update ou insert pas la peine d'écrire deux fois champs et valeur. Ainsi c'est plus facile pour la maintenance tous est centralisé au même endroit.
    Exemple :
    $req = "champs1=1,champs2=3,champ3=556";
    Code :
    1
    2
    3
     
    IF($id>0) mysql_query('UPDATE maTable SET'.$req.' WHERE id='.$i);
    else mysql_query('INSERT maTable SET '.$req);
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  13. #13
    Membre du Club
    Inscrit en
    juin 2005
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : juin 2005
    Messages : 80
    Points : 41
    Points
    41

    Par défaut Quick references Mysql

    Bonjour,

    Je me permet de vous recommander ce lien:
    http://www.digilife.be/quickreferenc...ySQL-4.02a.pdf

    Il s'agit des principales commandes Mysql sur une page recto-verso.

    Marco

  14. #14
    Membre émérite
    Inscrit en
    janvier 2006
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 967
    Points : 822
    Points
    822

    Par défaut

    Voici une proposition pour la FAQ

    Q :
    Comment rendre le champ d'une table dépendante d'une autre (comment lier 2 tables) ?

    R :
    Pour pouvoir lier 2 champs, il faut d'abord que les 2 conditions suivantes soient réunies :
    - les 2 champs doivent constituer la première colonne d'un index
    - les 2 champs doivent avoir le même format. Inutile de chercher à lier un champ VARCHAR(10) avec un champ VARCHAR(15). Inutile aussi de chercher à lier deux champs dont l'interclassement est différent (et en plus, c'est une source d'erreur pas facile à trouver).

    Selon le type de relation désiré, on peut décider ce qui arrive lorsque l'on effectue une action sur un enregistrement dans la table MERE :
    - les actions envisagées sont DELETE et UPDATE
    - les conséquences sur la table FILLE sont, pour chaque action : CASCADE (on efface/met à jour aussi la table FILLE), SET NULL (on met à NULL), NO ACTION (on ne fait rien) et RESTRICT (merci à quelqu'un de compléter, j'ignore ce que ça fait).

    Ensuite, supposons 2 tables MERE et FILLE.
    Pour que le champ NOM_FILLE de la table FILLE dépende du champ NOM_MERE de la table MERE, il faut effectuer la requête
    Code :
    1
    2
    ALTER TABLE `FILLE`
      ADD CONSTRAINT `FILLE_contrainte` FOREIGN KEY (`NOM_FILLE`) REFERENCES `MERE` (`NOM_MERE`) ON DELETE CASCADE ON UPDATE CASCADE
    Pour plus de théorie sur les bases relationnelles, n'hésitez pas à lire les cours de www.developpez.com

  15. #15
    Membre du Club
    Inscrit en
    septembre 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 72
    Points : 55
    Points
    55

    Par défaut Dernier enregistrement d'une table

    Encore une petite proposition :

    J'avais chercher sur le forum et sur la faq comment réccupérer le dernier enregistrement inséré, et je n'ai pas trouvé ce que je cherchais...

    Voici ma méthode, qui peux parfois être pratique dans certains cas, le mien est tordu, je dois l'admettre, mais elle peut être utile sur la faq :

    J'ai une base de donnée qui contient une clée primaire de référence de livre.

    Les enregistrements ne se suivent pas tous et il y a plusieurs catégories de livres.
    certains ont leur référence qui est comprise entre 0 et 200000 d'autre entre 300000 et 400000. ect...

    Ce n'est pas super, mais cela permet d'identifier rapidement la catégorie du livre selon la référence.

    Il n'y a pas d'AUTO_INCREMENT dans ma table, car il faut parfois saisir des livres dans une catégorie, et parfois dans d'autres catégories.

    Par défaut, sur une nouvelle fiche d'ouvrage, il est pratique d'avoir la derniere référence saisie incrémenté de 1.

    Voici donc les deux requêtes qui permettent de réccupérer le réel dernier enregistrement :

    SELECT COUNT(*) FROM `ma_table` WHERE 1;
    SELECT mon_dernier_enregistrement FROM `ma_table` LIMIT le_resultat_precedant, 1;

    Voila, ca peut toujours servir !

  16. #16
    Membre émérite
    Avatar de goldkey
    Inscrit en
    mars 2003
    Messages
    794
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : mars 2003
    Messages : 794
    Points : 962
    Points
    962

    Par défaut

    J'ai été récemment confronté au douleureux probleme de perte du mot de passe ROOT !!

    Voici le moyen de changer un mot de passe ROOT perdu:

    # Arrêter le serveur MySQL en tapant :
    /etc/rc.d/init.d/mysql stop

    # Redémarrer le server avec les options ci-dessous:
    /usr/bin/safe_mysqld —skip-grant-tables —skip-networking &

    # Ce connecter au serveur mysql avec :
    mysql mysql

    # Taper la ligne suivante (ou ’nouveau_mot_passe’ est le nouveau mot de passe) :
    UPDATE user SET password=PASSWORD(’nouveau_mot_passe’) WHERE User="root" AND Host="localhost" ;

    # Eteindre le serveur MySQL
    mysqladmin shutdown

    # Redémarrer le serveur correctement avec :
    /etc/rc.d/init.d/mysql start
    Yes We Can

  17. #17
    Expert Confirmé Sénior
    Avatar de berceker united
    Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    3 142
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2005
    Messages : 3 142
    Points : 4 360
    Points
    4 360

    Par défaut Comment optimiser une requête utilisant le limit

    L'utilisation d'un limit sur une ou des tables ayant beaucoup d'enregistrements peut énormement plomber le serveur. Surtout si vous retourner des gros contenu avec beaucoup sur des petites intervale de page. Par exemple un forum qui retourne 30 enregistrements et le pire c'est l'ajout de l'ORDER BY qui ici achève le CPU mais qui est quasi obligatoire.

    Pour optimiser les performances il faut deux requêtes.
    La première requête utilise le LIMIT mais ne retourne que les index.
    Code :
    SELECT idtopic FROM forum ORDER BY date LIMIT 100,130;
    De là, nous avons une suite d'index dans l'ordre.
    Dans la second requête vous utilisez la fonction IN(...). IN permet d'insérer un suite de valeur que vous souhaiter retourner.
    Code :
    SELECT * FROM forum WHERE idtopic IN(100,101,102,103,...);
    Sur des gros enregistrements vous sentirez la différence. J'en suis arrivé en faisant des test de volume. Arrivé à 100 000 enregistrements ça rame énormement avec le LIMIT intervale 30 + ORDER BY + champs TEXT et autres. Le temps d'affichage n'est pas acceptable pour le web. Venice 3200+ 1Go Mysql5 XP.

    Avec cette méthode c'est totalement liquide.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  18. #18
    Membre Expert
    Avatar de Alexandre T
    Profil pro
    Inscrit en
    mai 2002
    Messages
    1 023
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : mai 2002
    Messages : 1 023
    Points : 1 482
    Points
    1 482

    Par défaut

    Excellente méthode berceker united !

    Je viens de tester sur une base de données médiocrement modélisée et cela me donne de bons résultats. Par contre, sur une base correctement modélisé (taille d'enregistrement fixe, index ordonné), le gain est nul.

    Néanmoins, je changerais les valeurs de votre second exemple. Certains débutants pourrait faussement comprendre qu'il faut remplacer
    Code :
     SELECT *  FROM forum LIMIT 100,30
    par

    Code :
     SELECT * FROM forum WHERE id_topic IN (100, 101, 102, 103...., 128, 129, 130)

    Donc je conseillerais ces exemples :

    Code :
    SELECT idtopic  FROM forum LIMIT 100,30
    Code :
    SELECT * FROM forum WHERE idtopic IN(100,106,108,110,...,166,170);
    en précisant que la première requête à retourner 100,106,108,110,...,166,170
    Alexandre T.

    PHP5/MySQL5 Codes prêts à l'emploi
    30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

    Mes articles

  19. #19
    Membre Expert
    Avatar de Alexandre T
    Profil pro
    Inscrit en
    mai 2002
    Messages
    1 023
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : mai 2002
    Messages : 1 023
    Points : 1 482
    Points
    1 482

    Par défaut

    big_ben3333, je ne pense pas que votre solution soit apportée à la FAQ. En effet, elle résulte plus à mon sens d'une réflexion pour contourner des problèmes créés par une base très mal modélisé.

    Il existe des bases mal modélisé, et certaines astuces sont utiles, mais votre cas est assez particulier. De plus on peut planter votre méthode dans le cas d'utilisateurs réalisant des opérations simultanément ce qui est fréquent sur le web !

    Exemple

    Code :
    1
    2
    3
    4
    12h00m44secondes 034ms - utilisateur 1 insère le livre 1
    12h10m44secondes 080ms - utilisateur 1 insère le livre 2
    12h15m14secondes 034ms - utilisateur 2 insère le livre 3
    12h15m44secondes 041ms - utilisateur 1 insère le livre 4
    45 millisecondes après l'insertion du livre 2 vous exécuter votre méthode pour récupérer la valeur du livre 3.
    Si l'utilisateur 1 à inséré son livre 4 pendant cet intervalle de 45 millisecondes, votre algorithme retourne 4 et non 3 !
    Et la méthode avec LAST_INSERT_ID, elle, permet d'éviter les accès concurrents.

    Néanmoins, je vous remercie de votre aide et n'hésitez SURTOUT pas à nous conseiller d'autres questions-réponses
    Alexandre T.

    PHP5/MySQL5 Codes prêts à l'emploi
    30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

    Mes articles

  20. #20
    Expert Confirmé Sénior
    Avatar de berceker united
    Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    3 142
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2005
    Messages : 3 142
    Points : 4 360
    Points
    4 360

    Par défaut

    Citation Envoyé par Alexandre T
    Excellente méthode berceker united !

    Je viens de tester sur une base de données médiocrement modélisée et cela me donne de bons résultats. Par contre, sur une base correctement modélisé (taille d'enregistrement fixe, index ordonné), le gain est nul.

    Néanmoins, je changerais les valeurs de votre second exemple. Certains débutants pourrait faussement comprendre qu'il faut remplacer
    Code :
     SELECT *  FROM forum LIMIT 100,30
    par

    Code :
     SELECT * FROM forum WHERE id_topic IN (100, 101, 102, 103...., 128, 129, 130)

    Donc je conseillerais ces exemples :

    Code :
    SELECT idtopic  FROM forum LIMIT 100,30
    Code :
    SELECT * FROM forum WHERE idtopic IN(100,106,108,110,...,166,170);
    en précisant que la première requête à retourner 100,106,108,110,...,166,170
    Oui je comprend que cela puisse préter à confusion avec "idtopic". J'ai fais des test sur une table ayant plus de 100 000 enregistrements avec des champs TEXT de gros volume, j'ai constaté qu'il y a un gain. Sur un autre forum j'ai vu que c'étais une méthode à conseiller sur les forum.
    Il faut pas utiliser cette methode à toute les sauces.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •