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
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiệ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.1. Tổng quan về hành vi kích kèo chấp bóng đá hôm nay#

Trình kích kèo chấp bóng đá hôm nay là một đặc điểm kỹ thuật rằng cơ sở dữ liệu sẽ tự động thực thi một chức năng cụ thể bất cứ khi nào một loại kèo chấp bóng đá hôm nay động nhất định được thực hiện. Trình kích kèo chấp bóng đá hôm nay có thể được gắn vào các bảng (được phân vùng hoặc không), chế độ xem và bảng nước ngoài.

Trên bảng và bảng nước ngoài, các kích kèo chấp bóng đá hôm nay có thể được xác định để thực thi trước hoặc sau khiChèn, Cập nhậthoặcXóakèo chấp bóng đá hôm nay động, một lần mỗi hàng được sửa đổi hoặc một lần mỗiSQLcâu lệnh.Cập nhậtTrình kích kèo chấp bóng đá hôm nay chỉ có thể được đặt để bắn nếu các cột nhất định được đề cập trongsetmệnh đề củaCập nhậtTuyên bố. Triggers cũng có thể bắn chocắt ngắnCâu lệnh. Nếu sự kiện kích kèo chấp bóng đá hôm nay xảy ra, chức năng của bộ kích kèo chấp bóng đá hôm nay được gọi vào thời điểm thích hợp để xử lý sự kiện.

Trên lượt xem, các kích kèo chấp bóng đá hôm nay có thể được xác định để thực thi thay vìChèn, Cập nhậthoặcXóakèo chấp bóng đá hôm nay động. Như làthay vìTrình kích kèo chấp bóng đá hôm nay được bắn một lần cho mỗi hàng cần được sửa đổi trong chế độ xem. Trách nhiệm của chức năng của Trigger là thực hiện các sửa đổi cần thiết cho (các) bảng cơ sở bên dưới của chế độ xem và, khi thích hợp, trả về hàng sửa đổi khi nó sẽ xuất hiện trong chế độ xem.SQLcâu lệnh, trước hoặc sauChèn, Cập nhậthoặcXóakèo chấp bóng đá hôm nay động. Tuy nhiên, các kích kèo chấp bóng đá hôm nay như vậy chỉ được bắn nếu cũng có mộtthay vìTrigger trên chế độ xem. Mặt khác, bất kỳ câu lệnh nào nhắm mục tiêu vào chế độ xem phải được viết lại thành một câu lệnh ảnh hưởng đến (các) bảng cơ sở cơ bản của nó, và sau đó các kích kèo chấp bóng đá hôm nay sẽ được bắn là những yếu tố được gắn vào (các) bảng cơ sở.

Hàm Trigger phải được xác định trước khi có thể tạo trình kích kèo chấp bóng đá hôm nay. Hàm kích kèo chấp bóng đá hôm nay phải được khai báo là một hàm không có đối số và loại trả vềTrigger. (Hàm kích kèo chấp bóng đá hôm nay nhận được đầu vào của nó thông qua một thông số đặc biệtTriggerDataCấu trúc, không ở dạng đối số chức năng thông thường.)

Một khi chức năng kích kèo chấp bóng đá hôm nay phù hợp đã được tạo, bộ kích kèo chấp bóng đá hôm nay được thiết lập vớiTạo Trigger. Có thể sử dụng chức năng kích kèo chấp bóng đá hôm nay tương tự cho nhiều trình kích kèo chấp bóng đá hôm nay.

PostgreSQLcung cấp cảmỗi hàngTriggers vàmỗi câu chuyệnTriggers. Với trình kích kèo chấp bóng đá hôm nay trên mỗi hàng, hàm kích kèo chấp bóng đá hôm nay được gọi một lần cho mỗi hàng bị ảnh hưởng bởi câu lệnh đã kích kèo chấp bóng đá hôm nay kích kèo chấp bóng đá hôm nay.cấp độ hàngTriggers vàCấp độ tuyên bốKích kèo chấp bóng đá hôm nay, tương ứng. Trình kích kèo chấp bóng đá hôm nay trêncắt ngắnchỉ có thể được xác định ở cấp độ tuyên bố, không phải trên mỗi hàng.

