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

Hệ Quản Trị Cơ Sở Dữ Liệu - TRIGGER & CURSOR pdf

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 (380.17 KB, 23 trang )

Hệ Quản Trị Cơ Sở Dữ Liệu
TRIGGER & CURSOR


Nộ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 :


I.Trigger
I.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 tố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.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 ln được tồ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.


- Tính tố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 tồ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.


I.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


I.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.


I.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).


a. 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ữ
liệu
c. Hành động update trong SQL Server
- Xóa dịng dữ liệu cũ
- Thêm vào dịng dữ liệu mới với thơng tin đã cập nhật.


I.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 tồ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ư
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.


c. Khi CSDL chưa được chuẩn hóa thì có thể xảy ra dữ liệu
thừa, chứa ở nhiều vị trí trong CSDL. Yêu cầu đặt ra là dữ
thừa
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.


I.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


I.2.3. Sửa nội dung Trigger:
Alter Trigger Ten_Trigger
On Ten_Bang
For [Insert], [Update],[Delete]

As
[Declare bien_cuc_bo]
Các lệnh bên trong.


Trong đó:
- 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.


+ Khi Delete thực thi, dữ liệu bị xoá sẽ sao chép vào
bảng Delete. Bảng Imsert lúc này khơng có dữ liệu.
Delete
+ 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.
+ 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.


I.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


II.
II.1.

CURSOR :
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 Cursor
II.2.2. Mở Cursor
II.2.3. Duyệt và xử lý dữ liệu trên Cursor
II.2.4. Đóng và giải phóng Cursor


II.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]]


_

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



* 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]


Trong đó:
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


II.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


Thanks for Listening !



×