MySQL 触发器:从 table 2 中删除或更新后从 table 1 中删除
MySQL TRIGGER : Delete or Update from table 2 after delete from table 1
我有两个 table :
Table 1
Book's Name
Publications
Poem
A
Novel
A
Math
B
和Table 2
Publications
Number of Books
A
2
B
1
现在,我想编写一个触发器,在从 Table 1 和 Number of books = 0 中删除后,从 table 2 中删除该行,如果 Number of books 不为空则更新值书籍数量。
例如:
1.delete 来自 Table 1
其中 Bookname=poem
和
2.delete 来自 Table 1
其中 Bookname=Math
那么Table2会变成这样
Publications
Number of Books
A
1
我没有足够的声誉来发表评论,但两位评论者是正确的,我会为 Table 2 使用视图而不是 table。例如:
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;
我有两个 table :
Table 1
Book's Name | Publications |
---|---|
Poem | A |
Novel | A |
Math | B |
和Table 2
Publications | Number of Books |
---|---|
A | 2 |
B | 1 |
现在,我想编写一个触发器,在从 Table 1 和 Number of books = 0 中删除后,从 table 2 中删除该行,如果 Number of books 不为空则更新值书籍数量。
例如:
1.delete 来自 Table 1 其中 Bookname=poem
和
2.delete 来自 Table 1 其中 Bookname=Math
那么Table2会变成这样
Publications | Number of Books |
---|---|
A | 1 |
我没有足够的声誉来发表评论,但两位评论者是正确的,我会为 Table 2 使用视图而不是 table。例如:
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;