Tạo [ràng buộc] Triggertêntrước | Sau |Sự kiện[hoặc ...]Table_Name[từtham chiếu_table_name]điều kiện)]]function_name(Đối số)WHEREsự kiệncó thể là một trong số:ChènCột_name[, ...]]
soi kèo bóng đá truoctranTạo một trình kích soi kèo bóng đá truoctran mới. Trình kích soi kèo bóng đá truoctran sẽ được liên kết với bảng, chế độ xem hoặc bảng nước ngoài được chỉ định và sẽ thực thi chức năng được chỉ địnhfunction_nameKhi xảy ra sự kiện nhất định.
Trình kích soi kèo bóng đá truoctran có thể được chỉ định để bắn trước khi soi kèo bóng đá truoctran động được thử trên một hàng (trước khi các ràng buộc được kiểm tra vàChèn, Cập nhậthoặcXóađược cố gắng); hoặc sau khi soi kèo bóng đá truoctran động hoàn thành (sau khi các ràng buộc được kiểm tra vàChèn, Cập nhậthoặcXóađã hoàn thành); hoặc thay vì soi kèo bóng đá truoctran động (trong trường hợp chèn, cập nhật hoặc xóa khi xem).ChènvàCập nhậtChỉ soi kèo bóng đá truoctran động). Nếu kích soi kèo bóng đá truoctran bắn sau sự kiện, tất cả các thay đổi, bao gồm các tác động của các kích soi kèo bóng đá truoctran khác, là"hiển thị"đến kích soi kèo bóng đá truoctran.
Một bộ kích soi kèo bóng đá truoctran được đánh dấucho mỗi hàngđược gọi một lần cho mỗi hàng mà soi kèo bóng đá truoctran động sửa đổi. Ví dụ: AXóaảnh hưởng đến 10 hàng sẽ gây ra bất kỳKhi xóaKích soi kèo bóng đá truoctran về mối quan hệ mục tiêu được gọi là 10 lần riêng biệt, một lần cho mỗi hàng bị xóa. Ngược lại, một kích soi kèo bóng đá truoctran được đánh dấuĐối với mỗi câuChỉ thực hiện một lần cho bất kỳ soi kèo bóng đá truoctran động nào, bất kể nó sửa đổi bao nhiêu hàng (đặc biệt, một soi kèo bóng đá truoctran động sửa đổi các hàng không vẫn sẽ dẫn đến việc thực hiện bất kỳ áp dụng nàoĐối với mỗi câuTriggers). Lưu ý rằng với mộtChènvớitrên xung đột do cập nhậtmệnh đề, cả haiChènvàCập nhậtTrình kích soi kèo bóng đá truoctran cấp độ tuyên bố sẽ được bắn.
Trình kích soi kèo bóng đá truoctran được chỉ định để bắnthay vìSự kiện kích soi kèo bóng đá truoctran phải được đánh dấucho mỗi hàngvà chỉ có thể được xác định trên soi kèo bóng đá truoctran lượt xem.trướcvàsauTrình kích soi kèo bóng đá truoctran trên chế độ xem phải được đánh dấu làĐối với mỗi câu.
Ngoài ra, các kích soi kèo bóng đá truoctran có thể được xác định để bắn chocắt ngắn, mặc dù chỉĐối với mỗi câu.
Bảng sau đây tóm tắt loại kích soi kèo bóng đá truoctran nào có thể được sử dụng trên bảng, chế độ xem và bảng nước ngoài:
Khi | Sự kiện | cấp độ hàng | cấp độ tuyên bố |
---|---|---|---|
trước | Chèn/Cập nhật/Xóa | Bảng và bảng nước ngoài | Bảng, lượt xem và bảng nước ngoài |
cắt ngắn | - | Bảng | |
sau | Chèn/Cập nhật/Xóa | Bảng và bảng nước ngoài | Bảng, lượt xem và bảng nước ngoài |
cắt ngắn | - | Bảng | |
thay vì | Chèn/Cập nhật/Xóa | Chế độ xem | - |
cắt ngắn | - | - |
Ngoài ra, một định nghĩa kích soi kèo bóng đá truoctran 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 lệnh 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 vì điều kiện không thể đề cập đến bất kỳ giá trị nào trong bảng.
Nếu nhiều tác nhân cùng loại được xác định cho cùng một sự kiện, chúng sẽ được bắn theo thứ tự bảng chữ cái theo tên.
Khiràng buộcTùy chọn được chỉ định, lệnh này tạo raTrình kích soi kèo bóng đá truoctran ràng buộc. Điều này giống như một trình kích soi kèo bóng đá truoctran thông thường ngoại trừ thời gian bắn kích soi kèo bóng đá truoctran có thể được điều chỉnh bằng cách sử dụngPostgreSQL: Tài liệu: 9.6: Đặt tỷ. Kích soi kèo bóng đá truoctran ràng buộc phải làsau hàngTriggers trên bảng. Chúng có thể được sa thải vào cuối tuyên bố gây ra sự kiện kích soi kèo bóng đá truoctran hoặc ở cuối giao dịch có chứa;Trì hoãn. Một vụ bắn Truy nhập hoãn lại đang chờ xử lý cũng có thể bị buộc phải xảy ra ngay lập tức bằng cách sử dụngĐặt soi kèo bóng đá truoctran ràng buộc. Kích soi kèo bóng đá truoctran ràng buộc dự kiến sẽ tăng một ngoại lệ khi các ràng buộc mà chúng thực hiện bị vi phạm.
ChọnKhông sửa đổi bất kỳ hàng nào để bạn không thể tạoChọnTriggers. soi kèo bóng đá truoctran quy tắc và chế độ xem phù hợp hơn trong soi kèo bóng đá truoctran trường hợp như vậy.
Tham khảoChương 37Để biết thêm thông tin về trình kích soi kèo bóng đá truoctran.
Tên để đưa ra trình kích soi kèo bóng đá truoctran mới. Điều này phải khác biệt với tên của bất kỳ kích soi kèo bóng đá truoctran nào khác cho cùng một bảng.Đặt soi kèo bóng đá truoctran ràng buộc.
Xác định xem hàm được gọi trước, sau hoặc thay vì sự kiện. Trình kích soi kèo bóng đá truoctran ràng buộc chỉ có thể được chỉ định làsau.
một trong sốChèn, Cập nhật, Xóahoặccắt ngắn; Điều này chỉ định sự kiện sẽ kích soi kèo bóng đá truoctran kích soi kèo bóng đá truoctran.hoặc.
choCập nhậtSự kiện, có thể chỉ định danh sách soi kèo bóng đá truoctran cột bằng cú pháp này:
Cập nhậtCột_name1[,Cột_NAME2...]
Trình kích soi kèo bóng đá truoctran sẽ chỉ bắn nếu ít nhất một trong các cột được liệt kê được đề cập làm mục tiêu củaCập nhậtlệnh.
Thay vì cập nhậtSự kiện không hỗ trợ danh sách soi kèo bóng đá truoctran cột.
19270_19367
Tên (có thể là trình độ lược đồ) của một bảng khác được tham chiếu bởi ràng buộc. Tùy chọn này được sử dụng cho soi kèo bóng đá truoctran ràng buộc của nước ngoài và không được khuyến nghị sử dụng chung.
Thời gian mặc định của kích soi kèo bóng đá truoctran. XemTạo bảngTài liệu để biết chi tiết về các tùy chọn ràng buộc này. Điều này chỉ có thể được chỉ định cho các kích soi kèo bóng đá truoctran ràng buộc.
Điều này chỉ định liệu quy trình kích soi kèo bóng đá truoctran có nên được bắn một lần cho mỗi hàng bị ảnh hưởng bởi sự kiện kích soi kèo bóng đá truoctran hay chỉ một lần cho mỗi câu lệnh SQL. Nếu không được chỉ định,Đối với mỗi câulà mặc định. Kích soi kèo bóng đá truoctran ràng buộc chỉ có thể được chỉ địnhcho mỗi hàng.
Một biểu thức boolean xác định liệu chức năng kích soi kèo bóng đá truoctran có thực sự được thực thi hay không. Nếu nhưkhiđược chỉ định, hàm sẽ chỉ được gọi nếuđiều kiệnreturnTRUE. TRONGcho mỗi hàngTriggers, ThekhiĐiều kiện có thể tham khảo soi kèo bóng đá truoctran cột của soi kèo bóng đá truoctran giá trị hàng cũ và/hoặc hàng mới bằng cách viếtcũ.Cột_namehoặcMới.Cột_nametương ứng. Tất nhiên rồi,ChènTriggers không thể tham khảocũvàXóaTriggers không thể tham khảomới.
thay vìTriggers không hỗ trợKhiĐiều kiện.
Hiện tại,KhiBiểu thức không thể chứa soi kèo bóng đá truoctran nhóm phụ.
Lưu ý rằng đối với các kích soi kèo bóng đá truoctran ràng buộc, đánh giákhiĐiều kiện không bị hoãn lại, nhưng xảy ra ngay sau khi soi kèo bóng đá truoctran động cập nhật hàng được thực hiện. Nếu điều kiện không đánh giá đúng thì kích soi kèo bóng đá truoctran không được xếp hàng để thực thi hoãn lại.
Hàm do người dùng cung cấp được tuyên bố là không lấy đối số và loại trả vềTrigger, được thực hiện khi kích soi kèo bóng đá truoctran.
Một danh sách các đối số được phân tách bằng dấu phẩy tùy chọn sẽ được cung cấp cho chức năng khi trình kích soi kèo bóng đá truoctran được thực thi. Các đối số là hằng số chuỗi theo nghĩa đen.
Để tạo trình kích soi kèo bóng đá truoctran trên bảng, người dùng phải cóTriggerĐặc quyền trên bảng. Người dùng cũng phải cóthực thiĐặc quyền trên hàm kích soi kèo bóng đá truoctran.
Sử dụngkèo tỷ số bóngĐể xóa trình kích soi kèo bóng đá truoctran.
Trình kích soi kèo bóng đá truoctran dành riêng cho cột (một được xác định bằng cách sử dụngCập nhậtCột_nameCú pháp) sẽ bắn khi bất kỳ cột nào của nó được liệt kê là mục tiêu trongCập nhậtLệnh củasetDanh sách. Giá trị của một cột có thể thay đổi ngay cả khi kích soi kèo bóng đá truoctran không được bắn, bởi vì các thay đổi được thực hiện theo nội dung của hàng bởiTrước khi cập nhậtTriggers không được xem xét. Ngược lại, một lệnh nhưCập nhật ... Đặt x = x ...Sẽ kích soi kèo bóng đá truoctran kích soi kèo bóng đá truoctran trên cộtx, mặc dù giá trị của cột không thay đổi.
Có một vài chức năng kích soi kèo bóng đá truoctran tích hợp có thể được sử dụng để giải quyết các vấn đề phổ biến mà không phải viết mã kích soi kèo bóng đá truoctran của riêng bạn; nhìn thấyPhần 9.27.
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 soi kèo bóng đá truoctran. Lưu ý cụ thể rằngnewHàng nhìn thấy theo điều kiện là giá trị hiện tại, như có thể được sửa đổi bởi các kích soi kèo bóng đá truoctran trước đó. Ngoài ra, AtrướcTrigger'sKhiĐiều kiện không được phép kiểm tra soi kèo bóng đá truoctran cột hệ thống củanewhàng (chẳng hạn nhưoid), bởi vì chúng chưa được đặt.
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 soi kèo bóng đá truoctran trình kích soi kèo bóng đá truoctran ở cuối tuyên bố 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 soi kèo bóng đá truoctran chỉ cần được bắn vào một vài hàng.
Trình kích soi kèo bóng đá truoctran cấp độ tuyên bố trên chế độ xem chỉ được bắn nếu hành động trên chế độ xem được xử lý bởi cấp độ hàngthay vìTrigger. Nếu hành động được xử lý bởi mộtThay vào đóQuy tắc, sau đó, bất kỳ câu lệnh nào được phát ra bởi quy tắc được thực thi thay cho câu lệnh gốc đặt tên cho chế độ xem, do đó các yếu tố kích soi kèo bóng đá truoctran sẽ được bắn là các bảng trên các bảng có tên trong các câu lệnh thay thế. Tương tự, nếu chế độ xem có thể tự động cập nhật, thì hành động được xử lý bằng cách tự động viết lại câu lệnh thành một hành động trên bảng cơ sở của chế độ xem, để các kích soi kèo bóng đá truoctran cấp độ câu lệnh của bảng cơ sở là những kích soi kèo bóng đá truoctran được kích soi kèo bóng đá truoctran.
inPostgreSQLPhiên bản trước 7.3, cần phải khai báo các chức năng kích soi kèo bóng đá truoctran là trả về loại trình giữ chỗOpaque, thay vìTrigger. Để hỗ trợ tải soi kèo bóng đá truoctran tệp kết xuất cũ,soi kèo bóng đá truoctranSẽ chấp nhận một chức năng được khai báo là trả lạiOpaque, nhưng nó sẽ đưa ra thông báo và thay đổi loại trả về được khai báo của hàm thànhTrigger.
thực thi chức năngCheck_account_update
Bất cứ khi nào một hàng của bảngTài khoảnsắp được cập nhật:
soi kèo bóng đá truoctran Check_Update
giống nhau, nhưng chỉ thực thi chức năng nếu cộtCân bằngđược chỉ định là mục tiêu trongCập nhậtlệnh:
soi kèo bóng đá truoctran Check_Update
Biểu mẫu này chỉ thực thi chức năng nếu cộtBalanceThực tế đã thay đổi giá trị:
soi kèo bóng đá truoctran Check_Update
Gọi hàm để đăng nhập cập nhậtTài khoản, nhưng chỉ khi một cái gì đó thay đổi:
Tạo trình kích soi kèo bóng đá truoctran log_update
thực thi chức năngView_insert_row
Để mỗi hàng chèn soi kèo bóng đá truoctran hàng vào soi kèo bóng đá truoctran bảng bên dưới chế độ xem:
soi kèo bóng đá truoctran View_insert
Phần 37.4chứa một ví dụ hoàn chỉnh về hàm kích soi kèo bóng đá truoctran được viết trong C.
Thesoi kèo bóng đá truoctrancâu lệnh trongPostgreSQLthực hiện một tập hợp con củaSQLTiêu chuẩn. soi kèo bóng đá truoctran chức năng sau hiện đang bị thiếu:
SQL cho phép bạn xác định bí danh cho"cũ"và"mới"Hàng hoặc bảng để sử dụng trong định nghĩa của hành động được kích soi kèo bóng đá truoctran (ví dụ:28690_28780). TừPostgreSQLCho phép các quy trình kích soi kèo bóng đá truoctran được viết bằng bất kỳ số lượng ngôn ngữ do người dùng định nghĩa nào, truy cập vào dữ liệu được xử lý theo cách cụ thể về ngôn ngữ.
PostgreSQLKhông cho phép các bảng cũ và mới được tham chiếu trong các kích soi kèo bóng đá truoctran cấp độ tuyên bố, tức là, các bảng chứa tất cả các hàng cũ và/hoặc mới, được đề cập bởiBảng cũvàBảng mớimệnh đề trongSQLtiêu chuẩn.
PostgreSQLChỉ cho phép thực hiện chức năng do người dùng xác định cho hành động được kích soi kèo bóng đá truoctran. Tiêu chuẩn cho phép thực hiện một số lệnh SQL khác, chẳng hạn nhưTạo bảng, là hành động được kích soi kèo bóng đá truoctran. Giới hạn này không khó để soi kèo bóng đá truoctran động bằng cách tạo chức năng do người dùng xác định, thực thi các lệnh mong muốn.
SQL Chỉ định rằng nhiều kích soi kèo bóng đá truoctran nên được bắn theo thứ tự thời gian sáng tạo.POSTGRESQLsử dụng thứ tự tên, được đánh giá là thuận tiện hơn.
SQL Chỉ định rằngTrước khi xóaTriggers trên Cascaded xóa lửasauCascadedXóaHoàn thành. ThePostgreSQLHành vi dành choTrước khi xóaĐể luôn bắn trước hành động xóa, thậm chí là một tầng. Điều này được coi là nhất quán hơn.trướcKích soi kèo bóng đá truoctran sửa đổi hàng hoặc ngăn chặn cập nhật trong quá trình cập nhật do hành động tham chiếu. Điều này có thể dẫn đến các vi phạm ràng buộc hoặc dữ liệu được lưu trữ không tôn trọng ràng buộc tham chiếu.
Khả năng chỉ định nhiều hành động cho một lần kích soi kèo bóng đá truoctran bằng cách sử dụnghoặclà mộtPOSTGRESQLMở rộng tiêu chuẩn SQL.
Khả năng kích soi kèo bóng đá truoctran kích soi kèo bóng đá truoctran chocắt ngắnlà mộtPostgreSQLPhần mở rộng của tiêu chuẩn SQL, cũng như khả năng xác định các kích soi kèo bóng đá truoctran cấp câu lệnh trên chế độ xem.
Tạo Kích soi kèo bóng đá truoctran ràng buộclà mộtPostgreSQLPhần mở rộng củaSQLtiêu chuẩn.