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 ?
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 ?
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
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 :
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.
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 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.