Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
9390_9446hiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

37.3. kèo bóng đá hôm nay và ngày mai trênkèo bóng đá hôm nay và ngày mai, Cập nhậtXóa

kèo bóng đá hôm nay và ngày mai được xác định trênkèo bóng đá hôm nay và ngày mai, Cập nhậtXóakhác biệt đáng kể so với chế độ xem Các kèo bóng đá hôm nay và ngày mai được mô tả trong phần trước. Đầu tiên, của họTạo kèo bóng đá hôm nay và ngày mailệnh cho phép thêm:

  • 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 kèo bóng đá hôm nay và ngày maio đóhoặccũng(mặc định).

  • Pseudorelationsmớitrở nên hữu ích.

  • Họ có thể có trình độ kèo bóng đá hôm nay và ngày mai.

Thứ hai, họ không sửa đổi cây truy vấn tại chỗ. Thay vì Họ tạo ra không hoặc nhiều cây truy vấn mới và có thể vứt bỏ bản gốc.

37.3.1. Làm sao Cập nhật kèo bóng đá hôm nay và ngày mai hoạt động

Giữ cú pháp:

Tạo [hoặc thay thế] kèo bóng đá hôm nay và ngày maitênnhư trênSự kiệnđếnBảng[WHEREđiều kiện]
    Làm [cũng | Thay kèo bóng đá hôm nay và ngày maio đó] không có gì |lệnh| (lệnh;lệnh...)

Trong tâm trí. Trong phần sau,Cập nhật kèo bóng đá hôm nay và ngày maicó nghĩa là các kèo bóng đá hôm nay và ngày mai được xác định trênkèo bóng đá hôm nay và ngày mai, Cập nhậthoặcXóa.

Cập nhật kèo bóng đá hôm nay và ngày mai được áp dụng bởi hệ thống kèo bóng đá hôm nay và ngày mai khi kết quả mối quan hệ và loại lệnh của cây truy vấn bằng Đối tượng và sự kiện được đưa ra trongTạo LUẬT LỆlệnh. Đối với các kèo bóng đá hôm nay và ngày mai cập nhật, hệ thống kèo bóng đá hôm nay và ngày mai 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 kèo bóng đá hôm nay và ngày mai với một hành động. kèo bóng đá hôm nay và ngày mai này có thể có trình độ hoặc không và nó có thể làThay kèo bóng đá hôm nay và ngày maio đóhoặccũng(mặc định).

Trình độ kèo bóng đá hôm nay và ngày mai là gì? Đó là một hạn chế cho biết Khi các hành động của kèo bóng đá hôm nay và ngày mai 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 các giả thuyếtmớivà/hoặc, mà về cơ bản đại diện cho mối quan hệ được đưa ra như là đố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 truy vấn sau cây cho kèo bóng đá hôm nay và ngày mai một hành động.

Không có trình độ, vớicũnghoặcThay kèo bóng đá hôm nay và ngày maio đó

Cây truy vấn từ hành động kèo bóng đá hôm nay và ngày mai với bản gốc Truy vấn của Tree Treument được thêm vào

Trình độ chuyên môn đã cho vàcũng

Cây truy vấn từ hành động kèo bóng đá hôm nay và ngày mai với kèo bóng đá hôm nay và ngày mai Trình độ chuyên môn và trình độ của cây truy vấn ban đầu Đã thêm

Trình độ chuyên môn đã cho vàThay kèo bóng đá hôm nay và ngày maio đó

14264_14474

Cuối cùng, nếu kèo bóng đá hôm nay và ngày mai làcũng, The Cây truy vấn gốc không thay đổi được thêm kèo bóng đá hôm nay và ngày maio danh sách. Kể từ chỉ đạt tiêu chuẩnThay kèo bóng đá hôm nay và ngày maio đókèo bóng đá hôm nay và ngày mai đã 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 kèo bóng đá hôm nay và ngày mai với một hành động.

chotrên kèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai, bản gốc truy vấn (nếu không bị đàn áp bởi14949_14958) được thực hiện trước khi có bất kỳ hành động được thêm vào các kèo bóng đá hôm nay và ngày mai. Điều này cho phép hành động để xem (các) hàng được chèn. Nếu không cótrên bản cập nhậtKhi xóa15152_15414

