我有一张如下表:
create table info (username varchar(30),otherinfo varchar(100));
现在我想改变这个表以获得新字段,并且该字段必须具有默认值
md5(username)
如下所示:
alter table info add NewField varchar(100) default md5(username);
怎么做?
谢谢你的帮助
答案 0 :(得分:18)
根据MySQL docs(强调添加),您不能使用默认值表达式:
10.1.4。数据类型默认值
数据中的DEFAULT值子句 type specification表示默认值 列的值。有一个 例外,默认值必须是a 不变;它不能是一个功能或 表达。这意味着,为 例如,你不能设置 日期列的默认值为 一个函数的值,如NOW()或 当前的日期。唯一的例外是 您可以将CURRENT_TIMESTAMP指定为 TIMESTAMP列的默认值。
我已经测试过以下触发器适用于您的意图:
CREATE TRIGGER MyTriggerName
BEFORE INSERT ON info
FOR EACH ROW
SET NEW.NewField = md5(NEW.username);
答案 1 :(得分:6)
你应该编写一个触发器来实现这个功能,因为MySQL内置了md5函数,或者你能够为MySQL编写或找到md5算法:)
看看@ 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不是secure algorithm anymore。