comment créer champ calculé dans une base MySQL?
-
26-09-2019 - |
Question
J'ai une table comme ci-dessous:
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
La solution
Par MySQL docs (italique ajouté) vous ne pouvez pas avoir un l'expression dans une valeur par défaut:
10.1.4. Type de données Valeurs par défaut
La clause de valeur par défaut dans un ensemble de données spécification de type indique un défaut la valeur d'une colonne. Avec une exception, la valeur par défaut doit être constant; il ne peut pas être une fonction ou une expression . Cela signifie, pour par exemple, que vous ne pouvez pas régler la par défaut pour une colonne de date à la La valeur d'une fonction telle que NOW () ou DATE ACTUELLE. 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);
Autres conseils
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:)
Jetez un coup d'oeil @ http://dev.mysql.com /doc/refman/5.0/en/triggers.html
pour la fonction md5 jeter un oeil ici
http://dev.mysql.com/doc /refman/5.0/en/encryption-functions.html
En outre, vous devez savoir que MD5 est pas un algorithme sécurisé plus.