這並不完全清楚爲什麼您需要首先存儲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 ;
你可以做一個刪除後觸發類似的東西,遞減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 ;
爲什麼不在計算選擇時計算該值? –
@juergend希望表格是最新的,而不是手動更新它們,因爲行也會被程序自動刪除和插入 – Johny
但是爲什麼要存儲這個值呢?如果您需要計數,那麼只需在「select」查詢中即時計算即可。 –