2010-11-21 21 views
8

Mam tabeli jak poniżej:jak stworzyć pole obliczeniowe w mysql?

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

teraz chcę zmieniać tej tabeli mają nowe pole i to pole musi mieć wartość domyślną jako

md5(username) 

coś jak poniżej:

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

jak to zrobić?
Dzięki za pomoc

Odpowiedz

18

Per MySQL docs (podkreślenie dodane) nie mogą mieć wyraz w wartości domyślnej:

10.1.4. Typ danych Wartości domyślne

Klauzula wartości DEFAULT w specyfikacji typu danych wskazuje domyślną wartość dla kolumny. Z jednym wyjątkiem , domyślną wartością musi być stała ; nie może to być funkcja lub wyrażenie. Oznacza to, że dla przykładu nie można ustawić wartości domyślnej dla kolumny daty na wartość dla funkcji, takich jak NOW() lub CURRENT_DATE. Wyjątkiem jest można określić CURRENT_TIMESTAMP jako jako domyślną dla kolumny TIMESTAMP.

Przetestowałem że po wyzwalacz działa dla swojej intencji:

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

Powinieneś napisać wyzwalacz do osiągnięcia tej funkcji, biorąc pod uwagę, że MySQL ma funkcję md5 wbudowany lub jesteś w stanie albo napisać lub znaleźć algorytm MD5 MySQL :)

Take spojrzenie @http://dev.mysql.com/doc/refman/5.0/en/triggers.html

dla funkcji md5 spojrzeć tutaj

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

Ponadto, należy wiedzieć, że MD5 jest nie jest to secure algorithm anymore.

+1

+1 do gromadzenia wszystkie te przydatne linki. – bernie