Triggers cũng được phân loại theo liệu chúng có bắntrước, sauhoặcthay vìkèo chấp bóng đá hôm nay động. Chúng được gọi làtrướcTriggers,sauTriggers vàthay vìKích kèo chấp bóng đá hôm nay tương ứng. Cấp độ tuyên bốtrướcKích kèo chấp bóng đá hôm nay tự nhiên bắn trước khi tuyên bố bắt đầu làm bất cứ điều gì, trong khi cấp độ tuyên bốsauKích kèo chấp bóng đá hôm nay lửa ở cuối câu lệnh. Các loại kích kèo chấp bóng đá hôm nay này có thể được xác định trên bảng, chế độ xem hoặc bảng nước ngoài.trướcKích kèo chấp bóng đá hôm nay lửa ngay trước khi một hàng cụ thể được vận hành, trong khi cấp độ hàngsauKích kèo chấp bóng đá hôm nay lửa ở cuối câu lệnh (nhưng trước bất kỳ cấp độ nàosauTriggers). Các loại kích kèo chấp bóng đá hôm nay này chỉ có thể được xác định trên bảng và bảng nước ngoài, không phải chế độ xem.thay vìKích kèo chấp bóng đá hôm nay chỉ có thể được xác định trên các lượt xem và chỉ ở cấp độ hàng; Chúng bắn ngay lập tức khi mỗi hàng trong chế độ xem được xác định là cần phải được vận hành.

Việc thực hiện mộtsauTrigger có thể được hoãn lại đến cuối giao dịch, thay vì kết thúc câu lệnh, nếu nó được định nghĩa làKích kèo chấp bóng đá hôm nay ràng buộc. Trong mọi trường hợp, một kích kèo chấp bóng đá hôm nay được thực thi như một phần của cùng một giao dịch với câu lệnh đã kích kèo chấp bóng đá hôm nay nó, vì vậy nếu câu lệnh hoặc trình kích kèo chấp bóng đá hôm nay gây ra lỗi, các hiệu ứng của cả hai sẽ được quay lại.bảo mật xác định, trong trường hợp đó nó sẽ chạy với tư cách là chủ sở hữu chức năng.

Nếu mộtChènchứatrên xung đột do cập nhậtmệnh đề, có thể cho cấp độ hàngtrước Chènvà sau đótrước Cập nhậtTrình kích kèo chấp bóng đá hôm nay được thực thi trên các hàng được kích kèo chấp bóng đá hôm nay. Các tương tác như vậy có thể phức tạp nếu các kích kèo chấp bóng đá hôm nay không phải là idempotent vì thay đổi được thực hiện bởitrước ChènTriggers sẽ được nhìn thấy bởitrước Cập nhậtTriggers, bao gồm các thay đổi thànhLoại trừCột.

Lưu ý rằng cấp độ tuyên bốCập nhậtTriggers được thực thi khitrên xung đột do cập nhậtđược chỉ định, bất kể có bất kỳ hàng nào bị ảnh hưởng bởiCập nhật(và bất kể thay thếCập nhậtĐường dẫn đã từng được thực hiện). MỘTChènvớitrên xung đột do cập nhậtmệnh đề sẽ thực thi cấp độ tuyên bốtrước ChènTrình kích kèo chấp bóng đá hôm nay đầu tiên, sau đó cấp độ câu lệnhtrước Cập nhậtTriggers, theo sau là cấp độ tuyên bốsau Cập nhậtTriggers và cuối cùng là cấp độ tuyên bốsau ChènTriggers.

Một tuyên bố nhắm mục tiêu bảng cha mẹ trong hệ thống phân cấp hoặc kế thừa không gây ra các yếu tố kích kèo chấp bóng đá hôm nay cấp độ tuyên bố của các bảng con bị ảnh hưởng; Chỉ có các kích kèo chấp bóng đá hôm nay cấp độ tuyên bố của bảng cha mẹ được bắn.

