촉발기에 대한 사고
"recharge표에서 추출한 것은 최신 충전 기록이고, 카드표에서 업데이트된 기록이 카드 번호를 충족시키는 것은 충전 카드 번호와 같다."
<spanstyle="font-family:FangSong_GB2312;">CREATETRIGGER[dbo].[CardCash]
on [dbo].[T_Recharge]
for Insert
AS
BEGIN
UPDATE T_Card set sCash =sCash +(select top 1 rAdd fromT_Recharge order by rNo desc) WhereT_Card .cNo in (select top 1 cNo fromT_Recharge order by rNo desc )
END</span>
텍스트 링크는 다음과 같습니다.
D층에 마이너스 감소 - 저장 프로세스와 트리거 사용
여기를 보고 마음속으로는 어린 사매에게 매우 탄복하지만, 나는 또 두 가지 문제가 있다.
1.sql문장은 경상입니다. 전참해도 될까요?
2. 두 개의 카드를 동시에 충전하면 검색할 수 있는 treCharge 최신 기록은 다른 카드인가요?다시 말하면 업데이트와 insert 중 어느 것이 먼저 어느 것이 뒤에 있습니까?사실 나는 두 카드를 동시에 충전할 때 도대체 어떤 기록을 먼저 삽입해야 하는지 줄곧 이해하지 못했다.
3. 만약에 2의 트리거 자체가 업무라면 모두 집행하거나 집행하지 않을 것을 보증하면 이 문제가 없다.그렇지 않으면, 사무를 더하는 것을 고려하는 것입니까?
이어서 촉발기의 작업 원리를 한층 더 이해했다.
테이블의 데이터를 변화시키는 작업은 삽입, 업데이트와 삭제가 있기 때문에 트리거는 세 가지로 나눌 수 있다. 그것이 바로 INSERT 트리거, UPDATE 트리거와 DELETE 트리거이다.
1. INSERT 트리거
테이블에 기록을 삽입하려고 할 때, INSERT 트리거 (있으면) 가 자동으로 실행됩니다. 이 때 시스템은 자동으로 inserted 테이블을 만들고, 새로운 기록은 트리거 테이블과 inserted 테이블에 추가됩니다.트리거는 inserted표를 검사해서 트리거 동작을 실행하는지, 트리거 동작을 어떻게 실행하는지 확인할 수 있습니다.
2. DELETE 트리거
테이블에서 정보를 삭제하려고 할 때 DELETE 트리거가 터치됩니다. 이 때 시스템은 자동으로 deleted 테이블을 만들고 삭제된 줄은 이 특수한 테이블에 놓입니다.삭제된 줄은 트리거 테이블에 더 이상 존재하지 않습니다.따라서 트리거 테이블과 deleted 테이블 사이에는 공통된 기록이 없다.
3. UPDATE 트리거
UPDATE 문은 이전 레코드를 삭제하고 새 레코드를 삽입하는 두 단계로 볼 수 있습니다.따라서 UPDATE 트리거가 터치될 때 자동으로 deleted 테이블과 inserted 테이블을 만들고 UPDATE 문장은 원시 줄을 deleted 테이블로 옮겨 업데이트 줄을 inserted 테이블에 삽입합니다.
여기는 insert 트리거인데 왜 트리거를 사용합니까?유사한 예로 해석하다.우리는 두 개의 표를 가지고 상품의 출고 입고 상황을 기록한다.tgood_store는 재고의 제품 종류와 수량을 기록하고 tgood_out출고된 제품의 종류와 수량을 기록합니다. 그러면 우리가 출고된 어떤 종류의 제품이 일정한 수량을 기록할 때마다 우리는 tgood_out에 이 제품의 종류와 출고 수량을 삽입하는 동시에 tgood_store에서 업데이트로 재고의 상응하는 종류의 제품의 수량을 업데이트합니다.이때 우리는 두 가지 임무를 완성해야 한다: t 삽입good_out 후 업데이트 tgood_store, 그중 하나만 조작하여 데이터의 불일치를 피하기 위해 우리는 트리거를 사용하여 tgood_out의 삽입 동작에 t 쌍을 연결합니다good_store 업데이트된 트리거.물론 이 과정은 하나의 업무가 되어야 하기 때문에 t 삽입을 걱정할 필요가 없다good_out표가 실행되었습니다. 이 동작에 연결된 트리거 동작은 실행되지 않습니다. 데이터베이스가 원자성을 설계했기 때문입니다.
위의 세 가지 문제를 다시 봅시다.
1. 트리거는 수정(삽입 및 삭제 포함) 시에만 트리거할 수 있으며, 다른 동작을 할 수 있는 기회를 주기 위해서이며, 데이터를 조회할 때 다른 동작을 할 수 있는 능력이 없다.트리거에 파라미터가 있는지 물어본 것은 내가 처음에 트리거의 이 특성을 이해하지 못했다는 것을 설명한다.
또한 트리거의 작업 원리에 따라 우리는 inserted와 deleted 두 개의 임시 테이블에 접근할 수 있다. 이것은 inserted가 insert와 업데이트 작업을 한 후의 데이터를 저장하는 것을 알아야 한다.deleted는 delete와 업데이트 작업을 하기 전의 데이터를 저장합니다.
Update=delete+insert.이 점은 우리에게 시사점을 준다. DRP 시스템의 한 페이지는 Item이나client 또는flowCard를 수정하는 것이다. 먼저 모두 삭제하고 삽입한 다음에 수정에 성공했다는 것을 알릴 수 있다. 그렇지 않으면 그 많은 항목을 어떻게 하나하나 판단하고modify를 할 수 있겠는가?
2. 두 개의 기록을 동시에 삽입하는 것에 관해서 어떤 사람은 괜찮다고 말한다. 왜냐하면 insert는 밀리초 레벨이기 때문이다. 그러나 어떤 레벨이든 선후가 있기 때문이다.또한, insert는rowlevel 자물쇠입니다. Lock table가 없으면 선후를 확정할 수 없습니다.
3. 저는 업무를 추가하지 않아도 된다고 생각합니다. 트리거가 insert와 업데이트 사이에 다른 조작을 허용할 수 있다면 아무런 의미가 없습니다.
내가 먼저 실험을 해볼게. 이 틈은 벽돌을 던져서 옥을 끌어올려도 묵묵히 겸허하게 벽돌을 받아들일 거야..
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.