Postgresql 9.3.25 문서 | ||||
---|---|---|---|---|
PostgreSQL : 문서 : 9.3 : 롤 토토 된보기 | PostgreSQL : 문서 : 9.3 : 사설 토토 시스템 | 제 38 장. 사설 토토 사이트 체계 | PostgreSQL : 문서 : 9.3 : 스포츠 토토 및 권한 |
정의 된 사설 토토 사이트삽입, 업데이트및삭제는보기와 크게 다릅니다 이전 섹션에 설명 된 사설 토토 사이트. 첫째, 그들의사설 토토 사이트 만들기명령은 더 많은 것을 허용합니다 :
아무런 조치도 취할 수 없습니다.
여러 조치를 취할 수 있습니다.
될 수 있습니다대신또는또한(기본값).
가사선NEWandold유용해집니다.
사설 토토 사이트 자격을 가질 수 있습니다.
둘째, 쿼리 트리를 제자리에 수정하지 않습니다. 대신 그들은 0 이상의 새로운 쿼리 트리를 만들고 원본을 버릴 수 있습니다. 하나.
구문 유지 :
만들기 [또는 교체] 사설 토토 사이트 만들기이름as이벤트to테이블[where조건] [또한 | 대신] 아무것도 |명령| (명령;명령...)
염두에 두십시오. 다음에서규칙 업데이트정의 된 사설 토토 사이트을 의미합니다삽입, 업데이트또는삭제.
업데이트 규칙은 결과가 발생할 때 규칙 시스템에 적용됩니다. 쿼리 트리의 관계 및 명령 유형은 에 주어진 개체 및 이벤트사설 토토 사이트 만들기명령. 업데이트 규칙의 경우 규칙 시스템이 쿼리 목록을 만듭니다. 나무. 처음에는 쿼리 트리 목록이 비어 있습니다. 0이있을 수 있습니다 (아무것도키 단어), 하나 또는 다중 행위. 단순화하기 위해, 우리는 하나의 행동으로 규칙을 살펴볼 것입니다. 이것 규칙은 자격을 가질 수 있고 그렇지 않을 수 있습니다대신또는또한( 기본).
사설 토토 사이트 자격이란 무엇입니까? 그것은 제한이라는 제한입니다 사설 토토 사이트의 행동이 수행되어야하는 경우와 그렇지 않은 경우. 이것 자격은 유사성 만 참조 할 수 있습니다NEW및/또는old기본적으로 객체로 주어진 관계를 나타냅니다 (그러나 특별한 의미).
따라서 다음 쿼리 트리를 생성하는 세 가지 사례가 있습니다. 일회용 사설 토토 사이트을 위해.
원본 쿼리와 함께 사설 토토 사이트 조치의 쿼리 트리 트리의 자격 추가
사설 토토 사이트 자격을 갖춘 사설 토토 사이트 조치의 쿼리 트리 그리고 원래 쿼리 트리의 자격이 추가되었습니다
사설 토토 사이트 자격을 갖춘 사설 토토 사이트 조치의 쿼리 트리 그리고 원래 쿼리 트리의 자격; 그리고 원래 쿼리 부정적인 사설 토토 사이트 자격이 추가 된 트리
마지막으로 사설 토토 사이트이있는 경우또한, 변경되지 않은 원래 쿼리 트리가 목록에 추가됩니다. 만 자격 있는대신규칙은 이미 추가됩니다 원래 쿼리 트리, 우리는 하나 또는 두 개의 출력 쿼리로 끝납니다. 한 가지 행동을 가진 규칙을위한 나무.
forinsert사설 토토 사이트, 원래 쿼리 (억제되지 않으면대신)가 완료되었습니다 규칙에 의해 추가 된 조치 전에. 이것은 행동이 볼 수있게합니다 삽입 된 행 (들). 하지만on UpdateandON DELETE규칙, 원래 쿼리는입니다 규칙에 의해 추가 된 조치 후에. 이것은 행동은 업데이트되거나 삭제 될 행을 볼 수 있습니다. 그렇지 않으면, 행동은 행이 일치하지 않기 때문에 아무것도하지 않을 수 있습니다. 그들의 자격.
규칙 조치에서 생성 된 쿼리 트리는 시스템을 다시 작성하면 더 많은 규칙이 적용되어 다소 쿼리 트리. 따라서 규칙의 행동에는 a가 있어야합니다 규칙과 다른 명령 유형 또는 다른 결과 관계 그 자체가 켜져 있습니다. 그렇지 않으면이 재귀 과정은 무한 루프. (규칙의 재귀 확장이 감지 될 것입니다 오류로보고되었습니다.)
쿼리 나무의 행동에서 발견 된 쿼리 트리pg_rewrite시스템 카탈로그는 템플릿 일뿐입니다. 그들은 범위 테이블 항목을 참조 할 수 있기 때문에NEWandold, 일부 사용하기 전에 대체해야합니다. 어떤 것도 에 대한 참조NEW, 대상 목록 원래 쿼리는 해당 항목을 검색합니다. 발견되면 해당 항목의 표현은 참조를 대체합니다. 그렇지 않으면,NEW는와 동일합니다.old(업데이트) 또는 IS 널 값으로 대체 (삽입). 에 대한 참조olda로 대체됩니다 결과 관계 인 범위 테이블 항목에 대한 참조
시스템이 업데이트 규칙을 적용한 후보기에 적용됩니다. 생성 된 쿼리 트리에 대한 규칙. 보기는 새 업데이트를 삽입 할 수 없습니다 작업 이후 업데이트 규칙을 적용 할 필요가 없습니다. 재 작성보기.
우리는의 변화를 추적하고 싶다고 말합니다SL_AVAIL열의 열Shoelace_data관계. 그래서 우리는 로그 테이블을 설정했습니다 AN 일 때 조건부로 로그 항목을 작성하는 규칙업데이트Shoelace_data.
테이블 생성 shoelace_log ( SL_NAME 텍스트 - -Hoelace가 변경되었습니다 SL_AVAIL INTEGER - 새로운 가용 값 log_who 텍스트 - 누가 그랬습니다 log_ 시절 시간 - 언제 ); shoelace_data에 대한 업데이트시 규칙 log_shoelace를 만듭니다 어디서 New.sl_avail < Old.sl_avail shoelace_log 값에 삽입하십시오 ( new.sl_name, new.sl_avail, current_user, current_timestamp );
이제 누군가 :
Shoelace_Data 업데이트 sl_avail = 6 여기서 sl_name = 'sl7';
그리고 우리는 로그 테이블을 봅니다 :
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 Shoelace_data에서 Shoelace_data에서 여기서 shoelace_data.sl_name = 'sl7';
사설 토토 사이트이 있습니다log_shoelaceon update사설 토토 사이트 자격을 갖춘 표현:
new.sl_avail < Old.sl_avail
및 조치 :
shoelace_log 값에 삽입 new.sl_name, new.sl_avail, current_user, current_timestamp) Shoelace_data에서 New, Shoelace_data Old;
(이것은 일반적으로 쓸 수 없기 때문에 조금 이상해 보입니다삽입 ... 값 ... From. 그만큼From여기서 절은 단지 거기에 있음을 나타냅니다 쿼리 트리의 레인지 테이블 항목NEWandold. 이것들입니다 의 변수에 의해 참조 될 수 있도록 필요삽입명령의 쿼리 트리.)
사설 토토 사이트은 자격을 갖추고 있습니다또한규칙 규칙 시스템은 두 개의 쿼리 트리를 반환해야합니다 : 수정 된 규칙 작업 및 원래 쿼리 트리. 1 단계에서, 범위 테이블 원래 쿼리는 규칙의 조치 쿼리에 통합됩니다. 나무. 이것은 다음과 같은 결과를 초래합니다.
shoelace_log 값에 삽입 new.sl_name, new.sl_avail, current_user, current_timestamp) Shoelace_data에서 New, Shoelace_data Old,shoelace_data shoelace_data;
2 단계에서는 사설 토토 사이트 자격이 추가되므로 결과 세트는 줄로 제한됩니다SL_AVAIL변경 :
shoelace_log 값에 삽입 new.sl_name, new.sl_avail, current_user, current_timestamp) Shoelace_data에서 New, Shoelace_data Old, shoelace_data shoelace_dataWhere New.sl_avail < Old.sl_avail;
삽입 ... 값없음여기서절 둘 중 하나이지만 플래너와 집행 인은 그것. 그들은 어쨌든이 동일한 기능을 지원해야합니다.삽입 ... 선택.)
3 단계에서 원래 쿼리 트리의 자격이 추가됩니다. 결과 세트를 추가로만 제한하는 것 원래 쿼리에 의해 접촉했습니다 :
shoelace_log 값에 삽입 new.sl_name, new.sl_avail, current_user, current_timestamp) Shoelace_data에서 New, Shoelace_data Old, shoelace_data shoelace_data 어디 new.sl_avail < old.sl_avail및 shoelace_data.sl_name = 'sl7';
4 단계 참조를 대체NEWby 원래 쿼리 트리 또는 결과 관계에서 일치하는 변수 참조 :
shoelace_log 값에 삽입 (shoelace_data.sl_name, 6, current_user, current_timestamp) Shoelace_data에서 New, Shoelace_data Old, shoelace_data shoelace_data 어디6< Old.sl_avail 및 shoelace_data.sl_name = 'sl7';
5 단계 변경old참조 결과 관계 참조 :
shoelace_log 값에 삽입 ( shoelace_data.sl_name, 6, current_user, current_timestamp) Shoelace_data에서 New, Shoelace_data Old, shoelace_data shoelace_data 여기서 6 <shoelace_data.sl_avail및 shoelace_data.sl_name = 'sl7';
그게 다야. 사설 토토 사이트이이므로또한, 우리 원래 쿼리 트리도 출력합니다. 요컨대, 출력 사설 토토 사이트 시스템은 이에 해당하는 두 개의 쿼리 트리 목록입니다. 진술 :
shoelace_log 값에 삽입 shoelace_data.sl_name, 6, current_user, current_timestamp) shoelace_data에서 여기서 6 < shoelace_data.sl_avail 및 shoelace_data.sl_name = 'sl7'; Shoelace_Data 업데이트 SL_AVAIL = 6을 업데이트하십시오 여기서 sl_name = 'sl7';
이 순서로 실행됩니다. 이것이 바로 사설 토토 사이트은해야 할 일이었다.
대체 및 추가 자격은 IF를 확인합니다 원래 쿼리는 다음과 같습니다.
Shoelace_Data 업데이트 SL_COLOR = 'Green' 여기서 sl_name = 'sl7';
로그 항목이 작성되지 않습니다. 이 경우 원래 쿼리입니다 트리에는 대상 목록 항목이 포함되어 있지 않습니다.SL_AVAIL, sonew.sl_availshoelace_data.sl_avail. 따라서 추가 명령 규칙에 따라 생성 된 것은 다음과 같습니다.
shoelace_log 값에 삽입 ( shoelace_data.sl_name,shoelace_data.sl_avail, current_user, current_timestamp) shoelace_data에서 어디shoelace_data.sl_avail< shoelace_data.sl_avail 및 shoelace_data.sl_name = 'sl7';
그리고 그 자격은 결코 사실이 아닙니다.
원래 쿼리가 여러 행을 수정하면 작동합니다. 그래서 누군가가 명령을 발행했다면 :
업데이트 shoelace_data set sl_avail = 0 여기서 sl_color = 'black';
실제로 4 개의 행이 업데이트됩니다 (SL1, SL2, SL3및SL4). 하지만SL3이미SL_AVAIL = 0. 이 경우 원래 쿼리 트리 자격은 다릅니다 추가 쿼리 트리의 결과 :
shoelace_log에 삽입하십시오 shoelace_data.sl_name, 0, 선택을 선택하십시오. current_user, current_timestamp shoelace_data에서 여기서 0 < shoelace_data.sl_avail 그리고shoelace_data.sl_color = 'black';
규칙에 의해 생성됩니다. 이 쿼리 트리는 반드시 삽입됩니다 세 가지 새로운 로그 항목. 그리고 그것은 절대적으로 맞습니다.
여기서 우리는 원래 쿼리 트리가 중요한 이유를 알 수 있습니다. 마지막으로 실행됩니다. 인 경우업데이트먼저 실행되면 모든 행이 이미 0으로 설정되었을 것입니다. 그래서 로깅삽입는 찾을 수 없습니다 행0 < shoelace_data.sl_avail.
언급 된 뷰 관계를 보호하는 간단한 방법 누군가가 달리려고 할 가능성삽입, 업데이트또는삭제그들에게는 그 쿼리 트리를 두는 것입니다 버리십시오. 그래서 우리는 사설 토토 사이트을 만들 수 있습니다 :
신발 삽입물에 따라 규칙을 작성하십시오 대신 아무것도하지 않습니다. 신발 업데이트와 같이 규칙 신발 _upd_protect를 만듭니다 대신 아무것도하지 않습니다. 삭제에서 신발 삭제와 같이 규칙 신발을 만듭니다 대신 아무것도하지 말라;
누군가가 지금보기에서 이러한 작업을 수행하려고한다면 관계신발, 사설 토토 사이트 시스템이 적용됩니다 이 사설 토토 사이트. 사설 토토 사이트에는 조치가없고대신, 쿼리 트리의 결과 목록이 있습니다 비어 있고 전체 쿼리는 없기 때문에 아무것도되지 않을 것입니다. 규칙 시스템이 그것으로 끝났습니다.
규칙 시스템을 사용하는보다 정교한 방법은 쿼리 트리를 올바른 것으로 다시 작성하는 규칙 실제 테이블에서 작동. 에서 그렇게하려면Shoelace보기, 다음 사설 토토 사이트을 만듭니다.
Shoelace에 인서트와 같이 규칙 shoelace_ins를 만듭니다 대신하십시오 shoelace_data 값에 삽입 ( 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을 만듭니다 대신하십시오 shoelace_data에서 삭제합니다 여기서 sl_name = old.sl_name;
지원하려는 경우반환보기에 쿼리, 사설 토토 사이트을 포함해야합니다반환보기 행을 계산하는 클로스. 이것 일반적으로 단일 테이블의보기에는 꽤 사소하지만 와 같은 조회수에 대한 비트 지루함Shoelace. 삽입 케이스의 예는 다음과 같습니다.
Shoelace에 인서트와 같이 규칙 shoelace_ins를 만듭니다 대신하십시오 shoelace_data 값에 삽입 ( new.sl_name, new.sl_avail, new.sl_color, new.sl_len, new.sl_unit )) 반환 shoelace_data.*, (shoelace_data.sl_len * u.un_fact를 선택하십시오 UNIT U에서 Shoelace_data.sl_unit = u.un_name);
이 하나의 사설 토토 사이트은 두 가지 모두를 지원합니다삽입및반환 삽입보기 쿼리 -반환절 단순히 무시됩니다삽입.
이제 한 번에 한 팩 팩이 도착한다고 가정합니다. 상점과 큰 부품 목록과 함께. 그러나 당신은 원하지 않습니다 수동으로 업데이트Shoelace모든 것을 봅니다 시간. 대신 우리는 두 개의 작은 테이블을 설정합니다. 하나는 삽입 할 수 있습니다. 부품 목록의 항목과 특별한 속임수가있는 항목. 그만큼 이들에 대한 창조 명령은 다음과 같습니다.
테이블 생성 shoelace_arrive ( arr_name 텍스트, arr_quant 정수 ); 테이블 생성 shoelace_ok ( ok_name 텍스트, OK_QUANT 정수 ); shoelace_ok에 삽입 된 insert와 같이 규칙 shoelace_ok_ins를 만듭니다 대신하십시오 Shoelace를 업데이트하십시오 sl_avail = sl_avail + new.ok_quant를 설정합니다 여기서 sl_name = new.ok_name;
이제 테이블을 채울 수 있습니다Shoelace_arrive부품의 데이터와 함께 목록:
SHOELACE_ARRIVE에서 선택 *; arr_name | arr_quant ----------+----------- SL3 | 10 SL6 | 20 SL8 | 20 (3 줄)
현재 데이터를 빨리 살펴보십시오 :
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 줄)
이제 도착한 신발 끈을 움직여 :
shoelace_ok에 삽입 * shoelace_arrive;
결과 확인 :
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 줄) 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_insIS 적용되고 이것을 다음과 같이 바꿉니다 :
Shoelace 업데이트 sl_avail = shoelace.sl_avail + shoelace_arrive.arr_quant를 설정합니다 shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok, Shoelace_ok Old, Shoelace_ok New, 신발 끈 여기서 shoelace.sl_name = shoelace_arrive.arr_name;
그리고 원본을 버립니다삽입onShoelace_ok. 이 다시 작성된 쿼리는입니다 사설 토토 사이트 시스템으로 다시 전달되고 두 번째 적용 사설 토토 사이트Shoelace_upd생산 :
Shoelace_data를 업데이트하십시오 SL_NAME = shoelace.sl_name을 설정합니다. sl_avail = 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, 신발 끈, 구두 끈으로, Shoelace new, shoelace_data shoelace_data 여기서 shoelace.sl_name = shoelace_arrive.arr_name 및 shoelace_data.sl_name = shoelace.sl_name;
다시대신사설 토토 사이트 및 이전 쿼리 트리가 버려졌습니다. 이 쿼리는 여전히 사용합니다 보다Shoelace. 그러나 사설 토토 사이트 시스템은 아닙니다 이 단계로 마무리하여 계속되고를 적용합니다._return사설 토토 사이트에 따라, 우리는 다음을 얻습니다.
Shoelace_Data를 업데이트하십시오 SL_NAME = S.SL_NAME 설정 sl_avail = 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, 신발 끈, 구두 끈으로, Shoelace new, shoelace_data shoelace_data, 신발 끈 오래, 신발 끈 새, shoelace_data s, 단위 u 여기서 s.sl_name = shoelace_arrive.arr_name 및 shoelace_data.sl_name = s.sl_name;
마지막으로, 사설 토토 사이트log_shoelace적용, 추가 쿼리 트리 생성 :
shoelace_log에 삽입하십시오 s.sl_name 선택, 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, 신발 끈, 구두 끈으로, Shoelace new, shoelace_data shoelace_data, 신발 끈 오래, 신발 끈 새, shoelace_data s, Unit U, shoelace_data old, shoelace_data new shoelace_log shoelace_log 여기서 s.sl_name = shoelace_arrive.arr_name 및 shoelace_data.sl_name = s.sl_name 그리고 (s.sl_avail + shoelace_arrive.arr_quant) < s.sl_avail;
그 후 사설 토토 사이트 시스템은 사설 토토 사이트이 부족하여 생성 된 쿼리 트리.
그래서 우리는 두 개의 최종 쿼리 트리로 끝납니다. 그만큼33916_33921진술 :
shoelace_log에 삽입하십시오 s.sl_name 선택, s.sl_avail + shoelace_arrive.arr_quant, current_user, current_timestamp shoelace_arrive shoelace_arrive, shoelace_data shoelace_data, shoelace_data s 여기서 s.sl_name = shoelace_arrive.arr_name 및 shoelace_data.sl_name = s.sl_name 및 s.sl_avail + shoelace_arrive.arr_quant < s.sl_avail; Shoelace_data를 업데이트하십시오 sl_avail = shoelace_data.sl_avail + shoelace_arrive.arr_quant를 설정합니다 shoelace_arrive에서 shoelace_arrive, shoelace_data shoelace_data, shoelace_data s 여기서 s.sl_name = shoelace_arrive.sl_name 및 shoelace_data.sl_name = s.sl_name;
결과는 하나의 관계에서 나오는 데이터가 다른 하나는 3 분의 1의 업데이트로 변경되어 업데이트로 변경되었습니다. 네 번째 플러스 최종 업데이트를 5 분의 1 로그인하면 두 쿼리.
약간 추악한 세부 사항이 있습니다. 둘을보고 있습니다 쿼리,Shoelace_data관계는 범위에 두 번 나타납니다 확실히 하나로 줄일 수있는 테이블. 플래너는 그렇습니다 처리하지 않고 규칙 시스템 출력에 대한 실행 계획 의삽입
중첩 루프 - 합병 조인 - SEQ 스캔 - 정렬 - seq scan on s - SEQ 스캔 - 정렬 - shoelace_arrive에서 seq 스캔 - SHOELACE_DATA에서 SEQ 스캔
추가 범위 테이블 항목을 생략하면 A가 발생합니다.
합병 조인 - SEQ 스캔 - 정렬 - seq scan on s - SEQ 스캔 - 정렬 - SHOELACE_ARRIVE에서 SEQ 스캔
로그 테이블에서 정확히 동일한 항목을 생성합니다. 따라서, 규칙 시스템은 테이블에서 하나의 추가 스캔을 일으켰습니다.Shoelace_data절대 필요하지 않습니다. 그리고 동일한 중복 스캔이에서 다시 한 번 수행됩니다.업데이트. 그러나 그것을 만드는 것은 정말 어려운 일이었습니다. 전혀 가능합니다.
이제 우리는의 최종 데모를 만듭니다.PostgreSQL규칙 시스템과 그 전력. 말해봐 데이터베이스에 특별한 색상의 신발 끈 추가 :
Shoelace 값에 삽입 ( 'sl9', 0, 'pink', 35.0, 'inch', 0.0); 신발 값 값 ( 'SL10', 1000, 'Magenta', 40.0, 'inch', 0.0)에 삽입
우리는 어느 것을 확인하고 싶습니다Shoelace항목은 신발에 맞지 않습니다. 그만큼 이것에 대한보기 :
보기 Shoelace_mistatch ar 존재하지 않는 곳에 * Shoelace에서 *를 선택하십시오 (slcolor = sl_color 인 Shoe에서 Shoename을 선택하십시오);
출력은 다음과 같습니다.
SHOELACE_MISTATCH에서 선택 *; sl_name | SL_AVAIL | SL_COLOR | SL_LEN | SL_UNIT | SL_LEN_CM ---------+----------+----------+-------+-------------------------------------- SL9 | 0 | 핑크 | 35 | 인치 | 88.9 SL10 | 1000 | 마젠타 | 40 | 인치 | 101.6
이제 우리는 그것을 일치하지 않도록 설정하고 싶습니다. 재고는 데이터베이스에서 삭제되지 않습니다. 조금 만들기 위해 더 어려워PostgreSQL, 우리는 그렇지 않습니다 직접 삭제하십시오. 대신 우리는 하나 더보기를 만듭니다 :
Shoelace_can_delete 님으로보기를 작성하십시오 shoelace_mistatch에서 * sel_avail = 0;에서 선택하십시오.
이런 식으로 수행하십시오 :
존재하는 곳에서 Shoelace에서 삭제합니다 (SHOELACE_CAN_DELETE에서 * 선택하십시오 여기서 sl_name = shoelace.sl_name);
Voilà:
SELECT * FROM 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 | 마젠타 | 40 | 인치 | 101.6 SL5 | 4 | 브라운 | 1 | m | 100 SL6 | 20 | 브라운 | 0.9 | m | 90 (9 줄)
a삭제서브 쿼리가있는보기에 총 4 개의 중첩/가입 뷰를 사용하는 자격 그들 자체는 견해를 포함하는 하위 쿼리 자격을 가지고 있습니다. 계산 된보기 열이 사용되는 경우, 하나로 다시 작성됩니다. 요청 된 데이터를 실제에서 삭제하는 단일 쿼리 트리 테이블.
실제 세계에는 몇 가지 상황이있을 것입니다. 그러한 구성이 필요한 경우. 그러나 그것은 당신을 느끼게합니다 편안하게 작동합니다.
이전 | 배트맨 토토 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 다음 |
구체화 된 견해 | PostgreSQL : 문서 : 9.3 : 사설 토토 시스템 | 사설 토토 사이트 및 특권 |