Как создать вычисляемое поле в MySQL? - PullRequest
8 голосов
/ 21 ноября 2010

У меня есть таблица, как показано ниже:

create table info (username varchar(30),otherinfo varchar(100));

Теперь я хочу изменить эту таблицу, чтобы иметь новое поле, и это поле должно иметь значение по умолчанию как

md5(username)

что-то вроде ниже:

alter table info add NewField varchar(100) default md5(username);

как это сделать?
Спасибо за вашу помощь

Ответы [ 2 ]

18 голосов
/ 21 ноября 2010

За MySQL документы (выделение добавлено) вы не можете иметь выражение в значении по умолчанию:

10.1.4. Тип данных Значения по умолчанию

Предложение значения DEFAULT в данных спецификация типа указывает по умолчанию значение для столбца. С одним исключение, значение по умолчанию должно быть постоянная; это не может быть функция или выражение . Это означает, что для Например, вы не можете установить по умолчанию для столбца даты будет значение функции, такой как NOW () или ТЕКУЩАЯ ДАТА. Исключением является то, что Вы можете указать CURRENT_TIMESTAMP как по умолчанию для столбца TIMESTAMP.

Я проверял, что следующий триггер работает для вашего намерения:

CREATE TRIGGER MyTriggerName
  BEFORE INSERT ON info
  FOR EACH ROW
    SET NEW.NewField = md5(NEW.username);
6 голосов
/ 21 ноября 2010

Вы должны написать Trigger для достижения этой функциональности, учитывая, что MySQL имеет встроенную функцию md5 или вы можете либо написать, либо найти алгоритм md5 для MySQL:)

Взгляните @ http://dev.mysql.com/doc/refman/5.0/en/triggers.html

для функции md5 посмотрите здесь

http://dev.mysql.com/doc/refman/5.0/en/encryption-functions.html

Кроме того, вы должны знать, что MD5 больше не является безопасным алгоритмом .

...