MySQL TRIGGER:从表 1 中删除后从表 2 中删除或更新

Posted

技术标签:

【中文标题】MySQL TRIGGER:从表 1 中删除后从表 2 中删除或更新【英文标题】:MySQL TRIGGER : Delete or Update from table 2 after delete from table 1 【发布时间】:2021-05-13 09:39:33 【问题描述】:

我有两张桌子:

表 1

Book's Name Publications
Poem A
Novel A
Math B

和表2

Publications Number of Books
A 2
B 1

现在,我想编写一个触发器,在从表 1 和 Number of books = 0 中删除后,从表 2 中删除该行,如果 Number of books 不为 null,则更新 Number of books 的值。

举例

1.从表1中删除 其中书名=诗

2.从表 1 中删除 其中书名=数学

那么表 2 会变成这样

Publications Number of Books
A 1

【问题讨论】:

我建议你有一个视图而不是Table 2 设计错误! 当您可以从 select count(*) from books where publications = 'A' 动态获取它甚至使用 GROUP BY 获取所有数据时,为什么还要保留该计数。这样它总是准确的。 感谢大家的帮助 【参考方案1】:

我没有足够的声誉来发表评论,但两位评论者是正确的,我会为表 2 使用视图而不是表格。例如:

CREATE VIEW dbo.vwTable2
AS
    SELECT Publications, COUNT(*) BooksNumber
    FROM Table1
    GROUP BY Publications

如果它必须是一个触发器,这应该可以解决问题。这有点老套,但当你想以一种方式解决问题时,这就是你必须付出的代价。我是在 mssql 中写的,所以可能需要一些转换为 mysql,因为我不精通它。

CREATE TRIGGER dbo.trUpdateTable2 ON dbo.Table1
AFTER INSERT
    ,UPDATE
    ,DELETE
AS
BEGIN
    SET NOCOUNT ON;

    TRUNCATE TABLE dbo.Table2

    INSERT INTO dbo.Table2
    SELECT Publications, COUNT(*) BooksNumber
    FROM dbo.Table1
    GROUP BY Publications

END;

【讨论】:

这对我很有帮助,非常感谢

以上是关于MySQL TRIGGER:从表 1 中删除后从表 2 中删除或更新的主要内容,如果未能解决你的问题,请参考以下文章

验证 Jquery 后从表中获取值

检查后从表中返回值的 PL/SQL 函数

MySQL 从表中删除所有行并将 ID 重置为零

MySQL 从表中删除所有行并将 ID 重置为零

MySql 从表和列中删除排序规则

使用 mysql 和 php 从表中删除