最初にnumber_of_albums列を保存する必要がある理由はまったく明確ではありません。しかし、私はその質問に対処しません。あなたが尋ねた質問に私は答えます。
2番目のテーブルのafter insertトリガーは、最初のテーブルを更新して、指定されたauthor_idのnumber_of_albums列を増やすことができます。最初のテーブルの名前がauthor
で、2番目のテーブルの名前が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 ;
あなたは、削除された行のauthor_id
列の値を取得するためにOLD.author_id
を参照number_of_albums
列を、デクリメント、削除トリガーの後で同様の何かができます。
author_id
列の値が変更された場合は、2つの行を更新する必要があります.1つの行で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'クエリでオンザフライで計算してください。 –