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 中删除或更新的主要内容,如果未能解决你的问题,请参考以下文章