Trình kích soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran động nhất định được thực hiện. Trình kích soi kèo bóng đá truoctran 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 các bảng và bảng nước ngoài, các kích soi kèo bóng đá truoctran có thể được xác định để thực thi trước hoặc sau khiChèn
, Cập nhật
hoặcXóa
soi kèo bóng đá truoctran độ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ật
Trình kích soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran xảy ra, chức năng của bộ kích soi kèo bóng đá truoctran đượ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 soi kèo bóng đá truoctran có thể được xác định để thực thi thay vìChèn
, Cập nhật
hoặcXóa
soi kèo bóng đá truoctran động. Như làthay vì
Trình kích soi kèo bóng đá truoctran đượ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. Trình kích soi kèo bóng đá truoctran trên lượt xem cũng có thể được xác định để thực thi một lần mỗiSQLcâu lệnh, trước hoặc sauChèn
, Cập nhật
hoặcXóa
soi kèo bóng đá truoctran động. Tuy nhiên, các kích soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran. Hàm kích soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran phù hợp đã được tạo, bộ kích soi kèo bóng đá truoctran được thiết lập vớiTạo Trigger. Có thể sử dụng chức năng kích soi kèo bóng đá truoctran tương tự cho nhiều trình kích soi kèo bóng đá truoctran.
PostgreSQLcung cấp cảmỗi hàngTriggers vàmỗi câu chuyệnTriggers. Với trình kích soi kèo bóng đá truoctran trên mỗi hàng, hàm kích soi kèo bóng đá truoctran được gọi một lần cho mỗi hàng bị ảnh hưởng bởi câu lệnh đã kích soi kèo bóng đá truoctran kích soi kèo bóng đá truoctran. Ngược lại, một trình kích soi kèo bóng đá truoctran trên mỗi tuyên bố chỉ được gọi một lần khi một câu lệnh thích hợp được thực thi, bất kể số lượng hàng bị ảnh hưởng bởi tuyên bố đó. Cụ thể, một tuyên bố ảnh hưởng đến các hàng bằng không vẫn sẽ dẫn đến việc thực hiện bất kỳ yếu tố kích soi kèo bóng đá truoctran mỗi lần áp dụng nào. Hai loại kích soi kèo bóng đá truoctran này đôi khi được gọi làcấp độ hàngTriggers vàcấp độ tuyên bốKích soi kèo bóng đá truoctran, tương ứng. Trình kích soi kèo bóng đá truoctran 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 hàng.
Triggers cũng được phân loại theo liệu chúng có bắntrước, sauhoặcthay vìsoi kèo bóng đá truoctran động. Chúng được gọi làtrước
Triggers,sau
Triggers vàthay vì
Kích soi kèo bóng đá truoctran tương ứng. Cấp độ tuyên bốtrước
kích soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran lửa ở cuối câu lệnh. Các loại kích soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran này chỉ có thể được xác định trên bảng và bảng nước ngoài, không phải xem;trước
Trình kích soi kèo bóng đá truoctran cấp hàng có thể không được xác định trên các bảng được phân vùng.thay vì
Kích soi kèo bóng đá truoctran 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.
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 soi kèo bóng đá truoctran cấp độ tuyên bố của các bảng con bị ảnh hưởng; Chỉ có các kích soi kèo bóng đá truoctran cấp độ tuyên bố của bảng cha mẹ được bắn. Tuy nhiên, các kích soi kèo bóng đá truoctran 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ộtChèn
chứatrên xung đột do cập nhật
mệnh đề, có thể là các hiệu ứng của cấp độ hàngtrước
Chèn
Kích soi kèo bóng đá truoctran và cấp độ hàngtrước
Cập nhật
Trình kích soi kèo bóng đá truoctran đều có thể được áp dụng theo cách rõ ràng từ trạng thái cuối cùng của hàng cập nhật, nếu mộtloại trừ
Cột được tham chiếu. Không cần phải cóloại trừ
Tham chiếu cột cho cả hai bộ cấp độ hàngtrước
Kích soi kèo bóng đá truoctran để thực thi, mặc dù. Khả năng kết quả đáng ngạc nhiên nên được xem xét khi có cả haitrước
Chèn
vàtrước
Cập nhật
Trình kích soi kèo bóng đá truoctran cấp hàng thay đổi một hàng được chèn/cập nhật (điều này có thể có vấn đề ngay cả khi các sửa đổi tương đương ít nhiều, nếu chúng không phải là idempotent). Lưu ý rằng cấp độ tuyên bốCập nhật
Triggers đượ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ể sự 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
Trình kích soi kèo bóng đá truoctran đầu tiên, sau đó cấp độ câu lệ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.
Nếu mộtCập nhật
Trên bảng được phân vùng khiến một hà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 hàngtrước
Cập nhật
Triggers và tất cả các cấp hàngtrước
Xóa
Triggers được bắn vào phân vùng ban đầu. Sau đó tất cả các cấp hàngtrước
Chèn
Trình kích soi kèo bóng đá truoctran đượ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 soi kèo bóng đá truoctran này ảnh hưởng đến hàng được di chuyển. Xa nhưsau hàng
Triggers có liên quan,sau
Xóa
vàsau
Chèn
Kích soi kèo bóng đá truoctran đượ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 soi kèo bóng đá truoctran cấp độ tuyên bố có liên quan, không cóXóa
hoặcChèn
Kích soi kèo bóng đá truoctran được bắn, ngay cả khi chuyển động hàng xảy ra; ChỉCập nhật
Trình kích soi kèo bóng đá truoctran đượ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.
Các chức năng kích soi kèo bóng đá truoctran được gọi bởi các kích soi kèo bóng đá truoctran trên mỗi câu chuyện phải luôn quay lạinull
. Các chức năng kích soi kèo bóng đá truoctran được gọi bởi các kích soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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ả lạinull
Bỏ qua soi kèo bóng đá truoctran độ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 soi kèo bóng đá truoctran (chèn, sửa đổi hoặc xóa một hàng bảng cụ thể).
cho cấp độ hàngChèn
vàCập nhật
Chỉ kích soi kèo bóng đá truoctran, hàng trả lại 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 soi kèo bóng đá truoctran sửa đổi hàng được chèn hoặc cập nhật.
cấp độ hàngtrước
Trình kích soi kèo bóng đá truoctran 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àmới
hàng choChèn
vàCập nhật
Triggers, Thecũ
hàng choXóa
Triggers).
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ới
hàng choChèn
vàCập nhật
soi kèo bóng đá truoctran động hoặccũ
hàng choXóa
soi kèo bóng đá truoctran động). Một giá trị trả về nonnull được sử dụng để báo hiệu rằng bộ kích soi kèo bóng đá truoctran thực hiện các sửa đổi dữ liệu cần thiết trong chế độ xem. Điều này sẽ làm cho số lượng của số lượng hàng bị ảnh hưởng bởi lệnh được tăng lên. VìChèn
vàCập nhật
Chỉ soi kèo bóng đá truoctran động, bộ kích soi kèo bóng đá truoctran có thể sửa đổimới
Hà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.
21716_21818null
.
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
Kích soi kèo bóng đá truoctran. Do đó, giá trị được tạo có thể được kiểm tra trongsau
Kích soi kèo bóng đá truoctran. TRONGtrước
Triggers, Thecũ
Hàng chứa giá trị được tạo cũ, như người ta sẽ mong đợi, nhưngmới
Hà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
hà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 soi kèo bóng đá truoctran đượ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 soi kèo bóng đá truoctran sẽ được bắn theo thứ tự bảng chữ cái bằng tên kích soi kèo bóng đá truoctran. Trong trường hợp củatrước
vàthay vì
Trình kích soi kèo bóng đá truoctran, hàng có thể được sửa đổi được trả về bởi mỗi kích soi kèo bóng đá truoctran trở thành đầu vào cho trình kích soi kèo bóng đá truoctran tiếp theo. Nếu bất kỳtrước
hoặcthay vì
Trình kích soi kèo bóng đá truoctran trả vềnull
, soi kèo bóng đá truoctran động bị bỏ rơi cho hàng đó và các kích soi kèo bóng đá truoctran tiếp theo không được bắn (cho hàng đó).
Một định nghĩa kích soi kèo bóng đá truoctran cũng có thể chỉ định booleankhi
Điều kiện sẽ được kiểm tra để xem liệu có nên kích soi kèo bóng đá truoctran hay không. Trong các kích soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran. 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 soi kèo bóng đá truoctran kích soi kèo bóng đá truoctran ở cuối tuyên bố 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 soi kèo bóng đá truoctran 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ước
Trình kích soi kèo bóng đá truoctran đượ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 hàng có nhất quán không. Cấp độ hàngsau
Trình kích soi kèo bóng đá truoctran đượ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 hàng, trong khi ATrước
Trigger không thể; Có thể có khácTrước
Kích soi kèo bóng đá truoctran bắn sau nó. Nếu bạn không có lý do cụ thể để thực hiện kích soi kèo bóng đá truoctrantrước
hoặcsau
, Thetrước
Trường hợp hiệu quả hơn, vì thông tin về soi kèo bóng đá truoctran độ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 soi kèo bóng đá truoctran thực thi các lệnh SQL thì các lệnh này có thể kích soi kèo bóng đá truoctran lại kích soi kèo bóng đá truoctran. Điều này được gọi là kích soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran; Ví dụ: mộtChèn
Trigger 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èn
Trigger sẽ được bắn lại. Trách nhiệm của lập trình viên kích soi kèo bóng đá truoctran là tránh đệ quy vô hạn trong các tình huống như vậy.
Khi một kích soi kèo bóng đá truoctran đượ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 soi kèo bóng đá truoctran là cho phép các kích soi kèo bóng đá truoctran khác nhau có yêu cầu tương tự để gọi cùng một hàm. Ví dụ, có thể có một chức năng kích soi kèo bóng đá truoctran tổng quát lấy làm đối số của nó hai tên cột và đặt người dùng hiện tại vào một và dấu thời gian hiện tại vào tên kia. Được viết đúng, chức năng kích soi kèo bóng đá truoctran này sẽ độc lập với bảng cụ thể mà nó đang kích soi kèo bóng đá truoctran. Vì vậy, cùng một chức năng có thể được sử dụng choChèn
Cá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ật
Trigger.
Mỗi ngôn ngữ lập trình hỗ trợ kích soi kèo bóng đá truoctran có phương pháp riêng để cung cấp dữ liệu đầu vào kích soi kèo bóng đá truoctran có sẵn cho chức năng kích soi kèo bóng đá truoctran. Dữ liệu đầu vào này bao gồm loại sự kiện kích soi kèo bóng đá truoctran (ví dụ:Chè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 soi kèo bóng đá truoctran cấp hàng, dữ liệu đầu vào cũng bao gồmmới
hàng choChèn
vàCập nhật
Triggers và/hoặccũ
hàng choCập nhật
vàXóa
Triggers.
Theo mặc định, các kích soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran.sau hàng
Trình kích soi kèo bóng đá truoctran 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 đượ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 soi kèo bóng đá truoctran độ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 soi kèo bóng đá truoctran.