Tải bản đầy đủ (.ppt) (89 trang)

Tài liệu Hệ Quản Trị CSDL docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.1 MB, 89 trang )






Trigger là một loại stored-proc đặc biệt, tự động thực
thi khi một sự kiện diễn ra trong cơ sở dữ liệu ở
server.



Trigger được định nghĩa trên 1 bảng hay 1 view cụ
thể.



Trigger thường được dùng khi cần đảm bảo tính toàn
vẹn dữ liệu phức tạp mà các ràng buộc khác như
Check, Assertion khó đạt được, với sự vượt trội về
tính đúng đắn cao hơn Check và sự linh hoạt nhiều
hơn Assertion.




DML Trigger : thực thi khi dữ liệu bị thay đổi
bởi 1 sự kiện DML thông qua các câu lệnh TSQL INSERT, UPDATE, DELETE trên 1 bảng
hay view. Thường được sử dụng trong thực
tiễn để hiện thực các quy định…
› Ví dụ: Trigger xuất ra 1 thơng báo mỗi khi có một


hóa đơn được lập…




DDL Trigger : thực thi khi có các sự kiện DDL
xảy ra trong cơ sở dữ liệu hay trên server,
được gây ra bởi các câu lệnh T-SQL như
CREATE, ALTER, DROP hay 1 số stored-proc
hệ thống. Thường được sử dụng trong thực
tiễn để kiểm tra, quản lý các thao tác được
phép lên các đối tượng trên hệ thống.
› Ví dụ: Trigger ngăn không cho phép DROP table

nào trong hệ thống…




Logon Trigger : thực thi khi 1 session của
user đã được thiết lập, xác thực, và gọi sự
kiện LOGON.


Ví dụ: Trigger giới hạn số session của
cùng một LoginID, cùng lúc đăng nhập
vào hệ thống là 2. Nếu vượt số này, các
đăng nhập sau sẽ bị từ chối…





SQL Server thiết lập 2 bảng tạm ảo trong lúc 1
DML Trigger đang thực thi, đó là Inserted và
Deleted.



Các bảng này chứa các dòng mới thêm vào
(Inserted) hoặc đã bị xóa (Deleted) của bảng
của trigger, lúc trigger khởi chạy. Các bảng này
có cấu trúc như bảng của trigger.


Câu lệnh DML

Bảng tạm ảo Inserted

Bảng tạm ảo Deleted

Insert

Các dòng mới thêm vào

Không tồn tại

Update

Dữ liệu cũ trước cập nhật


Dữ liệu mới sau cập nhật

Delete

Khơng tồn tại

Các dịng đã bị xóa




Thực thi khi dữ liệu bị thay đổi bởi 1 sự kiện
DML thông qua các câu lệnh T-SQL INSERT,
UPDATE, DELETE trên 1 bảng hay view.



Có thể được gọi sau khi sự kiện hồn tất hoặc
thay thế sự kiện đó bằng hành động khác.



Các trigger DML khi chạy có sử dụng các
bảng tạm ảo là Inserted và Deleted (đã đề
cập).


Cú pháp:



Các tham số:


[tên_schema.]tên_trigger : tham số bắt buộc, là tên của
schema mà bảng của DML trigger nằm trong schema đó.

› Ví dụ: dbo.trXemThongTinBangDeleted…


tên_bảng hoặc tên_view : tham số bắt buộc, là tên bảng
hoặc view mà DML trigger được gọi thực thi. View chỉ
cho phép đối với các trigger Instead Of.



WITH ENCRYPTION : tham số tùy ý, là lựa chọn mã hóa
dữ liệu của trigger. Khi đó, khơng thể xem nội dung của
trigger bằng sp_helptext.

› Chú ý: không dùng chung với tham số EXTERNAL NAME


Ví dụ WITH ENCRYPTION :


Trigger DML lúc chưa mã hóa, vẫn xem được nội dung bằng
sp_helptext :


Ví dụ WITH ENCRYPTION :



Trigger DML lúc đã mã hóa :


Các tham số (tt):


FOR hoặc AFTER : tham số bắt buộc, không thể tạo
trên view. Trigger khởi chạy khi các thao tác của sự
kiện DML đã thực hiện thành công (dù kết quả
khơng có bản ghi(dịng) nào). Lúc này, các cập nhật
tham chiếu cascade và kiểm tra ràng buộc đã hoàn
tất trước khi trigger khởi chạy. Cho phép nhiều
trigger cùng loại (Insert, Update, Delete) trên cùng 1
bảng.



