Các kèo bóng đá cúp c2 được xác định khi chèn, cập nhật và xóa hoàn toàn khác với các kèo bóng đá cúp c2 xem được mô tả trong phần trước. Đầu tiên, lệnh kèo bóng đá cúp c2 tạo của chúng cho phép nhiều hơn:
Họ không thể có hành động.
Họ có thể có nhiều hành động.
Từ khóa thay kèo bóng đá cúp c2o đó là tùy chọn.
Mối quan hệ giả mới và cũ trở nên hữu ích.
Họ có thể có trình độ kèo bóng đá cúp c2.
Thứ hai, họ không sửa đổi parsetree tại chỗ. Thay kèo bóng đá cúp c2o đó họ Tạo số 0 hoặc nhiều parsetrees mới và có thể vứt bỏ bản gốc một.
Giữ cú pháp
Tạo kèo bóng đá cúp c2 tắc_name như trên sự kiện Để phản đối [WHERE RUCE_QUALISION] Làm [thay vào đó] [Hành động | (hành động) | KHÔNG CÓ GÌ];Trong tâm trí. Trong phần sau, "kèo bóng đá cúp c2 cập nhật" có nghĩa là các kèo bóng đá cúp c2 được xác định khi chèn, cập nhật hoặc xóa.
Cập nhật kèo bóng đá cúp c2 được áp dụng bởi hệ thống kèo bóng đá cúp c2 khi kết quả quan hệ và lệnh của parsetree bằng với đối tượng và sự kiện được đưa ra trong lệnh created kèo bóng đá cúp c2. Cho các kèo bóng đá cúp c2 cập nhật, Hệ thống kèo bóng đá cúp c2 tạo ra một danh sách các parsetrees. Ban đầu parsetree Danh sách trống. Có thể không có từ khóa (không có gì), một hoặc nhiều hành động. Để đơn giản hóa, chúng tôi xem xét một kèo bóng đá cúp c2 với một hành động. kèo bóng đá cúp c2 này có thể có trình độ hoặc không và nó có thể thay thế hoặc không.
Trình độ kèo bóng đá cúp c2 là gì? Đó là một hạn chế cho biết Khi các hành động của kèo bóng đá cúp c2 nên được thực hiện và khi không. Cái này Trình độ chuyên môn chỉ có thể tham khảo giả mới và/hoặc cũ các mối quan hệ về cơ bản là mối quan hệ được đưa ra như đối tượng (nhưng với một ý nghĩa đặc biệt).
Vì vậy, chúng tôi có bốn trường hợp tạo ra các parsetrees sau đây cho một kèo bóng đá cúp c2 một hành động.
Không có trình độ và không thay kèo bóng đá cúp c2o đó:
Parsetree từ hành động kèo bóng đá cúp c2 trong đó bản gốc Trình độ parsetrees đã được thêm vào.
Không có trình độ mà thay kèo bóng đá cúp c2o đó:
parsetree từ hành động kèo bóng đá cúp c2 trong đó bản gốc Trình độ parsetrees đã được thêm vào.
Trình độ chuyên môn đã cho và không thay kèo bóng đá cúp c2o đó:
Parsetree từ hành động kèo bóng đá cúp c2 trong đó kèo bóng đá cúp c2 Trình độ chuyên môn và trình độ ban đầu của Parsetrees đã được thêm vào.
Trình độ chuyên môn đã cho và thay kèo bóng đá cúp c2o đó:
parsetree từ hành động kèo bóng đá cúp c2 trong đó kèo bóng đá cúp c2 Trình độ chuyên môn và trình độ ban đầu của Parsetrees đã được thêm vào.
Parsetree ban đầu trong đó kèo bóng đá cúp c2 phủ định Trình độ chuyên môn đã được thêm vào.
Cuối cùng, nếu kèo bóng đá cúp c2 không thay vào đó, bản gốc không thay đổi Parsetree được thêm vào danh sách. Vì chỉ có đủ điều kiện thay vì kèo bóng đá cúp c2 đã thêm parsetree ban đầu, chúng tôi kết thúc với tổng tối đa của hai parsetrees cho một kèo bóng đá cúp c2 với một hành động.
Parsetrees được tạo từ các hành động kèo bóng đá cúp c2 được ném vào Viết lại hệ thống một lần nữa và có thể nhiều kèo bóng đá cúp c2 được áp dụng dẫn đến ít nhiều parsetrees. Vì vậy, các parsetrees trong các hành động kèo bóng đá cúp c2 phải có một lệnh khác hoặc một sự thay đổi khác. Nếu không, quá trình đệ quy này sẽ kết thúc trong một vòng lặp. Có a Được biên soạn trong giới hạn đệ quy của 10 lần lặp hiện tại. Nếu sau 10 Các lần lặp lại vẫn có các kèo bóng đá cúp c2 cập nhật để áp dụng hệ thống kèo bóng đá cúp c2 giả định một vòng lặp trên nhiều định nghĩa kèo bóng đá cúp c2 và hủy bỏ giao dịch.
Parsetrees được tìm thấy trong các hành động củaPG_REWRITEDanh mục hệ thống chỉ là mẫu. Từ Họ có thể tham khảo các mục nhập cảnh cho mới và cũ, một số Thay thế phải được thực hiện trước khi chúng có thể được sử dụng. Cho bất kỳ Tham khảo mới, danh sách mục tiêu của truy vấn gốc được tìm kiếm cho một mục tương ứng. Nếu được tìm thấy, biểu thức mục đó là đặt kèo bóng đá cúp c2o tài liệu tham khảo. Nếu không thì mới có nghĩa là giống như cũ. Bất kì Tham chiếu đến cũ được thay thế bằng một tham chiếu đến mục nhập Range đó là sự thay đổi.
Chúng tôi muốn theo dõi các thay đổi kèo bóng đá cúp c2o cột SL_AVAIL trongkèo bóng đá cúp c2Mối quan hệ. Vì vậy, chúng tôi thiết lập một nhật ký bảng và một kèo bóng đá cúp c2 viết cho chúng tôi các mục nhập mỗi lần và cập nhật là được thực hiện trênkèo bóng đá cúp c2.
Tạo bảng Shoelace_log ( SL_NAME CHAR (10), - Shoelace đã thay đổi Số nguyên SL_AVAIL, - Giá trị mới có sẵn log_who tên, - ai đã làm nó log_when datetime - khi ); Tạo kèo bóng đá cúp c2 log_shoelace như trên bản cập nhật lên shoelace_data WHERE new.sl_avail! = Cũ.SL_AVAIL Lắp vào các giá trị Shoelace_log ( New.sl_name, New.sl_avail, getpgusername (), 'Bây giờ' :: văn bản );Một chi tiết thú vị là việc đúc 'Now' trong các kèo bóng đá cúp c2 Chèn hành động để nhập văn bản. Không có điều đó, trình phân tích cú pháp sẽ thấy tại Tạo thời gian kèo bóng đá cúp c2, loại mục tiêu trongShoelace_loglà một DateTime và cố gắng tạo ra một Không đổi từ nó - với thành công. Vì vậy, một giá trị datetime không đổi sẽ được lưu trữ trong hành động kèo bóng đá cúp c2 và tất cả các mục nhật ký sẽ có thời gian của câu lệnh CREATE kèo bóng đá cúp c2. Không chính xác những gì chúng tôi muốn. Các Đúc gây ra rằng trình phân tích cú pháp xây dựng một datetime ('now' :: text) từ nó và điều này sẽ được đánh giá khi kèo bóng đá cúp c2 được thực thi.
Bây giờ al do
AL_BUNDY = CẬP NHẬT kèo bóng đá cúp c2 SET SL_AVAIL = 6 al_bundy- trong đó sl_name = 'SL7';Và chúng tôi nhìn kèo bóng đá cúp c2o logtable.
al_bundy = Chọn * từ Shoelace_log; SL_NAME | SL_AVAIL | log_who | log_when ----------+--------+-------+---------------------------------------------------------------------------------- SL7 | 6 | Al | Tue 20 tháng 10 16:14:45 1998 Met DST (1 hàng)Đó là những gì chúng tôi mong đợi. Những gì đã xảy ra trong nền là sau đây. Trình phân tích cú pháp đã tạo ra parsetree (lần này là các phần của parsetree ban đầu được tô sáng bởi vì cơ sở của Hoạt động là hành động kèo bóng đá cúp c2 cho các kèo bóng đá cúp c2 cập nhật).
Cập kèo bóng đá cúp c2 Shoelace_Data SET SL_AVAIL = 6 Từ Shoelace_Data Shoelace_Data WHERE bpchareq (shoelace_data.sl_name, 'SL7');Có một kèo bóng đá cúp c2 'log_shoelace' đang được cập nhật với Biểu thức trình độ kèo bóng đá cúp c2
int4ne (new.sl_avail, cũ.SL_AVAIL)và một hành động
Chèn kèo bóng đá cúp c2o Shoelace_log Chọn *MỚI*.SL_NAME,*MỚI*.SL_AVAIL, getpgusername (), dateTime ('now' :: text) Từ shoelace_data *mới *, shoelace_data *cũ *, Shoelace_log Shoelace_log;Đừng tin vào đầu ra của chế độ xem hệ thống PG_RULES. Nó đặc biệt xử lý tình huống chỉ có tài liệu tham khảo Mới và cũ trong chèn và xuất định định định giá trị của chèn. Trong thực tế không có sự khác biệt giữa một phần chèn ... giá trị và một Chèn ... Chọn ở cấp độ Parsetree. Cả hai đều có Rangetables, Danh sách mục tiêu và có thể là trình độ, v.v. Trình tối ưu hóa sau Quyết định, nếu để tạo một kế hoạch thực thi của kết quả loại, Seqscan, IndexScan, tham gia hoặc bất cứ điều gì cho parsetree đó. Nếu không có các tham chiếu đến các mục nhập hình ảnh trái trong parsetree, nó trở thành Kế hoạch thực thi kết quả (phiên bản chèn ... giá trị). kèo bóng đá cúp c2 Hành động ở trên có thể thực sự dẫn đến cả hai biến thể.
kèo bóng đá cúp c2 là kèo bóng đá cúp c2 không có đủ điều kiện, do đó hệ thống kèo bóng đá cúp c2 có để trả lại hai parsetrees. Hành động kèo bóng đá cúp c2 được sửa đổi và bản gốc Parsetree. Trong bước đầu tiên, Rangeable của truy vấn ban đầu được kết hợp vào các kèo bóng đá cúp c2 hành động parsetree. Kết quả này TRONG
Chèn kèo bóng đá cúp c2o Shoelace_log Chọn *MỚI*.SL_NAME,*MỚI*.SL_AVAI, getpgusername (), dateTime ('now' :: text) TỪkèo bóng đá cúp c2 kèo bóng đá cúp c2, kèo bóng đá cúp c2 *mới *, kèo bóng đá cúp c2 *cũ *, shoelace_log shoelace_log;Trong bước 2, trình độ kèo bóng đá cúp c2 được thêm vào nó, vì vậy tập kết quả được giới hạn ở các hàng trong đó sl_avail thay đổi.
Chèn kèo bóng đá cúp c2o Shoelace_log Chọn *MỚI*.SL_NAME,*MỚI*.SL_AVAI, getpgusername (), dateTime ('now' :: text) Từ shoelace_data shoelace_data, shoelace_data *mới *, shoelace_data *cũ *, shoelace_log shoelace_logWHERE int4ne (*mới*.sl_avail,*cũ*.sl_avail);Trong bước 3, trình độ parsetrees ban đầu được thêm kèo bóng đá cúp c2o, Hạn chế kết quả thêm chỉ cho các hàng được chạm kèo bóng đá cúp c2o parsetree ban đầu.
Chèn kèo bóng đá cúp c2o Shoelace_log Chọn *MỚI*.SL_NAME,*MỚI*.SL_AVAI, getpgusername (), dateTime ('now' :: text) Từ shoelace_data shoelace_data, shoelace_data *mới *, shoelace_data *cũ *, shoelace_log shoelace_log WHERE int4ne (*mới*.sl_avail,*cũ*.sl_avail)và bpchareq (kèo bóng đá cúp c2sl_name, 'SL7');Bước 4 Thay thế các tài liệu tham khảo mới bằng các mục TargetList từ parsetree ban đầu hoặc với biến phù hợp Tài liệu tham khảo từ mối quan hệ kết quả.
Chèn kèo bóng đá cúp c2o Shoelace_log Chọnkèo bóng đá cúp c2sl_name, 6,, getpgusername (), dateTime ('now' :: text) Từ kèo bóng đá cúp c2 kèo bóng đá cúp c2, kèo bóng đá cúp c2 *mới *, kèo bóng đá cúp c2 *cũ *, shoelace_log shoelace_log Int4ne ở đâu (6, *cũ *.SL_AVAIL) Và bpchareq (kèo bóng đá cúp c2sl_name, 'SL7');Bước 5 thay thế các tài liệu tham khảo cũ thành Resultrelation Tài liệu tham khảo.
Chèn kèo bóng đá cúp c2o Shoelace_log Chọn shoelace_data.sl_name, 6, getpgusername (), dateTime ('now' :: text) Từ shoelace_data shoelace_data, shoelace_data *mới *, shoelace_data *cũ *, shoelace_log shoelace_log Int4ne (6,kèo bóng đá cúp c2sl_avail) Và bpchareq (kèo bóng đá cúp c2sl_name, 'SL7');Đó là nó. Do đó giảm xuống mức tối đa, lợi nhuận từ kèo bóng đá cúp c2 hệ thống là danh sách hai parsetrees giống như Các câu lệnh:
Chèn kèo bóng đá cúp c2o Shoelace_log Chọn shoelace_data.sl_name, 6, getpgusername (), 'bây giờ' Từ Shoelace_data WHERE 6! = Shoelace_data.SL_AVAIL Và shoelace_data.sl_name = 'SL7'; Cập nhật Shoelace_Data SET SL_AVAIL = 6 Trong đó sl_name = 'SL7';Chúng được thực hiện theo thứ tự này và đó chính xác là những gì kèo bóng đá cúp c2 xác định. Các phân biệt và các bằng cấp được thêm vào đảm bảo, rằng nếu truy vấn ban đầu sẽ là
Cập kèo bóng đá cúp c2 Shoelace_Data SET SL_COLOR = 'XANH' Trong đó sl_name = 'SL7';Không có mục nhập nào sẽ được viết vì thực tế là Lần này parsetree ban đầu không chứa danh sách mục tiêu mục cho SL_AVAIL, new.sl_avail sẽ được thay thế bởi kèo bóng đá cúp c2sl_avail dẫn đến truy vấn thêm
Chèn kèo bóng đá cúp c2o Shoelace_log Chọn shoelace_data.sl_name,kèo bóng đá cúp c2sl_avail,, getpgusername (), 'bây giờ' Từ kèo bóng đá cúp c2 Ở ĐÂUkèo bóng đá cúp c2sl_avail! = kèo bóng đá cúp c2SL_AVAIL Và kèo bóng đá cúp c2sl_name = 'SL7';Và trình độ đó sẽ không bao giờ đúng. Vì là không sự khác biệt về mức độ parsetree giữa một phần kèo bóng đá cúp c2 ... chọn và kèo bóng đá cúp c2 ... các giá trị, nó cũng sẽ hoạt động nếu truy vấn ban đầu sửa đổi Nhiều hàng. Vì vậy, nếu Al sẽ ban hành lệnh
Cập kèo bóng đá cúp c2 Shoelace_Data SET SL_AVAIL = 0 Trong đó sl_color = 'đen';Bốn hàng trên thực tế được cập kèo bóng đá cúp c2 (SL1, SL2, SL3 và SL4). Nhưng SL3 đã có sl_avail = 0. Lần này, parsetrees ban đầu Trình độ chuyên môn là khác nhau và kết quả là parsetree thêm
Chèn kèo bóng đá cúp c2o Shoelace_log Chọn shoelace_data.sl_name, 0, getpgusername (), 'bây giờ' Từ Shoelace_data WHERE 0! = Shoelace_data.SL_AVAIL VÀkèo bóng đá cúp c2sl_color = 'đen';Parsetree này chắc chắn sẽ chèn ba mục kèo bóng đá cúp c2 ký mới. Và Điều đó hoàn toàn chính xác.
Điều quan trọng là parsetree ban đầu được thực hiện cuối cùng. ThePostgres"Cảnh sát giao thông" Lệnh tăng tăng giữa việc thực hiện hai Parsetrees để cái thứ hai có thể thấy các thay đổi được thực hiện bởi thứ nhất. Nếu như bản cập kèo bóng đá cúp c2 đã được thực thi đầu tiên, tất cả các hàng đã được đặt thành 0, do đó chèn đăng nhập sẽ không tìm thấy bất kỳ hàng nào trong đó 0 ! = shoelace_data.sl_avail.
Một cách đơn giản để bảo vệ quan hệ xem khỏi các quan hệ được đề cập khả năng ai đó có thể chèn, cập nhật và xóa vô hình Dữ liệu về chúng là để cho những parsetrees bị vứt đi. Chúng tôi tạo ra Các kèo bóng đá cúp c2
Tạo kèo bóng đá cúp c2 giày_ins_protect như khi chèn vào giày Thay vào đó không có gì; Tạo kèo bóng đá cúp c2 giày_upd_protect như trên cập nhật cho giày Thay vào đó không có gì; Tạo kèo bóng đá cúp c2 giày_del_protect như đang xóa để giày Thay vào đó không có gì;Nếu Al bây giờ cố gắng thực hiện bất kỳ hoạt động nào trong quan điểm này mối quan hệgiày, Hệ thống kèo bóng đá cúp c2 sẽ áp dụng các kèo bóng đá cúp c2. Vì các kèo bóng đá cúp c2 không có hành động và thay vào đó, kết quả danh sách các parsetrees sẽ trống và toàn bộ truy vấn sẽ trở nên không có gì bởi vì không còn gì để được tối ưu hóa hoặc được thực thi sau khi hệ thống kèo bóng đá cúp c2 được thực hiện với nó.
Lưu ý:Thực tế này có thể gây kích ứng các ứng dụng Frontend bởi vì hoàn toàn không có gì xảy ra trên cơ sở dữ liệu và do đó, Backend sẽ không trả lại bất cứ điều gì cho truy vấn. Thậm chí không a Pgres_empty_query hoặc lâu hơn sẽ có sẵn trong libpq. Trong PSQL, Không có gì xảy ra. Điều này có thể thay đổi trong tương lai.
Một cách tinh vi hơn để sử dụng hệ thống kèo bóng đá cúp c2 là tạo Các kèo bóng đá cúp c2 viết lại parsetree thành một kèo bóng đá cúp c2 đúng Hoạt động trên các bảng thực. Để làm điều đó trênShoelaceXem, chúng tôi tạo các kèo bóng đá cúp c2 sau:
Tạo kèo bóng đá cúp c2 shoelace_ins như khi chèn vào dây giày Làm thay thế Chèn vào giá trị Shoelace_Data ( New.sl_name, New.sl_avail, New.sl_color, New.sl_len, Mới.sl_unit); Tạo kèo bóng đá cúp c2 shoelace_upd như trên bản cập nhật lên Shoelace Làm thay thế Cập nhật bộ 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 Trong đó sl_name = old.sl_name; Tạo kèo bóng đá cúp c2 shoelace_del như đang xóa để đóng giày Làm thay thế Xóa khỏi Shoelace_Data WHERE SL_NAME = Old.SL_NAME;Bây giờ có một gói dây giày đến cửa hàng của Al và nó có một danh sách bán hàng lớn. Al không tốt trong tính toán và vì vậy chúng tôi Đừng muốn anh ấy cập nhật thủ công chế độ xem dây giày. Thay kèo bóng đá cúp c2o đó chúng tôi thiết lập hai bảng nhỏ, một trong đó anh ấy có thể chèn các mục từ Danh sách bán hàng và một với một mẹo đặc biệt. Các lệnh tạo cho Bất cứ điều gì là:
Tạo bảng Shoelace_arrive ( ARR_NAME CHAR (10), ARR_QUANT Số nguyên ); Tạo bảng Shoelace_ok ( ok_name char (10), OK_Quant Integer ); Tạo kèo bóng đá cúp c2 shoelace_ok_ins như khi chèn vào shoelace_ok Làm thay thế Cập nhật bộ Shoelace SL_AVAIL = SL_AVAIL + MỚI.OK_QUANT Trong đó sl_name = new.ok_name;Bây giờ Al có thể ngồi xuống và làm bất cứ điều gì cho đến khi
al_bundy = chọn * từ shoelace_arrive; ARR_NAME | ARR_QUANT ----------+--------- SL3 | 10 SL6 | 20 SL8 | 20 (3 hàng)chính xác đó là những gì trong danh sách bộ phận. Chúng tôi có một cái nhìn nhanh chóng Tại dữ liệu hiện tại,
AL_BUNDY = CHỌN * từ thứ tự Shoelace bởi SL_NAME; SL_NAME | SL_AVAIL | SL_COLOR | SL_LEN | SL_UNIT | SL_LEN_CM ----------+--------+----------+------+--------+--------- SL1 | 5 | Đen | 80 | cm | 80 SL2 | 6 | Đen | 100 | cm | 100 SL7 | 6 | Brown | 60 | cm | 60 SL3 | 0 | Đen | 35 | inch | 88.9 SL4 | 8 | Đen | 40 | inch | 101.6 SL8 | 1 | Brown | 40 | inch | 101.6 SL5 | 4 | Brown | 1 | m | 100 SL6 | 0 | Brown | 0,9 | m | 90 (8 hàng)Di chuyển dây giày đã đến trong
Al_bundy = Chèn kèo bóng đá cúp c2o Shoelace_ok Chọn * từ Shoelace_arrive;và kiểm tra kết quả
AL_BUNDY = CHỌN * từ thứ tự Shoelace của SL_NAME; SL_NAME | SL_AVAIL | SL_COLOR | SL_LEN | SL_UNIT | SL_LEN_CM ----------+--------+----------+------+--------+--------- SL1 | 5 | Đen | 80 | cm | 80 SL2 | 6 | Đen | 100 | cm | 100 SL7 | 6 | Brown | 60 | cm | 60 SL4 | 8 | Đen | 40 | inch | 101.6 SL3 | 10 | Đen | 35 | inch | 88.9 SL8 | 21 | Brown | 40 | inch | 101.6 SL5 | 4 | Brown | 1 | m | 100 SL6 | 20 | Brown | 0,9 | m | 90 (8 hàng) al_bundy = Chọn * từ Shoelace_log; SL_NAME | SL_AVAIL | log_who | log_when ----------+--------+-------+---------------------------------------------------------------------------------- SL7 | 6 | Al | Tue 20 tháng 10 19:14:45 1998 Met DST SL3 | 10 | Al | Tue 20 tháng 10 19:25:16 1998 Met DST SL6 | 20 | Al | Tue 20 tháng 10 19:25:16 1998 Met DST SL8 | 21 | Al | Tue 20 tháng 10 19:25:16 1998 Met DST (4 hàng)Đó là một chặng đường dài từ một kèo bóng đá cúp c2 ... chọn những thứ này kết quả. Và nó mô tả sẽ là lần cuối cùng trong tài liệu này (Nhưng không phải là ví dụ cuối cùng :-). Đầu tiên là đầu ra phân tích cú pháp
Chèn kèo bóng đá cúp c2o Shoelace_ok Chọn shoelace_arrive.arr_name, shoelace_arrive.arr_quant Từ shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok;Bây giờ kèo bóng đá cúp c2 đầu tiên 'shoelace_ok_ins' được áp dụng và biến nó vào trong
Cập kèo bóng đá cúp c2 bộ giày sl_avail = int4pl (shoelace.sl_avail, shoelace_arrive.arr_quant) Từ shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok, shoelace_ok *cũ *, shoelace_ok *mới *, dây giày WHERE bpchareq (shoelace.sl_name, showlace_arrive.arr_name);và ném đi kèo bóng đá cúp c2 ban đầu trênShoelace_ok. Truy vấn viết lại này được chuyển cho Hệ thống kèo bóng đá cúp c2 một lần nữa và kèo bóng đá cúp c2 thứ hai được áp dụng 'Shoelace_upd' được sản xuất
Cập kèo bóng đá cúp c2 bộ 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 Từ shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok, shoelace_ok *cũ *, shoelace_ok *mới *, Shoelace Shoelace, Shoelace *Old *, Shoelace *Mới *, Shoelace_Data showlace_data WHERE bpchareq (shoelace.sl_name, showlace_arrive.arr_name) Và bpchareq (shoelace_data.sl_name, shoelace.sl_name);Một lần nữa, đó là một kèo bóng đá cúp c2 thay thế và parsetree trước đó là rác rưởi. Lưu ý rằng Sill truy vấn này sử dụng chế độ xemShoelaceNhưng hệ thống kèo bóng đá cúp c2 chưa kết thúc với Vòng lặp này để nó tiếp tục và áp dụng kèo bóng đá cúp c2 '_retshoelace' trên nó Và chúng tôi nhận được
Cập kèo bóng đá cúp c2 bộ 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 Từ shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok, shoelace_ok *cũ *, shoelace_ok *mới *, Shoelace Shoelace, Shoelace *Old *, Shoelace *Mới *, Shoelace_Data showlace_data, Shoelace *cũ *, dây giày *mới *, shoelace_data s, đơn vị u WHERE bpchareq (s.sl_name, showlace_arrive.arr_name) Và bpchareq (shoelace_data.sl_name, s.sl_name);Một lần nữa kèo bóng đá cúp c2 cập nhật đã được áp dụng và do đó bánh xe quay trên và chúng tôi đang viết lại vòng 3. kèo bóng đá cúp c2 thời gian này 'log_shoelace' được áp dụng những gì tạo ra parsetree thêm
Chèn kèo bóng đá cúp c2o Shoelace_log Chọn s.sl_name, int4pl (s.sl_avail, shoelace_arrive.arr_quant), getpgusername (), DateTime ('Bây giờ' :: Text) Từ shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok, shoelace_ok *cũ *, shoelace_ok *mới *, Shoelace Shoelace, Shoelace *Old *, Shoelace *Mới *, Shoelace_Data showlace_data, Shoelace *cũ *, dây giày *mới *, shoelace_data s, đơn vị u, shoelace_data *cũ *, shoelace_data *mới * Shoelace_log Shoelace_log WHERE bpchareq (s.sl_name, showlace_arrive.arr_name) Và bpchareq (shoelace_data.sl_name, s.sl_name); Và int4ne (int4pl (s.sl_avail, shoelace_arrive.arr_quant), s.sl_avail);Sau đó, hệ thống kèo bóng đá cúp c2 hết kèo bóng đá cúp c2 và trả về tạo ra parsetrees. Vì vậy, chúng tôi kết thúc với hai parsetrees cuối cùng bằng vớiSQLCâu
Chèn kèo bóng đá cúp c2o Shoelace_log Chọn s.sl_name, s.sl_avail + shoelace_arrive.arr_quant, getpgusername (), 'Hiện nay' Từ shoelace_arrive shoelace_arrive, shoelace_data shoelace_data, Shoelace_data s WHERE S.SL_NAME = shoelace_arrive.arr_name Và shoelace_data.sl_name = s.sl_name Và S.SL_AVAIL + SHOELACE_ARRIVE.ARR_QUANT! = S.SL_AVAIL; Cập nhật bộ shoelace_data sl_avail = shoelace_data.sl_avail + shoelace_arrive.arr_quant Từ shoelace_arrive shoelace_arrive, shoelace_data shoelace_data, Shoelace_data s WHERE S.SL_NAME = shoelace_arrive.sl_name Và shoelace_data.sl_name = s.sl_name;Kết quả là dữ liệu đến từ một mối quan hệ được chèn thành một Cập kèo bóng đá cúp c2 bản ghi kèo bóng đá cúp c2 ký thứ tư cộng với bản cập kèo bóng đá cúp c2 cuối cùng trong một phần năm được giảm thành hai truy vấn.
Có một chút chi tiết hơi xấu. Nhìn kèo bóng đá cúp c2o hai Truy vấn bật ra, rằngkèo bóng đá cúp c2Mối quan hệ xuất hiện hai lần trong khoảng trống nơi nó chắc chắn có thể được giảm xuống một. Trình tối ưu hóa không xử lý nó và vì vậy Kế hoạch thực thi cho đầu ra hệ thống kèo bóng đá cúp c2 của phần chèn sẽ là
Vòng lặp lồng nhau - Hợp nhất tham gia - SEQ SCAN - Sắp xếp - seq scan trên s - SEQ SCAN - Sắp xếp - SEQ SCAN trên Shoelace_arrive - SEQ SCAN trên kèo bóng đá cúp c2Trong khi bỏ qua mục nhập Rangeable sẽ dẫn đến A
Hợp nhất tham gia - SEQ SCAN - Sắp xếp - seq scan trên s - SEQ SCAN - Sắp xếp - SEQ SCAN trên shoelace_arrivehoàn toàn tạo ra các mục tương tự trong quan hệ nhật ký. Do đó, hệ thống kèo bóng đá cúp c2 gây ra một lần quét thêm trênkèo bóng đá cúp c2Mối quan hệ hoàn toàn không cần thiết. Và quá trình quét lỗi thời được thực hiện một lần nữa trong CẬP NHẬT. Nhưng đó là một công việc thực sự khó khăn để làm cho tất cả có thể xảy ra tất cả.
Trình diễn cuối cùng củaPostgresHệ thống kèo bóng đá cúp c2 và đó là sức mạnh. Có Một cô gái tóc vàng dễ thương bán dây giày. Và những gì Al không bao giờ có thể Nhận ra, cô ấy không chỉ dễ thương, cô ấy còn thông minh - hơi quá thông minh. Do đó, thỉnh thoảng xảy ra Al đặt hàng Shoelaces hoàn toàn không thể bán được. Lần này anh ấy đã đặt hàng 1000 cặp Magenta Shoelaces và vì một loại khác hiện không có sẵn Nhưng anh ấy cam kết mua một số, anh ấy cũng đã chuẩn bị cơ sở dữ liệu của mình cho những cái màu hồng.
AL_BUNDY = Chèn kèo bóng đá cúp c2o giá trị Shoelace al_bundy- ('SL9', 0, 'hồng', 35.0, 'inch', 0,0); Al_Bundy = Chèn kèo bóng đá cúp c2o giá trị Shoelace Al_bundy- ('SL10', 1000, 'Magenta', 40.0, 'inch', 0.0);Vì điều này xảy ra thường xuyên, chúng ta phải tìm kiếm dây giày Bài dự thi, đôi khi hoàn toàn không có giày. Chúng tôi có thể làm rằng trong một tuyên bố phức tạp mỗi lần hoặc chúng ta có thể thiết lập chế độ xem cho nó. Chế độ xem cho điều này là
Tạo xem shoelace_obsolete là Chọn * Từ dây giày nơi không tồn tại (Chọn Shoename từ giày WHERđầu ra là
al_bundy = Chọn * từ Shoelace_OBSolete; SL_NAME | SL_AVAIL | SL_COLOR | SL_LEN | SL_UNIT | SL_LEN_CM ----------+--------+----------+------+--------+--------- SL9 | 0 | Hồng | 35 | inch | 88.9 SL10 | 1000 | Magenta | 40 | inch | 101.6Đối với 1000 dây giày Magenta, chúng ta phải nợ Al trước khi có thể Ném chúng đi, nhưng đó là một vấn đề khác. Mục nhập màu hồng chúng tôi xóa bỏ. Để làm cho nó khó hơn một chút choPostgres, chúng tôi không xóa trực tiếp. Thay vì Chúng tôi tạo thêm một chế độ xem
Tạo xem shoelace_candelete là Chọn * Từ Shoelace_OBSolete WHERE SL_AVAIL = 0;và làm theo cách này:
Xóa khỏi dây giày nơi tồn tại (Chọn * Từ Shoelace_candelete Trong đó sl_name = shoelace.sl_name);Voila:
AL_BUNDY = Chọn * từ Shoelace; SL_NAME | SL_AVAIL | SL_COLOR | SL_LEN | SL_UNIT | SL_LEN_CM ----------+--------+----------+------+--------+--------- SL1 | 5 | Đen | 80 | cm | 80 SL2 | 6 | Đen | 100 | cm | 100 SL7 | 6 | Brown | 60 | cm | 60 SL4 | 8 | Đen | 40 | inch | 101.6 SL3 | 10 | Đen | 35 | inch | 88.9 SL8 | 21 | Brown | 40 | inch | 101.6 SL10 | 1000 | Magenta | 40 | inch | 101.6 SL5 | 4 | Brown | 1 | m | 100 SL6 | 20 | Brown | 0,9 | m | 90 (9 hàng)Xóa trên chế độ xem, với trình độ chuyên môn phụ trong Tổng số sử dụng 4 lượt xem làm tổ/tham gia, trong đó một trong số chúng có một Trình độ chuyên môn SubSelect chứa chế độ xem và nơi nhìn được tính toán các cột được sử dụng, được viết lại thành một parsetree duy nhất Xóa dữ liệu được yêu cầu khỏi bảng thật.
Tôi nghĩ rằng chỉ có một kèo bóng đá cúp c2i tình huống trong thế giới thực, Trường hợp một cấu trúc như vậy là cần thiết. Nhưng nó làm cho tôi cảm thấy thoải mái rằng nó hoạt động.
Sự thật là:Làm điều này, tôi đã tìm thấy một lỗi nữa trong khi Viết tài liệu này. Nhưng sau khi sửa chữa rằng tôi là một chút ngạc nhiên rằng nó hoạt động ở tất cả.