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

Chương 7 trigger SQL server 2005

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 (365.7 KB, 22 trang )

Chương 7

TRIGGER
7.1 DML Trigger
7.1.1 Giới thiệu DML Trigger
7.1.2 Tạo DML Trigger
7.2 DDL Trigger
7.2.1 Giới thiệu DDL Trigger
7.2.2 Tạo DDL Trigger
7.2.3 Hàm Eventdata
SQL Server 2005

1


7.1 DML Trigger
7.1.1 Giới thiệu DML (Data Manipulation Language)
Trigger


Dùng để kiểm soát sự dữ liệu thay đổi.



trigger loại này phải được gắn liền với một bảng nào đó
trong CSDL.



Khi dữ liệu trong bảng bị thay đổi (INSERT, UPDATE hay
DELETE) thì trigger sẽ được tự đông kích hoạt.





DML Trigger được sử dụng trong việc bảo đảm toàn vẹn
dữ liệu theo quy tắc xác định, được quản lý theo bảng
dữ liệu hoặc khung nhìn. Sử dụng DML trigger một cách
hợp lý trong CSDL sẽ có tác động rất lớn trong việc tăng
hiệu năng của CSDL.

SQL Server 2005

2


7.1 DML Trigger
7.1.1 Giới thiệu DML Trigger


Ý nghĩa:

-

-

Bảo đảm toàn vẹn dữ liệu theo quy
tắc xác định, được quản lý theo
bảng dữ liệu hoặc khung nhìn.
Sử dụng DML trigger một cách hợp
lý trong CSDL sẽ có tác động rất lớn
trong việc tăng hiệu năng của CSDL.

SQL Server 2005

3


7.1.1 Giới thiệu DML Trigger
Thực sự hữu dụng với những khả năng:


Nhận biết, ngăn chặn và huỷ bỏ được những
thao tác làm thay đổi trái phép dữ liệu
trong CSDL.



Các thao tác
trigger phát
một loạt các
đảm bảo tính



Thông qua DML trigger, bạn có thể tạo và
kiểm tra được những mối quan hệ phức tạp
hơn giữa các bảng trong CSDL mà bản thân
các ràng buộc không thể thực hiện được.

trên dữ liệu có thể được
hiện ra và tự động thực hiện
thao tác khác trên CSDL nhằm

hợp lệ của dữ liệu.

SQL Server 2005

4


7.1.2 Tạo DML Trigger
Tạo Trigger theo cấu trúc sau:
CREATE TRIGGER tên_trigger
ON tên_bảng
FOR {[INSERT][,][UPDATE][,][DELETE]}
AS
[IF UPDATE(tên_cột)
[AND UPDATE(tên_cột)|OR
UPDATE(tên_cột)]
...]
các_câu_lệnh_của_trigger
SQL Server 2005

5


7.1.2.1 Tạo Trigger cho hành động
thêm bản ghi

•SQL Server định nghĩa hai bảng logic INSERTED và
DELETED để sử dụng trong các trigger.
•Cấu trúc của hai bảng này tương tự như cấu trúc
của bảng mà trigger tác động.

•Dữ liệu trong hai bảng này tùy thuộc vào câu
lệnh tác động lên bảng làm kích hoạt trigger, cụ thể
trong các trường hợp sau:

SQL Server 2005

6


7.1.2.1 Tạo Trigger cho hành động
thêm bản ghi

•Khi câu lệnh DELETE được thực thi trên
bảng, các dòng dữ liệu bị xoá sẽ được sao
chép vào trong bảng DELETED. Bảng
INSERTED trong trường hợp này không có dữ
liệu.
•Dữ liệu trong bảng INSERTED sẽ là dòng
dữ liệu được chèn vào bảng gây nên sự kích
hoạt đối với trigger bằng câu lệnh
INSERT. Bảng DELETED trong trường hợp này
không có dữ liệu.
•Khi câu lệnh UPDATE được thực thi trên
bảng, các dòng dữ liệu cũ chịu sự tác
động của câu lệnh sẽ được sao chép vào
bảng DELETED, còn trong bảng INSERTED sẽ
là các dòng sau khi đã được cập nhật.
SQL Server 2005

7



7.1.2.1 Tạo Trigger cho hành động thêm
bản ghi
Ví dụ:

Tạo Trigger thực hiện công việc, khi người dùng
nhập bản ghi vào bảng LOP,
Nếu cột dữ liệu hedaotao là rỗng thì hệ thống tự
động gán giá trị của cột này bằng giá trị là ‘Chính
quy’.

SQL Server 2005

8


7.1.2.1 Tạo Trigger cho hành động thêm
bản ghi

CREATE TRIGGER trg_insert_tblLOP
ON LOP
AFTER INSERT
AS
BEGIN
DECLARE @hedaotao nvarchar(25)
DECLARE @malop nvarchar(10)
SELECT @hedaotao=hedaotao, @malop= malop
FROM INSERTED
IF @hedaotao='' or @hedaotao is null

UPDATE LOP
SET hedaotao='Chính quy'
Where malop=@malop
END
SQL Server 2005

9


7.1.2 Tạo DML Trigger
•7.1.2.2 Tạo Trigger cho hành động cập nhật bản
ghi:
Ví dụ:
Tạo Trigger thực hiện công việc, khi người dùng
cập nhật điểm lần 1 cho các bản ghi của bảng
DIEMTHI,
Nếu sau khi cập nhật cột dữ liệu điểm lần 1 có
giá trị >=5 thì thì hệ thống tự động xóa dòng điểm
thi lần 2 của sinh viên thi học phần đó.

SQL Server 2005

10


7.1.2 Tạo DML Trigger
CREATE TRIGGER Trg_Update_diemlan1
ON DIEMTHI
AFTER UPDATE
AS

