我有一个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
- 所以虽然我可以记录各种细节,但数据库实际上并不知道是什么此时调用file。
确定在设置UPDATE
列之后不久就运行另一个file_link
语句很容易,但我想知道是否有办法在这里做一些更优雅的事情?
我想要做的是将file_link
的值自动设置在INSERT
上:CONCAT(file_path, file_id, file_extension)
,而不需要在之后立即运行另一个UPDATE
语句。
有谁知道我怎么能做到这一点 - 如果这是一个坏主意你能解释为什么吗?
P.S我正在使用PHP来运行这些语句,如果这有所不同。
答案 0 :(得分: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
语句来创建它,而不是让数据库在插入时执行这样的操作 - 确保存储静态数据的效率稍高,但是它使数据库模式不那么透明。
答案 1 :(得分:1)
通常,您不希望存储派生数据。当你有一些备用周期时,请对db规范化做一些阅读。