9 votes

Valeurs constantes MySql

Je fais quelques opérations mathématiques dans ma base de données et je voudrais déclarer des valeurs constantes qui seront connues dans toutes mes procédures (comme PI par exemple).

Y a-t-il quelque chose de semblable dans MySql ?

6voto

echo_Me Points 20305

Ici un peu fonctions en mathématique

et vous pouvez définir les constantes comme suit

 SET @myVar = 3;

EDIT ICI un exemple de cela

   set @var1 := 0;
   set @var2 := @var1 := 5;
   select @var1, @var2;
    +--------+--------+
    | @var1 | @var2 |
    +--------+--------+
    | 5      | 5      | 
    +--------+--------+

ici un peu exemples

3voto

SteveC Points 341

C'est une vieille question, mais comme je suis en train de faire des recherches sur ce sujet, voici mon avis :

Pour autant que je sache, il n'existe pas de constante définissable par l'utilisateur. Cependant, vous pouvez créer une fonction et lui faire renvoyer la valeur que vous souhaitez :

CREATE FUNCTION `kMyConstant` ()
    NO SQL
    DETERMINISTIC
RETURNS TINYINT UNSIGNED
BEGIN
RETURN 0;
END

Cela renverrait évidemment 0 à chaque fois.

Je suis presque sûr que ce serait incroyablement inefficace par rapport au fait de simplement mettre 0 dans votre code, mais cela s'exécuterait quand même en une toute petite fraction de seconde (à chaque fois).

Sachez que si vous formulez une requête du type : update myTable set myVariable = kMyConstant(); Il y a deux résultats possibles en termes de performances :

  • En mettant DETERMINISTIC dans la définition, comme les paramètres ne changent pas par ligne, il ne sera évalué qu'une seule fois.
  • L'optimiseur MySQL n'est pas si intelligent.

Les problèmes de performance mis à part, vous pourriez alors disperser kMyConstant() dans tout votre code et savoir qu'il s'agira toujours de la même valeur, et si vous souhaitez changer la valeur renvoyée, il vous suffit de modifier la fonction.

PS. S'il s'avère qu'il faut le réévaluer trop souvent, vous pouvez toujours lancer vos procédures set @kMyConstant = kMyConstant(); et ensuite utiliser @kMyConstant mais les frais généraux de codage augmentent, donc je suppose que votre kilométrage dépendra de la manière dont vous utiliserez la constante et de sa fréquence.

2voto

cw' Points 113

Si vous avez trouvé la solution ci-dessous satisfaisante. Elle est basée sur une optimisation du compilateur qui remplace les tableaux par des constantes si le résultat de l'expression ne peut renvoyer qu'une seule ligne, voir l'instruction Manuel MySQL . C'est par exemple le cas lorsqu'on spécifie la valeur d'une colonne unique et non nulle.

Ceci est particulièrement utile si vous avez quelques constantes et que vous ne voulez pas créer une fonction pour chacune d'entre elles. En prime, vous pouvez facilement modifier les valeurs des constantes (si elles servent à des fins de configuration, pas nécessairement si vous voulez changer pi) en utilisant un frontend - au lieu de redéfinir des fonctions. Il pourrait également être plus facile de transférer la base de données, car le vidage des tables est plus facile que celui des fonctions.

CREATE TABLE `constant` (
  `id` varchar(45) NOT NULL,
  `double_value` DOUBLE DEFAULT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO constant VALUE ('pi', 3.1415);

SELECT constant.double_value / 4 FROM constant WHERE constant.id = 'pi';
-- is translated into SELECT 3.1415 / 4 

SELECT table1.field1 / constant.double_value 
  FROM table1, constant 
  WHERE constant.id = 'pi';
-- is translated into SELECT table1.field1 / 3.1415 FROM table1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X