IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez MySQL Discussion :

La FAQ MySQL - commentaires & suggestions


Sujet :

Contribuez MySQL

  1. #21
    Membre averti Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Points : 388
    Points
    388
    Par défaut
    Je propose quelque chose pour la communauté :

    La liste des pays francais/anglais avec les codes avec insertion dans MYSQL.

    Télécharger le fichier, plus d'infos sur le site
    Tuxboard Blog d'actu Buzz...
    Video de sport

  2. #22
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Voici une fonction qui permet de mettre le premier caractère en majuscule. Mysql5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE FUNCTION `ucfirst`(p_str VARCHAR(255))
        RETURNS varchar(255)
        NOT DETERMINISTIC
        CONTAINS SQL
        SQL SECURITY DEFINER
        COMMENT ''
    BEGIN
         DECLARE strOut VARCHAR(255);
         SET strOut = TRIM(p_str);
         SET strOut = CONCAT(UPPER(LEFT(strOut,1)), RIGHT(strOut,CHARACTER_LENGTH(strOut)-1));
         RETURN strOut;
    END;
    N'étant pas satisfait du uuid() mysql pour une raison particulière je m'en suis fait une.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    CREATE FUNCTION `UUIDII`()
        RETURNS char(36)
        DETERMINISTIC
        CONTAINS SQL
        SQL SECURITY DEFINER
        COMMENT ''
    BEGIN
         DECLARE hashe1 VARCHAR(8);
         DECLARE hashe2 CHAR(4);
         DECLARE hashe3 CHAR(4);
         DECLARE hashe4 CHAR(4);
         DECLARE hashe5 CHAR(12);
         DECLARE hasheRef CHAR(36);
     
         SET hashe1 = SUBSTRING(MD5(RAND()),25);
         SET hashe2 = SUBSTRING(MD5(RAND()),29);
         SET hashe3 = SUBSTRING(MD5(RAND()),29);
         SET hashe4 = SUBSTRING(MD5(RAND()),29);
         SET hashe5 = SUBSTRING(MD5(RAND()),21);
         SET hasheRef = CONCAT_WS('-', hashe1, hashe2, hashe3, hashe4, hashe5);
         RETURN hasheRef;
    END;
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  3. #23
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Citation Envoyé par Joe Le Mort Voir le message
    Je propose quelque chose pour la communauté :

    La liste des pays francais/anglais avec les codes avec insertion dans MYSQL.

    Télécharger le fichier, plus d'infos sur le site
    Il existe une norme (déclinée) pour cela : ISO 3611. Je pense qu'un lien vers cette norme est préférable, car constamment à jour.
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  4. #24
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Citation Envoyé par berceker united Voir le message
    N'étant pas satisfait du uuid() mysql pour une raison particulière je m'en suis fait une.
    Merci

    Juste une question : Quelle est cette raison ? On pourrait peut-être la commenter ainsi.
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  5. #25
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par Alexandre T Voir le message
    Merci

    Juste une question : Quelle est cette raison ? On pourrait peut-être la commenter ainsi.
    En fait, je me suis intéressé à ça pour pa passer les identifiant d'enregistrement en paramètre. productid=12. 12 qui correspond un l'id d'un enregistrement dans une table. Pour un produit pas de probleme si c'est à 12 mais un concurrent voi 12785. Surtout qu'il peut savoir que les données sont autoincrémenté. En terme de sécurité c'est un peut risqué de mettre des données sensible.
    le UUID peut fausser l'information et ne montre aucune hiérarchie ni un sens logic à un paramètre. Apparement il se base sur des identifiant reseau. Ce qui affiche un peut pret toujours les mêmes données (12 premiers caractères) mais sans qu'elle puisse être identique. Je voulais rendre l'information plus flou. J'ai donc fait un UUID() à ma sauce.

    J'ai une table qui possède tous les id utilisés afin qu'il ne puisse en créer un indentique. Toute les tables qui doivent communiquer avec l'extérieur doivent passer par cette table "Table InOut".
    Pour des raisons de développment et de maintenance chaque enregistrement de cette table (InOut) possède le nom de la table et id qui l'utilise. Ainsi je peux savoir qui utilise cette uuid.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  6. #26
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Petite proposition : comment désactiver la commande (destructrice) DROP DATABASE avec PhpMyAdmin :
    http://www.developpez.net/forums/sho...d.php?t=403838

  7. #27
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Voici une fonction permettant de faire une split d'une chaine. Celui-ci retourne un tableau. En fait, ce n'est pas une fonction mais une procédure stocké. La raison est qu'une fonction n'accepte pas des chaines de caractère avec des accents.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    CREATE PROCEDURE `Split`(IN p_str TEXT, IN p_delimiter CHAR(1))
        DETERMINISTIC
        CONTAINS SQL
        SQL SECURITY INVOKER
        COMMENT ''
    BEGIN
         DECLARE Pos INTEGER(11);
         DECLARE sub_Str TEXT;
     
         SET Pos     = 1;
         SET sub_Str = '';
     
         BEGIN
              CREATE TEMPORARY TABLE IF NOT EXISTS t_split(
                     `idItem` INTEGER(11) UNSIGNED NOT NULL AUTO_INCREMENT,
                     `Item` TEXT,
                     PRIMARY KEY  (`idItem`)
              ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT = 'Tempory table';
         END;
     
         TRUNCATE t_split;
     
         COMMIT;
     
         WHILE Pos <= LENGTH(p_str) DO
               BEGIN
                    IF SUBSTRING(p_str, Pos, 1) <> p_delimiter THEN
    				   SET sub_Str = CONCAT(sub_Str, SUBSTRING(p_str, Pos, 1));
    		        ELSE
    					INSERT INTO t_split (Item) VALUES(sub_Str);
    					SET sub_Str = '';		
                    END IF;
     
                    IF LENGTH(p_str) = Pos THEN
                       INSERT INTO t_split (Item) VALUES(sub_Str);
                    END IF;
     
                    SET Pos = (Pos + 1);
               END;
         END WHILE;
         SELECT * FROM t_split;
    END;
     
    CALL Split('titi|tata|tutu','|');
    SELECT * FROM t_split;
    La procédure stocké va envoyé le resultat dans une table temporaire nommé t_split.
    Si vous executez la procédure il vous retourne une table avec deux champs IdItem et Item.
    De là, vous pouvez encore récupérer le resultat en faisant select * from t_split pour travailler dessus.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  8. #28
    Membre expérimenté

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Points : 1 493
    Points
    1 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par le lynx Voir le message

    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
    ODBC et le driver fournit par mysql non

  9. #29
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par Michel Voir le message
    ODBC et le driver fournit par mysql non
    Je rajouterais même MyODBC
    Le driver odbc pour Mysql
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  10. #30
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Bonjour,

    je ne sais pas trop si cette question est déjà posée dans la FAQ, en tout cas j'ai rencontré le problème ce matin à savoir calculer l'âge d'un individu en fonction de sa date de naissance au format date %d/%m/%Y et je propose cette solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT
          YEAR(NOW()) - YEAR(DATE_NAISSANCE) +
          IF(DATEDIFF(
               STR_TO_DATE(CONCAT('0001', DATE_FORMAT(NOW(), '%d%m')), '%Y%d%m'),
               STR_TO_DATE(CONCAT('0001', DATE_FORMAT(DATE_NAISSANCE, '%d%m')), '%Y%d%m')
             ) < 0, -1, 0)
    FROM DUAL
    En espérant que ce bout de code puisse aider du monde
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

  11. #31
    Membre à l'essai
    Profil pro
    aucun
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 10
    Points
    10
    Par défaut Suggestion pour la FAQ
    J'ai une suggestion pour la faq

    Connaitre la prochaine valeur d'un champ auto-incrémenté

    L'information se trouve dans le STATUS de la table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $req = "SHOW TABLE STATUS LIKE 'MATABLE'";
    $res = mysql_query($req);
    $q = mysql_fetch_object($res);
    echo "La prochaine valeur sera : ".$q->Auto_increment;

  12. #32
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Je déconseille fortement cette pratique. En effet, si elle fonctionne quand un seul utilisateur est connecté à la base de données, elle sera source d'erreur dans le cas de requêtes concurrentes. Je conseille plutôt de sélectionner la prochaine valeur avec NEXTVAL() et ensuite de s'en servir (ou pas). Si on ne se sert pas de la prochaine valeur, on perd juste un numéro dans l'incrémentation, et personne n'en mourra. On place rarement un champ autoincrémenté sur un entier très court.
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  13. #33
    Membre à l'essai
    Profil pro
    aucun
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Alexandre T Voir le message
    Je déconseille fortement cette pratique. En effet, si elle fonctionne quand un seul utilisateur est connecté à la base de données, elle sera source d'erreur dans le cas de requêtes concurrentes. Je conseille plutôt de sélectionner la prochaine valeur avec NEXTVAL() et ensuite de s'en servir (ou pas). Si on ne se sert pas de la prochaine valeur, on perd juste un numéro dans l'incrémentation, et personne n'en mourra. On place rarement un champ autoincrémenté sur un entier très court.
    Tu pourrais donner un exemple avec ton NEXTVAL() ? car je connais pas du tout et je comprend pas l'histoire de requete concurente. Merci

  14. #34
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Bonjour,

    En effet il est déconseillé d'appliquer l'identification d'un tuple coté applicatif (ici PHP).

    Si deux personnes accèdent à cette page quasi-simultanément, alors ils auront strictement la même valeur d'auto-increment. Si ensuite ils affectent cette valeur comme identifiant lors d'un insert, le premier à executer la requête n'y verra rien, mais le second sera sanctionné sans doute d'une violation de l'intégritée référentielle.
    Avec NEXTVAL, lors de son appel, on récupère la valeur suivante, mais l'auto-increment est également incrémenté. Ainsi, même avec deux requêtes quasi-simultanées, les deux client auront deux clé différentes, et il n'y a plus de risques au niveau de l'intégritée.

    A ma connaissances NEXTVAL existe que sur des sequences, qui sont des objets dédiés à l'identification de tuples. Je t'invite donc à te renseigner a leurs sujets
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  15. #35
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    http://mysql.developpez.com/faq/?pag..._INCREMENT_max

    Par contre, c'est bien la première fois que j'entends parler de séquences et de NEXTVAL dans MySQL... Alex, tu confirmes ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  16. #36
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Je me suis peut-être mal exprimé. Quand je parle de sequence et NEXTVAL je ne faisait qu'expliquer le fonctionnement d'une séquence, faisant référence au message d'Alex.

    Pour ma part je n'ai également jamais croisé de sequences avec MySQL, mais rien ne nous empeche de les reproduire si besoin il y a.
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  17. #37
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Je pense que celui qui s'est le plus mal exprimé c'est moi surtout. Je travailles désormais essentiellement sous Postgres et nous migrons nos applications sous MySql pour certains clients qui ont déjà un serveur MySQL et qui ne veulent pas d'un second serveur de base de données.

    Nous estimons (c'est un constat personnel lié à nos applications) que l'autoincrémentation n'est pas une solution intéressante. Alors nous avons reproduit le fonctionnement des séquences. La méthode est simple, si simple que j'en oublie que ce n'est pas un module de MySQL. On crée une table avec un champ identifiant la table et la valeur de la clef. Un des développeurs de notre équipe a créé les fonctions qui vont avec les séquences (currval, nextval, setval). Le premier paramètre de cette valeur est l'identifiant de la table. Malheuresement les copyright actuels sur ce code ne me permettent pas de le communiquer. Comme nous sommes dans une politique d'ouverture de code au sein du MEEDDATT, je vais essayer de voir.
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  18. #38
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par Alexandre T Voir le message
    Nous estimons (c'est un constat personnel lié à nos applications) que l'autoincrémentation n'est pas une solution intéressante.
    Par curiosité, qu'est-ce qui vous a amené à cette conclusion ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  19. #39
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Alors je précise avant tout qu'ici, je n'exprime qu'une opinion personnelle. Ce n'est en rien une vérité. L'auto incrémentation est très interessante dans 98% des cas. Une clef primaire auto-incrémentée sans séquence est pratique sauf dans deux cas à mon sens

    Le premier cas concerne les procédures qui nécessitent plusieurs évènements. Nous trouvons préférable de faire appel à tous les identifiants avant les insertions, puis de tout insérer d'un bloc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Appel de la séquence des personnes
    Appel de la séquence des adresses
    Requête pour récupérer le code du groupe par défaut
    Début de transaction
    Insertion dans la table des personnes des valeurs avec la séquence des personnes
    Insertion dans la table des groupes d'utilisateurs des valeurs obtenues avec la séquence des personnes et de la requête des groupes
    Insertion dans la table 3 des valeurs des séquences 1 et 2
    Fin de transaction
    Nous avons remarqué que de grouper les trois insertions étaient moins problématiques que de faire des sélections entre. En effet, les verrous sont moins longtemps présents. (Et quand nous insérons des données à chaque fois qu'un véhicule passe devant une cellule c'est important de diminuer la durée des verrous)

    Une autre utilité est pour certaines clefs plus "naturelles". L'autoincrémentation de Mysql simule en fait une séquence commençant à et avec un pas de 1. Nous avons parfois besoin d'avoir un pas différent. Il est rarement de 2 ou 3 ou quelquechose comme cela. Mais régulièrement nous avons besoin (pour des raisons historiques) de pas de -1.

    (Une autre utilité des séquences vient dans le portage des procédures stockées de PostGreSQL à MySQL, le portage du code se simplifie car on a juste à rajouter un argument dans la fonction nextval, alors que sinon on doit parfois réfléchir à changer l'ordre de l'algortihme.)

    PAr contre, ce que je trouve vraiment génial dans MySQL, c'est l'autoincrémentation sur une colonne secondaire ! Pour des notions de rang, c'est vraiment génial, et je n'arrive pas à le reproduire avec les séquences dans PostGreSQL.

    Exemple de la documentation (regardez bien sur quoi porte la clef primaire)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE animals (
                 grp ENUM('fish','mammal','bird') NOT NULL,
                 id MEDIUMINT NOT NULL AUTO_INCREMENT,
                 name CHAR(30) NOT NULL,
                 PRIMARY KEY (grp,id)
                 );
    INSERT INTO animals (grp,name) VALUES("mammal","dog"),("mammal","cat"),
                      ("bird","penguin"),("fish","lax"),("mammal","whale"),
                      ("bird","ostrich");
    SELECT * FROM animals ORDER BY grp,id;
    Cela retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    +--------+----+---------+
    | grp    | id | name    |
    +--------+----+---------+
    | fish   |  1 | lax     |
    | mammal |  1 | dog     |
    | mammal |  2 | cat     |
    | mammal |  3 | whale   |
    | bird   |  1 | penguin |
    | bird   |  2 | ostrich |
    +--------+----+---------+
    Dans nos applications c'est utile. Imaginez notre table des tronçons d'autoroute. On ne gère pas dans mysql l'ordre. On balance nos scripts en classant juste les tronçons dans l'ordre, sans gérer les numéros, MySQL fait le reste. Dans PostGreSQL, on doit nous même inventer ces numéros ou mettre une séquence, qui ne fera pas attention à la première valeur de la table. (bref qui ne recommencera pas à 1 en somme, pour chaque autoroute)
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  20. #40
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut
    salut,

    en passant en revue la faq mysql, je n'y ai pas trouvé une entrée qui me paraissait pourtant simple et "frequente": comment mettre les données de mysql ailleurs que dans le répertoire par défaut (/var/lib/mysql) ?

    il m'est arrivé un truc tt bete recemment : /var/lib/mysql était sur une partition systeme de taille modeste (c'est le cas sur la plupart des servers loués par defaut). Or en entame de nouveau projet qui fait appel à des volumes de données importants, j'ai saturé cette partition avec les données de mysql.
    il me fallait donc déplacer le répertoire des données de mysql.

    apres bon... je n'ai pas écrit une belle entrée de FAQ bien propre, je ne dis pas non plus que je saurais en écrire une qui marcherait sur tous les systemes,
    mais si ca peut aider des gens, je veux bien en écrire une et la proposer ici


    une telle entrée aurait-elle sa place dans la faq mysql ? ca interesse qqn ?

Discussions similaires

  1. Nouvelle FAQ OpenGL en ligne : commentaires et suggestions
    Par LittleWhite dans le forum OpenGL
    Réponses: 7
    Dernier message: 02/05/2016, 19h54
  2. Réponses: 14
    Dernier message: 22/03/2013, 21h13
  3. Nouvelle FAQ DirectX en ligne : commentaires et suggestions
    Par LittleWhite dans le forum DirectX
    Réponses: 5
    Dernier message: 13/10/2009, 09h26
  4. les sources MySQL - commentaires & suggestions
    Par Alain Defrance dans le forum Contribuez
    Réponses: 0
    Dernier message: 21/11/2008, 12h22
  5. Nouvelle FAQ Prog 3D en ligne : commentaires et suggestions
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 20/08/2008, 19h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo