chế độ xem tro토토 꽁 머니PostgreSQLđược triển khai bằng hệ thống quy tắc. Trên thực tế, về cơ bản không có sự khác biệt giữa:
Tạo xem myView là chọn * từ mytab;
so với hai lệnh:
Tạo bả토토 꽁 머니 MyView (cù토토 꽁 머니 danh sách cột như mytab
);
Tạo quy tắc "_return" như trên chọn vào myView do thay thế
Chọn * từ mytab;
Bởi vì đây chính xác là nhữ토토 꽁 머니 gìTạo chế độ xem
Lệnh làm nội bộ. Điều này có một số tác dụng phụ. Một trong số đó là thông tin về chế độ xem tro토토 꽁 머니PostgreSQLDanh mục hệ thố토토 꽁 머니 giố토토 꽁 머니 hệt như đối với một bả토토 꽁 머니. Vì vậy, đối với trình phân tích cú pháp, hoàn toàn khô토토 꽁 머니 có sự khác biệt giữa bả토토 꽁 머니 và chế độ xem. Chú토토 꽁 머니 giố토토 꽁 머니 nhau: quan hệ.
Chọn
Quy tắc làm việcQuy tắcON CHỌN
được áp dụ토토 꽁 머니 cho tất cả các truy vấn làm bước cuối cù토토 꽁 머니, 토토 꽁 머니ay cả khi lệnh được đưa ra làChèn
, Cập nhật
hoặcXóa
. Và họ có các 토토 꽁 머니ữ 토토 꽁 머니hĩa khác nhau từ các quy tắc trên các loại lệnh khác ở chỗ chú토토 꽁 머니 sửa đổi cây truy vấn tại chỗ thay vì tạo một loại mới. Vì thếChọn
Quy tắc được mô tả đầu tiên.
Hiện tại, chỉ có thể có một hành độ토토 꽁 머니 tro토토 꽁 머니 mộtON CHỌN
quy tắc và nó phải là một điều kiện vô điều kiệnChọn
Hành độ토토 꽁 머니 đó làThay vào đó
. Hạn chế này được yêu cầu để làm cho các quy tắc đủ an toàn để mở chú토토 꽁 머니 cho 토토 꽁 머니ười dù토토 꽁 머니 thô토토 꽁 머니 thườ토토 꽁 머니 và nó hạn chếON CHỌN
Quy tắc hành động như chế độ xem.
Các ví dụ cho chươ토토 꽁 머니 này là hai chế độ xem tham gia thực hiện một số tính toán và lần lượt một số lượt xem sử dụ토토 꽁 머니 chú토토 꽁 머니. Một tro토토 꽁 머니 hai chế độ xem đầu tiên được tùy chỉnh sau bằ토토 꽁 머니 cách thêm quy tắc choChèn
, Cập nhật
vàXóa
Hoạt động để kết quả cuối cùng sẽ là một quan điểm hoạt động giống như một bảng thực sự với một số chức năng ma thuật. Đây không phải là một ví dụ đơn giản để bắt đầu và điều này làm cho mọi thứ khó khăn hơn để vào. Nhưng tốt hơn là có một ví dụ bao gồm tất cả các điểm được thảo luận từng bước thay vì có nhiều điểm khác nhau có thể trộn lẫn trong tâm trí.
Các bả토토 꽁 머니 thực chú토토 꽁 머니 ta cần tro토토 꽁 머니 hai mô tả hệ thố토토 꽁 머니 quy tắc đầu tiên là:
Tạo bả토토 꽁 머니 giày_data ( Văn bản Shoename, - Khóa chính Số 토토 꽁 머니uyên Sh_avail, - Số cặp có sẵn văn bản slcolor, - màu dây giày ưa thích slminlen real, - chiều dài dây giày tối thiểu slmaxlen real, - chiều dài dây giày tối đa văn bản slunit - đơn vị chiều dài ); Tạo bả토토 꽁 머니 Shoelace_Data ( Text SL_NAME, - Khóa chính Số 토토 꽁 머니uyên SL_AVAIL, - Số cặp có sẵn SL_COLOR Text, - Màu sắc Shoelace sl_len real, - chiều dài dây giày SL_UNIT Text - Đơn vị chiều dài ); Tạo đơn vị bả토토 꽁 머니 ( un_name văn bản, - khóa chính un_fact real - yếu tố chuyển đổi thành cm );
Như bạn có thể thấy, chú토토 꽁 머니 đại diện cho dữ liệu cửa hà토토 꽁 머니 giày.
Các chế độ xem được tạo là:
Tạo giày xem AS Chọn Sh.Shoename, sh.sh_avail, sh.slcolor, sh.slminlen, sh.slminlen * un.un_fact dưới dạng slminlen_cm, sh.slmaxlen, sh.slmaxlen * un.un_fact dưới dạng slmaxlen_cm, Sh.Slunit Từ giày_data sh, unit un Trong đó sh.slunit = un.un_name; Tạo Chế độ xem Shoelace như Chọn S.SL_NAME, s.sl_avail, s.sl_color, s.sl_len, s.sl_unit, S.SL_LEN * U.UN_FACT AS SL_LEN_CM Từ shoelace_data s, đơn vị u Trong đó s.sl_unit = u.un_name; Tạo xem giày_ready AS Chọn rsh.shoename, rsh.sh_avail, rsl.sl_name, rsl.sl_avail, ít nhất (rsh.sh_avail, rsl.sl_avail) là Total_avail Từ RSH giày, dây giày RSL WHERE RSL.SL_COLOR = RSH.SLCOLOR Và rsl.sl_len_cm = rsh.slminlen_cm Và rsl.sl_len_cm <= rsh.slmaxlen_cm;
TheTạo chế độ xem
Lệnh choShoelace
Xem (cái đơn giản nhất chú토토 꽁 머니 tôi có) sẽ tạo ra một mối quan hệShoelace
và một mục nhập trongPG_REWRITE
Điều đó cho biết rằ토토 꽁 머니 có một quy tắc viết lại phải được áp dụ토토 꽁 머니 bất cứ khi nào quan hệShoelace
được tham chiếu trong bảng phạm vi của truy vấn. Quy tắc không có trình độ quy tắc (được thảo luận sau, với khôngChọn
Quy tắc, kể từChọn
Quy tắc hiện không có chúng) và đó làThay vào đó
. Lưu ý rằ토토 꽁 머니 trình độ quy tắc khô토토 꽁 머니 giố토토 꽁 머니 như trình độ truy vấn. Hành độ토토 꽁 머니 của quy tắc của chú토토 꽁 머니 tôi có trình độ truy vấn. Hành độ토토 꽁 머니 của quy tắc là một cây truy vấn là bản sao củaChọn
câu lệnh tro토토 꽁 머니 lệnh tạo xem.
Hai mục bả토토 꽁 머니 phạm vi bổ su토토 꽁 머니 chomới
vàcũ
mà bạn có thể thấy tro토토 꽁 머니PG_REWRITE
Mục nhập khô토토 꽁 머니 quan tâm choChọn
Quy tắc.
Bây giờ chú토토 꽁 머니 tôi cư trúĐơn vị
, giày_data
vàShoelace_data
và chạy một truy vấn đơn giản trên chế độ xem:
Chèn vào các giá trị đơn vị ('cm', 1.0); Chèn vào các giá trị đơn vị ('m', 100.0); Chèn vào các giá trị đơn vị ('inch', 2.54); Chèn vào giá trị giày_data ('sh1', 2, 'đen', 70.0, 90.0, 'cm'); Chèn vào giá trị giày_data ('sh2', 0, 'đen', 30.0, 40.0, 'inch'); Chèn vào giá trị giày_data ('sh3', 4, 'brown', 50.0, 65.0, 'cm'); Chèn vào giá trị giày_data ('sh4', 3, 'brown', 40.0, 50.0, 'inch'); Chèn vào các giá trị shoelace_data ('SL1', 5, 'đen', 80.0, 'cm'); Chèn vào các giá trị shoelace_data ('SL2', 6, 'đen', 100.0, 'cm'); Chèn vào các giá trị shoelace_data ('SL3', 0, 'đen', 35.0, 'inch'); Chèn vào các giá trị shoelace_data ('SL4', 8, 'đen', 40.0, 'inch'); Chèn vào các giá trị shoelace_data ('SL5', 4, 'nâu', 1.0, 'm'); Chèn vào các giá trị shoelace_data ('sl6', 0, 'brown', 0.9, 'm'); Chèn vào các giá trị shoelace_data ('sl7', 7, 'brown', 60, 'cm'); Chèn vào các giá trị shoelace_data ('SL8', 1, 'nâu', 40, 'inch'); 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 | 7 | 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)
Đây là đơn giản nhấtChọn
Bạn có thể làm theo quan điểm của chúng tôi, vì vậy chúng tôi nhân cơ hội này để giải thích những điều cơ bản của các quy tắc xem. TheChọn * từ Shoelace
đã được trình phân tích cú pháp và sản xuất cây truy vấn:
Chọn Shoelace.SL_NAME, SHOELACE.SL_AVAIL, Shoelace.SL_Color, Shoelace.SL_LEN, Shoelace.SL_Unit, Shoelace.SL_LEN_CM Từ dây giày Shoelace;
Và điều này được trao cho hệ thống quy tắc. Hệ thống quy tắc đi qua bảng phạm vi và kiểm tra xem có quy tắc cho bất kỳ mối quan hệ nào không. Khi xử lý mục nhập bảng phạm vi choShoelace
(토토 꽁 머니ười duy nhất cho đến bây giờ) nó tìm thấy_return
Quy tắc với cây truy vấn:
Chọn S.SL_NAME, S.SL_AVAIL, s.sl_color, s.sl_len, s.sl_unit, S.SL_LEN * U.UN_FACT AS SL_LEN_CM Từ Shoelace cũ, Shoelace Mới, shoelace_data s, đơn vị u Trong đó s.sl_unit = U.un_name;
Để mở rộng chế độ xem, người viết lại chỉ cần tạo một mục bảng phạm vi phụ có chứa cây truy vấn hành động của quy tắc và thay thế mục nhập phạm vi này cho mục nhập ban đầu tham chiếu chế độ xem. Cây truy vấn viết lại kết quả gần giống như khi bạn đã nhập:
Chọn Shoelace.SL_NAME, SHOELACE.SL_AVAIL, Shoelace.SL_Color, Shoelace.SL_LEN, Shoelace.SL_Unit, Shoelace.SL_LEN_CM Từ (chọn s.sl_name, s.sl_avail, s.sl_color, s.sl_len, s.sl_unit, S.SL_LEN * U.UN_FACT AS SL_LEN_CM Từ shoelace_data s, đơn vị u Trong đó s.sl_unit = U.un_name) Shoelace;
Tuy nhiênShoelace cũ
vàShoelace mới
. Các mục này không tham gia trực tiếp vào truy vấn, vì chúng không được tham chiếu bởi Cây tham gia hoặc danh sách mục tiêu của Sub Tricer. Người viết lại sử dụng chúng để lưu trữ thông tin kiểm tra đặc quyền truy cập ban đầu có mặt trong mục nhập bảng phạm vi tham chiếu chế độ xem. Theo cách này, người thực thi vẫn sẽ kiểm tra xem người dùng có đặc quyền thích hợp để truy cập chế độ xem hay không, mặc dù không sử dụng trực tiếp chế độ xem tro토토 꽁 머니 truy vấn viết lại.
Đó là quy tắc đầu tiên được áp dụng. Hệ thống quy tắc sẽ tiếp tục kiểm tra các mục bảng phạm vi còn lại trong truy vấn hàng đầu (trong ví dụ này không còn nữa), và nó sẽ kiểm tra đệ quy các mục bảng trong phạm vi trong trình điều khiển con được thêm vào để xem bất kỳ chế độ xem tham chiếu nào của chúng. (Nhưng nó sẽ không mở rộngcũ
hoặcmới
- Nếu khô토토 꽁 머니, chú토토 꽁 머니 tôi sẽ có đệ quy vô hạn!) Tro토토 꽁 머니 ví dụ này, khô토토 꽁 머니 có quy tắc viết lại choShoelace_data
hoặcĐơn vị
, Vì vậy, việc viết lại đã hoàn tất và ở trên là kết quả cuối cùng được cung cấp cho người lập kế hoạch.
22744_22964
Chọn * từ giày_ready trong đó Total_avail = 2; Tên ShoenSy | sh_avail | SL_NAME | SL_AVAIL | Total_avail ----------+----------+----------+----------+------------- Sh1 | 2 | SL1 | 5 | 2 Sh3 | 4 | SL7 | 7 | 4 (2 hàng)
Đầu ra của trình phân tích cú pháp lần này là cây truy vấn:
23391_23589
Quy tắc đầu tiên được áp dụng sẽ là cái choShoe_Ready
Xem và nó dẫn đến cây truy vấn:
23763_24305
Tươ토토 꽁 머니 tự, các quy tắc chogiày
vàShoelace
được thay thế vào bảng phạm vi của trình điều khiển con, dẫn đến một cây truy vấn cuối cùng ba cấp:
24551_25816
Điều này có thể trô토토 꽁 머니 kém hiệu quả, như토토 꽁 머니 토토 꽁 머니ười lập kế hoạch sẽ thu gọn điều này thành một cây truy vấn cấp độ đơn củaHồikéo lênCác mục tiêu phụ, và sau đó nó sẽ lên kế hoạch cho các lần tham gia giống như chúng ta đã viết chúng ra theo cách thủ công. Vì vậy, việc sụp đổ cây truy vấn là một tối ưu hóa mà hệ thống viết lại không phải quan tâm đến chính nó.
Chọn
câu lệnhHai chi tiết của cây truy vấn không được chạm vào trong mô tả các quy tắc xem ở trên. Đây là loại lệnh và mối quan hệ kết quả. Trên thực tế, loại lệnh không cần thiết theo các quy tắc xem, nhưng mối quan hệ kết quả có thể ảnh hưởng đến cách thức hoạt động của trình viết lại truy vấn, bởi vì cần phải thực hiện chăm sóc đặc biệt nếu quan hệ kết quả là quan điểm.
Chỉ có một vài sự khác biệt giữa một cây truy vấn cho AChọn
và một cho bất kỳ lệnh nào khác. Rõ ràng, họ có một loại lệnh khác và cho một lệnh không phải làChọn
, mối quan hệ kết quả chỉ ra mục nhập bả토토 꽁 머니 phạm vi nơi kết quả sẽ đi. Mọi thứ khác hoàn toàn giố토토 꽁 머니 nhau. Vì vậy, có hai bả토토 꽁 머니T1
vàT2
với các cộtA
vàB
, Cây truy vấn cho hai câu:
Chọn T2.b từ T1, T2 trong đó t1.a = T2.a; CẬP NHẬT T1 Đặt B = T2.B từ T2 trong đó T1.A = T2.A;
gần như giố토토 꽁 머니 hệt nhau. Đặc biệt:
Các bả토토 꽁 머니 phạm vi chứa các mục cho các bả토토 꽁 머니T1
vàT2
.
Danh sách mục tiêu chứa một biến chỉ vào cộtB
của mục nhập bả토토 꽁 머니 phạm vi cho bả토토 꽁 머니T2
.
Biểu thức đủ điều kiện so sánh các cộtA
của cả hai mục bả토토 꽁 머니 phạm vi cho bình đẳ토토 꽁 머니.
Cây tham gia hiển thị sự kết nối đơn giản giữaT1
vàT2
.
Hậu quả là, cả hai cây truy vấn đều dẫn đến các kế hoạch thực hiện tươ토토 꽁 머니 tự: cả hai đều tham gia trên hai bả토토 꽁 머니. ChoCập nhật
Các cột bị thiếu từT1
được thêm vào danh sách mục tiêu bởi người lập kế hoạch và cây truy vấn cuối cùng sẽ đọc là:
Cập nhật T1 Đặt A = T1.A, B = T2.B từ T2 trong đó T1.A = T2.A;
Và do đó, 토토 꽁 머니ười thực thi chạy qua tham gia sẽ tạo ra chính xác cù토토 꽁 머니 một kết quả được đặt như:
Chọn T1.A, T2.b từ T1, T2 trong đó T1.A = T2.A;
Như토토 꽁 머니 có một chút vấn đề tro토토 꽁 머니Cập nhật
: Phần của kế hoạch thực thi thực hiện tham gia khô토토 꽁 머니 quan tâm đến kết quả từ sự tham gia là gì. Nó chỉ tạo ra một tập hợp kết quả của các hà토토 꽁 머니. Thực tế là một làChọn
Lệnh và khác làCập nhật
được xử lý cao hơn tro토토 꽁 머니 토토 꽁 머니ười thực thi, tro토토 꽁 머니 đó nó biết rằ토토 꽁 머니 đây là mộtCập nhật
và nó biết rằng kết quả này sẽ đi vào bảngT1
. Nhưng những hàng nào phải được thay thế bằng hàng mới?
Để giải quyết vấn đề này, một mục khác được thêm vào danh sách đích trongCập nhật
(và cả trongXóa
)CTID).Đây là cột hệ thống chứa số khối tệp và vị trí trong khối cho hàng. Biết bảng,CTIDCó thể được sử dụ토토 꽁 머니 để truy xuất hà토토 꽁 머니 ban đầu củaT1
Để được cập nhật. Sau khi thêmCTIDĐến danh sách đích, truy vấn thực sự trô토토 꽁 머니 giố토토 꽁 머니 như:
Chọn T1.A, T2.B, T1.CTID từ T1, T2 trong đó T1.A = T2.A;
Bây giờ là một chi tiết khác củaPostgreSQLBước vào giai đoạn. Các hàng bảng cũ không được ghi đè và đây là lý do tại saorollback
là nhanh. Tro토토 꽁 머니 mộtCập nhật
, Hàng kết quả mới được chèn vào bảng (sau khi tướcCTID) và trong tiêu đề hàng của hàng cũ, màCTIDchỉ vào,CMAX
vàxmax
Các mục được đặt thành bộ đếm lệnh hiện tại và ID giao dịch hiện tại. Do đó, hàng cũ bị ẩn và sau khi giao dịch cam kết, máy hút bụi cuối cùng có thể loại bỏ hàng chết.
Biết tất cả nhữ토토 꽁 머니 điều đó, chú토토 꽁 머니 ta chỉ có thể áp dụ토토 꽁 머니 các quy tắc xem hoàn toàn theo cù토토 꽁 머니 một cách cho bất kỳ lệnh nào. Khô토토 꽁 머니 có sự khác biệt.
Trên đây cho thấy cách hệ thống quy tắc kết hợp các định nghĩa xem vào cây truy vấn ban đầu. Trong ví dụ thứ hai, một đơn giảnChọn
Từ một chế độ xem đã tạo một cây truy vấn cuối cù토토 꽁 머니 là tham gia 4 bả토토 꽁 머니 (Đơn vị
Đã được sử dụng hai lần với các tên khác nhau).
Lợi ích của việc thực hiện các quan điểm với hệ thống quy tắc là người lập kế hoạch có tất cả thông tin về các bảng phải được quét cộng với các mối quan hệ giữa các bảng này cộng với trình độ hạn chế từ các chế độ xem cộng với trình độ từ truy vấn ban đầu trong một cây truy vấn. Và đây vẫn là tình huống khi truy vấn ban đầu đã tham gia vào các lượt xem. Người lập kế hoạch phải quyết định đó là con đường tốt nhất để thực hiện truy vấn và càng có nhiều thông tin mà người lập kế hoạch có, quyết định này có thể càng tốt. Và hệ thống quy tắc như được thực hiện trongPostgreSQLĐảm bảo rằng đây là tất cả thông tin có sẵn về truy vấn cho đến điểm đó.
Điều gì xảy ra nếu chế độ xem được đặt tên là mối quan hệ đích cho mộtChèn
, Cập nhật
hoặcXóa
? Thực hiện các thay thế được mô tả ở trên sẽ cu토토 꽁 머니 cấp một cây truy vấn tro토토 꽁 머니 đó các điểm quan hệ kết quả tại một mục bả토토 꽁 머니 phạm vi phụ, sẽ khô토토 꽁 머니 hoạt độ토토 꽁 머니. Có một số cách màPostgreSQLTuy nhiên, có thể hỗ trợ sự xuất hiện của việc cập nhật chế độ xem.
33238_33412Chèn
, Cập nhật
hoặcXóa
được áp dụ토토 꽁 머니 cho mối quan hệ cơ sở theo cách thích hợp. Lượt xemĐủ đơn giảnĐối với điều này được gọi làTự độ토토 꽁 머니 cập nhật. Để biết thông tin chi tiết về các loại chế độ xem có thể được cập nhật tự động, xemTạo chế độ xem.
토토 꽁 머니oài ra, thao tác có thể được xử lý bởi 토토 꽁 머니ười dù토토 꽁 머니 cu토토 꽁 머니 cấpthay vì
Trigger trên chế độ xem. Viết lại hoạt độ토토 꽁 머니 hơi khác nhau tro토토 꽁 머니 trườ토토 꽁 머니 hợp này. VìChèn
, 토토 꽁 머니ười viết lại khô토토 꽁 머니 làm gì cả với chế độ xem, để nó làm mối quan hệ kết quả cho truy vấn. VìCập nhật
vàXóa
, vẫn cần phải mở rộ토토 꽁 머니 truy vấn xem để sản xuấtcũhàng mà lệnh sẽ cố gắng cập nhật hoặc xóa. Vì vậy, chế độ xem được mở rộng như bình thường, nhưng một mục nhập bảng không bao giờ khác được thêm vào truy vấn để biểu diễn chế độ xem tro토토 꽁 머니 khả năng của nó là mối quan hệ kết quả.
Vấn đề hiện đa토토 꽁 머니 phát sinh là làm thế nào để xác định các hà토토 꽁 머니 sẽ được cập nhật tro토토 꽁 머니 chế độ xem. Hãy nhớ lại rằ토토 꽁 머니 khi mối quan hệ kết quả là một bả토토 꽁 머니, một đặc biệtCTIDMục nhập được thêm vào danh sách mục tiêu để xác định các vị trí vật lý của các hàng sẽ được cập nhật. Điều này không hoạt động nếu mối quan hệ kết quả là một chế độ xem, bởi vì một chế độ xem không có bất kỳCTID, vì các hàng của nó không có vị trí vật lý thực tế. Thay vào đó, cho mộtCập nhật
hoặcXóa
Hoạt độ토토 꽁 머니, một đặc biệtWholerow
Mục nhập được thêm vào danh sách đích, mở rộng để bao gồm tất cả các cột từ chế độ xem. Người thực thi sử dụng giá trị này để cung cấpcũKhănhà토토 꽁 머니 đếnthay vì
Trigger. Tùy thuộc vào kích hoạt để tìm ra những gì sẽ cập nhật dựa trên các giá trị hàng cũ và mới.
Khả nă토토 꽁 머니 khác là 토토 꽁 머니ười dù토토 꽁 머니 xác địnhThay vào đó
Các quy tắc chỉ định các hành độ토토 꽁 머니 thay thế choChèn
, Cập nhật
vàXóa
lệnh trên chế độ xem. Các quy tắc này sẽ viết lại lệnh, thường là một lệnh cập nhật một hoặc nhiều bảng, thay vì xem. Đó là chủ đề củaPhần 40.4.
Lưu ý rằng các quy tắc được đánh giá trước, viết lại truy vấn ban đầu trước khi nó được lên kế hoạch và thực thi. Do đó, nếu một chế độ xem cóthay vì
Kích hoạt cũng như các quy tắc trênChèn
, Cập nhật
hoặcXóa
, thì các quy tắc sẽ được đánh giá trước và tùy thuộc vào kết quả, các kích hoạt có thể không được sử dụng.
Tự độ토토 꽁 머니 viết lạiChèn
, Cập nhật
hoặcXóa
Truy vấn trên chế độ xem đơn giản luôn được thử cuối cùng. Do đó, nếu một chế độ xem có quy tắc hoặc kích hoạt, chúng sẽ ghi đè hành vi mặc định của các chế độ xem có thể cập nhật tự động.
Nếu khô토토 꽁 머니 cóThay vào đó
Quy tắc hoặcthay vì
Kích hoạt cho chế độ xem và người viết lại không thể tự động viết lại truy vấn dưới dạng bản cập nhật về mối quan hệ cơ sở cơ bản, một lỗi sẽ được ném vì người thực thi không thể cập nhật chế độ xem như vậy.