INSTEAD OF : tham số bắt buộc, có thể được tạo
trên 1 view. Trigger khởi chạy trước các hành động
của sự kiện DML, và thay thế các hành động không
cho chúng thực hiện. Chỉ cho phép 1 trigger mỗi loại
(Insert, Update, Delete) trên cùng 1 bảng hay 1 view.


Ví dụ AFTER:
› Tạo 2 trigger cùng loại Delete trên cùng bảng KhachHang: 1

trigger xem thơng tin đã bị xóa, và 1 trigger hiển thị thơng báo

đã xóa.


Ví dụ INSTEAD OF:
› Khơng cho phép tạo nhiều hơn 1 trigger Instead Of trên

cùng 1 bảng KhachHang


Các tham số (tt):


INSERT, UPDATE, DELETE : tham số bắt buộc, có thể
thiết lập đồng thời nhiều loại thao tác DML này.



WITH APPEND : tham số tùy ý, không thể sử dụng chung
với Instead Of hay After, hoặc có tham số EXTERNAL
NAME. Tham số này chỉ được sử dụng khi thiết lập
tương thích của CSDL là thấp hơn 65 (nghĩa là SQL
Server các phiên bản trước 2000(70) ). Tham số cho biết
trigger này được thêm vào khi đã có trigger cùng loại tồn
tại trên bảng của trigger.



NOT FOR REPLICATION : tham số tùy ý, chỉ định việc
trigger không thực thi khi có một tác nhân bản sao đang
thay đổi bảng của trigger bằng các câu lệnh DML.



Ví dụ NOT FOR REPLICATION :
› Để lưu vết khi quản lý khi INSERT vào bảng

HOADON, ta viết 1 INSERT Trigger có FOR NOT
REPLICATION mỗi khi INSERT một chi tiết hóa đơn
thì ta thêm dịng đó vào một bảng lưu vết, giả sử là
bảng LuuVet_HoaDon. Khi đó, mọi user khi INSERT
ở bảng này thì Trigger sẽ thực thi INSERT thêm vào
bảng LuuVet_HoaDon. Tuy nhiên, khi tạo bản sao
gửi cho các đăng kí khác của CSDL, nếu ở các bản
sao này xảy ra INSERT thì Trigger sẽ khơng khởi
chạy, khơng thêm vào bảng LuuVet_HoaDon.


Các tham số (tt):


Các_câu_lệnh_SQL : tham số bắt buộc. Đây là các
câu lệnh SQL mang điều kiện và các xử lý của
trigger. Những câu lệnh này quyết định xử lý của
trigger đối với các sự kiện DML thao tác lên
bảng/view của trigger. Hỗ trợ hầu hết các câu lệnh
như stored-procedure…

› Ví dụ: Tạo biến @TienNo, gán giá trị cho biến là tiền

nợ của khách hàng mới Insert vào bảng KhachHang
rồi in ra giá trị của biến @TienNo sau khi đã chuyển

kiểu của biến về kiểu chuỗi kí tự .


Ví dụ:


Các tham số (tt):


EXTERNAL NAME chú_thích_của_phương_thức : tham
số bắt buộc đối với các trigger viết bởi CLR (Common
Language Runtime), được tạo ra từ các phương thức
của các assembly trong .NET Framework… Tham số có
dạng tên_assembly.tên_class.tên_phương thức.

›Ví dụ: Ta đã dùng VB.NET để viết 1 thư viện

CLRTrigger_KhachHang.dll, có chứa class CLRTriggers. Trong class
này có phương thức tr_InsertKhachHang dùng để xử lý khi có sự
kiện Insert trong bảng KhachHang. Lúc đó, ta tích hợp thư viện này
vào SQL Server dưới dạng 1 assembly, và tạo 1 trigger CLR từ
assembly này


Ví dụ EXTERNAL NAME :


Ví dụ :
 Tạo Trigger trThemKhachHang_After để kiểm tra khách hàng


mới tạo thêm có tiền nợ có bằng 0. Nếu thỏa, thực hiện tạo mới.
Nếu không thỏa, không cho tạo mới.
 Tạo trigger và nhập khách hàng mới có tiền nợ là 100 :


Ví dụ (tt):
 Nhập khách hàng mới có mã là KH1007 và có tiền nợ là 0 :


×