Fonctions de chiffrements
<<<
Fonctions d'informations Fonctions diverses
>>>

13.8 Autres fonctions
13 Fonctions à utiliser dans les clauses SELECT et WHERE
 Manuel de Référence MySQL 4.1 : Version Française

Fonctions sur les bits
Fonctions de chiffrements
->Fonctions d'informations
Fonctions diverses

13.8.3 Fonctions d'informations

    BENCHMARK(count,expr)
    La fonction BENCHMARK() exécute l'expression expr de manière répétée count fois. Elle permet de tester la vélocité de MySQL lors du traitement d'une requête. Le résultat est toujours 0 . L'objectif de cette fonction ne se voit que du côté client, qui permet à ce dernier d'afficher la durée d'exécution de la requête :
    
    mysql> SELECT BENCHMARK(1000000,ENCODE("bonjour","au revoir"));
    +--------------------------------------------------+
    | BENCHMARK(1000000,ENCODE("bonjour","au revoir")) |
    +--------------------------------------------------+
    |                                                0 |
    +--------------------------------------------------+
    1 row in set (4.74 sec)
    Le temps affiché est le temps côté client, et non pas les ressources processeurs consommées. il est conseillé d'utiliser BENCHMARK() plusieurs fois de suite pour interpréter un résultat, en dehors de charges ponctuelles sur le serveur.
    CHARSET(str)
    Retourne le jeu de caractères de la chaîne argument.
    
    mysql> SELECT CHARSET('abc');
            -> 'latin1'
    mysql> SELECT CHARSET(CONVERT('abc' USING utf8));
            -> 'utf8'
    mysql> SELECT CHARSET(USER());
            -> 'utf8'
    CHARSET() a été ajouté en MySQL version 4.1.0.
    COERCIBILITY(str)
    Retourne la coercibilité de la collation de la chaîne argument.
    
    mysql> SELECT COERCIBILITY('abc' COLLATE latin1_swedish_ci);
            -> 0
    mysql> SELECT COERCIBILITY('abc');
            -> 3
    mysql> SELECT COERCIBILITY(USER());
            -> 2
    Les valeurs retournées possibles sont :
    Coercibilité Signification
    0 Collation explicite
    1 Par de collation
    2 Collation implicite
    3 Coercible
    Les valeurs les plus faibles ont la plus haute priorité.

    COERCIBILITY() a été ajouté en MySQL version 4.1.1.

    COLLATION(str)
    Retourne la collation du jeu de caractères de la chaîne argument.
    
    mysql> SELECT COLLATION('abc');
            -> 'latin1_swedish_ci'
    mysql> SELECT COLLATION(_utf8'abc');
            -> 'utf8_general_ci'
    COLLATION() a été ajouté en MySQL version 4.1.0.
    CONNECTION_ID()
    Retourne l'identifiant de connexion courant ( thread_id ). Chaque connexion a son propre identifiant unique.
    
    mysql> SELECT CONNECTION_ID();
            -> 23786
    CONNECTION_ID() a été ajouté en MySQL version 3.23.14.
    CURRENT_USER()
    Retourne le nom d'utilisateur et le nom d'hôte de la session courante. Cette valeur correspond au compte qui a été utilisé durant l'identification auprès du serveur. Cela peut être différent des valeurs de USER() .
    
    mysql> SELECT USER();
            -> 'davida@localhost'
    mysql> SELECT * FROM mysql.user;
    ERROR 1044: Access denied for user: '@localhost' to
    database 'mysql'
    mysql> SELECT CURRENT_USER();
            -> '@localhost'
    Cet exemple montre que même si le client a indiqué le nom d'utilisateur davida (comme mentionné par la fonction USER() ), le serveur a identifié le client comme un utilisateur anonyme (comme indiqué par la fonction CURRENT_USER() ). Une situation qui arrive s'il n'y a aucun compte de listé dans les tables de droits pour davida . CURRENT_USER() a été ajouté en MySQL version 4.0.6.
    DATABASE()
    Retourne le nom de la base de données courante :
    
    mysql> SELECT DATABASE();
            -> 'test'
    Si aucune base de données n'a été sélectionnée, DATABASE() retourne une chaîne vide. A partir de la version 4.1.1, elle retourne NULL .
    FOUND_ROWS()
    Une commande SELECT peut inclure une clause LIMIT pour restreindre le nombre de lignes qui sera retournée par le client. Dans certains cas, il est mieux de savoir combien de lignes une commande aurait retourné, sans la clause LIMIT , mais sans lancer à nouveau le calcul. Pour cela, ajoutez l'option SQL_CALC_FOUND_ROWS dans la commande SELECT , puis appelez FOUND_ROWS() après :
    
    mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
        -> WHERE id > 100 LIMIT 10;
    mysql> SELECT FOUND_ROWS();
    Le second SELECT retourne un nombre indiquant combien de lignes le premier SELECT aurait retourné s'il n'avait pas été écrit avec une clause LIMIT .Notez que si vous utilisez SELECT SQL_CALC_FOUND_ROWS ... , MySQL calcule toutes les lignes dans la liste des résultats. Ainsi, c'est plus rapide si vous n'utilisez pas de clause LIMIT et que la liste des résultats n'a pas besoin d'être envoyée au client. Si la commande SELECT précédente n'inclut pas l'option SQL_CALC_FOUND_ROWS , alors FOUND_ROWS() pourrait retourner une valeur différente suivant que LIMIT est utilisé ou pas.

    SQL_CALC_FOUND_ROWS et FOUND_ROWS() peuvent être pratiques dans des situations où vous devez limiter le nombre de lignes que la requête retourne, mais que vous devez tout de même connaître le nombre de ligne total, sans exécuter une seconde requête. Un exemple classique est un script web qui présente des résultats de recherche. En utilisant FOUND_ROWS() , vous connaîtrez facilement le nombre de lignes de résultat.

    L'utilisation de SQL_CALC_FOUND_ROWS et FOUND_ROWS() est plus complexe pour les requêtes UNION que pour les commandes SELECT simples, car LIMIT peut intervenir plusieurs fois dans une commande UNION . Elle sera appliquée à différentes commandes SELECT de la commande UNION , ou globalement à l' UNION .

    Le but de SQL_CALC_FOUND_ROWS pour UNION est deretourner le nombre de ligne qui aurait été retourné sans la clause globale LIMIT . Les conditions d'utilisation de SQL_CALC_FOUND_ROWS avec UNION sont :

      Le mot clé SQL_CALC_FOUND_ROWS doit apparaitre dans le premier SELECT de l' UNION .
      La valeur de FOUND_ROWS() est exactement la même que si UNION ALL était utilisé. Si UNION sans ALL est utilisé, des réductions de doublons surviendront, et la valeur de FOUND_ROWS() sera approximative.
      Si aucune clause LIMIT n'est présente dans UNION , SQL_CALC_FOUND_ROWS est ignoré et retourne le nombre de lignes dans la table temporaire créé durant le traitement de l' UNION .
    SQL_CALC_FOUND_ROWS et FOUND_ROWS() sont disponibles à partir de la version 4.0.0 de MySQL.
    LAST_INSERT_ID()
    LAST_INSERT_ID(expr)
    Returns the last automatically generated value that was inserted into an AUTO_INCREMENT column.
    
    mysql> SELECT LAST_INSERT_ID();
            -> 195
    Le dernier ID généré est conservé par le serveur pour chaque connexion. Un autre client ne la modifiera donc pas, même s'ils génèrent une autre valeur AUTO_INCREMENT de leur coté. Ce comportement permet de s'assurer que les actions des autres clients ne perturbe pas les actions du client en cours.

    La valeur de LAST_INSERT_ID() ne sera pas modifiée non plus si vous modifiez directement la valeur d'une colonne AUTO_INCREMENT avec une valeur simple (c'est à dire, une valeur qui n'est ni NULL , ni 0).

    Si vous insérez plusieurs lignes au même moment avec une requête INSERT , LAST_INSERT_ID() retourne la valeur de la première ligne insérée. La raison à cela est que cela rend possible la reprodruction facilement la même requête INSERT sur d'autres serveurs.

    Si vous utilisez une commande INSERT IGNORE et que la ligne est ignorée, le compteur AUTO_INCREMENT sera malgré tout incrémenté, et LAST_INSERT_ID() retournera une nouvelle valeur.

    Si expr est donnée en argument à la fonction LAST_INSERT_ID() , alors la valeur de l'argument sera retourné par la fonction et sera enregistré comme étant la prochaine valeur retournée par LAST_INSERT_ID() . Cela peut être utilisé pour simuler des séquences :
      Commencez par créer la table suivante :
      
      mysql> CREATE TABLE sequence (id INT NOT NULL);
      mysql> INSERT INTO sequence VALUES (0);
      Utilisez cette table pour générer des séquences de nombre comme ceci :
      
      mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
      mysql> SELECT LAST_INSERT_ID();
      La commande UPDATE incrémente le compteur de séquence, et fait que le prochain appel à LAST_INSERT_ID() va retourner une valeur différente. La commande SELECT lit cette valeur. La fonction C mysql_insert_id() peut aussi être utilisée pour lire la valeur. mysql_insert_id() .

    Vous pouvez générer des séquences sans appeler la fonction LAST_INSERT_ID() , mais l'utilité d'utiliser cette fonction cette fois si est que la valeur ID est gérée par le serveur comme étant la dernière valeur générée automatiquement. (sécurité multi-utilisateur). Vous pouvez retrouver la nouvelle ID tout comme vous pouvez lire n'importe quelle valeur AUTO_INCREMENT dans MySQL. Par exemple, la fonction LAST_INSERT_ID() (sans argument) devrait retourner la nouvelle ID. La fonction C de l'API mysql_insert_id() peut être également utilisée pour trouver cette valeur.

    Notez que la fonction mysql_insert_id() est incrémentée uniquement après des requêtes INSERT et UPDATE , donc, vous ne pouvez pas utiliser la fonction C de l'API pour trouver la valeur de LAST_INSERT_ID(expr) après avoir exécuté d'autres types de requêtes, comme SELECT ou bien SET .
    SESSION_USER()
    SESSION_USER() est un synonyme de USER() .
    SYSTEM_USER()
    SYSTEM_USER() est un synonyme de USER() .
    USER()
    Retourne le nom d'utilisateur et le nom d'hôte courant MySQL :
    
    mysql> SELECT USER();
            -> 'davida@localhost'
    La valeur indique le nom d'utilisateur qui a été spécifié lors de l'identification avec le serveur MySQL, et l'hôte client avec lequel il est connecté. Avant la version 3.22.11, la fonction ne retournait pas le nom d'hôte. Vous pouvez extraire le nom d'utilisateur sans l'hôte avec la commande suivante :
    
    mysql> SELECT SUBSTRING_INDEX(USER(),'@',1);
            -> 'davida'
    Depuis MySQL version 4.1, USER() retourne la valeur au format utf8 . Assurez vous que la chaîne '@' est bien interprétée dans ce jeu de caractères :
    
    mysql> SELECT SUBSTRING_INDEX(USER(),_utf8'@',1);
            -> 'davida'
    VERSION()
    Retourne une chaîne indiquant la version courante du serveur MySQL :
    
    mysql> SELECT VERSION();
            -> '4.1.2-alpha-log'
    Notez que si votre version se termine par -log , cela signifie que le système d'historique est actif.

<< Fonctions d'informations >>
Fonctions de chiffrements Autres fonctions Fonctions diverses