2010-11-21 6 views
8

tôi có một bảng như dưới đây:cách tạo trường được tính toán trong mysql?

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

bây giờ tôi muốn thay đổi bảng này để có lĩnh vực mới và lĩnh vực này phải có giá trị mặc định như

md5(username) 

một cái gì đó như dưới đây:

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

cách thực hiện?
Nhờ sự giúp đỡ của bạn

Trả lời

18

mỗi MySQL docs (nhấn mạnh thêm) bạn không thể có một biểu hiện ở một giá trị mặc định:

10.1.4. Kiểu dữ liệu Giá trị mặc định

Điều khoản giá trị DEFAULT trong một dữ liệu đặc tả loại chỉ ra giá trị mặc định cho cột. Với một ngoại lệ , giá trị mặc định phải là một hằng số ; nó không thể là hàm hoặc một biểu thức. Điều này có nghĩa là, đối với ví dụ , bạn không thể đặt giá trị mặc định cho cột ngày là giá trị của một hàm như NOW() hoặc CURRENT_DATE. Ngoại lệ là bạn có thể chỉ định CURRENT_TIMESTAMP là giá trị mặc định cho cột TIMESTAMP.

Tôi đã kiểm tra rằng trình kích hoạt sau làm việc cho ý định của bạn:

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

Bạn nên viết một Trigger để đạt được chức năng này, cho rằng MySQL có một hàm md5 được xây dựng trong hoặc bạn có khả năng hoặc viết hoặc tìm một thuật toán md5 cho MySQL :)

Đưa một cái nhìn @http://dev.mysql.com/doc/refman/5.0/en/triggers.html

cho hàm md5 hãy xem đây

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

Ngoài ra, bạn nên biết rằng MD5 là không phải là secure algorithm anymore.

+1

+1 để thu thập tất cả các liên kết có ích. – bernie