我有两个看起来像这样的表(当然他们有更多的行)。
AuthorID | Name | Number of albums
-------------------------------------------
1 | Santana | 39
2 | Johnny Cash | 95
AuthorID | AlbumID
----------------------
1 | 14
2 | 17
我想要做的是有一个trigget,当删除行或插入第二个表时会更新。我想在第一个表中更新的行是第3行。这基本上代表count(AlbumID)
,这也是我计算它的方式。我真的不知道我会怎么做,因为直到现在我才创造了非常简单的触发器
答案 0 :(得分:0)
根本不清楚为什么你需要首先存储number_of_albums列。但我不会解决这个问题。我会回答你提出的问题。
第二个表上的插入后触发器可以执行第一个表的更新,以增加给定author_id的number_of_albums列。我们假设第一个表的名称是author
,第二个表的名称是album
。
DELIMITER $$
CREATE TRIGGER album_ai
AFTER INSERT ON album
FOR EACH ROW
BEGIN
UPDATE author
SET number_of_albums = number_of_albums + 1
WHERE author_id = NEW.author_id;
END$$
DELIMITER ;
您可以使用after delete触发器执行类似操作,递减number_of_albums
列,引用OLD.author_id
以获取已删除行的author_id
列的值。
对于更新,如果更改author_id
列的值,则需要更新两行...在一行上增加number_of_albums,并在另一行中减少number_of_albums。
DELIMITER $$
CREATE TRIGGER album_ai
AFTER UPDATE ON album
FOR EACH ROW
BEGIN
IF NOT ( NEW.author_id <=> OLD.author_id ) THEN
UPDATE author
SET number_of_albums = number_of_albums - 1
WHERE author_id = OLD.author_id;
UPDATE author
SET number_of_albums = number_of_albums + 1
WHERE author_id = NEW.author_id;
END IF;
END$$
DELIMITER ;