2010-11-21 17 views
8

私は以下のようなテーブルを持っている:mysqlで計算フィールドを作成する方法は?

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

は、今私は、新しいフィールドを持つように、このテーブルを変更したいと、このフィールドには、以下のような

md5(username) 

ものとしてデフォルト値を持つことがあります。

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

どうすればよいですか?あなたの助け

答えて

18

(強調追加)を使用すると、デフォルト値で表現することはできません。

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); 
6

ため
おかげであなたは、MySQLが組み込まMD5機能を持っているか、あなたはMySQLのMD5アルゴリズムを記述するか、見つけるのいずれかに対応していることを考えると、この機能を実現するためにトリガーを作成する必要があります:)

テイクをMD5機能についてhttp://dev.mysql.com/doc/refman/5.0/en/triggers.html

@外観はここ

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

を見てみましょう。また、あなたはMD5であることを知るべきですsecure algorithm anymoreではありません。

MySQLの docsパー
+1

+1すべてのそれらの便利なリンクを集めるため。 – bernie

関連する問題