Trình kích tỷ lệ kèo bóng đá là một đặc điểm kỹ thuật rằng cơ sở dữ liệu sẽ tự động thực hiện một chức năng cụ thể bất cứ khi nào một loại tỷ lệ kèo bóng đá động nhất định được thực hiện. Trình kích tỷ lệ kèo bóng đá 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 tỷ lệ kèo bóng đá có thể được xác định để thực thi trước hoặc sau khiChèn
, Cập nhật
hoặcXóa
tỷ lệ kèo bóng đá động, một lần mỗi hàng được sửa đổi hoặc một lần mỗiSQLcâu tỷ lệ kèo bóng đánh.Cập nhật
Trình kích tỷ lệ kèo bóng đá chỉ có thể được đặt để bắn nếu các cột nhất định được đề cập trongset
mệnh đề củaCập nhật
Tuyên bố. Triggers cũng có thể bắn chocắt ngắn
Câu lệnh. Nếu sự kiện kích tỷ lệ kèo bóng đá xảy ra, chức năng của bộ kích tỷ lệ kèo bóng đá đượ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 tỷ lệ kèo bóng đá có thể được xác định để thực thi thay vìChèn
, Cập nhật
hoặcXóa
tỷ lệ kèo bóng đá động. Như làthay vì
11149_11494SQLcâu tỷ lệ kèo bóng đánh, trước hoặc sauChèn
, Cập nhật
hoặcXóa
tỷ lệ kèo bóng đá động. Tuy nhiên, các kích tỷ lệ kèo bóng đá 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 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 bộ kích tỷ lệ kèo bóng đá 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 kích tỷ lệ kèo bóng đá. Hàm kích tỷ lệ kèo bóng đá 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 tỷ lệ kèo bóng đá nhận được đầu vào của nó thông qua một thông số đặc biệtTriggerData
Cấ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 tỷ lệ kèo bóng đá phù hợp đã được tạo, bộ kích tỷ lệ kèo bóng đá được thiết lập vớiTạo Trigger12609_12673
PostgreSQLcung cấp cảmỗi tỷ lệ kèo bóng đáTriggers vàmỗi statement12825_13308cấp độ tỷ lệ kèo bóng đáTriggers vàCấp độ tuyên bốKích tỷ lệ kèo bóng đá, tương ứng. Trình kích tỷ lệ kèo bóng đá trêncắt ngắn
chỉ có thể được xác định ở cấp độ tuyên bố, không phải trên mỗi tỷ lệ kèo bóng đá.
Triggers cũng được phân loại theo liệu chúng có bắntrước, sauhoặcthay vìtỷ lệ kèo bóng đá động. Chúng được gọi làTrước
Triggers,sau
Triggers vàthay vì
Kích tỷ lệ kèo bóng đá tương ứng. Cấp độ tuyên bốtrước
Kích tỷ lệ kèo bóng đá 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ốsau
Kích tỷ lệ kèo bóng đá lửa ở cuối câu lệnh. Các loại kích tỷ lệ kèo bóng đá này có thể được xác định trên bảng, chế độ xem hoặc bảng nước ngoài. Cấp độ hàngtrước
kích tỷ lệ kèo bóng đá lửa ngay trước khi một hàng cụ thể được vận hành, trong khi cấp độ hàngsau
Kích tỷ lệ kèo bóng đá lửa ở cuối câu lệnh (nhưng trước bất kỳ cấp độ nàosau
Triggers). Các loại kích tỷ lệ kèo bóng đá 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 tỷ lệ kèo bóng đá 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ộtsau
Trình kích tỷ lệ kèo bóng đá 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 tỷ lệ kèo bóng đá ràng buộc14989_15196
Nếu mộtChèn
chứatrên xung đột do cập nhật
mệnh đề, có thể cho cấp độ tỷ lệ kèo bóng đátrước
Chèn
và sau đótrước
Cập nhật
Trình kích tỷ lệ kèo bóng đá được thực thi trên các hàng được kích tỷ lệ kèo bóng đá. Các tương tác như vậy có thể phức tạp nếu các kích tỷ lệ kèo bóng đá không phải là idempotent vì thay đổi được thực hiện bởitrước
Chèn
Triggers sẽ được nhìn thấy bởitrước
Cập nhật
Triggers, bao gồm các thay đổi thànhLoại trừ
cột.
Lưu ý cấp độ tuyên bố đóCập nhật
Trình kích tỷ lệ kèo bóng đá được thực thi khitrên xung đột do cập nhật
được chỉ định, bất kể có bất kỳ tỷ lệ kèo bó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èn
vớitrên xung đột do cập nhật
mệnh đề sẽ thực thi cấp độ tuyên bốtrước
Chèn
Triggers trước, sau đó cấp độ câu tỷ lệ kèo bóng đánhtrước
Cập nhật
Triggers, theo sau là cấp độ tuyên bốsau
Cập nhật
Triggers và cuối cùng là cấp độ tuyên bốsau
Chèn
Triggers.
Một tuyên bố nhắm mục tiêu vào bảng cha mẹ trong hệ thống phân cấp hoặc kế thừa không khiến các yếu tố kích tỷ lệ kèo bóng đá cấp độ tuyên bố của các bảng con bị ảnh hưởng; Chỉ có các kích tỷ lệ kèo bóng đá cấp độ tuyên bố của bảng cha mẹ được bắn. Tuy nhiên, các kích tỷ lệ kèo bóng đá cấp độ hàng của bất kỳ bảng con bị ảnh hưởng nào sẽ bị bắn.
Nếu mộtCập nhật
Trên bảng được phân vùng khiến một tỷ lệ kèo bóng đá chuyển sang phân vùng khác, nó sẽ được thực hiện dưới dạngXóa
Từ phân vùng ban đầu theo sau làChèn
vào phân vùng mới. Trong trường hợp này, tất cả các cấp tỷ lệ kèo bóng đátrước
Cập nhật
Triggers và tất cả các cấp tỷ lệ kèo bóng đátrước
Xóa
Triggers được bắn vào phân vùng ban đầu. Sau đó tất cả các cấp tỷ lệ kèo bóng đátrước
Chèn
Trình kích tỷ lệ kèo bóng đá đượ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 tỷ lệ kèo bóng đá này ảnh hưởng đến hàng được di chuyển. Xa nhưsau tỷ lệ kèo bóng đá
Triggers có liên quan,sau
Xóa
vàsau
Chèn
Kích tỷ lệ kèo bóng đá được áp dụng; Nhưngsau
Cập nhật
Triggers không được áp dụng vìCập nhật
đã được chuyển đổi thành AXóa
và mộtChèn
. Theo như các trình kích tỷ lệ kèo bóng đá cấp độ tuyên bố có liên quan, không cóXóa
hoặcChèn
Kích tỷ lệ kèo bóng đá được bắn, ngay cả khi chuyển động hàng xảy ra; ChỉCập nhật
Trình kích tỷ lệ kèo bóng đá được xác định trên bảng đích được sử dụng trongCập nhật
Tuyên bố sẽ bị sa thải.
Không có trình kích tỷ lệ kèo bóng đá 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 độ tỷ lệ kèo bóng đáCập nhật
, Xóa
vàChèn
Trình kích tỷ lệ kèo bóng đá được bắn tùy thuộc vào (đối với trình kích tỷ lệ kèo bóng đá cấp độ tuyên bố) Những hành động nào được chỉ định trongHợp nhất
Truy vấn và (đối với các kích tỷ lệ kèo bóng đá cấp độ hàng) Những hành động nào được thực hiện.
trong khi chạy AHợp nhất
tỷ lệ kèo bóng đánh, cấp độ tuyên bốtrước
vàsau
Trình kích tỷ lệ kèo bóng đá được bắn cho các sự kiện được chỉ định trong các hành động củaHợp nhất
Lệnh, bất kể tỷ lệ kèo bóng đá động cuối cùng có được thực hiện hay không. Điều này giống như mộtCập nhật
19521_19846
19854_19929null
. Các chức năng kích tỷ lệ kèo bóng đá được gọi bởi các kích tỷ lệ kèo bóng đá 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, nếu họ chọn. Trình kích tỷ lệ kèo bóng đá 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 tỷ lệ kèo bóng đá độ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 tỷ lệ kèo bóng đá (chèn, sửa đổi hoặc xóa một hàng bảng cụ thể).
cho cấp độ tỷ lệ kèo bóng đáChèn
vàCập nhật
Chỉ kích tỷ lệ kèo bóng đá, 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 tỷ lệ kèo bóng đá sửa đổi hàng được chèn hoặc cập nhật.
cấp độ tỷ lệ kèo bóng đátrước
Trình kích tỷ lệ kèo bóng đá 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à21181_21186
tỷ lệ kèo bóng đá choChèn
vàCập nhật
Triggers, Thecũ
tỷ lệ kèo bóng đá choXóa
Triggers).
cấp độ tỷ lệ kèo bóng đáthay 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ề tỷ lệ kèo bóng đá chế độ xem được truyền trong (new
tỷ lệ kèo bóng đá choChèn
vàCập nhật
tỷ lệ kèo bóng đá động hoặccũ
tỷ lệ kèo bóng đá choXóa
21854_22079Chèn
vàCập nhật
Chỉ tỷ lệ kèo bóng đá động, bộ kích tỷ lệ kèo bóng đá có thể sửa đổinew
tỷ lệ kèo bó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.
22481_22583null
.
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ước
Triggers và trướcsau
Triggers. Do đó, giá trị được tạo có thể được kiểm tra trongsau
Triggers. TRONGtrước
Triggers, Thecũ
tỷ lệ kèo bóng đá chứa giá trị được tạo cũ, như người ta sẽ mong đợi, nhưngmới
tỷ lệ kèo bó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; Ngôn ngữ lập trình cấp cao hơn sẽ ngăn quyền truy cập vào cột được tạo được lưu trữ trongmới
tỷ lệ kèo bóng đá trong Atrước
Trigger. Thay đổi giá trị của cột được tạo trongtrước
Trigger bị bỏ qua và sẽ bị ghi đè.
Nếu có nhiều hơn một kích tỷ lệ kèo bóng đá đượ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 tỷ lệ kèo bóng đá sẽ được bắn theo thứ tự bảng chữ cái bằng tên kích tỷ lệ kèo bóng đá. Trong trường hợp củatrước
vàthay vì
Trình kích tỷ lệ kèo bóng đá, hàng có thể được sửa đổi được trả về bởi mỗi kích tỷ lệ kèo bóng đá trở thành đầu vào cho trình kích tỷ lệ kèo bóng đá tiếp theo. Nếu bất kỳtrước
hoặcthay vì
Trình kích tỷ lệ kèo bóng đá trả vềnull
24120_24217
Một định nghĩa kích tỷ lệ kèo bóng đá cũng có thể chỉ định BooleanKhi
Điều kiện sẽ được kiểm tra để xem liệu kích tỷ lệ kèo bóng đá có nên được bắn hay không. Trong các kích tỷ lệ kèo bóng đá 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 tỷ lệ kèo bóng đá 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ước
Trigger, 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ụngKhi
khô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 tỷ lệ kèo bóng đá. Tuy nhiên, trong mộtsau
Trigger, 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 tỷ lệ kèo bóng đá kích tỷ lệ kèo bóng đá ở cuối câu lệnh hay không. Vì vậy, khi mộtsau
Trigger'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 tỷ lệ kèo bóng đá 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 độ tỷ lệ kèo bóng đáTrước
Trình kích tỷ lệ kèo bóng đá đượ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ước
Trigger có thể được sử dụng để chèn thời gian hiện tại vào ADấu thời gian
Cột hoặc để kiểm tra xem hai phần tử của tỷ lệ kèo bóng đá có nhất quán không. Cấp độ tỷ lệ kèo bóng đásau
Trình kích tỷ lệ kèo bóng đá đượ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ộtsau
Trigger có thể chắc chắn rằng nó đang nhìn thấy giá trị cuối cùng của tỷ lệ kèo bóng đá, trong khi Atrước
Trigger không thể; Có thể có kháctrước
Kích tỷ lệ kèo bóng đá bắn sau nó. Nếu bạn không có lý do cụ thể để thực hiện kích tỷ lệ kèo bóng đátrước
hoặcsau
, Thetrước
Trường hợp hiệu quả hơn, vì thông tin về tỷ lệ kèo bóng đá độ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 tỷ lệ kèo bóng đá thực thi các lệnh SQL thì các lệnh này có thể kích tỷ lệ kèo bóng đá lại kích tỷ lệ kèo bóng đá. Điều này được gọi là kích tỷ lệ kèo bóng đá xếp tầng. Không có giới hạn trực tiếp về số lượng tầng. Cascades có thể gây ra một lời mời đệ quy của cùng một kích tỷ lệ kèo bóng đá; Ví dụ: mộtChèn
Trigger có thể thực thi lệnh chèn một tỷ lệ kèo bóng đá bổ sung vào cùng một bảng, gây raChèn
Trigger sẽ được bắn lại. Trách nhiệm của lập trình viên kích tỷ lệ kèo bóng đá là tránh đệ quy vô hạn trong các tình huống như vậy.
Nếu một ràng buộc khóa nước ngoài chỉ định các hành động tham chiếu (nghĩa là các bản cập nhật hoặc xóa các hành động), các hành động đó được thực hiện thông qua các lệnh Cập nhật SQL thông thường hoặc xóa các lệnh trên bảng tham chiếu. Cụ thể, bất kỳ yếu tố kích tỷ lệ kèo bóng đá nào tồn tại trên bảng tham chiếu sẽ được bắn cho những thay đổi đó. Nếu một kích tỷ lệ kèo bóng đá như vậy sửa đổi hoặc chặn ảnh hưởng của một trong các lệnh này, kết quả cuối cùng có thể là phá vỡ tính toàn vẹn tham chiếu. Trách nhiệm của lập trình viên kích tỷ lệ kèo bóng đá là tránh điều đó.
27907_28446Chèn
28479_28671Cập nhật
Trigger.
28723_28920Chèn
hoặ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 tỷ lệ kèo bóng đá cấp hàng, dữ liệu đầu vào cũng bao gồmmới
tỷ lệ kèo bóng đá choChèn
vàCập nhật
Triggers và/hoặccũ
tỷ lệ kèo bóng đá choCập nhật
vàXóa
Triggers.
Theo mặc định, các kích tỷ lệ kèo bóng đá 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 để làm cho các bộ hàng bị ảnh hưởng có sẵn cho bộ kích tỷ lệ kèo bóng đá.sau tỷ lệ kèo bóng đá
Trình kích tỷ lệ kèo bóng đá 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ư sự thay đổi trong hàng riêng lẻ mà chúng hiện đang được 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 tỷ lệ kèo bóng đá độ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 tỷ lệ kèo bóng đá.
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.