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

41.4. kèo chấp bóng đá hôm nay trênChèn, Cập kèo chấp bóng đá hôm nayXóa

kèo chấp bóng đá hôm nay được xác định trênChèn, Cập kèo chấp bóng đá hôm nayXóakhác biệt đáng kể so với các kèo chấp bóng đá hôm nay xem được mô tả trong phần trước. Đầu tiên, của họTạo kèo chấp bóng đá hôm nay​​lệ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.

  • Họ có thểThay kèo chấp bóng đá hôm nayo đó11851_11857cũng(mặc định).

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

  • Họ có thể có trình độ kèo chấp bóng đá hôm nay.

Thứ hai, họ không sửa đổi cây truy vấn tại chỗ. Thay kèo chấp bóng đá hôm nayo đó, 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.

THẬN TRỌNG

Trong nhiều trường hợp, các tác vụ có thể được thực hiện bởi các kèo chấp bóng đá hôm nay trênChèn/Cập kèo chấp bóng đá hôm nay/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 kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay.

Ngoài ra, có một số trường hợp không được hỗ trợ bởi các loại kèo chấp bóng đá hôm nay này, đáng chú ý bao gồmvới13037_13098Chọns trongsetDanh sáchCập kèo chấp bóng đá hôm nayTruy 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 kèo chấp bóng đá hôm nay 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.

41.4.1. Cách cập nhật kèo chấp bóng đá hôm nay hoạt động

Giữ cú pháp:

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

Trong tâm trí. Trong phần sau,kèo chấp bóng đá hôm nay cập nhậtcó nghĩa là các kèo chấp bóng đá hôm nay được xác định trênChèn, Cập kèo chấp bóng đá hôm nayhoặcXóa.

14354_14509Tạo kèo chấp bóng đá hôm naylệnh. Đối với các kèo chấp bóng đá hôm nay cập nhật, hệ thống kèo chấp bóng đá hôm nay 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ì14717_14866Thay kèo chấp bóng đá hôm nayo đóhoặccũng(mặc định).

Trình độ kèo chấp bóng đá hôm nay là gì? Đó là một hạn chế cho biết khi nào các hành động của kèo chấp bóng đá hôm nay 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ớivà/hoặc, 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).

15320_15406

Không có trình độ, vớicũnghoặcThay kèo chấp bóng đá hôm nayo đó

Cây truy vấn từ hành động kèo chấp bóng đá hôm nay với trình độ của cây truy vấn ban đầu đượ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 chấp bóng đá hôm nay với trình độ kèo chấp bóng đá hôm nay và trình độ của cây truy vấn ban đầu được thêm vào

Trình độ chuyên môn đã cho vàThay kèo chấp bóng đá hôm nayo đó

16139_16319

Cuối cùng, nếu kèo chấp bóng đá hôm nay làcũng, cây truy vấn gốc không thay đổi được thêm kèo chấp bóng đá hôm nayo danh sách. Vì chỉ đủ điều kiệnThay kèo chấp bóng đá hôm nayo đókèo chấp bóng đá hôm nay đã 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 chấp bóng đá hôm nay với một hành động.

chotrên chènkèo chấp bóng đá hôm nay, truy vấn ban đầu (nếu không bị đàn áp bởiThay kèo chấp bóng đá hôm nayo đó) được thực hiện trước khi có bất kỳ hành động nào được thêm vào các kèo chấp bóng đá hôm nay. Đ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 cập kèo chấp bóng đá hôm nayKhi xóakèo chấp bóng đá hôm nay, truy vấn ban đầu được thực hiện sau các hành động được thêm vào các kèo chấp bóng đá hôm nay. Đ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ọ.

