Старый вопрос, но поскольку я теперь исследую эту проблему сам здесь, составляет мои два цента:
Насколько я могу сказать, что нет такой вещи как пользователь определимой константы. Однако, вы могли создать функцию и иметь ее, возвращают стоимость, которую вы хотите:
CREATE FUNCTION `kMyConstant` ()
NO SQL
DETERMINISTIC
RETURNS TINYINT UNSIGNED
BEGIN
RETURN 0;
END
Это, очевидно, возвратилось бы 0 каждых раз.
Я вполне уверен, что это было бы невероятно неэффективно по сравнению только с помещением 0 в вашем коде, но это будет все еще бежать в очень небольшой части секунды (каждый раз).
Предупредите что, если вставлено вопрос как: обновление myTable установил myVariable = kMyConstant ();
есть два мудрые работой возможных исхода:
- , помещая ДЕТЕРМИНИРОВАННЫЙ в определение, поскольку параметры не изменяются за ряд, это будет только оценено однажды.
- оптимизатор MySQL не настолько умен.
Работа выходит в стороне, по крайней мере, вы могли тогда рассеять kMyConstant() всюду по вашему коду и знать, что это всегда будет той же самой стоимостью, и если вы хотите измениться, стоимость возвратила вас, просто изменяют функцию.
PS. Если это, действительно оказывается, переоценивает его слишком часто тогда, вы могли бы всегда начинать, ваши процедуры устанавливают @kMyConstant = kMyConstant ();
и затем используют @kMyConstant
, но кодирующие накладные расходы растут, таким образом, я предполагаю, что ваш пробег будет зависеть от того, как и как часто вы будете использовать константу.