MySQL 触发器是怎么回事?

Is MySQL trigger the way to go?

我正在创建一个 mysql 数据库,用于存储不同格式和大小的文件,例如 pdf、img、zip 等等。

所以我开始寻找有关 blob 数据类型的示例(我认为这是存储上述文件的正确数据类型),我偶然发现了这个 SOquestion。本质上,答案暗示的不是将 blob 文件直接存储到“主”table,而是创建两个不同的 table,一个用于文件描述,另一个用于 blob 本身(因为这些可以很重)。并通过外键约束连接这些 table 以将文件与其描述相关联,并执行连接操作以在需要时检索所需的 blob。

所以我创建了以下 tables:

create table if not exists file_description(
    id int auto_increment primary key,
    description_ varchar(200) not null,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) engine=INNODB;

create table if not exists files(
    id int auto_increment primary key,
    content longblob not null,
    format_extension varchar(10) not null,
    foreign key (id) references file_description(id)
    on update cascade
    on delete cascade
)engine=INNODB;

但是,在每次插入 file_description table 之后,我如何强制执行插入 files table 的操作?

我不是专家,但就我在触发器上看到的内容而言,它们的使用方式与我在这里想做的不同。像

create trigger whatever 

on file_description after insert

...

我不知道,我该怎么做?

您不能通过数据库工具强制插入父项 table 之后再插入子项 table,因为要插入的数据来自数据库外部。您需要设计您的应用程序,使其在 table 之后立即填充。

应用程序可以做的是将两个插入语句封装到一个事务中,确保两个插入都成功或都回滚,使您的数据库处于一致状态。