문제

트리거에 대해 들었는데 몇 가지 질문이 있습니다.
트리거란 무엇입니까?
어떻게 설정하나요?
일반적인 SQL 항목 외에 취해야 할 예방 조치가 있나요?

도움이 되었습니까?

해결책

트리거를 사용하면 특정 이벤트(예: 테이블에 삽입)가 발생할 때 데이터베이스에서 기능을 수행할 수 있습니다.

mysql에 대해서는 구체적으로 언급할 수 없습니다.

예방법:트리거는 매우 매력적일 수 있습니다. 처음 사용하기 시작하면 모든 종류의 문제에 대한 마법의 총알처럼 보입니다.그러나 데이터베이스를 내부적으로 알지 못하면 "마법의" 일이 발생합니다. 다른 테이블에 삽입, 입력 데이터 변경 등 정말 이상한 일이 발생하는 것처럼 보일 수 있습니다.트리거로 구현하기 전에 대신 스키마 주변에서 API 사용을 강제하는 것을 진지하게 고려해 보겠습니다(데이터베이스에서 사용하는 것이 좋지만 불가능한 경우 외부에서 사용하는 것이 좋습니다).

여전히 트리거를 사용하는 몇 가지 사항

  • "date_created" 및 "date_last_edited" 필드 추적
  • "ID" 삽입(oracle에서는 자동 ID 필드가 없음)
  • 변경 기록 유지

트리거를 사용하고 싶지 않은 것

  • 비즈니스 규칙/로직
  • 데이터베이스 외부에 연결되는 모든 것(예: 웹 서비스 호출)
  • 액세스 제어
  • 트랜잭션이 아닌 모든 것(트리거에서 수행하는 모든 작업은 트랜잭션과 함께 롤백할 수 있어야 함)

다른 팁

에서 dev.mysql.com, 트리거는

... 테이블과 연관되어 있고 테이블에 대한 특정 이벤트가 발생할 때 활성화되는 명명 된 데이터베이스 개체.

이를 생성하는 구문 해당 사이트에도 문서화되어 있습니다.

간단히,

CREATE
    [DEFINER = { user | CURRENT_USER }]
    TRIGGER trigger_name trigger_time trigger_event
    ON tbl_name FOR EACH ROW trigger_stmt

그리고 그들은 예를 제공합니다:

CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;

최소한 준수해야 합니다. 저장된 함수에 대한 모든 제한 사항.테이블을 잠그거나, 뷰를 변경하거나, 트리거를 트리거한 테이블을 수정할 수 없습니다.또한 트리거 복제 문제가 발생할 수 있음.

트리거는 테이블과 연결되어 있고 테이블에 대해 특정 이벤트가 발생할 때 활성화되는 명명된 데이터베이스 개체입니다.

트리거를 생성하려면:

CREATE TRIGGER triggerName [BEFORE|AFTER] [INSERT|UPDATE|DELETE|REPLACE] ON tableName FOR EACH ROW SET stuffToDoHERE;


이 부분에 답변을 했는데도 다른 질문이 여전히 남아 있습니다.

이 질문은 오래되었고 다른 답변도 매우 좋습니다. 그러나 사용자가 취해야 할 예방 조치에 대해 질문했기 때문에 한 가지 추가하고 싶습니다.

  • 복잡한 환경에서 복제를 사용하는 경우 트리거를 대량으로 사용하지 말고 트리거에서 저장 프로시저를 호출하지 마세요.
  • MySQL에서는 트리거가 느립니다.
  • 트리거 내에서는 일부 SQL 문을 사용할 수 없습니다.그리고 LOCK과 같은 일부 명령문은 허용되지만 피해야 합니다.일반적인 규칙은 다음과 같습니다.당신이 하고 있는 일의 의미를 완전히 이해하지 못한다면, 그 일을 해서는 안 됩니다.
  • 트리거로 인해 무한 루프가 발생할 수 있으므로 주의하세요.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top