Các cây truy vấn được tạo từ các hành động kèo chấp bóng đá hôm nay được ném vào hệ thống viết lại một lần nữa và có thể nhiều kèo chấp bóng đá hôm nay được áp dụng dẫn đến các cây truy vấn bổ sung hoặc ít hơn. Vì vậy, các hành động của một kèo chấp bóng đá hôm nay phải có một loại lệnh khác hoặc một mối quan hệ kết quả khác với chính kèo chấp bóng đá hôm nay, nếu không, quá trình đệ quy này sẽ kết thúc trong một vòng lặp vô hạn. (Sự mở rộng đệ quy của một kèo chấp bóng đá hôm nay 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. Đối với bất kỳ tham chiếu nào đếnmới18039_18189mớicó nghĩa giống như(cho mộtCập kèo chấp bóng đá hôm nay) hoặc được thay thế bằng giá trị null (cho mộtChèn). Bất kỳ tham chiếu nào đếnđượ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ả.

Sau khi hệ thống hoàn thành áp dụng các kèo chấp bóng đá hôm nay cập nhật, nó áp dụng các kèo chấp bóng đá hôm nay xem cho (các) cây truy vấn được sản xuất. Các chế độ xem không thể chèn các hành động cập nhật mới để không cần áp dụng các kèo chấp bóng đá hôm nay cập nhật cho đầu ra viết lại xem.

41.4.1.1. kèo chấp bóng đá hôm nay đầ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 bảng nhật ký và một kèo chấp bóng đá hôm nay ghi có điều kiện một mục nhập nhật ký khi mộtCập kèo chấp bóng đá hôm nayđược thực hiện trênShoelace_data.

Tạo bảng Shoelace_log (
    Text SL_NAME, - Shoelace đã thay đổi
    Số nguyên SL_AVAIL, - Giá trị mới có sẵn
    log_who văn bản, - ai đã làm nó
    log_when dấu thời gian - khi
);

Tạo kèo chấp bóng đá hôm nay 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,
                                    current_user,
                                    current_timestamp
                                );

Bây giờ ai đó không:

Cập kèo chấp bóng đá hôm nay Shoelace_Data SET SL_AVAIL = 6 WHERE SL_NAME = 'SL7';

Và chúng tôi nhìn kèo chấp bóng đá hôm nayo bảng nhật ký:

20161_20373

Đó 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 kèo chấp bóng đá hôm nay Shoelace_Data SET SL_AVAIL = 6
  Từ Shoelace_Data Shoelace_Data
 WHERE SHOELACE_DATA.SL_NAME = 'SL7';

Có một kèo chấp bóng đá hôm naylog_shoelaceđó làtrên bản cập kèo chấp bóng đá hôm nayVới biểu thức trình độ kèo chấp bóng đá hôm nay:

new.sl_avail < old.sl_avail

và hành động:

Chèn kèo chấp bóng đá hôm nayo 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ết21206_21234. 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 chomới. Chúng là cần thiết để chúng có thể được tham chiếu bởi các biến trongChènCây truy vấn của lệnh.)

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

Chèn kèo chấp bóng đá hôm nayo 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 độ kèo chấp bóng đá hôm nay được thêm vào nó, do đó tập kết quả bị giới hạn ở các hàng trong đóSL_AVAILThay đổi:

Chèn kèo chấp bóng đá hôm nayo 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ìChèn ... Giá trịkhông cóWHEREmệ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 choChèn ... Chọn.)

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

Chèn kèo chấp bóng đá hôm nayo 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ới23556_23679

Chèn kèo chấp bóng đá hôm nayo 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èo chấp bóng đá hôm nayo kết quả Tài liệu tham khảo:

24261_24470shoelace_data.sl_availvà shoelace_data.sl_name = 'SL7';

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

Chèn kèo chấp bóng đá hôm nayo 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 chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay 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_availsẽ được thay thế bởishoelace_data.sl_avail. Do đó, lệnh bổ sung được tạo bởi kèo chấp bóng đá hôm nay là:

Chèn kèo chấp bóng đá hôm nayo giá trị Shoelace_log (
       shoelace_data.sl_name,shoelace_data.sl_avail,,
       current_user, current_timestamp)
  Từ Shoelace_data
 Ở ĐÂU26041_26065< 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 kèo chấp bóng đá hôm nay Shoelace_Data SET SL_AVAIL = 0
 Trong đó sl_color = 'đen';