BEGIN
DECLARE @diemlan1 numeric(5,2)
DECLARE @masv nvarchar(10)
DECLARE @mahocphan nvarchar(10)
SELECT @masv=masv, @mahocphan=mahocphan,
@diemlan1=diem
FROM INSERTED WHERE lanthi=1
IF @diemlan1>=5
DELETE FROM DIEMTHI
WHERE masv=@masv and mahocphan=@mahocphan and
lanthi=2
END
SQL Server 2005

11


7.1.2.3 Tạo Trigger cho hành động xóa
bản ghi
Ví dụ: Tạo Trigger thực hiện lưu
các mẫu tin bị xóa từ bảng DIEMTHI
vào bảng DELECTED_DIEMTHI).
CREATE TRIGGER Trg_Delete_DIEMTHI
ON DIEMTHI
AFTER DELETE
AS
BEGIN
INSERT INTO DELETED_DIEMTHI
SELECT * FROM DELETED
END

SQL Server 2005

12


7.1.2.4 Sử dụng mệnh đề IF
UPDATE
Sử dụng mệnh đề IF UPDATE trong trigger nếu muốn
trigger được kích hoạt khi việc thay đổi dữ liệu chỉ
liên quan đến một số cột nhất định nào đó của bảng.
•IF UPDATE không sử dụng được đối với câu lệnh
DELETE.

SQL Server 2005

13


7.1.2.4 Sử dụng mệnh đề IF
UPDATE
dụ 7.4:


•CREATE TRIGGER trg_nhatkybanhang_update_soluong
ON nhatkybanhang
FOR UPDATE
AS
IF UPDATE(soluong)
UPDATE mathang
SET mathang.soluong = mathang.soluong –

(inserted.soluong-deleted.soluong)
FROM (deleted INNER JOIN inserted ON
deleted.stt = inserted.stt) INNER JOIN
mathang
ON mathang.mahang = deleted.mahang
SQL Server 2005

14


7.1.2.5 Lệnh ROLLBACK
TRANSACTION
Một trigger có khả năng nhận
biết được sự thay đổi về mặt dữ
liệu trên bảng dữ liệu, từ đó có
thể phát hiện và huỷ bỏ những thao
tác không đảm bảo tính toàn vẹn dữ
liệu.
•Trong một trigger, để huỷ bỏ
tác dụng của câu lệnh làm kích hoạt
trigger, bạn sử dụng câu lệnh:
•ROLLBACK TRANSACTION
SQL Server 2005

15


7.1.2.5 Lệnh ROLLBACK
TRANSACTION


Ví dụ 7.7:

Ví dụ: Tạo Trigger để đảm bảo ràng
buộc số học phần thi lại của một sinh
viên không được vượt quá 2.

SQL Server 2005

16


7.2 DDL Trigger
7.2.1

Giới thiệu DDL Trigger

•DDL (Data Definition Language) Trigger được kích
hoạt khi người sử dụng làm thay đổi cấu trúc CSDL
hay đối tượng CSDL bằng các phát biểu SQL thuộc DDL
như: Create, Alter, Drop, Grant, Deny, Revoke,…
•Nếu DML Trigger dùng để kiểm soát dữ liệu chứa
trong Table hay View thì DDL Trigger có thể được sử
dụng cho chức năng quản trị CSDL. Đây là loại
Trigger mới xuất hiện trong SQL Server 2005

SQL Server 2005

17



7.2 DDL Trigger
7.2.1

Giới thiệu DDL Trigger

•Sau khi giai đoạn thiết kế CSDL hoàn tất, để
kiểm soát mọi sự thay đổi cấu trúc của CSDL, chúng
ta cần sử dụng loại Trigger này.
•Như vậy, mục đích của DDL Trigger là ngăn ngừa sự
thay đổi cấu trúc CSDL. Ngoài ra, bạn có thể ghi lại
những hành động làm thay đổi cấu trúc CSDL khi sử
dụng DDL Trigger.

SQL Server 2005

18


7.2 DDL Trigger
7.2.1

Giới thiệu DDL Trigger

•Mục đích của DDL Trigger là kiểm soát mọi sự thay
đổi cấu trúc của CSDL.
•Có thể ghi lại những hành động làm thay đổi cấu
trúc CSDL.

SQL Server 2005


19


7.2 DDL Trigger
7.2.2

Tạo DDL Trigger

Tạo DDL Trigger theo cấu trúc sau:
CREATE TRIGGER tên_trigger
ON DATABASE|ALL SERVER
FOR {[ Các sự kiện DDL] [nhóm các sự kiện]}
AS
các_câu_lệnh_của_trigger

SQL Server 2005

20


7.2 DDL Trigger
7.2.2

Tạo DDL Trigger

Ví dụ 7.8:
Ví dụ: Tạo Trigger không cho tạo Database

SQL Server 2005


21


7.2 DDL Trigger
7.2.3 Hàm Eventdata

•Thông tin về những sự kiện làm kích hoạt
DDL trigger được lưu lại trong trong hàm
Eventdata. Hàm này trả về một giá trị kiểu
xml. Lược đồ xml này bao gồm các thông tin
sau:
•Thời gian của sự kiện.
•Định danh xử lý hệ thống (The System
Process ID: SPID) của kết nối trong lúc
trigger thực hiện được thực hiện.
•Kiểu sự kiện đã kích hoạt trigger
•Tùy thuộc vào kiểu sự kiện, lược đồ bao gồm
thêm những thông tin như: database nơi sự kiện
xuất hiện, đối tượng bị tác động khi sự kiện
xuất hiện và câu lệnh T-SQL của sự kiện.
SQL Server 2005

22



×