【问题标题】:Is MySQL trigger the way to go?MySQL 触发器是要走的路吗?
【发布时间】:2021-12-14 21:05:18
【问题描述】:

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

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

所以我创建了以下表格:

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 表之后直接插入到 files 表中?

我不是专家,但就我在触发器上看到的情况而言,它们的使用方式与我在这里想要做的不同。类似的东西

create trigger whatever 

on file_description after insert

...

我不知道,我该怎么做?

【问题讨论】:

  • 我的经验法则:文件进入文件存储,数据进入数据库。
  • 文件只保存在数据库中,当有限制时,更大的表意味着更慢的查询
  • @danblack 谢谢!绝对将其保存在我的书签中,但我问的是另一件事

标签: mysql triggers foreign-keys


【解决方案1】:

您不能通过数据库工具强制要求先插入父表,然后再插入子表,因为要插入的数据来自数据库外部。您需要设计您的应用程序,使两个表紧随其后地填充。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2014-11-29
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    相关资源
    最近更新 更多