使用列名作为SQL中行的值

时间:2011-08-15 17:48:23

标签: mysql sql

我有以下sql脚本:

CREATE TABLE  `akalogixDB`.`users` (
`user_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`priv_id` INT NOT NULL DEFAULT  '3',
`username` VARCHAR( 40 ) NOT NULL ,
`password` VARCHAR( 40 ) NOT NULL ,
`email` VARCHAR( 40 ) NOT NULL ,
`first_name` VARCHAR( 40 ) NULL ,
`last_name` VARCHAR( 40 ) NULL ,
`avatar` VARCHAR( 100 ) NULL DEFAULT 'images/avatars/no_avatar.jpg',
`mini_avatar` VARCHAR( 100 ) NULL DEFAULT 'images/avatars/no_avatar_mini.jpg',
`about` TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL ,
`user_folder` VARCHAR(100) NOT NULL DEFAULT ====> #here is the problem
UNIQUE (
`username` ,
`email`)
) ENGINE = MYISAM ;

我想为user_folder提供以下默认值: 'users / folders /'+ user_id +当前时间戳 我怎么能这样做,我知道我可以用PHP做到这一点,但是有办法处理sql指令。

2 个答案:

答案 0 :(得分:1)

您可以使用触发器。类似的东西:

CREATE TRIGGER `before_users_insert`
    BEFORE INSERT ON `users` FOR EACH ROW
    BEGIN
        IF NEW.user_folder IS NULL THEN
            SET NEW.user_folder = CONCAT('users/folders/',NEW.user_id,  UNIX_TIMESTAMP());
        END IF;
    END

你需要找出什么值会触发你的默认值为NULL(因为我编码它)可能不起作用,因为你在该列上有一个NOT NULL。虽然这是一种合理的方法,但我希望这能为您提供一般的想法。

答案 1 :(得分:0)

您需要的是触发器:http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html 尝试这样的事情:

create trigger t_users_bi 
before insert on users 
for each row BEGIN
   SET new.user_folder = CONCAT('users/folders/', new.user_id, current_timestamp);
END;