삽입, 업데이트 및 삭제에 정의 된 규칙은 다음과 같습니다. 이전에 설명 된보기 규칙과 완전히 다릅니다. 부분. 첫째, 그들의 규칙 작성 명령은 더 많은 것을 허용합니다 :
아무런 조치도 취하지 않을 수 있습니다.
여러 행동을 할 수 있습니다.
키워드는 대신 선택 사항입니다.
의사 관계 새롭고 오래된 관계가 유용 해집니다.
토토 사이트 순위 자격을 가질 수 있습니다.
구문 유지
이벤트에서 Rule Rule_Name을 만듭니다 반대하기 [rule_qualification] [대신] [행동 | (행동) | 아무것도 아님];염두에 두십시오. 다음에서 "업데이트 규칙"은 규칙을 의미합니다 삽입, 업데이트 또는 삭제에 정의됩니다.
업데이트 토토 사이트 순위은 결과가 발생할 때 토토 사이트 순위 시스템에 적용됩니다. Parsetree의 관계와 명령 유형은 Create Rule 명령에 제공된 개체 및 이벤트. 업데이트를 위해 토토 사이트 순위, 토토 사이트 순위 시스템은 ParsetRees 목록을 만듭니다. 처음에 Parsetree 목록은 비어 있습니다. 0이있을 수 있습니다 (아무것도 없습니다 키워드), 하나 또는 여러 작업. 단순화하기 위해, 우리는 a를 본다 하나의 행동으로 토토 사이트 순위. 이 토토 사이트 순위은 자격을 가질 수 있습니다 그리고 대신 할 수 있습니다.
토토 사이트 순위 자격이란 무엇입니까? 그것은 제한이라는 제한입니다 토토 사이트 순위의 행동이 수행되어야하는 경우와 그렇지 않은 경우. 이것 자격은 신규 및/또는 오래된 의사만을 참조 할 수 있습니다 기본적으로 객체로 주어진 관계 (그러나 특별한 의미로).
따라서 다음 ParsetRees를 생성하는 4 가지 사례가 있습니다. 일회용 규칙을 위해.
대신 자격이없고 대신 자격이 없습니다 :
토토 사이트 순위 조치에서 파트 세트 원래 Parsetree의 자격이 추가되었습니다.
자격이 없지만 대신 :
토토 사이트 순위 조치에서 파트 세트 원래 Parsetree의 자격이 추가되었습니다.
대신 자격이 제공되지 않습니다 :
토토 사이트 순위이있는 토토 사이트 순위 조치에서 파트 세트 자격과 원래 Parsetree 's 자격이 추가되었습니다.
자격 제공 및 대신 :
토토 사이트 순위이있는 토토 사이트 순위 조치에서 파트 세트 자격과 원래 Parsetree 's 자격이 추가되었습니다.
부정적인 토토 사이트 순위이있는 원래의 파 세트 자격이 추가되었습니다.
마지막으로, 토토 사이트 순위이 대신에 있지 않으면 변경되지 않은 원본 Parsetree가 목록에 추가됩니다. 대신 자격이 있기 때문에 토토 사이트 순위은 이미 원래의 Parsetree를 추가합니다. 하나 또는 두 개의 출력 파트 세트는 하나의 행동이있는 토토 사이트 순위입니다.
규칙 조치에서 생성 된 파 세트가 발생합니다 시스템을 다시 작성하고 더 많은 규칙이 적용됩니다. 다소 parsetrees를 초래합니다. 그래서 ParsetRees 규칙 조치에는 다른 명령 유형이 있어야합니다 결과적으로. 그렇지 않으면이 재귀 과정이 끝납니다 루프. 현재 10의 재귀 제한이 있습니다. 반복. 10 번의 반복 후에도 여전히 업데이트 규칙이 있습니다 규칙 시스템을 적용하려면 여러 규칙에 대한 루프를 가정합니다. 정의 및 거래를 중단합니다.
pg_rewrite시스템 카탈로그는 템플릿 일뿐입니다. 그들은 새로운 것과 오래되기 전에 일부 대체를해야합니다. 사용된. 새로운 것에 대한 참조에 대해서는 원본의 대상 목록 쿼리는 해당 항목을 검색합니다. 발견된다면 Entry의 표현식은 참조를 대체합니다. 그렇지 않으면 새로운 수단 기존 (업데이트 용)과 동일하거나 NULL ( 끼워 넣다). Old에 대한 참조는 rangetable 항목은 결과적 인 항목입니다.
업데이트 토토 사이트 순위을 적용한 후 토토 사이트 순위보기를 적용합니다. 생산 된 파 세트에. 보기는 새 업데이트를 삽입 할 수 없습니다 작업이므로 업데이트 토토 사이트 순위을 출력에 적용 할 필요가 없습니다. 뷰 재 작성.
우리는의 SL_AVAIL 열을 추적하고 싶습니다shoelace_data관계. 그래서 우리는 설정합니다 로그 테이블 및 조건부 로그 항목을 작성하는 토토 사이트 순위 업데이트가 수행되는 경우shoelace_data.
테이블 생성 shoelace_log ( SL_NAME char (10), -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 );
지금 Al do
al_bundy = 업데이트 shoelace_data 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 set sl_avail = 6 Shoelace_data에서 Shoelace_data에서 여기서 bpchareq (shoelace_data.sl_name, 'sl7');토토 사이트 순위 'log_shoelace'가 있습니다. 토토 사이트 순위 자격 표현
int4ne (new.sl_avail, old.sl_avail)및 하나의 행동
shoelace_log 값에 삽입 ( *새*.sl_name,*new*.sl_avail, current_user, current_timestamp shoelace_data *new *, shoelace_data *old *;이것은 정상적으로 할 수 없기 때문에 조금 이상하게 보입니다 쓰기 삽입 ... 값 ... From. 여기에서 From Clause는 그냥입니다 Parsetree에 Rangetable 항목이 있음을 나타냅니다. *새로운*와*old*. 이것들은 그들이 참조 할 수 있도록 필요합니다. 삽입 명령의 querytree의 변수.
토토 사이트 순위은 자격을 갖춘 비 입동 토토 사이트 순위이므로 토토 사이트 순위 시스템은 두 개의 parsetrees를 반환해야합니다 : 수정 된 토토 사이트 순위 조치 그리고 원래의 파 세트. 첫 번째 단계에서 rangetable 원래 쿼리 중 토토 사이트 순위의 조치에 통합됩니다. 파 세트. 결과
shoelace_log 값에 삽입 *새*.sl_name,*new*.sl_avail, current_user, current_timestamp Shoelace_data에서 *New *, Shoelace_data *Old *,shoelace_data shoelace_data;2 단계에서 토토 사이트 순위 자격이 추가됩니다. 결과 세트는 SL_AVAIL이 변경되는 행으로 제한됩니다.
shoelace_log 값에 삽입 *새*.sl_name,*new*.sl_avail, current_user, current_timestamp shoelace_data *new *, shoelace_data *old *, shoelace_data shoelace_dataint4ne (*new*.sl_avail,*old*.sl_avail);삽입 ... 값이기 때문에 이것은 심지어 낯선 사람입니다 Where 절은 없지만 플래너와 집행자 어려움이 없을 것입니다. 그들은 이것을 똑같이 지원해야합니다 어쨌든 삽입에 대한 기능 ... 선택하십시오. 3 단계에서 원본 Parsetree의 자격이 추가되어 결과 세트가 제한됩니다 원래의 Parsetree가 만지는 행만 더 나아가고 있습니다.
shoelace_log 값에 삽입 ( *새*.sl_name,*new*.sl_avail, current_user, current_timestamp shoelace_data *new *, shoelace_data *old *, shoelace_data shoelace_data 여기서 int4ne (*new*.sl_avail,*old*.sl_avail)및 bpchareq (shoelace_data.sl_name, 'sl7');4 단계는 TargetList 항목으로 새로운 참조를 대체합니다 원래 파 세트 또는 일치 변수와 함께 결과 관계의 참조.
shoelace_log 값에 삽입 (shoelace_data.sl_name, 6, current_user, current_timestamp shoelace_data *new *, shoelace_data *old *, shoelace_data shoelace_data 여기서 int4ne (6, *Old *.sl_avail) 및 bpchareq (shoelace_data.sl_name, 'sl7');5 단계는 이전 참조를 결과적으로 참조로 변경합니다.
shoelace_log 값에 삽입 ( shoelace_data.sl_name, 6, current_user, current_timestamp shoelace_data *new *, shoelace_data *old *, shoelace_data shoelace_data 여기서 int4ne (6,shoelace_data.sl_avail) 및 bpchareq (shoelace_data.sl_name, 'sl7');그게 다야. 토토 사이트 순위이 대신에 있지 않기 때문에 우리는 또한 원래 파 세트. 요컨대, 토토 사이트 순위 시스템의 출력은 진술과 동일한 두 개의 parsetrees 목록 :
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';이것은이 순서로 실행되며 이것이 바로 토토 사이트 순위이 정의됩니다. 대체 및 자격이 추가되면 보장됩니다 원래 쿼리가 있다면
Shoelace_Data 업데이트 SL_COLOR = 'Green' 여기서 sl_name = 'sl7';로그 항목이 작성되지 않습니다. 이번에는 원본입니다 Parsetree에는 SL_AVAIL의 대상리스트 항목이 포함되어 있지 않으므로 new.sl_avail은 shoelace_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';그리고 그 자격은 결코 사실이 아닙니다. 또한 작동합니다 원래 쿼리가 여러 행을 수정하는 경우 Al이 발행한다면 명령
Shoelace_Data 업데이트 SL_AVAIL = 0 여기서 sl_color = 'black';실제로 4 개의 행이 업데이트됩니다 (SL1, SL2, SL3 및 SL4). 하지만 SL3은 이미 SL_AVAIL = 0입니다. 이번에는 원래 ParSetRees 자격이 다르고 추가 파 세트가 발생합니다
shoelace_log에 삽입 shoelace_data.sl_name, 0, current_user, current_timestamp shoelace_data에서 여기서 0! = shoelace_data.sl_avail 그리고shoelace_data.sl_color = 'black';이 파 세트는 반드시 3 개의 새로운 로그 항목을 삽입합니다. 그리고 그것은 절대적으로 맞습니다.
원래의 파 세트가 실행되는 것이 중요합니다 마지막. 그만큼Postgres"트래픽 COP "실행 사이에 명령 카운터 증분을 수행합니다 두 파수의 중에서 두 번째는 변경 사항을 볼 수 있습니다. 첫 번째. 업데이트가 먼저 실행 된 경우 모든 행은 이미 0으로 설정되어 있으므로 로깅 삽입물 0! = shoelace_data.sl_avail의 행을 찾지 못할 것입니다.
언급 된 것들로부터보기 관계를 보호하는 간단한 방법 누군가가 삽입, 업데이트 및 삭제하려고 할 가능성 그들에게는 그 파트 릿이 버리도록하는 것이 있습니다. 우리는 창조합니다 토토 사이트 순위
신발 삽입에 rule shoe_ins_protect를 작성하십시오 대신 아무것도하지 않습니다. 신발 업데이트와 같이 토토 사이트 순위 신발 _upd_protect를 만듭니다 대신 아무것도하지 않습니다. 삭제에서 신발 삭제와 같이 토토 사이트 순위 신발을 만듭니다 대신 아무것도하지 말라;만약 Al이 지금보기에서 이러한 작업을 수행하려고한다면 관계신발, 토토 사이트 순위 시스템이 적용됩니다 토토 사이트 순위. 토토 사이트 순위에는 조치가없고 대신 결과 ParsetRees 목록이 비어 있고 전체 쿼리가 최적화 할 남은 것이 없거나 토토 사이트 순위 시스템이 완료된 후에 실행됩니다.
참고 :이 방법은 프론트 엔드를 자극 할 수 있습니다 절대적으로 아무 일도 일어나지 않았기 때문에 응용 프로그램 데이터베이스이므로 백엔드는 아무것도 반환하지 않습니다. 쿼리. pgres_empty_query조차도 사용할 수 없습니다 libpq에서. PSQL에서는 아무 일도 일어나지 않습니다. 이것은 변할 수 있습니다 미래.
토토 사이트 순위 시스템을 사용하는보다 정교한 방법은 생성하는 것입니다. 파트 릿을 권리를 수행하는 토토 사이트 순위으로 재 작성하는 토토 사이트 순위 실제 테이블에서 작동. 에서 그렇게하려면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;이제 Al 's Shop에 도착하는 신발 팩이 있습니다. 큰 부분이 있습니다. Al은 계산에 그다지 좋지 않습니다. 그가 수동으로 떼보기를 업데이트하기를 원하지 않습니다. 대신 우리 두 개의 작은 테이블을 설정하는데, 하나는 항목을 삽입 할 수 있습니다. PATLIST와 특별한 트릭이있는 하나. 에 대한 명령을 작성합니다 이것들은 다음과 같습니다.
테이블 생성 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 = 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 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 세트 업데이트 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 *, shoelace_data showlace_data 여기서 bpchareq (shoelace.sl_name, showlace_arrive.arr_name) 및 bpchareq (shoelace_data.sl_name, shoelace.sl_name);다시 한번 그것은 대체 규칙이고 이전의 Parsetree는 쓰레기. 이 쿼리는 여전히보기를 사용합니다Shoelace. 그러나 토토 사이트 순위 시스템은 완료되지 않았습니다 이 루프는 계속해서 토토 사이트 순위 '_retshoelace'를 적용합니다. 그리고 우리는 얻는다
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 *, shoelace_data showlace_data, Shoelace *Old *, Shoelace *New *, shoelace_data s, 단위 u 여기서 bpchareq (s.sl_name, showlace_arrive.arr_name) 및 bpchareq (shoelace_data.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 *, shoelace_data showlace_data, Shoelace *Old *, Shoelace *New *, shoelace_data s, Unit U, shoelace_data *old *, shoelace_data *new * shoelace_log shoelace_log 여기서 bpchareq (s.sl_name, showlace_arrive.arr_name) 및 bpchareq (shoelace_data.sl_name, s.sl_name); 및 int4ne (int4pl (s.sl_avail, shoelace_arrive.arr_quant), s.sl_avail);그 후 토토 사이트 순위 시스템은 토토 사이트 순위이 부족하여 ParsetRees를 생성했습니다. 그래서 우리는 두 개의 최종 Parsetrees로 끝납니다 와 같습니다.SQL진술
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;결과는 삽입 된 한 관계에서 나오는 데이터입니다. 다른 사람으로, 세 번째 업데이트로 변경되어 네 번째 플러스 최종 업데이트를 5 분의 1 로그인하면 업데이트됩니다. 두 쿼리로 줄어 듭니다.
약간 추악한 세부 사항이 있습니다. 보고 두 쿼리가 밝혀졌습니다.Shoelace_data관계는 두 번 나타납니다 확실히 하나로 축소 될 수있는 곳. 그만큼 플래너는 그것을 처리하지 않으므로 삽입의 토토 사이트 순위 시스템 출력이입니다.
중첩 루프 - 합병 조인 - SEQ 스캔 - 정렬 - seq scan on s - SEQ 스캔 - 정렬 - shoelace_arrive에서 seq 스캔 - SHOELACE_DATA에서 SEQ 스캔여분의 rangetable 항목을 생략하면서
합병 조인 - SEQ 스캔 - 정렬 - seq scan on s - SEQ 스캔 - 정렬 - SHOELACE_ARRIVE에서 SEQ 스캔로그 관계에서 동일한 항목을 완전히 생성합니다. 따라서 토토 사이트 순위 시스템은에 대해 하나의 추가 스캔을 일으켰습니다.shoelace_data절대적이지 않은 관계 필요한. 그리고 동일한 쓸모없는 스캔이 업데이트. 그러나 모든 것을 가능하게하는 것은 정말 어려운 일이었습니다. 모두.
최종 시연Postgres규칙 시스템과 그 전력. 거기 신발락을 판매하는 귀여운 금발입니다. 그리고 Al은 결코 할 수 없었습니다 그녀는 귀엽고 똑똑하다 -Tome Too Too도 깨달았습니다. 똑똑한. 따라서 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를 찾아야합니다 가끔 신발이 없다는 항목. 우리는 할 수 있습니다 매번 복잡한 진술에서, 또는 우리는보기를 설정할 수 있습니다. 그것을 위해. 이것에 대한 견해는
Shoelace_obsolete 님으로보기를 작성하십시오 존재하지 않는 곳에 * Shoelace에서 *를 선택하십시오 (slcolor = sl_color 인 Shoe에서 Shoename을 선택하십시오);출력이
al_bundy = select * from shoelace_obsolete; sl_name | sl_avail | sl_color | sl_len | sl_unit | sl_len_cm ----------+--------+----------+-------+-------------- SL9 | 0 | 핑크 | 35 | 토토 사이트 순위 | 88.9 SL10 | 1000 | Magenta | 40 | 토토 사이트 순위 | 101.61000 마르젠타 슈 일에 대해 우리는 빚을 빚어 야합니다. 버리십시오. 그러나 그것은 또 다른 문제입니다. 분홍색 항목 우리 삭제. 조금 더 어렵게 만들기 위해Postgres, 직접 삭제하지 않습니다. 대신 우리는 만든다 하나 더보기
view shoelace_candelete를 만듭니다 shoelace_obsolete에서 * 선택 * sl_avail = 0;이런 식으로 수행하십시오 :
존재하는 곳에서 Shoelace에서 삭제합니다 (SHOELACE_CANDELETE에서 *를 선택하십시오 여기서 sl_name = shoelace.sl_name);Voila :
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 개의 중첩/조인 뷰를 사용하며, 그 중 하나 자체는 다음과 같습니다. 뷰가 포함 된 자격과 계산 된보기를 하위 선택합니다 열이 사용되며 하나의 단일 파 세트로 다시 작성됩니다. 실제 테이블에서 요청 된 데이터를 삭제합니다.
실제에는 몇 가지 상황이 있다고 생각합니다. 그러한 구성이 필요한 세계. 그러나 그것은 나를 만듭니다 그것이 효과가 있다는 느낌.
진실은 다음과 같습니다.이것을하면 버그가 하나 더 발견되었습니다 이 문서를 작성하는 동안. 그러나 고치고 난 후에 전혀 작동한다는 사실에 놀랐습니다.