-1

我有一个 MySQL 表用于存储上传文件的详细信息,如下所示:

CREATE TABLE files (
    file_id bigint not null primary key auto_increment,
    file_name text,
    file_path text,
    file_extension varchar(15),
    file_link text);

磁盘上文件的实际名称设置为file_id插入记录时由表生成的名称 - 所以虽然我可以记录各种详细信息,但此时数据库实际上并不知道文件的名称。

UPDATE当然,在设置列之后不久运行另一个语句很容易file_link,但我想知道是否有一种方法可以在这里做一些更优雅的事情?

我想做的file_link是自动将值设置INSERT为此:CONCAT(file_path, file_id, file_extension)无需UPDATE立即运行另一条语句。

有谁知道我该怎么做 - 如果这是一个坏主意,你能解释一下原因吗?

PS 我正在使用 PHP 来运行这些语句,如果这有所不同的话。

4

2 回答 2

2

您可以使用以下触发器执行此操作:

DELIMITER $$

CREATE TRIGGER makelink BEFORE INSERT ON files
  FOR EACH ROW
    BEGIN
      SET NEW.file_link = CONCAT(NEW.file_path, NEW.file_id, NEW.file_extension);
    END;
$$

DELIMITER ;

...虽然我不得不说,我个人会用SELECT语句创建它,而不是让数据库在插入时执行这样的事情 - 确保存储静态数据的效率稍微高一些,但它会使数据库模式不那么透明。

于 2012-05-01T15:39:13.897 回答
1

通常,您不想存储派生数据。当您有一些空闲周期时,请阅读数据库规范化。

于 2012-05-01T15:43:46.667 回答