Mysql 在SQL中将列名用作行的值

Mysql 在SQL中将列名用作行的值,mysql,sql,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_n

我有以下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_文件夹提供以下默认值: “用户/文件夹/”+用户id+当前时间戳
如何做到这一点,我知道我可以用PHP实现,但有没有办法用sql指令实现。

您可以使用触发器。比如:

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(正如我所编码的)可能不起作用,因为该列上有一个notnull。不过这是一个合理的方法,我希望这能给你一个大致的想法。

你可以使用触发器。比如:

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(正如我所编码的)可能不起作用,因为该列上有一个notnull。不过这是一个合理的方法,我希望这能给你一个大致的想法。

你需要的是一个触发器: 试着这样做:

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;

您需要的是触发器: 试着这样做:

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;

那么您是说
user\u folder
的默认值应该类似于
users/folders/123/2006-02-22 16:26:08.037
。值123是
user\u id
的自动递增值。因此您是说
user\u folder
的默认值应该类似于
users/folders/123/2006-02-22 16:26:08.037
。值123是
用户id
的自动递增值。