삽입/업데이트 이벤트에 대한 MySQL 트리거
시나리오:
두 개의 테이블을 고려합니다. ext_words 및 ext_words_count. 여기서 ext_words는 단어를 저장하고 ext_words_count는 ext_words의 각 단어 수를 추적합니다. 목표는 다음과 같은 트리거를 생성하는 것입니다.
초기 시도:
업데이트만 처리하는 제안된 초기 트리거는 다음과 같습니다.
DELIMITER $$ CREATE TRIGGER update_count AFTER UPDATE ON ext_words FOR EACH ROW BEGIN UPDATE ext_words_count SET word_count = word_count + 1 WHERE word = NEW.word; END; $$ DELIMITER ;
그러나 이 트리거는 ext_words_count의 기존 단어만 업데이트하고 새 단어를 삽입하는 데 실패합니다.
조건문을 사용한 업데이트된 접근 방식:
조건문을 사용하면 다음과 같습니다. 삽입 및 업데이트 작업을 단일 트리거로 결합할 수 있습니다.
DELIMITER $$ CREATE TRIGGER update_count AFTER INSERT ON ext_words FOR EACH ROW BEGIN IF NOT EXISTS (SELECT 1 FROM ext_words_count WHERE word = NEW.word) THEN INSERT INTO ext_words_count (word) VALUES (NEW.word); ELSE UPDATE ext_words_count SET word_count = word_count + 1 WHERE word = NEW.word; END IF; END $$ DELIMITER ;
이 트리거는 해당 단어가 ext_words_count에 이미 존재하는지 여부를 평가합니다. 그렇지 않은 경우 트리거는 단어를 삽입합니다. 그렇지 않으면 개수가 업데이트됩니다. 트리거는 ext_words 테이블에서 모든 삽입 작업 후에 실행됩니다.
추가 고려 사항:
삽입을 처리하려면 INSERT 작업에 대한 별도의 트리거도 권장됩니다.
DELIMITER $$ CREATE TRIGGER insert_word AFTER INSERT ON ext_words FOR EACH ROW BEGIN INSERT IGNORE INTO ext_words_count (word) VALUES (NEW.word); END; $$ DELIMITER ;
이 트리거는 단어가 이미 존재하는지 여부를 고려하지 않고 단순히 ext_words_count에 단어를 삽입합니다. INSERT IGNORE 문은 중복된 삽입이 무시되도록 보장합니다.
결론:
삽입 및 업데이트 트리거를 결합하거나 조건문과 함께 단일 트리거를 사용하면 가능합니다. MySQL 테이블의 단어 수를 추적하기 위해 원하는 기능을 구현합니다.
위 내용은 삽입 및 업데이트 이벤트에서 두 테이블의 단어 수를 업데이트하기 위해 MySQL 트리거를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!