Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Contribuez
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 07/06/2007, 16h50   #21
Joe Le Mort
Membre éclairé
 
Avatar de Joe Le Mort
 
Inscription : avril 2006
Messages : 392
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : avril 2006
Messages : 392
Points : 348
Points : 348
Envoyer un message via MSN à Joe Le Mort
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
Joe Le Mort est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2007, 18h53   #22
berceker united
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 3 030
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 030
Points : 3 991
Points : 3 991
Voici une fonction qui permet de mettre le premier caractère en majuscule. Mysql5

Code :
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 :
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 !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 09h47   #23
Alexandre T
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 023
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 023
Points : 1 352
Points : 1 352
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 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
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 09h48   #24
Alexandre T
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 023
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 023
Points : 1 352
Points : 1 352
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 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
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 17h22   #25
berceker united
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 3 030
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 030
Points : 3 991
Points : 3 991
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 !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 12h00   #26
guidav
Membre émérite
 
Inscription : janvier 2006
Messages : 953
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 953
Points : 813
Points : 813
Petite proposition : comment désactiver la commande (destructrice) DROP DATABASE avec PhpMyAdmin :
http://www.developpez.net/forums/sho...d.php?t=403838
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2007, 22h41   #27
berceker united
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 3 030
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 030
Points : 3 991
Points : 3 991
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 :
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 !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 14h47   #28
Michel
Membre habitué
 
Homme Michel Plomteux
formateur web, linux
Inscription : mars 2002
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme Michel Plomteux
Âge : 63
Localisation : Belgique

Informations professionnelles :
Activité : formateur web, linux
Secteur : Enseignement

Informations forums :
Inscription : mars 2002
Messages : 99
Points : 129
Points : 129
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
Michel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 15h02   #29
berceker united
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 3 030
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 030
Points : 3 991
Points : 3 991
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 !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2008, 10h19   #30
nounetmasque
Membre éprouvé
 
Avatar de nounetmasque
 
Inscription : janvier 2003
Messages : 491
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 491
Points : 483
Points : 483
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 :
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."
nounetmasque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2009, 15h50   #31
mac5im
Invité régulier
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : mai 2007
Messages : 6
Points : 6
Points : 6
Envoyer un message via MSN à mac5im Envoyer un message via Skype™ à mac5im
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 :
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;
mac5im est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2009, 17h30   #32
Alexandre T
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 023
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 023
Points : 1 352
Points : 1 352
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 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
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2009, 23h16   #33
mac5im
Invité régulier
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : mai 2007
Messages : 6
Points : 6
Points : 6
Envoyer un message via MSN à mac5im Envoyer un message via Skype™ à mac5im
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
mac5im est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2009, 00h18   #34
Alain Defrance
Expert Confirmé
 
Avatar de Alain Defrance
 
Homme Alain DEFRANCE
Project Lead
Inscription : août 2007
Messages : 1 994
Détails du profil
Informations personnelles :
Nom : Homme Alain DEFRANCE
Âge : 25
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Project Lead

Informations forums :
Inscription : août 2007
Messages : 1 994
Points : 3 487
Points : 3 487
Envoyer un message via MSN à Alain Defrance Envoyer un message via Skype™ à Alain Defrance
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 - http://www.alain-defrance.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
Project Lead eXo Social
Java Black Belt - Java Black Belt Coach
Alain Defrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2009, 01h10   #35
Antoun
Rédacteur/Modérateur
 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 877
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 43
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 877
Points : 10 330
Points : 10 330
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 est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2009, 01h23   #36
Alain Defrance
Expert Confirmé
 
Avatar de Alain Defrance
 
Homme Alain DEFRANCE
Project Lead
Inscription : août 2007
Messages : 1 994
Détails du profil
Informations personnelles :
Nom : Homme Alain DEFRANCE
Âge : 25
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Project Lead

Informations forums :
Inscription : août 2007
Messages : 1 994
Points : 3 487
Points : 3 487
Envoyer un message via MSN à Alain Defrance Envoyer un message via Skype™ à Alain Defrance
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 - http://www.alain-defrance.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
Project Lead eXo Social
Java Black Belt - Java Black Belt Coach
Alain Defrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2009, 11h11   #37
Alexandre T
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 023
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 023
Points : 1 352
Points : 1 352
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 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
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2009, 15h39   #38
Antoun
Rédacteur/Modérateur
 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 877
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 43
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 877
Points : 10 330
Points : 10 330
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 est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2009, 19h40   #39
Alexandre T
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 023
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 023
Points : 1 352
Points : 1 352
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 :
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 :
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 :
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 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
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2009, 15h08   #40
fourchette
Membre habitué
 
Inscription : février 2004
Messages : 342
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 342
Points : 148
Points : 148
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 ?
fourchette est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h38.


 
 
 
 
Partenaires

Hébergement Web