삽입, 업데이트 및 삭제에 정의 된 규칙은 다음과 같습니다. 이전에 설명 된보기 규칙과 완전히 다릅니다. 부분. 첫째, 그들의 규칙 작성 명령은 더 많은 것을 허용합니다 :
아무런 조치도 취하지 않을 수 있습니다.
여러 행동을 할 수 있습니다.
키워드는 대신 선택 사항입니다.
의사 관계 새롭고 오래된 관계가 유용 해집니다.
스포츠 토토 베트맨 자격을 가질 수 있습니다.
둘째, 구문 분석 트리를 제자리에 수정하지 않습니다. 대신에 그들은 제로 또는 많은 새로운 구문 분석 나무를 만들고 원래.
구문 유지
이벤트에서 Rule Rule_Name을 만듭니다 반대하기 [rule_qualification] [대신] [행동 | (행동) | 아무것도 아님];
염두에 두십시오. 다음에서업데이트 스포츠 토토 베트맨삽입, 업데이트 또는 삭제.
결과가 발생할 때 스포츠 토토 베트맨 시스템에 의해 적용됩니다. 구문 분석의 관계 및 명령 유형은 Create Rule 명령에 제공된 개체 및 이벤트. 업데이트를 위해 스포츠 토토 베트맨, 스포츠 토토 베트맨 시스템은 구문 분석 나무 목록을 만듭니다. 처음에 구문 분석 트리 목록은 비어 있습니다. 0이있을 수 있습니다 (아무것도 없습니다 키워드), 하나 또는 여러 작업. 단순화하기 위해, 우리는 a를 본다 하나의 행동으로 스포츠 토토 베트맨. 이 스포츠 토토 베트맨은 자격을 가질 수 있습니다 그리고 대신 할 수 있습니다.
스포츠 토토 베트맨 자격이란 무엇입니까? 그것은 제한이라는 제한입니다 스포츠 토토 베트맨의 행동이 수행되어야하는 경우와 그렇지 않은 경우. 이것 자격은 신규 및/또는 오래된 의사만을 참조 할 수 있습니다 기본적으로 객체로 주어진 관계 (그러나 특별한 의미로).
그래서 우리는 다음 나무를 생산하는 4 가지 사례가 있습니다. 일회용 규칙을 위해.
대신 자격이없고 대신 :
스포츠 토토 베트맨 동작에서 구문 분석 트리 원래 구문 분석 트리의 자격이 추가되었습니다.
자격이 없지만 대신 :
스포츠 토토 베트맨 동작에서 구문 분석 트리 원래 구문 분석 트리의 자격이 추가되었습니다.
대신 자격이 제공되지 않습니다 :
스포츠 토토 베트맨이있는 스포츠 토토 베트맨 조치에서 구문 분석 트리 자격과 원래 구문 분석 나무 자격이 추가되었습니다.
자격 제공 및 대신 :
스포츠 토토 베트맨이있는 스포츠 토토 베트맨 조치에서 구문 분석 트리 자격과 원래 구문 분석 나무 자격이 추가되었습니다.
부정적인 스포츠 토토 베트맨이있는 원래 구문 분석 트리 자격이 추가되었습니다.
마지막으로, 스포츠 토토 베트맨이 대신되지 않으면 변경되지 않은 원본 구문 분석 트리가 목록에 추가됩니다. 대신 자격이 있기 때문에 스포츠 토토 베트맨은 이미 원래 구문 분석 트리를 추가합니다. 하나 또는 두 개의 출력 구문 분석 트리 하나가있는 스포츠 토토 베트맨 행동.
삽입 규칙의 경우 원래 쿼리 (억제되지 않은 경우 대신) 규칙에 의해 추가 된 조치 전에 수행됩니다. 이것 동작이 삽입 된 행을 볼 수 있습니다. 그러나 업데이트 및 삭제 규칙에 따라 원래 쿼리는 다음에 수행됩니다. 규칙에 의해 추가 된 조치. 이것은 행동이 할 수 있도록합니다 업데이트 된 행 또는 삭제 된 행을보십시오. 그렇지 않으면 행동이 일치하지 않기 때문에 행동은 아무것도하지 않을 수 있습니다. 그들의 자격.
규칙 행동에서 생성 된 구문 분석 나무는 시스템을 다시 작성하고 더 많은 규칙이 적용됩니다. 다소 구문 분석 나무가 발생합니다. 그래서 구문 분석 나무가 들어갑니다 규칙 조치에는 다른 명령 유형이 있거나 또 다른 결과 관계. 그렇지 않으면이 재귀 과정은 그럴 것입니다 루프로 끝납니다. 컴파일 된 재귀 제한이 있습니다 현재 100 회 반복. 100 회 반복 후에 규칙 시스템을 적용하기 위해 여전히 규칙을 업데이트합니다. 여러 규칙 정의 및 오류를보고합니다.
의 행동에서 발견 된 구문 분석 나무pg_rewrite시스템 카탈로그는 단지 템플릿입니다. 그들은 신규 및 오래되기 전에 일부 대체를해야합니다. 사용된. 새로운 것에 대한 참조는 원본의 대상 목록입니다. 쿼리는 해당 항목을 검색합니다. 발견된다면 Entry의 표현식은 참조를 대체합니다. 그렇지 않으면 새로운 수단 기존 (업데이트 용)과 동일하거나 NULL ( 끼워 넣다). Old에 대한 참조는 결과 관계 인 범위 테이블 항목.
업데이트 스포츠 토토 베트맨을 적용한 후 스포츠 토토 베트맨보기를 적용합니다. 생산 된 구문 분석 트리에. 보기는 새 업데이트를 삽입 할 수 없습니다 작업이므로 업데이트 스포츠 토토 베트맨을 출력에 적용 할 필요가 없습니다. 뷰 재 작성.
우리는의 SL_AVAIL 열을 추적하고 싶습니다스포츠 토토 베트맨관계. 그래서 우리는 설정합니다 로그 테이블 및 조건부 로그 항목을 작성하는 스포츠 토토 베트맨 업데이트가 수행되는 경우스포츠 토토 베트맨.
테이블 생성 shoelace_log ( SL_NAME char (10), -Hoelace가 변경되었습니다 SL_AVAIL INTEGER - 새로운 가용 값 log_who 텍스트 - 누가 그랬습니다 log_ 시절 시간 - 언제 ); 스포츠 토토 베트맨에 대한 업데이트시 규칙 log_shoelace를 만듭니다 어디서 New.sl_avail! = old.sl_avail shoelace_log 값에 삽입하십시오 ( new.sl_name, new.sl_avail, current_user, current_timestamp );
지금 Al do
al_bundy = 업데이트 스포츠 토토 베트맨 set sl_avail = 6 al_bundy- 여기서 sl_name = 'sl7';
그리고 우리는 로그 테이블을 봅니다.
al_bundy = select * from shoelace_log; sl_name | sl_avail | log_who | log_when ----------+-------+--------+----------------------------------- SL7 | 6 | al | tue 10 월 20 일 16:14:45 1998 Met Dst (1 행)
그것이 우리가 기대했던 것입니다. 백그라운드에서 일어난 일 다음입니다. 구식은 구문 분석 트리를 만들었습니다 (이것은이 원래 구문 분석 트리의 일부가 강조 표시됩니다. 운영 기반은 업데이트의 규칙 조치이기 때문에 규칙).
SHOELACE_DATA 업데이트 SL_AVAIL = 6 스포츠 토토 베트맨에서 스포츠 토토 베트맨에서 여기서 bpchareq (스포츠 토토 베트맨.sl_name, 'sl7');
스포츠 토토 베트맨이 있습니다log_shoelace스포츠 토토 베트맨 자격 표현으로 업데이트 중
int4ne (new.sl_avail, old.sl_avail)
및 하나의 행동
shoelace_log 값에 삽입 ( *새*.sl_name,*new*.sl_avail, current_user, current_timestamp) 스포츠 토토 베트맨 *new *, 스포츠 토토 베트맨 *old *;
이것은 평소에 할 수 없기 때문에 조금 이상하게 보입니다 쓰기 삽입 ... 값 ... From. 여기에서 From Clause는입니다 단지 범위 테이블 항목이 *New *및 *Old *를위한 트리. 이들은 그들에게 필요합니다 삽입 명령의 쿼리의 변수로 참조 할 수 있습니다. 나무.
스포츠 토토 베트맨은 자격을 갖춘 비 입동 스포츠 토토 베트맨이므로 스포츠 토토 베트맨 시스템은 두 개의 구문 분석을 반환해야합니다 : 수정 된 스포츠 토토 베트맨 액션과 원래 구문 분석 트리. 첫 번째 단계에서 원래 쿼리의 범위 테이블은 스포츠 토토 베트맨의 행동 파스 트리. 결과
shoelace_log 값에 삽입 ( *새*.sl_name,*new*.sl_avail, current_user, current_timestamp) 스포츠 토토 베트맨에서 *New *, 스포츠 토토 베트맨 *Old *,스포츠 토토 베트맨 스포츠 토토 베트맨;
2 단계에서 스포츠 토토 베트맨 자격이 추가됩니다. 결과 세트는 SL_AVAIL이 변경되는 행으로 제한됩니다.
shoelace_log 값에 삽입 ( *새*.sl_name,*new*.sl_avail, current_user, current_timestamp) 스포츠 토토 베트맨 *new *, 스포츠 토토 베트맨 *old *, 스포츠 토토 베트맨 스포츠 토토 베트맨여기서 int4ne (*new*.sl_avail,*old*.sl_avail);
삽입 ... 값이기 때문에 이것은 심지어 낯선 사람입니다 WHERE 절은 없지만 플래너와 집행자는 어려움이 없을 것입니다. 그들은 필요합니다 어쨌든이 동일한 기능을 지원합니다 ... 선택하다.
3 단계에서 원래 구문 분석 트리의 자격은 다음과 같습니다 추가, 결과 세트를 행으로 만 추가로 제한합니다. 원래의 구문 분석 나무에 만진.
shoelace_log 값에 삽입 ( *새*.sl_name,*new*.sl_avail, current_user, current_timestamp) 스포츠 토토 베트맨 *new *, 스포츠 토토 베트맨 *old *, 스포츠 토토 베트맨 스포츠 토토 베트맨 여기서 int4ne (*new*.sl_avail,*old*.sl_avail)및 bpchareq (스포츠 토토 베트맨.sl_name, 'sl7');
4 단계 대상 목록 항목으로 새로운 참조를 대체합니다. 원래 구문 분석 트리 또는 일치 변수에서 결과 관계의 참조.
shoelace_log 값에 삽입 (스포츠 토토 베트맨.sl_name, 6, current_user, current_timestamp) 스포츠 토토 베트맨 *new *, 스포츠 토토 베트맨 *old *, 스포츠 토토 베트맨 스포츠 토토 베트맨 여기서 int4ne (6, *old *.sl_avail) 및 bpchareq (스포츠 토토 베트맨.sl_name, 'sl7');
5 단계는 오래된 참조를 결과 관계로 변경합니다 참조.
shoelace_log 값에 삽입 ( 스포츠 토토 베트맨.sl_name, 6, current_user, current_timestamp) 스포츠 토토 베트맨 *new *, 스포츠 토토 베트맨 *old *, 스포츠 토토 베트맨 스포츠 토토 베트맨 여기서 int4ne (6,스포츠 토토 베트맨.sl_avail) 및 bpchareq (스포츠 토토 베트맨.sl_name, 'sl7');
그게 다야. 스포츠 토토 베트맨이 대신에 있지 않기 때문에 우리는 또한 출력합니다 원래 구문 분석 트리. 요컨대, 스포츠 토토 베트맨의 출력 시스템은 진술 :
shoelace_log 값에 삽입 스포츠 토토 베트맨.sl_name, 6, current_user, current_timestamp) 스포츠 토토 베트맨에서 여기서 6! = 스포츠 토토 베트맨.sl_avail 및 스포츠 토토 베트맨.sl_name = 'sl7'; Shoelace_Data 업데이트 SL_AVAIL = 6을 업데이트하십시오 여기서 sl_name = 'sl7';
이것은이 순서로 실행되며 정확히 무엇입니다. 스포츠 토토 베트맨이 정의됩니다. 대체 및 자격 추가 원래 쿼리가있는 경우
업데이트 스포츠 토토 베트맨 set sl_color = 'green' 여기서 sl_name = 'sl7';
로그 항목이 작성되지 않습니다. 이번에는 원본입니다 Parse Tree에는 SL_AVAIL의 대상 목록 항목이 포함되어 있지 않습니다. 따라서 New.sl_avail은 스포츠 토토 베트맨.sl_avail로 대체됩니다 추가 쿼리 결과
shoelace_log 값에 삽입 스포츠 토토 베트맨.sl_name,스포츠 토토 베트맨.sl_avail, current_user, current_timestamp) 스포츠 토토 베트맨에서 어디스포츠 토토 베트맨.sl_avail! = 스포츠 토토 베트맨.sl_avail 및 스포츠 토토 베트맨.sl_name = 'sl7';
그리고 그 자격은 결코 사실이 아닙니다. 그것은 또한 원래 쿼리가 여러 행을 수정하면 작동합니다. 그래서 Al이라면 명령을 발행
스포츠 토토 베트맨 업데이트 SL_AVAIL = 0 여기서 sl_color = 'black';
실제로 4 개의 행이 업데이트됩니다 (SL1, SL2, SL3 및 SL4). 하지만 SL3은 이미 SL_AVAIL = 0입니다. 이번에는 원래 구문 분석 나무 자격이 다르고 그 결과가 발생합니다 추가 구문 분석
shoelace_log에 삽입 스포츠 토토 베트맨.sl_name, 0, current_user, current_timestamp 스포츠 토토 베트맨에서 여기서 0! = 스포츠 토토 베트맨.sl_avail 그리고스포츠 토토 베트맨.sl_color = 'black';
이 구문 분석 트리는 반드시 3 개의 새로운 로그 항목을 삽입합니다. 그리고 그것은 절대적으로 맞습니다.
여기서 우리는 원본이 왜 중요한지 알 수 있습니다. 구문 분석 트리는 마지막으로 실행됩니다. 업데이트가 있었을 경우 먼저 실행되면 모든 행이 이미 0으로 설정되어 있으므로 로깅 인서트는 0! =있는 행을 찾지 못합니다. 스포츠 토토 베트맨.sl_avail.
언급 된 것들로부터보기 관계를 보호하는 간단한 방법 누군가가 삽입, 업데이트 및 삭제하려고 할 가능성 그들에게는 그 파스 나무가 버리도록하는 것이 있습니다. 우리는 창조합니다 스포츠 토토 베트맨
삽입에 신발 삽입과 같이 스포츠 토토 베트맨을 작성하십시오 대신 아무것도하지 않습니다. 신발 업데이트와 같이 스포츠 토토 베트맨 신발 _upd_protect를 만듭니다 대신 아무것도하지 않습니다. 삭제에서 신발 삭제와 같이 스포츠 토토 베트맨 신발을 만듭니다 대신 아무것도하지 말라;
만약 Al이 이제보기에서 이러한 작업을 수행하려고한다면 관계신발, 스포츠 토토 베트맨 시스템은 스포츠 토토 베트맨을 적용하십시오. 스포츠 토토 베트맨에는 조치가없고 대신, 구문 분석 나무의 결과 목록은 비어 있고 아무것도 없기 때문에 전체 질문은 아무것도되지 않을 것입니다 스포츠 토토 베트맨 시스템이 완료된 후 최적화되거나 실행됩니다. 그것으로.
스포츠 토토 베트맨 시스템을 사용하는보다 정교한 방법은 구문 분석 트리를 권리를하는 스포츠 토토 베트맨으로 재 작성하는 스포츠 토토 베트맨 실제 테이블에서 작동. 에서 그렇게하려면Shoelace보기, 우리는 다음을 만듭니다 규칙 :
Shoelace에 인서트와 같이 규칙 shoelace_ins를 만듭니다 대신하십시오 스포츠 토토 베트맨 값에 삽입 ( new.sl_name, new.sl_avail, new.sl_color, new.sl_len, new.sl_unit); Shoelace 업데이트시 Rule Shoelace_upd를 만듭니다 대신하십시오 Shoelace_Data 세트를 업데이트하십시오 sl_name = new.sl_name, sl_avail = new.sl_avail, sl_color = new.sl_color, sl_len = new.sl_len, sl_unit = new.sl_unit 여기서 sl_name = old.sl_name; 삭제에서 삭제로 규칙 shoelace_del을 만듭니다 대신하십시오 스포츠 토토 베트맨에서 삭제합니다 여기서 sl_name = old.sl_name;
이제 Al 's Shop에 도착하는 신발 팩이 있습니다. 큰 부분 목록이 있습니다. Al은 계산에 그다지 좋지 않습니다 그래서 우리는 그가 수동으로 떼보기를 업데이트하기를 원하지 않습니다. 대신 우리는 두 개의 작은 테이블을 설정합니다. 하나는 그가 삽입 할 수 있습니다. 부품 목록의 항목과 특별한 속임수가있는 항목. 그만큼 이것들에 대한 명령을 작성하십시오 :
테이블 생성 shoelace_arrive ( arr_name char (10), arr_quant 정수 ); 테이블 생성 shoelace_ok ( ok_name char (10), OK_QUANT 정수 ); shoelace_ok에 삽입 된 insert와 같이 규칙 shoelace_ok_ins를 만듭니다 대신하십시오 Shoelace 세트를 업데이트하십시오 sl_avail = sl_avail + new.ok_quant 여기서 sl_name = new.ok_name;
이제 Al은 앉아서 무엇이든 할 수 있습니다
al_bundy = select * from shoelace_arrive; arr_name | arr_quant ----------+------- SL3 | 10 SL6 | 20 SL8 | 20 (3 줄)
정확히 부품 목록에있는 것입니다. 우리는 간단히 살펴 봅니다 현재 데이터,
al_bundy = select *에서 shoelace; sl_name | sl_avail | sl_color | sl_len | sl_unit | sl_len_cm ----------+--------+----------+-------+-------------- SL1 | 5 | 블랙 | 80 | cm | 80 SL2 | 6 | 블랙 | 100 | cm | 100 SL7 | 6 | 브라운 | 60 | cm | 60 SL3 | 0 | 블랙 | 35 | 인치 | 88.9 SL4 | 8 | 블랙 | 40 | 인치 | 101.6 SL8 | 1 | 브라운 | 40 | 인치 | 101.6 SL5 | 4 | 브라운 | 1 | m | 100 SL6 | 0 | 브라운 | 0.9 | m | 90 (8 줄)
도착한 신발 끈을 움직여
al_bundy = shoelace_ok에 삽입 *에서 shoelace_arrive;
결과 확인
al_bundy = SL_NAME의 Shoelace Order에서 선택 *; sl_name | sl_avail | sl_color | sl_len | sl_unit | sl_len_cm ----------+--------+----------+-------+-------------- SL1 | 5 | 블랙 | 80 | cm | 80 SL2 | 6 | 블랙 | 100 | cm | 100 SL7 | 6 | 브라운 | 60 | cm | 60 SL4 | 8 | 블랙 | 40 | 인치 | 101.6 SL3 | 10 | 블랙 | 35 | 인치 | 88.9 SL8 | 21 | 브라운 | 40 | 인치 | 101.6 SL5 | 4 | 브라운 | 1 | m | 100 SL6 | 20 | 브라운 | 0.9 | m | 90 (8 줄) al_bundy = select * from shoelace_log; sl_name | sl_avail | log_who | log_when ----------+-------+--------+----------------------------------- SL7 | 6 | al | tue 10 월 20 일 19:14:45 1998 Met Dst SL3 | 10 | al | tue 10 월 20 일 19:25:16 1998 Met Dst SL6 | 20 | al | tue 10 월 20 일 19:25:16 1998 Met Dst SL8 | 21 | al | tue 10 월 20 일 19:25:16 1998 Met Dst (4 줄)
하나 삽입물에서 먼 길입니다 ... 이것으로 선택하십시오. 결과. 그리고 그 설명은이 문서의 마지막이 될 것입니다. (그러나 마지막 예는 아닙니다 :-). 먼저 파서가있었습니다 산출
shoelace_ok에 삽입 shoelace_arrive.arr_name, shoelace_arrive.arr_quant shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok;
이제 첫 번째 스포츠 토토 베트맨shoelace_ok_ins적용되어
Shoelace Set 업데이트 sl_avail = int4pl (shoelace.sl_avail, shoelace_arrive.arr_quant) shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok, shoelace_ok *old *, shoelace_ok *new *, 신발 끈 여기서 bpchareq (shoelace.sl_name, showlace_arrive.arr_name);
원래 삽입물을 버립니다Shoelace_ok. 이 다시 작성된 쿼리가 전달됩니다 스포츠 토토 베트맨 시스템과 두 번째 적용 스포츠 토토 베트맨Shoelace_upd생산
Shoelace_Data 세트 업데이트 sl_name = shoelace.sl_name, sl_avail = int4pl (shoelace.sl_avail, shoelace_arrive.arr_quant), sl_color = shoelace.sl_color, sl_len = shoelace.sl_len, sl_unit = shoelace.sl_unit shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok, shoelace_ok *old *, shoelace_ok *new *, 신발 끈, 떼 *old *, Shoelace *new *, 스포츠 토토 베트맨 showlace_data 여기서 bpchareq (shoelace.sl_name, showlace_arrive.arr_name) 및 bpchareq (스포츠 토토 베트맨.sl_name, shoelace.sl_name);
다시 한번 그것은 대체 규칙이고 이전 구문 분석 트리는 쓰레기. 이 쿼리는 여전히보기를 사용합니다Shoelace. 그러나 스포츠 토토 베트맨 시스템은 완료되지 않았습니다 이 루프를 사용하여 계속되고_return그것에 대한 스포츠 토토 베트맨에 따라
Shoelace_Data 세트 업데이트 sl_name = s.sl_name, sl_avail = int4pl (s.sl_avail, shoelace_arrive.arr_quant), sl_color = s.sl_color, sl_len = s.sl_len, sl_unit = s.sl_unit shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok, shoelace_ok *old *, shoelace_ok *new *, 신발 끈, 떼 *old *, shoelace *new *, 스포츠 토토 베트맨 showlace_data, Shoelace *Old *, Shoelace *New *, 스포츠 토토 베트맨 s, 단위 u 여기서 bpchareq (s.sl_name, showlace_arrive.arr_name) 및 bpchareq (스포츠 토토 베트맨.sl_name, s.sl_name);
다시 업데이트 스포츠 토토 베트맨이 적용되었으므로 휠이 회전합니다. 켜짐 및 우리는 3 라운드를 다시 작성하고 있습니다.이 시간 스포츠 토토 베트맨log_shoelace엑스트라를 생성하여 적용됩니다 구문 분석
shoelace_log에 삽입 s.sl_name, int4pl (s.sl_avail, shoelace_arrive.arr_quant), current_user, current_timestamp shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok, shoelace_ok *old *, shoelace_ok *new *, 신발 끈, 떼 *old *, shoelace *new *, 스포츠 토토 베트맨 showlace_data, Shoelace *Old *, Shoelace *New *, 스포츠 토토 베트맨 s, Unit U, 스포츠 토토 베트맨 *old *, 스포츠 토토 베트맨 *new * shoelace_log shoelace_log 여기서 bpchareq (s.sl_name, showlace_arrive.arr_name) 및 bpchareq (스포츠 토토 베트맨.sl_name, s.sl_name); 및 int4ne (int4pl (s.sl_avail, shoelace_arrive.arr_quant), s.sl_avail);
그 후 스포츠 토토 베트맨 시스템은 스포츠 토토 베트맨이 부족하여 생성 된 구문 분석 나무. 그래서 우리는 두 개의 마지막 구문 분석 나무로 끝납니다 그것은와 동일합니다.SQL진술
shoelace_log에 삽입 s.sl_name, s.sl_avail + shoelace_arrive.arr_quant, current_user, current_timestamp shoelace_arrive shoelace_arrive, 스포츠 토토 베트맨 스포츠 토토 베트맨, 스포츠 토토 베트맨 s 여기서 s.sl_name = shoelace_arrive.arr_name 및 스포츠 토토 베트맨.sl_name = s.sl_name 및 s.sl_avail + shoelace_arrive.arr_quant! = s.sl_avail; Shoelace_Data 세트를 업데이트하십시오 sl_avail = 스포츠 토토 베트맨.sl_avail + shoelace_arrive.arr_quant shoelace_arrive에서 shoelace_arrive, 스포츠 토토 베트맨 스포츠 토토 베트맨, 스포츠 토토 베트맨 s 여기서 s.sl_name = shoelace_arrive.sl_name 및 스포츠 토토 베트맨.sl_name = s.sl_name;
결과는 삽입 된 한 관계에서 나오는 데이터입니다. 다른 사람으로, 세 번째 업데이트로 변경되어 네 번째 플러스 최종 업데이트 로그 업데이트 5 분의 1 두 쿼리로 줄어 듭니다.
약간 추악한 세부 사항이 약간 있습니다. 보고 두 쿼리가 밝혀졌습니다.스포츠 토토 베트맨관계는 두 번 나타납니다 확실히 하나로 줄일 수있는 범위 테이블. 그만큼 플래너는 그것을 처리하지 않으므로 삽입의 스포츠 토토 베트맨 시스템 출력이입니다.
중첩 루프 - 합병 조인 - SEQ 스캔 - 정렬 - seq scan on s - SEQ 스캔 - 정렬 - shoelace_arrive에서 seq 스캔 - 스포츠 토토 베트맨에서 SEQ 스캔
추가 범위 테이블 항목을 생략하면서 에이
합병 조인 - SEQ 스캔 - 정렬 - seq scan on s - SEQ 스캔 - 정렬 - SHOELACE_ARRIVE에서 SEQ 스캔
로그 관계에서 동일한 항목을 완전히 생성합니다. 따라서 스포츠 토토 베트맨 시스템은에 대해 하나의 추가 스캔을 일으켰습니다.스포츠 토토 베트맨절대적이지 않은 관계 필요한. 그리고 동일한 쓸모없는 스캔이 업데이트. 그러나 모든 것을 가능하게하는 것은 정말 어려운 일이었습니다. 조금도.
최종 시연PostgreSQL규칙 시스템과 그 전력. 신발 끈을 판매하는 귀여운 금발이 있습니다. 그리고 Al이 할 수있는 것 결코 깨닫지 못하고, 그녀는 귀엽고, 그녀도 똑똑합니다 - 조금 너무 똑똑합니다. 따라서 AL이 주문하는 것은 때때로 발생합니다. 절대 판매 할 수없는 신발. 이번에 그는 1000 쌍의 마젠타 신발 끈을 주문하고 다른 종류 이후 현재 사용할 수 없지만 그는 일부를 사겠다고 약속했습니다. 또한 분홍색 데이터베이스를 준비했습니다.
al_bundy = Shoelace 값에 삽입하십시오 al_bundy- ( 'sl9', 0, '핑크', 35.0, '인치', 0.0); al_bundy = 신발 값에 삽입하십시오 al_bundy- ( 'sl10', 1000, 'magenta', 40.0, 'inch', 0.0);
이런 일이 자주 발생하므로 Shoelace를 찾아야합니다 가끔 신발이 없다는 항목. 우리는 할 수 있습니다 매번 복잡한 진술에서 또는 우리는 그것에 대해보기. 이것에 대한 견해는
view shoelace_obsolete as 존재하지 않는 곳에 * Shoelace에서 *를 선택하십시오 (slcolor = sl_color 인 Shoe에서 Shoename을 선택하십시오);
출력은
al_bundy = select * fromshoelace_obsolete; sl_name | sl_avail | sl_color | sl_len | sl_unit | sl_len_cm ----------+--------+----------+-------+-------------- SL9 | 0 | 핑크 | 35 | 인치 | 88.9 SL10 | 1000 | Magenta | 40 | 인치 | 101.6
1000 개의 마젠타 신발 끈의 경우 우리는 우리 전에 직접 차를 내려야합니다. 버릴 수는 있지만 또 다른 문제입니다. 분홍색 항목 우리는 삭제합니다. 조금 더 어렵게 만들기 위해PostgreSQL, 직접 삭제하지 않습니다. 대신 우리는 하나 더보기를 만듭니다
보기 Shoelace_candelete를 만듭니다 shoelace_obsolete에서 * 선택 * sl_avail = 0;
그리고 이렇게하십시오 :
존재하는 곳에서 Shoelace에서 삭제합니다 (SHOELACE_CANDELETE에서 *를 선택하십시오 여기서 sl_name = shoelace.sl_name);
Voilà:
al_bundy = select *에서 shoelace; sl_name | sl_avail | sl_color | sl_len | sl_unit | sl_len_cm ----------+--------+----------+-------+-------------- SL1 | 5 | 블랙 | 80 | cm | 80 SL2 | 6 | 블랙 | 100 | cm | 100 SL7 | 6 | 브라운 | 60 | cm | 60 SL4 | 8 | 블랙 | 40 | 인치 | 101.6 SL3 | 10 | 블랙 | 35 | 인치 | 88.9 SL8 | 21 | 브라운 | 40 | 인치 | 101.6 SL10 | 1000 | Magenta | 40 | 인치 | 101.6 SL5 | 4 | 브라운 | 1 | m | 100 SL6 | 20 | 브라운 | 0.9 | m | 90 (9 줄)
a 뷰에서 삭제, 하위 선택 자격이있는 Total은 4 개의 중첩/조인 뷰를 사용합니다. 뷰와 위치를 포함하는 하위 선택 자격 계산 된보기 열이 사용되며, 하나로 다시 작성됩니다 요청 된 데이터를 Real에서 삭제하는 단일 구문 분석 트리 테이블.
실제에는 몇 가지 상황이 있다고 생각합니다. 그러한 구성이 필요한 세계. 그러나 그것은 나를 만듭니다 그것이 효과가 있다는 느낌.
진실은 다음과 같습니다.이 작업을 수행하는 동안 버그가 하나 더 발견되었습니다 이 문서 작성. 그러나 고치고 난 후에 나는 조금이었다 전혀 작동한다는 사실에 놀랐습니다.