Các cây truy vấn được tạo ra từ các hành động kèo bóng đá hôm nay và ngày mai được ném vào hệ thống viết lại một lần nữa và có thể áp dụng nhiều kèo bóng đá hôm nay và ngày mai hơn dẫn đến cây truy vấn ít nhiều. Vì vậy, các hành động của một kèo bóng đá hôm nay và ngày mai phải có một loại lệnh khác hoặc kết quả khác quan hệ hơn chính kèo bóng đá hôm nay và ngày mai, nếu không thì đệ quy này Quá trình sẽ kết thúc trong một vòng lặp vô hạn. (Mở rộng đệ quy của một kèo bóng đá hôm nay và ngày mai sẽ được phát hiện và báo cáo là một lỗi.)

Các cây truy vấn được tìm thấy trong các hành động củaPG_REWRITEDanh 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, 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ảomới, Danh sách mục tiêu của Truy vấn ban đầu được tìm kiếm cho một mục tương ứng. Nếu như Tìm thấy, biểu thức của mục đó thay thế tài liệu tham khảo. Nếu không thì,mớicó nghĩa là giống như(cho mộtCập nhật) hoặc được thay thế bằng một giá trị null (cho mộtkèo bóng đá hôm nay và ngày mai). Bất kỳ tham chiếu nào đếnđược thay thế bằng tham chiếu đến mục nhập bảng là mối quan hệ kết quả.

16757_16985

37.3.1.1. kèo bóng đá hôm nay và ngày mai đầu tiên từng bước

Nói rằng chúng tôi muốn theo dõi các thay đổi đối vớiSL_AVAILCột trongShoelace_dataMố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 đá hôm nay và ngày mai có điều kiện ghi một mục nhập nhật ký khi MỘTCập nhậtđược thực hiện trênShoelace_data.

17505_18104

Bây giờ ai đó làm:

18175_18239

Và chúng tôi nhìn kèo bóng đá hôm nay và ngày maio bảng nhật ký:

Chọn * từ Shoelace_log;

 SL_NAME | SL_AVAIL | log_who | log_when                        
---------+----------+---------+------------------------------------------
 SL7 |        6 | Al | Tue ngày 20 tháng 10 16:14:45 1998 đã gặp DST
(1 hàng)

18573_18690

Cập nhật Shoelace_Data SET SL_AVAIL = 6
  Từ Shoelace_Data Shoelace_Data
 WHERE SHOELACE_DATA.SL_NAME = 'SL7';

Có một kèo bóng đá hôm nay và ngày mailog_shoelaceĐiều đó làtrên cập nhậtvới kèo bóng đá hôm nay và ngày mai Biểu thức đủ điều kiện:

new.sl_avail < cũ.SL_AVAIL

và hành động:

Chèn kèo bóng đá hôm nay và ngày maio 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 không thể bình thường viếtkèo bóng đá hôm nay và ngày mai ... giá trị ... từ. Thetừmệnh đề ở đây chỉ là để chỉ ra rằng có các mục trong bảng phạm vi trong cây truy vấn vìmới. Những điều này là cần thiết để chúng có thể được tham chiếu bởi các biến trongkèo bóng đá hôm nay và ngày maiCây truy vấn của lệnh.)

kèo bóng đá hôm nay và ngày mai là đủ điều kiệncũngkèo bóng đá hôm nay và ngày mai, vì vậy hệ thống kèo bóng đá hôm nay và ngày mai phải trả về hai cây truy vấn: The Hành động kèo bóng đá hôm nay và ngày mai 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 kèo bóng đá hôm nay và ngày mai. Kết quả này trong:

20146_20310shoelace_data shoelace_data20359_20363

Trong bước 2, trình độ kèo bóng đá hôm nay và ngày mai đượ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_AVAILThay đổi:

Chèn kèo bóng đá hôm nay và ngày maio 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_DataWHERE new.sl_avail < cũ.SL_AVAIL;

(cái này trông thậm chí còn lạ, vìkèo bóng đá hôm nay và ngày mai ... giá trịkhông cóWHEREmệnh đề, nhưng người lập kế hoạch và Giám đốc điều hành sẽ không gặp khó khăn gì với nó. Họ cần Hỗ trợ cùng chức năng này chokèo bóng đá hôm nay và ngày mai ... Chọn.)

Trong bước 3, trình độ của cây truy vấn ban đầu là đã thêm, giới hạn kết quả được đặt thêm kèo bóng đá hôm nay và ngày maio chỉ các hàng Điều đó đã được chạm kèo bóng đá hôm nay và ngày maio bởi truy vấn ban đầu:

Chèn kèo bóng đá hôm nay và ngày maio 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 tài liệu tham khảo chonewbở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ừ kết quả mối quan hệ:

Chèn kèo bóng đá hôm nay và ngày maio 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 đổiTài liệu tham khảo kết quả Tài liệu tham khảo quan hệ:

