2010-11-21 16 views
8

Ho una tabella come di seguito:come creare campo calcolato in mysql?

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

ora voglio di modificare questa tabella per avere nuovo campo e questo campo deve avere valore di default come

md5(username) 

qualcosa come di seguito:

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

come fare?
Grazie per il vostro aiuto

risposta

18

Per MySQL docs (enfasi aggiunta) non si può avere un'espressione in un valore di default:

10.1.4. Tipo di dati Valori predefiniti

La clausola del valore DEFAULT in un dato di tipo indica un valore predefinito per una colonna. Con un'eccezione , , il valore predefinito deve essere una costante ; non può essere una funzione o un'espressione. Ciò significa che, per l'esempio , non è possibile impostare il valore predefinito per una colonna della data come valore di una funzione come NOW() o CURRENT_DATE. L'eccezione è che è possibile specificare CURRENT_TIMESTAMP come l'impostazione predefinita per una colonna TIMESTAMP.

Ho provato che la seguente grilletto funziona per il vostro intento:

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

Si dovrebbe scrivere un trigger per ottenere questa funzionalità, dato che MySQL ha una funzione md5 integrato o siete in grado di o scrivere o trovare un algoritmo MD5 per MySQL :)

Prendere uno sguardo @http://dev.mysql.com/doc/refman/5.0/en/triggers.html

per la funzione md5 dare un'occhiata qui

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

Inoltre, si dovrebbe sapere che MD5 è non un secure algorithm anymore.

+1

+1 per la raccolta di tutti quei link a portata di mano. – bernie

Problemi correlati