Nếu mộtCập nhậtTrên bảng được phân vùng khiến một hàng di chuyển sang phân vùng khác, nó sẽ được thực hiện dưới dạngXóaTừ phân vùng ban đầu theo sau làChènvào phân vùng mới. Trong trường hợp này, tất cả các cấp hàngtrước Cập nhậtTriggers và tất cả các cấp hàngtrước XóaTriggers được bắn vào phân vùng ban đầu. Sau đó tất cả các cấp hàngtrước ChènTriggers được bắn trên phân vùng đích. Khả năng kết quả đáng ngạc nhiên nên được xem xét khi tất cả các yếu tố kích kèo chấp bóng đá hôm nay này ảnh hưởng đến hàng được di chuyển.sau hàngTriggers có liên quan,sau Xóasau ChènKích kèo chấp bóng đá hôm nay được áp dụng; Nhưngsau Cập nhậtTriggers không được áp dụng vìCập nhậtđã được chuyển đổi thành AXóavà mộtChèn. Theo như các trình kích kèo chấp bóng đá hôm nay cấp độ tuyên bố có liên quan, không cóXóahoặcChènKích kèo chấp bóng đá hôm nay được bắn, ngay cả khi chuyển động hàng xảy ra; ChỉCập nhậtTrình kích kèo chấp bóng đá hôm nay được xác định trên bảng đích được sử dụng trongCập nhậtTuyên bố sẽ bị sa thải.

Không có trình kích kèo chấp bóng đá hôm nay riêng biệt được xác định choHợp nhất. Thay vào đó, cấp độ câu lệnh hoặc cấp độ hàngCập nhật, XóaChènTrình kích kèo chấp bóng đá hôm nay được bắn tùy thuộc vào (đối với trình kích kèo chấp bóng đá hôm nay cấp câu lệnh) Những hành động nào được chỉ định trongHợp nhấtTruy vấn và (đối với các kích kèo chấp bóng đá hôm nay cấp độ hàng) Những hành động nào được thực hiện.

trong khi chạy AHợp nhấtlệnh, cấp độ tuyên bốtrướcsauTriggers được bắn cho các sự kiện được chỉ định trong các hành động củaHợp nhấtLệnh, không phân biệt hành động có được thực hiện cuối cùng hay không. Điều này giống như mộtCập nhậtTuyên bố cập nhật không có hàng, nhưng các kích kèo chấp bóng đá hôm nay cấp câu lệnh được bắn. Các kích kèo chấp bóng đá hôm nay cấp hàng chỉ được bắn khi một hàng thực sự được cập nhật, chèn hoặc xóa.

Các chức năng kích kèo chấp bóng đá hôm nay được gọi bởi các kích kèo chấp bóng đá hôm nay trên mỗi câu chuyện phải luôn luôn quay lạinull. Các chức năng kích kèo chấp bóng đá hôm nay được gọi bởi các kích kèo chấp bóng đá hôm nay trên mỗi hàng có thể trả về một hàng bảng (giá trị của loại) cho người thực thi gọi điện, nếu họ chọn. Trình kích kèo chấp bóng đá hôm nay cấp hàng được bắn trước khi một thao tác có các lựa chọn sau:

  • Nó có thể trả vềnullĐể bỏ qua kèo chấp bóng đá hôm nay động cho hàng hiện tại. Điều này hướng dẫn người thực thi không thực hiện thao tác cấp hàng đã gọi trình kích kèo chấp bóng đá hôm nay (chèn, sửa đổi hoặc xóa một hàng bảng cụ thể).

  • cho cấp độ hàngChènCập nhậtChỉ kích kèo chấp bóng đá hôm nay, hàng được trả về trở thành hàng sẽ được chèn hoặc sẽ thay thế hàng được cập nhật. Điều này cho phép chức năng kích kèo chấp bóng đá hôm nay sửa đổi hàng được chèn hoặc cập nhật.

cấp độ hàngtrướcTrình kích kèo chấp bóng đá hôm nay không có ý định gây ra một trong những hành vi này phải cẩn thận để trả lại như kết quả của nó cùng một hàng được thông qua (nghĩa lànewhàng choChènCập nhậtTriggers, Thehàng choXóaTriggers).

cấp độ hàngthay vìTrigger nên trả vềnullĐể chỉ ra rằng nó không sửa đổi bất kỳ dữ liệu nào từ các bảng cơ sở bên dưới của chế độ xem hoặc nó sẽ trả về hàng chế độ xem được truyền trong (mớihàng choChènCập nhậtkèo chấp bóng đá hôm nay động hoặchàng choXóakèo chấp bóng đá hôm nay động). Một giá trị trả về nonnull được sử dụng để báo hiệu rằng bộ kích kèo chấp bóng đá hôm nay thực hiện các sửa đổi dữ liệu cần thiết trong chế độ xem.ChènCập nhậtChỉ kèo chấp bóng đá hôm nay động, bộ kích kèo chấp bóng đá hôm nay có thể sửa đổimớiHàng trước khi trả lại. Điều này sẽ thay đổi dữ liệu được trả về bởiChèn trả vềhoặcCập nhật trả vềvà rất hữu ích khi chế độ xem sẽ không hiển thị chính xác cùng một dữ liệu được cung cấp.

