>  기사  >  데이터 베이스  >  삽입 및 업데이트 이벤트에서 두 테이블의 단어 수를 업데이트하기 위해 MySQL 트리거를 구현하는 방법은 무엇입니까?

삽입 및 업데이트 이벤트에서 두 테이블의 단어 수를 업데이트하기 위해 MySQL 트리거를 구현하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-19 09:14:02488검색

How to Implement MySQL Triggers for Updating Word Counts in Two Tables on Insert and Update Events?

삽입/업데이트 이벤트에 대한 MySQL 트리거

시나리오:

두 개의 테이블을 고려합니다. ext_words 및 ext_words_count. 여기서 ext_words는 단어를 저장하고 ext_words_count는 ext_words의 각 단어 수를 추적합니다. 목표는 다음과 같은 트리거를 생성하는 것입니다.

  • ext_words의 단어가 업데이트될 때 ext_words_count.count를 업데이트합니다.
  • 해당 단어가 ext_words_count에 없으면 해당 단어를 ext_words_count에 삽입하고 횟수를 1로 설정합니다.

초기 시도:

업데이트만 처리하는 제안된 초기 트리거는 다음과 같습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.