tỷ lệ kèo bóng đá
, Cập nhật
vàXóa
tỷ lệ kèo bóng đá được xác định trêntỷ lệ kèo bóng đá
, Cập nhật
vàXóa
khác biệt đáng kể so với các tỷ lệ kèo bóng đá xem được mô tả trong phần trước. Đầu tiên, của họTạo tỷ lệ kèo bóng đá
Lệnh cho phép nhiều hơn:
Họ được phép không có hành động.
Họ có thể có nhiều hành động.
Chúng có thể làThay tỷ lệ kèo tỷ lệ kèo bóng đáo đó
hoặccũng
(mặc định).
Pseudorelationsmới
vàcũ
trở nên hữu ích.
Họ có thể có trình độ tỷ lệ kèo bóng đá.
Thứ hai, họ không sửa đổi cây truy vấn tại chỗ. Thay tỷ lệ kèo bóng đáo đó, chúng tạo ra không hoặc nhiều cây truy vấn mới và có thể vứt bỏ cái gốc.
Trong nhiều trường hợp, các tác vụ có thể được thực hiện bởi các tỷ lệ kèo bóng đá trêntỷ lệ kèo bóng đá
/Cập nhật
/Xóa
được thực hiện tốt hơn với các kích hoạt. Trình kích hoạt về mặt ký hiệu phức tạp hơn một chút, nhưng ngữ nghĩa của chúng đơn giản hơn nhiều để hiểu. Các tỷ lệ kèo bóng đá có xu hướng có kết quả đáng ngạc nhiên khi truy vấn ban đầu chứa các chức năng dễ bay hơi: các chức năng dễ bay hơi có thể được thực thi nhiều lần hơn dự kiến trong quá trình thực hiện các tỷ lệ kèo bóng đá.
Ngoài ra, có một số trường hợp không được hỗ trợ bởi các loại tỷ lệ kèo bóng đá này, đáng chú ý là bao gồmvới
Các điều khoản trong truy vấn ban đầu và phụ đa phân bổ-Chọn
s trongset
Danh sáchCập nhật
Truy vấn. Điều này là do việc sao chép các cấu trúc này thành truy vấn tỷ lệ kèo bóng đá sẽ dẫn đến nhiều đánh giá về trình tự phụ, trái với ý định rõ ràng của tác giả truy vấn.
Giữ cú pháp:
Tạo [hoặc thay thế] tỷ lệ kèo bóng đátên
như trênSự kiện
đếnBảng
[WHEREđiều kiện
14445_14488lệnh
| (lệnh
;lệnh
...)
Trong tâm trí. Trong phần sau,tỷ lệ kèo bóng đá cập nhậtcó nghĩa là các tỷ lệ kèo bóng đá được xác định trêntỷ lệ kèo bóng đá
, Cập nhật
hoặcXóa
.
Cập nhật các tỷ lệ kèo bóng đá được áp dụng bởi hệ thống tỷ lệ kèo bóng đá khi mối quan hệ kết quả và loại lệnh của cây truy vấn bằng với đối tượng và sự kiện được đưa ra trongTạo tỷ lệ kèo bóng đá
Lệnh. Đối với các tỷ lệ kèo bóng đá cập nhật, hệ thống tỷ lệ kèo bóng đá tạo ra một danh sách các cây truy vấn. Ban đầu danh sách cây truy vấn trống rỗng. Có thể không có (Không có gì
Từ khóa), một hoặc nhiều hành động. Để đơn giản hóa, chúng tôi sẽ xem xét một tỷ lệ kèo bóng đá với một hành động. tỷ lệ kèo bóng đá này có thể có trình độ hoặc không và nó có thể làThay tỷ lệ kèo bóng đáo đó
hoặccũng
(mặc định).
Trình độ tỷ lệ kèo bóng đá là gì? Đó là một hạn chế cho biết khi nào các hành động của tỷ lệ kèo bóng đá nên được thực hiện và khi không. Trình độ này chỉ có thể tham khảo các giả thuyếtmới
và/hoặccũ
, về cơ bản đại diện cho mối quan hệ được đưa ra dưới dạng đối tượng (nhưng với một ý nghĩa đặc biệt).
Vì vậy, chúng tôi có ba trường hợp tạo ra các cây truy vấn sau đây cho tỷ lệ kèo bóng đá một hành động.
cũng
hoặcThay tỷ lệ kèo bóng đáo đó
Cây truy vấn từ hành động tỷ lệ kèo bóng đá với trình độ của cây truy vấn ban đầu được thêm vào
cũng
16411_16526
Thay tỷ lệ kèo bóng đáo đó
Cây truy vấn từ hành động tỷ lệ kèo bóng đá với trình độ tỷ lệ kèo bóng đá và trình độ của cây truy vấn ban đầu; và cây truy vấn ban đầu với trình độ tỷ lệ kèo bóng đá phủ định được thêm vào
Cuối cùng, nếu tỷ lệ kèo bóng đá làcũng
, cây truy vấn gốc không thay đổi được thêm tỷ lệ kèo bóng đáo danh sách. Vì chỉ đủ điều kiệnThay tỷ lệ kèo bóng đáo đó
Các tỷ lệ kèo bóng đá đã thêm cây truy vấn ban đầu, chúng tôi kết thúc với một hoặc hai cây truy vấn đầu ra cho một tỷ lệ kèo bóng đá với một hành động.
chotrên tỷ lệ kèo bóng đá
tỷ lệ kèo bóng đá, truy vấn ban đầu (nếu không bị đàn áp bởiThay tỷ lệ kèo bóng đáo đó
) được thực hiện trước khi có bất kỳ hành động nào được thêm vào các tỷ lệ kèo bóng đá. Điều này cho phép các hành động nhìn thấy (các) hàng được chèn. Nếu không cótrên bản cập nhật
vàKhi xóa
tỷ lệ kèo bóng đá, truy vấn ban đầu được thực hiện sau các hành động được thêm vào các tỷ lệ kèo bóng đá. Điều này đảm bảo rằng các hành động có thể nhìn thấy các hàng được cập nhật hoặc bị xóa; Nếu không, các hành động có thể không làm gì vì họ không tìm thấy hàng nào phù hợp với trình độ của họ.
17776_18204
Các cây truy vấn được tìm thấy trong các hành động củaPG_REWRITE
Danh mục hệ thống chỉ là mẫu. Vì chúng có thể tham chiếu các mục nhập bảng phạm vi chomới
và18448_18453
, một số thay thế phải được thực hiện trước khi chúng có thể được sử dụng. Đối với bất kỳ tham chiếu nào đếnmớ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 của mục đó thay thế tham chiếu. Nếu không thì,mới
có nghĩa giống nhưcũ
(cho mộtCập nhật
) hoặc được thay thế bằng giá trị null (cho mộttỷ lệ kèo bóng đá
). Bất kỳ tham chiếu nào đếncũ
được thay thế bằng một tham chiếu đến mục nhập bảng phạm vi là mối quan hệ kết quả.
19069_19285
Nói rằng chúng tôi muốn theo dõi các thay đổi đối vớiSL_AVAIL
Cột trongShoelace_data
Mối quan hệ. Vì vậy, chúng tôi thiết lập một bảng nhật ký và một tỷ lệ kèo bóng đá ghi có điều kiện một mục nhập nhật ký khi mộtCập nhật
được thực hiện trênShoelace_data
.
19880_20479
Bây giờ ai đó làm:
Cập nhật shoelace_data sl_avail = 6 trong đó sl_name = 'SL7';
Và chúng tôi nhìn tỷ lệ kèo bóng đáo bảng nhật ký:
20695_20931
Đó là những gì chúng tôi mong đợi. Những gì đã xảy ra trong nền là như sau. Trình phân tích cú pháp đã tạo cây truy vấn:
Cập nhật Shoelace_Data SET SL_AVAIL = 6 Từ Shoelace_Data Shoelace_Data WHERE SHOELACE_DATA.SL_NAME = 'SL7';
Có một tỷ lệ kèo bóng đálog_shoelace
đó làtrên cập nhật
Với biểu thức trình độ tỷ lệ kèo bóng đá:
new.sl_avail < cũ.SL_AVAIL
và hành động:
Chèn tỷ lệ kèo bóng đáo giá trị Shoelace_log ( new.sl_name, new.sl_avail, current_user, current_timestamp) Từ shoelace_data mới, shoelace_data cũ;
(Điều này có vẻ hơi lạ vì bạn thường không thể viếttỷ lệ kèo bóng đá ... giá trị ... từ
. Thetừ
mệnh đề ở đây chỉ là để chỉ ra rằng có các mục trong bảng trong cây truy vấn chomới
vàcũ
. Chúng là cần thiết để chúng có thể được tham chiếu bởi các biến trongtỷ lệ kèo bóng đá
Cây truy vấn của lệnh.)
tỷ lệ kèo bóng đá là đủ điều kiệncũng
tỷ lệ kèo bóng đá, vì vậy hệ thống tỷ lệ kèo bóng đá phải trả về hai cây truy vấn: Hành động tỷ lệ kèo bóng đá sửa đổi và cây truy vấn ban đầu. Trong bước 1, bảng phạm vi của truy vấn ban đầu được tích hợp vào cây truy vấn hành động của tỷ lệ kèo bóng đá. Kết quả này trong:
Chèn tỷ lệ kèo bóng đáo giá trị Shoelace_log (
new.sl_name, new.sl_avail,
current_user, current_timestamp)
Từ shoelace_data mới, shoelace_data cũ,shoelace_data shoelace_data;
Trong bước 2, trình độ tỷ lệ kèo bóng đá được thêm vào nó, do đó tập kết quả bị giới hạn ở các hàng trong đóSL_AVAIL
Thay đổi:
Chèn tỷ lệ kèo bóng đáo giá trị Shoelace_log (
new.sl_name, new.sl_avail,
current_user, current_timestamp)
Từ shoelace_data mới, shoelace_data cũ,
Shoelace_data Shoelace_Data23117_23159;
(cái này trông thậm chí còn lạ, vìtỷ lệ kèo bóng đá ... Giá trị
không cóWHERE
mệnh đề, nhưng người lập kế hoạch và thực thi sẽ không gặp khó khăn gì với nó. Họ cần hỗ trợ cùng một chức năng này chotỷ lệ kèo bóng đá ... Chọn
.)
Trong bước 3, trình độ của cây truy vấn ban đầu được thêm tỷ lệ kèo bóng đáo, hạn chế kết quả được đặt thêm cho chỉ các hàng được chạm tỷ lệ kèo bóng đáo bởi truy vấn ban đầu:
Chèn tỷ lệ kèo bóng đáo giá trị Shoelace_log (
new.sl_name, new.sl_avail,
current_user, current_timestamp)
Từ shoelace_data mới, shoelace_data cũ,
Shoelace_data Shoelace_Data
WHERE MỚI.SL_AVAIL < cũ.SL_AVAILvà shoelace_data.sl_name = 'SL7';
Bước 4 thay thế các tham chiếu đếnmới
bởi các mục nhập danh sách mục tiêu từ cây truy vấn ban đầu hoặc bởi các tham chiếu biến phù hợp từ mối quan hệ kết quả:
Chèn tỷ lệ kèo bóng đáo giá trị Shoelace_log (shoelace_data.sl_name, 6,, current_user, current_timestamp) Từ shoelace_data mới, shoelace_data cũ, Shoelace_data Shoelace_Data Ở ĐÂU6< cũ.SL_AVAIL Và shoelace_data.sl_name = 'SL7';
Bước 5 thay đổicũ
Tài liệu tham khảo tỷ lệ kèo bóng đáo kết quả Tài liệu tham khảo:
Chèn tỷ lệ kèo bóng đáo giá trị Shoelace_log (
shoelace_data.sl_name, 6,
current_user, current_timestamp)
Từ shoelace_data mới, shoelace_data cũ,
Shoelace_data Shoelace_Data
Trong đó 6 <shoelace_data.sl_availvà shoelace_data.sl_name = 'SL7';
Đó là nó. Vì tỷ lệ kèo bóng đá làcũng
, chúng tôi cũng xuất ra cây truy vấn ban đầu. Nói tóm lại, đầu ra từ hệ thống tỷ lệ kèo bóng đá là danh sách hai cây truy vấn tương ứng với các câu sau:
Chèn tỷ lệ kèo bóng đáo giá trị Shoelace_log ( shoelace_data.sl_name, 6, current_user, current_timestamp) 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 thi theo thứ tự này và đó chính xác là những gì tỷ lệ kèo bóng đá có nghĩa là làm.
Sự thay thế và trình độ bổ sung đảm bảo rằng, nếu truy vấn ban đầu sẽ là, giả sử:
Cập nhật Shoelace_Data SET SL_COLOR = 'XANH' Trong đó sl_name = 'SL7';
Không có mục nhập nào sẽ được viết. Trong trường hợp đó, cây truy vấn ban đầu không chứa mục nhập danh sách mục tiêu choSL_AVAIL
, vì vậynew.sl_avail
sẽ được thay thế bởishoelace_data.sl_avail
. Do đó, lệnh bổ sung được tạo bởi tỷ lệ kèo bóng đá là:
Chèn tỷ lệ kèo bóng đáo giá trị Shoelace_log ( shoelace_data.sl_name,26459_26483,, current_user, current_timestamp) Từ Shoelace_data Ở ĐÂUshoelace_data.sl_avail< shoelace_data.sl_avail Và shoelace_data.sl_name = 'SL7';
26724_26768
26780_26879
Cập nhật Shoelace_Data SET SL_AVAIL = 0 Trong đó sl_color = 'đen';
Bốn hàng trên thực tế được cập nhật (SL1
, SL2
, SL3
vàSL4
). NhưngSL3
đã cóSL_AVAIL = 0
. Trong trường hợp này, trình độ truy vấn ban đầu là khác nhau và kết quả là cây truy vấn bổ sung:
Chèn tỷ lệ kèo bóng đáo Shoelace_log
Chọn Shoelace_Data.SL_NAME, 0,
current_user, current_timestamp
Từ Shoelace_data
WHERE 0 < Shoelace_data.SL_AVAIL
VÀshoelace_data.sl_color = 'đen';
Được tạo bởi tỷ lệ kèo bóng đá. Cây truy vấn này chắc chắn sẽ chèn ba mục nhật ký mới. Và điều đó hoàn toàn chính xác.
Ở đây chúng ta có thể thấy lý do tại sao điều quan trọng là cây truy vấn ban đầu được thực hiện cuối cùng. NếuCập nhật
đã được thực thi trước, tất cả các hàng đã được đặt thành 0, vì vậy việc ghi nhật kýtỷ lệ kèo bóng đá
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 khả năng được đề cập là ai đó có thể cố gắng chạytỷ lệ kèo bóng đá
, Cập nhật
hoặcXóa
Trên đó là để cho những cây truy vấn đó bị vứt bỏ. Vì vậy, chúng tôi có thể tạo các tỷ lệ kèo bóng đá:
Tạo tỷ lệ kèo bóng đá giày_ins_protect như khi chèn vào giày Thay vào đó không có gì; Tạo tỷ lệ kèo bóng đá giày_upd_protect như trên cập nhật cho giày Thay vào đó không có gì; Tạo tỷ lệ kèo bóng đá giày_del_protect như đang xóa để giày Thay vào đó không có gì;
Nếu ai đó hiện đang cố gắng thực hiện bất kỳ hoạt động nào trong quan hệ xemgiày
, Hệ thống tỷ lệ kèo bóng đá sẽ áp dụng các tỷ lệ kèo bóng đá này. Vì các tỷ lệ kèo bóng đá không có hành động và làThay tỷ lệ kèo bóng đáo đó
29244_29432
Một cách tinh vi hơn để sử dụng hệ thống tỷ lệ kèo bóng đá là tạo các tỷ lệ kèo bóng đá viết lại cây truy vấn thành một hoạt động đúng trên các bảng thực. Để làm điều đó trênShoelace
Xem, chúng tôi tạo các tỷ lệ kèo bóng đá sau:
Tạo tỷ lệ kèo bóng đá 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 tỷ lệ kèo bóng đá shoelace_upd như trên bản cập nhật lên Shoelace Làm thay thế Cập nhật shoelace_data Đặt 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 tỷ lệ kèo bóng đá 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;
Nếu bạn muốn hỗ trợTrở về
Truy vấn trên chế độ xem, bạn cần thực hiện các tỷ lệ kèo bóng đá bao gồmTrở về
Các mệnh đề tính toán các hàng xem. Điều này thường khá tầm thường cho các chế độ xem trên một bảng, nhưng nó hơi tẻ nhạt cho các chế độ xem tham gia nhưShoelace
. Một ví dụ cho trường hợp tỷ lệ kèo bóng đá là:
Tạo tỷ lệ kèo bóng đá 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 ) Trở lại Shoelace_data.*, (Chọn Shoelace_Data.SL_LEN * U.UN_FACT Từ đơn vị u nơi shoelace_data.sl_unit = U.un_name);
Lưu ý rằng tỷ lệ kèo bóng đá này hỗ trợ cảtỷ lệ kèo bóng đá
vàtỷ lệ kèo bóng đá trả về
Truy vấn trên chế độ xem - TheTrở về
mệnh đề chỉ đơn giản là bỏ qua chotỷ lệ kèo bóng đá
.
Bây giờ hãy giả sử rằng thỉnh thoảng, một gói dây giày đến cửa hàng và một danh sách các bộ phận lớn cùng với nó. Nhưng bạn không muốn cập nhật thủ côngShoelace
Xem mỗi lần. Thay tỷ lệ kèo bóng đáo đó, chúng tôi thiết lập hai bảng nhỏ: một trong đó bạn có thể chèn các mục từ danh sách bộ phận và một bảng với một thủ thuật đặc biệt. Các lệnh tạo cho chúng là:
Tạo bảng Shoelace_arrive ( văn bản arr_name, ARR_QUANT Số nguyên ); Tạo bảng Shoelace_ok ( văn bản ok_name, OK_Quant Integer ); Tạo tỷ lệ kèo bóng đá shoelace_ok_ins như khi chèn vào shoelace_ok Làm thay thế Cập nhật Shoelace Đặt SL_AVAIL = SL_AVAIL + MỚI.OK_QUANT Trong đó sl_name = new.ok_name;
Bây giờ bạn có thể điền tỷ lệ kèo bóng đáo bảngShoelace_arrive
Với dữ liệu từ danh sách các bộ phận:
Chọn * từ Shoelace_arrive; ARR_NAME | ARR_QUANT ----------+----------- SL3 | 10 SL6 | 20 SL8 | 20 (3 hàng)
Hãy xem nhanh dữ liệu hiện tại:
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 | Màu nâu | 60 | cm | 60 SL3 | 0 | Đen | 35 | inch | 88.9 SL4 | 8 | Đen | 40 | inch | 101.6 SL8 | 1 | Màu nâu | 40 | inch | 101.6 SL5 | 4 | Màu nâu | 1 | m | 100 SL6 | 0 | Màu nâu | 0,9 | m | 90 (8 hàng)
Bây giờ di chuyển dây giày đã đến trong:
Chèn tỷ lệ kèo bóng đáo Shoelace_ok Chọn * từ Shoelace_arrive;
và kiểm tra kết quả:
Chọn * từ thứ tự Shoelace bằng 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 | Màu nâu | 60 | cm | 60 SL4 | 8 | Đen | 40 | inch | 101.6 SL3 | 10 | Đen | 35 | inch | 88.9 SL8 | 21 | Màu nâu | 40 | inch | 101.6 SL5 | 4 | Màu nâu | 1 | m | 100 SL6 | 20 | Màu nâu | 0,9 | m | 90 (8 hàng) Chọn * từ Shoelace_log; SL_NAME | SL_AVAIL | log_who | log_when ---------+----------+--------+------------------------------------------ SL7 | 6 | Al | Tue ngày 20 tháng 10 19:14:45 1998 đã gặp DST SL3 | 10 | Al | Tue 20 tháng 10 19:25:16 1998 đã gặp DST SL6 | 20 | Al | Tue 20 tháng 10 19:25:16 1998 đã gặp DST SL8 | 21 | Al | Tue 20 tháng 10 19:25:16 1998 đã gặp DST (4 hàng)
Đó là một chặng đường dài từ mộttỷ lệ kèo bóng đá ... Chọn
với những kết quả này. Và mô tả về chuyển đổi cây truy vấn sẽ là lần cuối cùng trong chương này. Đầu tiên, có đầu ra của trình phân tích cú pháp:
Chèn tỷ lệ kèo bóng đáo Shoelace_ok Chọn shoelace_arrive.arr_name, shoelace_arrive.arr_quant Từ shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok;
Bây giờ là tỷ lệ kèo bóng đá đầu tiênShoelace_ok_ins
được áp dụng và biến điều này thành:
35157_35423
và ném đi bản gốctỷ lệ kèo bóng đá
trên35525_35538
. Truy vấn viết lại này được chuyển đến hệ thống tỷ lệ kèo bóng đá một lần nữa và tỷ lệ kèo bóng đá được áp dụng thứ haiShoelace_upd
Sản xuất:
35718_36241
Một lần nữa đó làThay tỷ lệ kèo bóng đáo đó
tỷ lệ kèo bóng đá và cây truy vấn trước đó bị vứt bỏ. Lưu ý rằng truy vấn này vẫn sử dụng chế độ xemShoelace
. Nhưng hệ thống tỷ lệ kèo bóng đá chưa kết thúc với bước này, vì vậy nó tiếp tục và áp dụng_return
tỷ lệ kèo bóng đá trên đó và chúng ta nhận được:
36609_37150
Cuối cùng, tỷ lệ kèo bóng đálog_shoelace
Được áp dụng, tạo ra cây truy vấn thêm:
37304_37937
Sau đó, hệ thống tỷ lệ kèo bóng đá hết tỷ lệ kèo bóng đá và trả về các cây truy vấn được tạo.
Vì vậy, chúng tôi kết thúc với hai cây truy vấn cuối cùng tương đương vớiSQLCâu lệnh:
Chèn tỷ lệ kèo bóng đáo Shoelace_log Chọn S.SL_NAME, s.sl_avail + shoelace_arrive.arr_quant, current_user, current_timestamp 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 shoelace_data Đặt 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;
38868_39078
Có một chút chi tiết hơi xấu. Nhìn tỷ lệ kèo bóng đáo hai truy vấn, hóa ra làShoelace_data
Mối quan hệ xuất hiện hai lần trong bảng phạm vi nơi nó chắc chắn có thể được giảm xuống còn một. Người lập kế hoạch không xử lý nó và do đó, kế hoạch thực thi cho đầu ra hệ thống tỷ lệ kèo bóng đá củatỷ lệ kèo bóng đá
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 Shoelace_Data
Trong khi bỏ qua mục nhập bảng phạm vi bổ sung 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_arrive
tạo ra chính xác các mục tương tự trong bảng nhật ký. Do đó, hệ thống tỷ lệ kèo bóng đá gây ra một lần quét thêm trên bảngShoelace_data
Điều đó hoàn toàn không cần thiết. Và quá trình quét dự phòng tương tự được thực hiện một lần nữa trongCậ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ể.
Bây giờ chúng tôi thực hiện một cuộc biểu tình cuối cùng củaPostgreSQL40483_40583
Chèn tỷ lệ kèo bóng đáo các giá trị Shoelace ('SL9', 0, 'hồng', 35.0, 'inch', 0,0); Chèn tỷ lệ kèo bóng đáo các giá trị Shoelace ('SL10', 1000, 'Magenta', 40.0, 'inch', 0.0);
Chúng tôi muốn xem để kiểm tra xemShoelace
Mục nhập không phù hợp với bất kỳ màu giày nào. Chế độ xem cho điều này là:
Tạo xem shoelace_mismatch 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 của nó là:
Chọn * từ Shoelace_mismatch; SL_NAME | SL_AVAIL | SL_COLOR | SL_LEN | SL_Unit | SL_LEN_CM ---------+----------+----------+--------+----------+----------- SL9 | 0 | Màu hồng | 35 | inch | 88.9 SL10 | 1000 | Magenta | 40 | inch | 101.6
Bây giờ chúng tôi muốn thiết lập nó để các dây giày không phù hợp không có trong kho bị xóa khỏi cơ sở dữ liệu. Để làm cho nó khó hơn một chút choPOSTGRESQL, chúng tôi không xóa trực tiếp. Thay tỷ lệ kèo bóng đáo đó chúng tôi tạo thêm một chế độ xem:
Tạo xem shoelace_can_delete là Chọn * Từ Shoelace_Mismatch 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_Can_Delete Trong đó sl_name = shoelace.sl_name);
Voilà:
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 | Màu nâu | 60 | cm | 60 SL4 | 8 | Đen | 40 | inch | 101.6 SL3 | 10 | Đen | 35 | inch | 88.9 SL8 | 21 | Màu nâu | 40 | inch | 101.6 SL10 | 1000 | Magenta | 40 | inch | 101.6 SL5 | 4 | Màu nâu | 1 | m | 100 SL6 | 20 | Màu nâu | 0,9 | m | 90 (9 hàng)
AXóa
Về chế độ xem, với trình độ trình độ con, tổng cộng sử dụng 4 chế độ xem làm tổ/tham gia, trong đó một trong số chúng có trình độ truy vấn con có chứa chế độ xem và nơi sử dụng các cột xem được tính toán, được viết lại thành một cây truy vấn duy nhất xóa dữ liệu được yêu cầu từ bảng thực.
43218_43368