23097_23199null.

Một số cân nhắc áp dụng cho các cột được tạo.Các cột được tạo được lưu trữ được tính toán sautrướcTriggers và trướcsauTriggers. Do đó, giá trị được tạo có thể được kiểm tra trongsauTriggers. TRONGtrướcTriggers, TheHàng chứa giá trị được tạo cũ, như người ta sẽ mong đợi, nhưngmớiHàng chưa chứa giá trị được tạo mới và không nên được truy cập. Trong giao diện ngôn ngữ C, nội dung của cột không được xác định tại thời điểm này;newhàng trong ATrướcTrigger. Thay đổi giá trị của cột được tạo trongtrướcTrigger bị bỏ qua và sẽ bị ghi đè. Các cột được tạo ảo không bao giờ được tính toán khi kích kèo chấp bóng đá hôm nay lửa.

Nếu có nhiều hơn một kích kèo chấp bóng đá hôm nay được xác định cho cùng một sự kiện trên cùng một mối quan hệ, các kích kèo chấp bóng đá hôm nay sẽ được bắn theo thứ tự bảng chữ cái bằng tên kích kèo chấp bóng đá hôm nay. Trong trường hợp củatrướcthay vìTrình kích kèo chấp bóng đá hôm nay, hàng có thể được sửa đổi được trả về bởi mỗi kích kèo chấp bóng đá hôm nay trở thành đầu vào cho trình kích kèo chấp bóng đá hôm nay tiếp theo. Nếu bất kỳTrướchoặcthay vìTrình kích kèo chấp bóng đá hôm nay trả vềnull, kèo chấp bóng đá hôm nay động bị bỏ rơi cho hàng đó và các kích kèo chấp bóng đá hôm nay tiếp theo không được bắn (cho hàng đó).

Một định nghĩa kích kèo chấp bóng đá hôm nay cũng có thể chỉ định BooleanKhiĐiều kiện sẽ được kiểm tra để xem liệu kích kèo chấp bóng đá hôm nay có nên được bắn hay không. Trong các kích kèo chấp bóng đá hôm nay cấp hàngkhiĐiều kiện có thể kiểm tra các giá trị cũ và/hoặc mới của các cột của hàng. (Trình kích kèo chấp bóng đá hôm nay cấp câu tuyên bố cũng có thể cóKhiĐiều kiện, mặc dù tính năng này không hữu ích cho chúng.) Trong AtrướcTrigger, TheKhiĐiều kiện được đánh giá ngay trước khi chức năng hoặc sẽ được thực thi, vì vậy sử dụngkhikhông khác biệt về mặt vật chất so với việc kiểm tra cùng một điều kiện ở đầu hàm kích kèo chấp bóng đá hôm nay. Tuy nhiên, trong mộtsauTrigger, TheKhiĐiều kiện được đánh giá ngay sau khi cập nhật hàng xảy ra và nó xác định liệu một sự kiện có được xếp hàng để kích kèo chấp bóng đá hôm nay kích kèo chấp bóng đá hôm nay ở cuối câu lệnh hay không. Vì vậy, khi mộtsauTrigger'sKhiĐiều kiện không trả về true, không cần thiết phải xếp hàng một sự kiện cũng như không tìm nạp lại hàng ở cuối câu lệnh. Điều này có thể dẫn đến tăng tốc đáng kể trong các câu lệnh sửa đổi nhiều hàng, nếu kích kèo chấp bóng đá hôm nay chỉ cần được bắn vào một vài hàng.thay vìTriggers không hỗ trợ​​KhiĐiều kiện.

