Khái quát về trigger I.2.Làm việc với trigger I.3.Trigger kiểm tra ràng buộc dữ liệu I.4.Trigger cập nhật giá trị tự động II.Cursor II.1.Khái niệm về CurSor : II.2Thứ tự các thao tác
Trang 1Hệ Quản Trị Cơ Sở Dữ Liệu
TRIGGER & CURSOR
Trang 2Nội dung
I.Trigger
I.1 Khái quát về trigger
I.2.Làm việc với trigger
I.3.Trigger kiểm tra ràng buộc dữ liệu
I.4.Trigger cập nhật giá trị tự động
II.Cursor
II.1.Khái niệm về CurSor :
II.2Thứ tự các thao tác khi xử lý dữ liệu trên CurSor :
Trang 3I.1 Khái quát về trigger
I.1.1Trigger là gì?
- Cấu trúc gần giống như một thủ tục nội tại nhưng không
có tham số đầu vào và đầu ra và phải được liên kết với một bảng hoặc bảng ảo trong CSDL
- Không thể gọi mà được thực hiện tự động và được sử
dụng trong việc : tính toán, cập nhật giá trị tự động và
kiểm tra dữ liệu nhập
Khai báo sử dụng :
− Kết hợp với các hành động INSERT/ UPDATE/ DELETE
trên bảng hay bảng ảo
- Khi tạo ra, tham gia vào transaction khởitạobởi câu lệnh
cập nhật dữ liệu tương ứng
I.Trigger
Trang 4I.1.2.Các xử lý bên trong trigger :
- Kiểm tra các ràng buộc dữ liệu phức tạp:
+ Các ràng buộc mô tả phức tạp không thể dùng
constraint
+ Gọi ràng buộc Rollback Tran để hủy thao tác cập nhật khi vi phạm ràng buộc
+ Bảo đảm dữ liệu luôn được toàn vẹn
+ Bảo đảm việc kiểm tra thử ứng dụng không làm hư dữ liệu có sẵn
Trang 5- Tính toán, tự động cập nhật giá trị :
+ Bổ sung các hành động cập nhật dữ liệu để đảm bảo tính toàn vẹn dữ liệu
+ Đơn giản hóa việc xây dựng ứng dụng
- Chỉ định các bẫy lỗi dễ hiểu:
+ Tăng tính thân thiện của ứng dụng
+ Dễ dàng nhận ra các lỗi khi lập trình
Trang 6I.1.3 Các hạn chế trên trigger :
- Không được tạo và tham chiếu bảng tạm
- Không tạo hay thay đổi, xóa cấu trúc các đối tượng sẵn có
trong CSDL
- CREATE/ ALTER/ DROP
- Không gán, cấp quyền cho người dùng
- GRAND/ REVOKE
Trang 7I.1.4 Các loại trigger :
Có hai loại :
- AFTER(FOR)trigger : là loại ngầm định, loại trigger này
sẽ thực hiện các lệnh bên trong sau khi đã thực hiện xong
sự kiện kích hoạt trigger
INSTEAD OF trigger : là loại trigger mà hoạt động của sự kiện gọi trigger sẽ bị bỏ qua và thay vào đó là các lệnh
trong trigger được thực hiện
Trang 8I.1.5 Các bảng trung gian Inserted và Deleted
Khi trigger thực thi theo các sự kiện Insert hoặc
Delete thì dữ liệu khi thay đổi sẽ được chuyển sang các bảng Inserted và Deleted, là 2 bảng tạm thời
Các bảng này chỉ được sử dụng với các lệnh trong
trigger và dùng để khôi phục lại phần dữ liệu đã thay đổi (roll back)
Trang 9a Inserted :
- Chứa dữ liệu được thêm mới trong hành động
Insert/Update
- Có ở cả hai loại trigger
- Cấu trúc bảng giống với bảng thực sự được cập nhật dữ
liệu
b Deleted :
- Chứa dữ liệu bị xóa trong hành động Delete/Update
- Có ở cả hai loại trigger
- Cấu trúc bảng giống với bảng thực sự được cập nhật dữ
Trang 10I.1.6.Khi nào cần dùng Trigger ?
a Kiểm tra các ràng buộc dữ liệu phức tạp.
- Đối với ràng buộc toàn vẹn dữ liệu đơn giản như kiểm tra
ràng buộc miền giá trị,kiểm tra ràng buộc thuộc tính thì nên dùng Constraint
- Đối với các ràng buộc phức tạp: Vd: kiểm tra tính toàn
vẹn trên nhiều cột hoặc dòng thì dùng trigger Nó cho
phép ta xây dựng các câu lệnh để dữ liệu thay đổi theo ý muốn
b Khi các biện pháp bảo đảm toàn vẹn dữ liệu như bảo đảm toàn vẹn dữ liệu
Constraints không thể thỏa mãn yêu cầu của ứng dụng.VD: muốn kiểm tra ràng buộc kèm theo những thông
báo
Constraints sẽ kiểm tra dữ liệu trước khi
Nhập vào Table, còn Trigger được kích hoạt
khi các sự kiện Insert, Update, Delete xảy ra
rồi
Trang 11c Khi CSDL chưa được chuẩn hóa thì có thể xảy ra dữ liệu
thừa
thừa, chứa ở nhiều vị trí trong CSDL Yêu cầu đặt ra là dữ ở nhiều vị trí
liệu cần cập nhật thống nhất trong mọi nơi
d Khi xảy ra thay đổi dây chuyền dữ liệu giữa các bảng với nhau.Dữ liệu bảng này thay đổi kéo theo dữ liệu trong bảng khác cũng được thay đổi theo
Trang 12I.2 Làm việc với trigger
I.2.1.Tạo mới Trigger.
Create Trigger Ten_Trigger
On Ten_Bang{[Instead of] | [For | After] }{ [Insert] ,[Update] , [Delete] }AS
[Declare Bien_Cuc_Bo]
Các Lệnh bên trong
I.2.2 Xóa Trigger:
Drop Trigger Ten_Trigger
Trang 13I.2.3 Sửa nội dung Trigger:
Alter Trigger Ten_Trigger
Trang 14Trong đó:
- Ten_Bang: là tên bảng mà trigger tạo mới sẽ liên kết
- Instead of: Chỉ định đây là trigger loại Instead of
trigger Mỗi bảng chỉ có quyền tạo 1 instead of trigger cho 1 hành động cập nhật
- For hoặc After: nếu tạo trigger thông thường
- Insert, Update, Delete: Hành động cập nhật dữ liệu tác động vào bảng để kích hoạt Trigger
Trang 15+ Khi Delete thực thi, dữ liệu bị xoá sẽ sao chép vào bảng Delete BảngDelete Imsert lúc này không có dữ liệu Imsert
+ Khi Insert thực thi, dữ liệu được thêm sẽ sao chép vào bản Inserted Inserted
Bảng Deleted lúc này không có dữ liệu.Deleted lúc này
+ Khi Update thực thi, dữ liệu cũ chịu tác động của câu lệnh sẽ được sao chép vào bảng Deleted, còn trong Deleted
bảng Inserted sẽ là các dòng sau khi đã được cập nhật Inserted
Trang 16I.2.4 Trigger lồngnhau:
- Hành động cậpnhật -> Trigger -> Cập nhật bảng khác -> Trigger trên bảng tương ứng.
- Instead of trigger không phát sinh lại trên chính bảng mà nó liên kết.
- Hành động cập nhật ->Instead of trigger
->gọi câu lệnh cập nhật xuống bảng ->
Instead of trigger
Trang 17II.1 Khái niệm về Cursor :
_ Các lệnh của SQL Server làm việc trên một nhóm nhiều mẫu tin
_ Cursor là cấu trúc giúp làm việc với từng mẫu tin tại một thời điểm Hay cursor là đối tượng dùng để chứa dữ liệu lấy từ CSDL, giống đối tượng recordset trong VB
II.2 Thứ tự các thao tác khi xử lý dữ liệu trên Cursor :
II.2.1 Định nghĩa biến CursorII.2.2 Mở Cursor
II.2.3 Duyệt và xử lý dữ liệu trên CursorII.2.4 Đóng và giải phóng Cursor
II CURSOR :
Trang 18II.2.1 Định nghĩa biến Cursor bằng lệnh DECLARE :
Cú pháp khai báo biến Cursor :
Declare Tên_cursor Cursor
[Local/Global]
[Forward_only/Scroll]
[Static/Dynamic/Keyset]
[Read_only/Scroll_lock]
For câu lệnh Select
[For update [Of danh sách cột]]
Trang 19_ Có hai loại Cursor: Local và Global
LoCal :chỉ sử dụng trong phạm vi khai báo(mặc định)
Global :sử dụng chung cho cả kết nối
_ Cách di chuyển mẫu tin trong Cursor: Forward only và Scroll
ForWard_Only :chỉ di chuyển một hướng từ trước ra
sau(mặcđịnh)
Scroll : di chuyển tùy ý
_ Cách quản lý dữ liệu trong Cursor: Static, Dynamic và Keyset
Static : dữ liệu trên Cursor không thay đổi mặc dù dữ liệu trong
bảng nguồn thay đổi(mặc định)
Dynamic :dữ liệu trên Cursor sẽ thay đổi khi dữ liệu trong bảng
nguồn thay đổi
KeySet :giống Dynamic nhưng chỉ thay đổi những dòng bị cập nhật
Trang 20* Xử lý :
Read_Only :chỉ đọc(mặc định)
Scroll_Lock : đọc/ghi
*Câu lệnh select : không chứa các mệnh đề Into,Compute,Compute by
*Danh sách cột cập nhật : là danh sách các cột sẽ thay đổi được
II.2.2 Sử dụng lệnh OPEN để mở ra Cursor đã định nghĩa trước đó:
Cú pháp: Open tên_Cursor
II.2.3 Đọc và xử lý trên từng dòng dữ liệu bên trong cursor:
Cú pháp : Fetch [ Next / Prior / First / Last
/ Absolute n / Relative n ] From Tên_Cursor
[Into Danh_sách_biến]
Trang 21Trong đó:
Hướng di chuyển :
Next : Di chuyển về sau
Prior: Di chuyển về trước
First : Di chuyển về đầu
Last : Di chuyển về cuối
Absolute n: di chuyển đến mẩu tin thứ n tính từ mẩu tin đầu tiên Nếu n<0 : tính từ mẩu tin cuối
Relative n :di chuyển đến mẩu tin thứ n tính từ mẩu tin hiện
hành
Trong quá trình di chuyển để kiểm tra việc di chuyển có thành
công hay không, ta kiểm tra biến hệ thống @@Fetch_Status nếu
@@Fetch_Status <>0 thất bại
Trang 22II.2.4 Đóng Cursor lại bằng lệnh CLOSE và DEALLOCATE :
_ Sau khi Close , có thể mở lại
Cú pháp: Close Tên_Cursor
_ Giải phóng CurSor khỏi bộ nhớ :
Cú pháp: Deallocate Tên_Cursor
Trang 23Thanks for Listening !