首页 > 解决方案 > 有条件地插入表的方法(MariaDB)

问题描述

这个问题涉及应该如何处理对表的条件插入。

假设我们是客户和员工。一次只能为客户分配 4 名员工。我们稍后会回到这个话题。

在数据库级别,我们有检查和触发器。

在 MariaDB 中,CHECK 约束不能有子查询,因此我们不能以这种方式对参与程度施加约束。例如,我们不能说类似

CHECK ( customer_id IN (SUBQUERY that returns count of Employees with == 4 employees) ).

触发器可能是解决方案。插入或更新)。如果经理试图将客户分配给已经有 4 个客户的员工,我们不应该允许将该记录插入到将客户与其员工链接的表中。在这种情况下,我们需要一个在插入之前起作用的触发器。如果该员工不在列出有 4 个客户的员工的子查询中,我们只希望插入发生。

我们想停止插入,但根据法律,触发器不会基于仅在触发器中声明的条件执行此操作。据我了解,这样做的唯一方法是发送信号(查看使用触发器停止插入或更新

这引出了我接下来的两个问题。

使用信号“理想”吗?有问题吗?有没有更好的方法根据条件插入表,而不是仅仅在插入之前或插入之后执行副作用?

如果一开始就违反了约束,数据库似乎会发送一个信号,那么这会影响在它之上构建的应用程序吗?

标签: mysqlmariadbconstraints

解决方案


一些克制的味道可以这样处理:

INSERT INTO TABLE (a,b,c)
    SELECT ...
        WHERE <-- put the logic here (if possible)

也就是说,SELECT根据您的业务逻辑安排交付更多或更少的行。


推荐阅读