Thông thường, cấp độ hàngtrướcTrình kích kèo chấp bóng đá hôm nay được sử dụng để kiểm tra hoặc sửa đổi dữ liệu sẽ được chèn hoặc cập nhật. Ví dụ: AtrướcTrigger có thể được sử dụng để chèn thời gian hiện tại vào ADấu thời gianCột hoặc để kiểm tra xem hai phần tử của hàng có nhất quán không. Cấp độ hàngsauTrình kích kèo chấp bóng đá hôm nay được sử dụng một cách hợp lý nhất để tuyên truyền các bản cập nhật cho các bảng khác hoặc thực hiện kiểm tra tính nhất quán đối với các bảng khác. Lý do cho sự phân công lao động này là mộtsauTrigger có thể chắc chắn rằng nó đang nhìn thấy giá trị cuối cùng của hàng, trong khi AtrướcTrigger không thể; Có thể có kháctrướcKích kèo chấp bóng đá hôm nay bắn sau nó. Nếu bạn không có lý do cụ thể để thực hiện kích kèo chấp bóng đá hôm naytrướchoặcsau, ThetrướcTrường hợp hiệu quả hơn, vì thông tin về kèo chấp bóng đá hôm nay động không phải được lưu cho đến khi kết thúc câu lệnh.

Nếu hàm kích kèo chấp bóng đá hôm nay thực thi các lệnh SQL thì các lệnh này có thể kích kèo chấp bóng đá hôm nay lại kích kèo chấp bóng đá hôm nay. Điều này được gọi là kích kèo chấp bóng đá hôm nay xếp tầng.ChènTrigger có thể thực thi lệnh chèn một hàng bổ sung vào cùng một bảng, gây raChènTrình kích kèo chấp bóng đá hôm nay sẽ được bắn lại. Trách nhiệm của lập trình viên kích kèo chấp bóng đá hôm nay là tránh đệ quy vô hạn trong các tình huống như vậy.

28204_28350Cập nhậthoặcXóaCác lệnh trên bảng tham chiếu. Cụ thể, bất kỳ yếu tố kích kèo chấp bóng đá hôm nay nào tồn tại trên bảng tham chiếu sẽ được bắn cho những thay đổi đó.

Khi một kích kèo chấp bóng đá hôm nay được xác định, các đối số có thể được chỉ định cho nó. Mục đích của việc bao gồm các đối số trong định nghĩa kích kèo chấp bóng đá hôm nay là cho phép các kích kèo chấp bóng đá hôm nay khác nhau có yêu cầu tương tự để gọi cùng một hàm.ChènCác sự kiện trên bất kỳ bảng nào có cột phù hợp, để tự động theo dõi việc tạo các bản ghi trong bảng giao dịch chẳng hạn. Nó cũng có thể được sử dụng để theo dõi các sự kiện cập nhật cuối cùng nếu được xác định làCập nhậtTrigger.

Mỗi ngôn ngữ lập trình hỗ trợ kích kèo chấp bóng đá hôm nay có phương pháp riêng để cung cấp dữ liệu đầu vào kích kèo chấp bóng đá hôm nay có sẵn cho chức năng kích kèo chấp bóng đá hôm nay. Dữ liệu đầu vào này bao gồm loại sự kiện kích kèo chấp bóng đá hôm nay (ví dụ:ChènhoặcCập nhật) cũng như bất kỳ đối số nào được liệt kê trongTạo Trigger. Đối với trình kích kèo chấp bóng đá hôm nay cấp hàng, dữ liệu đầu vào cũng bao gồmmớihàng choChènCập nhậtTriggers và/hoặchàng choCập nhậtXóaTriggers.

Theo mặc định, các kích kèo chấp bóng đá hôm nay cấp câu lệnh không có cách nào để kiểm tra (các) hàng riêng lẻ được sửa đổi bởi câu lệnh. Nhưng mộtsau tuyên bốTrigger có thể yêu cầu điều đóBảng chuyển tiếpđược tạo để cung cấp các bộ các hàng bị ảnh hưởng có sẵn cho kích kèo chấp bóng đá hôm nay.sau hàngTrình kích kèo chấp bóng đá hôm nay cũng có thể yêu cầu các bảng chuyển tiếp, để họ có thể thấy tổng số thay đổi trong bảng cũng như thay đổi trong hàng riêng lẻ mà chúng hiện đang bị bắn. Phương pháp kiểm tra các bảng chuyển tiếp một lần nữa phụ thuộc vào ngôn ngữ lập trình đang được sử dụng, nhưng cách tiếp cận điển hình là làm cho các bảng chuyển tiếp kèo chấp bóng đá hôm nay động như các bảng tạm thời chỉ đọc có thể được truy cập bằng các lệnh SQL được phát hành trong hàm kích kèo chấp bóng đá hôm nay.