Bốn hàng trên thực tế được cập kèo chấp bóng đá hôm nay (SL1, SL2, SL3SL4). 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 kèo chấp bóng đá hôm nayo 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 chấp bóng đá hôm nay. 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 kèo chấp bóng đá hôm nayđã được thực thi trước, tất cả các hàng đã được đặt thành 0, vì vậy việc ghi kèo chấp bóng đá hôm nay kýChènsẽ không tìm thấy bất kỳ hàng nào trong đó0 < shoelace_data.sl_avail.

41.4.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 khả năng được đề cập là ai đó có thể cố gắng chạyChèn, Cập kèo chấp bóng đá hôm nayhoặcXóaTrên đó là để những cây truy vấn đó bị vứt bỏ. Vì vậy, chúng tôi có thể tạo các kèo chấp bóng đá hôm nay:

28226_28451

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 kèo chấp bóng đá hôm nay sẽ áp dụng các kèo chấp bóng đá hôm nay này. Vì các kèo chấp bóng đá hôm nay không có hành động và làThay kèo chấp bóng đá hôm nayo đó, Danh sách kết quả của các cây truy vấn sẽ trống và toàn bộ truy vấn sẽ không còn gì vì không còn gì để được tối ưu hóa hoặc thực thi sau khi hệ thống kèo chấp bóng đá hôm nay được thực hiện với nó.

Một cách tinh vi hơn để sử dụng hệ thống kèo chấp bóng đá hôm nay là tạo các kèo chấp bóng đá hôm nay 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ênShoelaceXem, chúng tôi tạo các kèo chấp bóng đá hôm nay sau:

29167_29827

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 chấp bóng đá hôm nay 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 chèn là:

Tạo kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay này hỗ trợ cảChènChèn trả vềTruy vấn trên chế độ xem - TheTrở vềmệnh đề chỉ đơn giản là bỏ qua choChèn.

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 kèo chấp bóng đá hôm nay thủ côngShoelaceXem mỗi lần. Thay kèo chấp bóng đá hôm nayo đó, 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 kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nayo bảngShoelace_arriveVớ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:

32049_32717

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

Chèn kèo chấp bóng đá hôm nayo Shoelace_ok Chọn * từ Shoelace_arrive;

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

32929_34014

Đó là một chặng đường dài từ mộtChèn ... 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 chấp bóng đá hôm nayo 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 chấp bóng đá hôm nay đầu tiênShoelace_ok_insđược áp dụng và biến điều này thành:

Cập kèo chấp bóng đá hôm nay 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ốcChèntrênShoelace_ok. Truy vấn viết lại này được chuyển đến hệ thống kèo chấp bóng đá hôm nay một lần nữa và kèo chấp bóng đá hôm nay được áp dụng thứ haishoelace_updSản xuất:

Cập kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nayo đókèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay trên đó và chúng ta nhận được:

Cập kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm naylog_shoelaceĐược áp dụng, sản xuất cây truy vấn thêm:

Chèn kèo chấp bóng đá hôm nayo 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 chấp bóng đá hôm nay hết kèo chấp bóng đá hôm nay và trả về các cây truy vấn được tạo.

37462_37531SQLCâu lệnh:

Chèn kèo chấp bóng đá hôm nayo 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;

38286_38496

Có một chút chi tiết hơi xấu. Nhìn kèo chấp bóng đá hôm nayo 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. 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 kèo chấp bóng đá hôm nay củaChènsẽ 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 kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay. 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 chấp bóng đá hôm nay và sức mạnh của nó. Giả sử 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 của bạn:

Chèn kèo chấp bóng đá hôm nayo các giá trị Shoelace ('SL9', 0, 'hồng', 35.0, 'inch', 0,0);
Chèn kèo chấp bóng đá hôm nayo các giá trị Shoelace ('SL10', 1000, 'Magenta', 40.0, 'inch', 0.0);

Chúng tôi muốn xem để kiểm tra xemShoelaceMụ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 AS
    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 kèo chấp bóng đá hôm nayo đó 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:

41317_41441

Kết quả là:

41506_42226

AXóaVề chế độ xem, với trình độ trình độ con mà trong tổng số 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 đơn để xóa dữ liệu được yêu cầu từ bảng thực tế.

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

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.