Chèn kèo bóng đá hôm nay và ngày maio 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ì kèo bóng đá hôm nay và ngày mai 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 kèo bóng đá hôm nay và ngày mai là danh sách hai Truy vấn cây tương ứng với các câu sau:

Chèn kèo bóng đá hôm nay và ngày maio các 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 hiện theo thứ tự này và đó chính xác là những gì kèo bóng đá hôm nay và ngày mai có nghĩa là phải 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 = 'Green'
 Trong đó sl_name = 'SL7';

Không có mục nhập nào sẽ được viết. Trong trường hợp đó, bản gốc Truy cập cây không chứa mục nhập danh sách đích choSL_AVAIL, vì vậynew.sl_avail23831_23855shoelace_data.sl_avail. Vì vậy, thêm Lệnh được tạo bởi kèo bóng đá hôm nay và ngày mai là:

Chèn kèo bóng đá hôm nay và ngày maio giá trị Shoelace_log (
       shoelace_data.sl_name,shoelace_data.sl_avail,,
       current_user, current_timestamp)
  Từ Shoelace_data
 Ở ĐÂUshoelace_data.sl_avail< shoelace_data.sl_avail
   Và shoelace_data.sl_name = 'SL7';

Và trình độ đó sẽ không bao giờ đúng.

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 ai đó ban hành lệnh:

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, SL3SL4). NhưngSL3đã cóSL_AVAIL = 0. Trong trường hợp này, truy vấn ban đầu Trình độ của cây là khác nhau và kết quả là Cây truy vấn bổ sung:

Chèn kèo bóng đá hôm nay và ngày maio 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 kèo bóng đá hôm nay và ngày mai. Cây truy vấn này chắc chắn sẽ Chèn ba mục nhật ký mới. Và đó là 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à bản gốc Cây truy vấn được thực hiện cuối cùng. NếuCập nhậtđã được thực hiện trước, tất cả các hàng đã được đặt thành 0, vì vậy việc đăng nhậpkèo bóng đá hôm nay và ngày maisẽ không tìm thấy bất kỳ hàng nào trong đó0 < shoelace_data.sl_avail.

37.3.2. Hợp tác với quan điểm

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ể cố gắng chạykèo bóng đá hôm nay và ngày mai, Cập nhậthoặcXóaTrên đó là để cho những truy vấn đó Cây bị vứt đi. Vì vậy, chúng tôi có thể tạo các kèo bóng đá hôm nay và ngày mai:

Tạo kèo bóng đá hôm nay và ngày mai 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 đá hôm nay và ngày mai 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 đá hôm nay và ngày mai 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 số này trên Xem quan hệgiày, Hệ thống kèo bóng đá hôm nay và ngày mai sẽ áp dụng các kèo bóng đá hôm nay và ngày mai này. Vì các kèo bóng đá hôm nay và ngày mai không có hành động và làThay kèo bóng đá hôm nay và ngày maio đó, Danh sách truy vấn kết quả Cây 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 thực hiện sau khi Hệ thống kèo bóng đá hôm nay và ngày mai được thực hiện với nó.

Một cách tinh vi hơn để sử dụng hệ thống kèo bóng đá hôm nay và ngày mai là tạo Các kèo bóng đá hôm nay và ngày mai viết lại cây truy vấn thành một cái đúng Hoạt động trên các bảng thực. Để làm điều đó trênShoelaceXem, chúng tôi tạo phần sau kèo bóng đá hôm nay và ngày mai:

27266_27926

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 kèo bóng đá hôm nay và ngày mai bao gồm28081_28092mệnh đề tính toán Xem hàng. Điều này thường khá tầm thường cho các quan điểm 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 kèo bóng đá hôm nay và ngày mai là:

28357_28750

Lưu ý rằng kèo bóng đá hôm nay và ngày mai này hỗ trợ cảkèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai Trở vềTruy vấn trên chế độ xem - TheTrở vềmệnh đề chỉ đơn giản là bỏ qua chokèo bóng đá hôm nay và ngày mai.

Bây giờ hãy giả sử rằng thỉnh thoảng, một gói dây giày đến tại 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ôngShoelaceXem mỗi lần. Thay kèo bóng đá hôm nay và ngày maio đó 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 mục với 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 kèo bóng đá hôm nay và ngày mai 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 kèo bóng đá hôm nay và ngày maio bảngShoelace_arriveVới dữ liệu từ các bộ phận danh sách:

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:

30184_30852

Bây giờ di chuyển dây giày đã đến trong:

Chèn kèo bóng đá hôm nay và ngày maio Shoelace_ok Chọn * từ Shoelace_arrive;

và kiểm tra kết quả:

31066_32175

