2010-11-21 17 views
8

i une table comme ci-dessous:comment créer un champ calculé dans mysql?

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

maintenant je veux modifier ce tableau pour avoir nouveau champ et ce domaine doit avoir une valeur par défaut comme

md5(username) 

quelque chose comme ci-dessous:

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

Comment faire?
Merci pour votre aide

Répondre

18

par MySQL docs (italique ajouté) vous ne pouvez pas avoir une expression dans une valeur par défaut:

10.1.4. Type de données Valeurs par défaut

La clause de valeur DEFAULT dans une spécification de type data indique une valeur par défaut pour une colonne. Avec une exception , la valeur par défaut doit être une constante ; il ne peut pas être une fonction ou une expression. Cela signifie, par exemple, que vous ne pouvez pas définir la valeur par défaut pour une colonne de date comme valeur d'une fonction telle que NOW() ou CURRENT_DATE. L'exception est que vous pouvez spécifier CURRENT_TIMESTAMP comme la valeur par défaut pour une colonne TIMESTAMP.

Je l'ai testé que le déclencheur suivant fonctionne pour votre intention:

CREATE TRIGGER MyTriggerName 
    BEFORE INSERT ON info 
    FOR EACH ROW 
    SET NEW.NewField = md5(NEW.username); 
6

Vous devriez écrire un déclencheur pour obtenir cette fonctionnalité, étant donné que MySQL a une fonction md5 construit ou vous êtes capable de soit écrire ou de trouver un algorithme md5 pour MySQL :)

Prenez un coup d'oeil @http://dev.mysql.com/doc/refman/5.0/en/triggers.html

pour la fonction md5 jeter un coup d'oeil ici

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

en outre, vous devriez savoir que MD5 est pas un secure algorithm anymore.

+1

+1 pour rassembler tous les liens utiles. – bernie