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 之后立即填充。
应用程序可以做的是将两个插入语句封装到一个事务中,确保两个插入都成功或都回滚,使您的数据库处于一致状态。
我正在创建一个 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 之后立即填充。
应用程序可以做的是将两个插入语句封装到一个事务中,确保两个插入都成功或都回滚,使您的数据库处于一致状态。