Đó là một chặng đường dài từ mộtkèo bóng đá hôm nay và ngày mai ... LỰA CHỌNvớ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 kèo bóng đá hôm nay và ngày maio 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à kèo bóng đá hôm nay và ngày mai đầu tiênShoelace_ok_insđược áp dụng và biến điều này thành:

Cập nhật Shoelace
   Đặt SL_AVAIL = 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 Shoelace.SL_NAME = shoelace_arrive.arr_name;

và ném đi bản gốckèo bóng đá hôm nay và ngày maitrênShoelace_ok. Truy vấn viết lại này được chuyển đến hệ thống kèo bóng đá hôm nay và ngày mai một lần nữa và kèo bóng đá hôm nay và ngày mai được áp dụng thứ haiShoelace_updsản xuất:

Cập nhật Shoelace_Data
   Đặt 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
  Từ shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok,
       Shoelace_ok cũ, Shoelace_ok Mới,
       dây giày, dây giày cũ,
       Shoelace Mới, Shoelace_Data Shoelace_Data
 WHERE Shoelace.SL_name = shoelace_arrive.arr_name
   Và shoelace_data.sl_name = shoelace.sl_name;

Một lần nữa đó làThay kèo bóng đá hôm nay và ngày maio đókèo bóng đá hôm nay và ngày mai 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 kèo bóng đá hôm nay và ngày mai chưa kết thúc với bước này, vì vậy nó tiếp tục và áp dụng_returnkèo bóng đá hôm nay và ngày mai trên đó và chúng ta nhận được:

Cập nhật shoelace_data
   Đặt 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
  Từ shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok,
       Shoelace_ok cũ, Shoelace_ok Mới,
       dây giày, dây giày cũ,
       Shoelace Mới, Shoelace_Data Shoelace_Data,
       dây giày cũ, dây giày mới,
       shoelace_data s, đơn vị u
 WHERE S.SL_NAME = shoelace_arrive.arr_name
   Và shoelace_data.sl_name = s.sl_name;

Cuối cùng, kèo bóng đá hôm nay và ngày mailog_shoelaceNhận Ứng dụng, sản xuất cây truy vấn thêm:

Chèn kèo bóng đá hôm nay và ngày maio Shoelace_log
Chọn S.SL_NAME,
       s.sl_avail + shoelace_arrive.arr_quant,
       current_user,
       current_timestamp
  Từ shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok,
       Shoelace_ok cũ, Shoelace_ok Mới,
       dây giày, dây giày cũ,
       Shoelace Mới, Shoelace_Data Shoelace_Data,
       dây giày 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 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;

Sau đó, hệ thống kèo bóng đá hôm nay và ngày mai hết kèo bóng đá hôm nay và ngày mai và trả về 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 đếnSQLCâu lệnh:

Chèn kèo bóng đá hôm nay và ngày maio 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;

Kết quả là dữ liệu đến từ một quan hệ được kèo bóng đá hôm nay và ngày mai thành một Cập nhật bản cập nhật thứ tư cộng với bản cập nhật cuối cùng trong một phần năm bị 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 đá hôm nay và ngày maio hai truy vấn, hóa ra làShoelace_dataMố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. Các người lập kế hoạch không xử lý nó và vì vậy kế hoạch thực hiện cho Đầu ra hệ thống kèo bóng đá hôm nay và ngày mai củakèo bóng đá hôm nay và ngày maiWill 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 Một

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 kèo bóng đá hôm nay và ngày mai 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ủaPOSTGRESQLHệ thống kèo bóng đá hôm nay và ngày mai và sức mạnh của nó. Nói bạn thêm một số dây giày với màu sắc phi thường vào Cơ sở dữ liệu:

Chèn kèo bóng đá hôm nay và ngày maio các giá trị Shoelace ('SL9', 0, 'hồng', 35.0, 'inch', 0,0);
Chèn kèo bóng đá hôm nay và ngày maio các giá trị Shoelace ('SL10', 1000, 'Magenta', 40.0, 'inch', 0.0);

38444_38490ShoelaceMụ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ó để không phù hợp với dây giày không phù hợp không có trong kho được xóa khỏi cơ sở dữ liệu. Để làm cho nó một khó hơn một chút choPostgreSQL, Chúng tôi không xóa nó trực tiếp. Thay kèo bóng đá hôm nay và ngày maio đó chúng tôi tạo thêm một 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óa40568_40883

Có lẽ chỉ có một kèo bóng đá hôm nay và ngày maii tình huống trong thực tế thế giới nơi một cấu trúc như vậy là cần thiết. Nhưng nó làm cho bạn cảm thấy thoải mái khi nó hoạt động.