Tải bản đầy đủ (.pdf) (6 trang)

Tài liệu tham khảo - CITD - Bến Tre 5. TRIGGERS

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 (128.43 KB, 6 trang )

TRIGGERS

Trigger là gì?




Trigger là một dạng đặc biệt của stored procedure,
được thực thi tự động khi dữ liệu có sự thay đổi như
thêm, sửa, hoặc xoá.
Có thể sử dụng trigger vào các công việc sau:


TRẦN THỊ BẠCH HUỆ



NỘI DUNG








Trigger là gì?
Cách hoạt động của trigger
Các trường hợp sử dụng trigger
Tạo trigger
Vô hiệu hoá trigger


Kích hoạt trigger cho cột
Trigger và giao tác

Thay đổi dữ liệu của các bảng liên quan khi bảng đang xét
có sự biến đổi dữ liệu
Đảm bảo ràng buộc cho một cột
Không cho phép thay đổi dữ liệu hoặc phụ hồi (roll back) lại
các thao tác sửa đổi

Cách hoạt động của trigger






Trigger được thực thi tự động khi có thao tác
thêm, sửa, xoá trên dữ liệu.
Trigger sử dụng được với khung nhìn.
Một trigger chỉ được định nghĩa trên 1 bảng
nhưng các xử lý trong trigger có thể sử dụng
nhiều bảng khác.
Có thể xử lý quay lui các thao tác đã thực
hiện bằng lệnh ROLL TRANSACTION

1


Tạo trigger





Khi thực thi trigger, SQL Server sẽ tạo ra 2 bảng
INSERTED và DELETED. Đây là 2 bảng tạm, chứa
trong bộ nhớ chính. Các bảng này được dùng để
khôi phục lại phần dữ liệu đã thay đổi (roll back)
Hai bảng này là cục bộ cho mỗi trigger, có cấu trúc
giống bảng mà trigger định nghĩa trên đó và chỉ tồn
tại trong thời gian trigger đang xử lý







Cú pháp:
CREATE TRIGGER tên_trigger
ON tên_bảng
<FOR | AFTER | INSTEAD OF>
<INSERT , UPDATE , DELETE>
AS
Lệnh_trigger

Inserted: Chứa các dòng mới được insert hoặc update vào
bảng
Deleted: Chứa các dòng vừa mới bị xoá khỏi bảng

Chú ý: Thao tác Update = delete dòng cũ + insert

dòng mới

Các trường hợp sử dụng trigger


Có thể sử dụng trigger trong các trường hợp
sau:







Xử lý các ràng buộc toàn vẹn dữ liệu
Kiểm soát dữ liệu khi có sự thay đổi giá trị trong
bảng
Xử lý dữ liệu trên nhiều dòng
Tạo thông báo lỗi
Phát sinh giá trị tính toán



Ý nghĩa:


FOR | AFTER: Trigger được gọi thực thi sau khi
thao tác insert | update | delete đã được thực
hiện thành công





Các dòng mới thêm đồng thời chứa trong bảng dữ liệu
và bảng inserted
Các dòng bị xoá chỉ nằm trong bảng deleted

2




INSTEAD OF: Trigger được gọi thực thi
trước khi thực hiện thao tác insert | update |
delete trên bảng.



Các dòng mới thêm chỉ chứa trong bảng inserted
Các dòng bị xoá nằm đồng thời trong bảng
deleted và bảng dữ liệu



Chú ý:


Table1 có trigger1, table2 có trigger2, nếu
thao tác trên table1 có liên quan đến table2
thì trigger2 tự động thực thi, gọi là trigger lồng

(Nested Trigger)

3


Ví dụ


Cho lược đồ CSDL như sau:

Vô hiệu hoá trigger


Sinhvien(maSV, hoSV, tenSV, ns, phai, que, maK)
Khoa(maK, tenK)
Monhoc(maM, tenM, st)
Ketqua(maSV, maM, lanthi, diem)


Không được tồn tại 2 khoa cùng tên

CREATE TRIGGER KTTenKhoa ON khoa AFTER INSERT,UPDATE
AS
BEGIN
IF update(tenK)
BEGIN
DECLARE @ten NVARCHAR(30)
SET @ten= (SELECT tenK FROM inserted)
DECLARE @count INT
SET @count = (SELECT count(*) FROM Khoa WHERE tenk=@ten)

IF (@count >1)
BEGIN
raiserror('Ten khoa nay da ton tai',16,1)
rollback tran
END
END

Trigger cần bị vô hiệu hóa trong một số
trường hợp:





Trigger gây ra lỗi trong quá trình xử lý CSDL
Quá trình nhập hay khôi phục những dữ liệu
không thỏa trigger.

Vô hiệu hóa trigger bằng lệnh DISABLE
TRIGGER có cấu trúc như slide sau:

DISABLE TRIGGER tên_trigger
ON tên_đối_tượng | DATABASE | SERVER


Ví dụ: Vô hiệu hoá trigger KTTenKhoa
DISABLE TRIGGER KTTenKhoa
ON Khoa

END


4




Hiệu lực hoá trigger bằng lệnh:



Ví dụ:

ENABLE TRIGGER tên_trigger
ON tên_đối_tượng | DATABASE | SERVER


Ví dụ: Hiệu lực hoá trigger KTTenKhoa
ENABLE TRIGGER KTTenKhoa
ON Khoa

Trigger và giao tác


Khi một trigger được kích hoạt, SQL Server
luôn tạo ra một giao tác theo dõi những thay
đổi do câu lệnh kích hoạt trigger hoặc do bản
thân trigger gây ra. Sự theo dõi này cho
phép CSDL quay trở lại trạng thái trước đó
bằng lệnh


Bài tập


Cho lược đồ CSDL như sau:
Sinhvien(maSV, hoSV, tenSV, ns, phai, que, maL)
Lop(maL, tenL)
Monhoc(maM, tenM, st)
Ketqua(maSV, maM, lanthi, diem)

ROLLBACK TRANSACT

5




Tạo các trigger để kiểm tra:






Không được tồn tại 2 lớp có cùng tên
Số sinh viên của một lớp không vượt quá 100
Sinh viên chỉ có tối đa 2 lần thi
Điểm của sinh viên không được vượt quá 10
Giả sử thêm cột sĩ số vào trong bảng Lop, hãy
cập nhật lại sĩ số của mỗi lớp khi có sinh viên mới
đăng ký hoặc chuyển lớp


Hết

6



×