2010-11-21 23 views
8

Tengo una tabla como la siguiente:cómo crear el campo calculado en mysql?

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

ahora quiero alterar esta tabla para tener nuevo campo y este campo tiene que tener valor por defecto como

md5(username) 

algo parecido a continuación:

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

cómo hacerlo?
Gracias por su ayuda

Respuesta

18

por MySQL docs (énfasis añadido) no se puede tener una expresión en un valor por defecto:

10.1.4. Tipo de datos Valores predeterminados

La cláusula de valor DEFAULT en una especificación de tipo de datos indica un valor predeterminado para una columna. Con una excepción , el valor predeterminado debe ser una constante ; no puede ser una función o una expresión. Esto significa, para el ejemplo , que no puede establecer el predeterminado para una columna de fecha como el valor de una función como NOW() o CURRENT_DATE. La excepción es que puede especificar CURRENT_TIMESTAMP como el valor predeterminado para una columna TIMESTAMP.

He probado que el siguiente trigger funciona para su propósito:

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

Usted debe escribir un disparador para conseguir esta funcionalidad, ya que MySQL tiene una función MD5 construida en o que son capaces tanto para escribir o encontrar un algoritmo MD5 para MySQL :)

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

para la función MD5 echar un vistazo aquí

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

Además, usted debe saber que es MD5 no es secure algorithm anymore.

+1

+1 para reunir todos esos enlaces útiles. – bernie

Cuestiones relacionadas