데이터베이스 트리거 및 트 랜 잭 션

2516 단어 sqlBlogGo
데이터베이스 에 있 는 표 한 장 을 조작 하고 이와 관련 된 다른 표 의 데 이 터 를 수정 할 때 어떻게 조작 해 야 합 니까?하나의 방법 은 모든 작업 의 SQL 문 구 를 쓰 고 하나씩 실행 하 는 것 이다.그러나 은행 이체 라 는 업 무 를 만나면 우 리 는 먼저 A 계좌 에서 돈 을 공제 한 다음 에 B 계좌 에 돈 을 더 해 야 한다.만약 에 A 계좌 가 돈 을 공제 하 는 데 성 공 했 지만 B 계좌 가 돈 을 추가 하 는 데 실패 하면 우 리 는 SQL 을 하나 더 써 서 실패 할 때 A 의 돈 을 더 해 야 한다.이렇게 하면 너무 번 거 롭 고 우리 가 밑바닥 에 데이터베이스 조작 코드 를 많이 써 야 하기 때문에 실수 하기 쉽 고 안전 하지 않다.이때 트리거 와 트 랜 잭 션 으로 처리 할 수 있 습 니 다. A 계 정 을 수정 할 때 B 계 정 에 대한 수정 을 자동 으로 실행 하고 그 중의 모든 작업 이 실 패 했 을 때 트 랜 잭 션 은 자동 으로 스크롤 백 되 며 이전의 모든 작업 을 취소 하면 많은 코드 와 안전 위험 이 줄 어 듭 니 다.제 가 하 는 프로젝트 는 바로 이러한 필요 가 있 습 니 다. 하나의 문장 표 와 하나의 문장 유형 표 가 있 습 니 다. 문장 유형 표 에는 이 유형의 문장 수량 을 저장 하 는 필드 가 있 습 니 다.따라서 글 한 편 을 추가 하거나 삭제 하 는 동시에 분류 표를 수정 해 야 합 니 다. 다음 코드 로 트리거 를 만 들 면 됩 니 다.
 
CREATE TRIGGER trig_Article_Ins – 트리거 생 성 시작
  • ON dbo.blog_Article – 어떤 시 계 를 만 들 지 알려 줍 니 다
  • FOR INSERT – INSERT 형식의 트리거 만 들 기
  • AS

  • BEGIN Transaction – 시작 사무
  •     DECLARE @cateId int,@errorSum int – 성명 변 수 는 각각 분류 ID 와 오류 통 계 를 저장 하 는 데 사 용 됩 니 다
  •     SET @errorSum = 0 – 오류 통계 초기 값 은 0
  •     SELECT @cateId=log_CateID FROM inserted – 새로 삽 입 된 글 의 분류 ID 찾기
  •     SET @errorSum = @ errorSum + @ ERROR – 누적 오류
  •     UPDATE blog_Category SET cate_Count=cate_Count+1 WHERE cate_ID = @ cateId – 해당 표 업데이트
  •     SET @errorSum = @ errorSum + @ ERROR – 누적 오류
  •     

  •     IF @errorSum <> 0 – 실행 중 오류 가 발생 하면 스크롤 백 합 니 다. 그렇지 않 으 면 업 무 를 제출 합 니 다
  •         BEGIN

  •             print ‘생 성 실패, 스크롤 백 트 랜 잭 션!
  •             ROLLBACK TRANSACTION

  •         END
  •     ELSE

  •         BEGIN
  •             print ‘창설 성공, 제출 사무!

  •             COMMIT TRANSACTION
  •         END

  • GO
    CREATE TRIGGER trig_Article_Ins--       ON dbo.blog_Article--         FOR INSERT--  INSERT      ASBEGIN TRANSACTION--    	DECLARE @cateId int,@errorSum int--    ,        ID     	SET @errorSum = 0--       0	SELECT @cateId=log_CateID FROM inserted--           ID	SET @errorSum=@errorSum+@@ERROR--    	UPDATE blog_Category SET cate_Count=cate_Count+1 WHERE cate_ID=@cateId--         	SET @errorSum=@errorSum+@@ERROR--    		IF @errorSum <> 0--            ,      		BEGIN			print '    ,    !'			ROLLBACK TRANSACTION		END	ELSE		BEGIN			print '    ,    !'			COMMIT TRANSACTION		ENDGO

     
    또 이 를 사용 하 는 또 다른 이 유 는 오 랜 만 에 이런 것들 을 써 봤 으 니 연습 을 해 야 한 다 는 것 이다.그래서 오늘 이 트리거 를 작성 할 때 도움말 매 뉴 얼 을 찾 아 봤 습 니 다.

    좋은 웹페이지 즐겨찾기