我有一个如下的表格:
create table info (username varchar(30),otherinfo varchar(100));
现在我想修改这个表格,添加一个新字段,并且这个字段必须有默认值
md5(username)
以下是一些类似的内容:
alter table info add NewField varchar(100) default md5(username);
如何做到这一点?
感谢您的帮助。
我有一个如下的表格:
create table info (username varchar(30),otherinfo varchar(100));
现在我想修改这个表格,添加一个新字段,并且这个字段必须有默认值
md5(username)
以下是一些类似的内容:
alter table info add NewField varchar(100) default md5(username);
如何做到这一点?
感谢您的帮助。
根据MySQL的文档 (加粗强调),你不能在默认值中使用表达式:
10.1.4. 数据类型默认值
数据类型规范中的DEFAULT值子句表示列的默认值。除一个例外,默认值必须是一个常量;它不能是一个函数或表达式。这意味着,例如,你不能将日期列的默认值设置为NOW()或CURRENT_DATE等函数的返回值。例外情况是,可以将CURRENT_TIMESTAMP指定为TIMESTAMP列的默认值。
我已经测试过以下触发器能够实现你的意图:
CREATE TRIGGER MyTriggerName
BEFORE INSERT ON info
FOR EACH ROW
SET NEW.NewField = md5(NEW.username);
如果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算法已经不再是安全的算法。