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

Trigger SQLServer hqtcsdl

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 (502.57 KB, 8 trang )

16/04/2015

Khái niệm Trigger (trên View,
Table)

Trigger là một dạng thủ tục đặc biệt (không có
tham số), sẽ tự động thực thi khi thực hiện các lệnh
thay đổi dữ liệu (INSERT, UPDATE hay DELETE)
trong CSDL

(Trên SQL Server)
2

1

Khái niệm Trigger

Lệnh tạo Trigger (T-SQL)

 Dùng Trigger:
 Để thay đổi dữ liệu trên nhiều table có liên quan
 Giúp mở rộng khả năng kiểm tra các ràng buộc toàn vẹn
 ….

 Các loại Trigger: UPDATE Trigger, INSERT
Trigger, DELETE Trigger

3

CREATE TRIGGER trigger_name
ON { table | view }


[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
AS
{ sql_statement [ ; ] [ ,...n ]}
4

1


16/04/2015

Tên Trggier cần tạo

CREATE TRIGGER trigger_name
ON { table | view }

CREATE TRIGGER trigger_name
ON { table | view }

{ FOR | AFTER | INSTEAD OF }

{ FOR | AFTER | INSTEAD OF }

{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
….
AS
{ sql_statement }

{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }

….
AS
{ sql_statement }
5

Tạo trigger trên Table
hay view nào?

6

CREATE TRIGGER trigger_name
ON { table | view }

CREATE TRIGGER trigger_name
ON { table | view }

{ FOR | AFTER | INSTEAD OF }

{ FOR | AFTER | INSTEAD OF }

{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
….
AS
{ sql_statement }

{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
….
Kiểu trigger cần tạo
AS
{ sql_statement }


Hành động nào sẽ kích hoạt trigger
7

8

2


16/04/2015

Các kiểu Trigger

CREATE TRIGGER trigger_name
ON { table | view }

 AFTER trigger:
 Chạy sau các hành động kiểm tra dữ liệu (rule, constraint):
Thực hiện sau khi hành động INSERT, UPDATE hay
DELETE đã được thực hiện (FOR)
 Chỉ định nghĩa được AFTER trigger trên Table

{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
….
AS
{ sql_statement }

 INSTEAD OF trigger


Các lệnh trong nội dung của
trggier
9

Cơ chế hoạt động của INSERT
Trigger

 Thay thế cho hành động kích hoạt trigger (do vậy sẽ chạy
trước các hành động kiểm tra dữ liệu (rule, constraint)
 Có thể định nghĩa được trên một view (với một hoặc nhiều
table cơ sở)
10
 Không dùng được trên View có WITH CHECK OPTION

Cơ chế hoạt động của INSERT
Trigger (AFTER/FOR)

 Khi thực hiện việc thêm dòng mới vào table 
sẽ kích hoạt một trigger (INSERT Trigger), dữ
liệu của dòng mới cũng được lưu trữ vào Table
(trong RAM) có tên là INSERTED
 Table INSERTED có cấu trúc giống hoàn toàn
với Table gắn trigger
Nội dung của
2 Table tạm

Chứa các dòng
mới được thêm
vào



11

12

3


16/04/2015

Cơ chế hoạt động của DELETE
Trigger

Cơ chế hoạt động của DELETE
Trigger

 Khi DELETE dòng từ table  sẽ kích hoạt
một trigger (DELETE Trigger), dữ liệu của
dòng vừa bị xóa sẽ được lưu vào Table (trong
RAM) có tên là DELETED
 Table DELETED có cấu trúc giống hoàn toàn
với Table gắn trigger




Nội dung của
2 Table tạm

Chứa các dòng bị

xóa từ Table R
13

Cơ chế hoạt động của UPDATE
Trigger
 Khi UPDATE nội dung một dòng từ table  sẽ
kích hoạt trigger (UPDATE Trigger)
 Sử dụng cả 2 table trung gian DELETED (lưu
nội dung dòng trước khi cập nhật) và
INSERTED (lưu nội dung dòng sau khi cập
nhật)

15

14

Cơ chế hoạt động của UPDATE
Trigger

UPDATE

16

4


16/04/2015

Ví dụ: Xét CSDL QLBH (trong
bài tập)


Hàm UPDATE()

 Tạo Trigger trên table CTHD cho hành động Insert,
kiểm tra RBTV: một hoá đơn (cùng một SOHD) chỉ có
tối đa 10 mục hàng
CREATE TRIGGER tr_cthd_insert ON cthd FOR insert
AS
IF EXISTS(SELECT cthd.sohd
FROM inserted INNER JOIN cthd ON cthd.SOHD=inserted.sohd
GROUP BY cthd.sohd HAVING COUNT(*)>10)
BEGIN
RAISERROR (N'Mỗi hóa đơn không thể có trên 10 dòng',16,1)
ROLLBACK TRAN
END

 Sử dụng hàm UPDATE(column_name)
 Kiểm tra cột nào được thay đổi dữ liệu
 Cú pháp:
UPDATE(column)
 Hàm UPDATE() không dùng trong DELETE
trigger

17

Hàm UPDATE()

18

Ví dụ:

 Tạo Trigger trên table CTHD cho hành động UPDATE, kiểm
tra RBTV: một hoá đơn (cùng một SOHD) chỉ có tối đa 10
mục hàng

 Cấu trúc thường dùng:
CREATE TRIGGER trigger_name
ON
table_name
……
AS
IF UPDATE(column_name) [{AND|OR}
UPDATE(column_name)…]
sql_statements

CREATE TRIGGER trg02_CTHD
ON CTHD AFTER INSERT
AS
IF UPDATE(SOHD)
IF EXISTS (SELECT * FROM INSERTED WHERE (SELECT COUNT(*)
FROM CTHD WHERE CTHD.SOHD=INSERTED.SOHD)>10)
BEGIN
RAISERROR (N'Một hóa đơn không thể có nhiều hơn 10 mặt hàng',16,1)
ROLLBACK TRAN
END
19

20

5



16/04/2015

Ví dụ về INSTEAD OF trigger

Ví dụ về INSTEAD OF trigger

CREATE TRIGGER trg_CTHD ON CTHD
INSTEAD OF INSERT
AS
PRINT N‘các dòng mới được thêm vào table INSERTED
PRINT N‘Không có dòng mới nào được thêm vào CTHD

CREATE TRIGGER trg_CTHD ON INSERT
INSTEAD OF INSERT
AS
INSERT INTO CTHD
(SOHD,MAMH,SOLGBAN,DONGIABAN)
SELECT SOHD,MAMH,SOLGBAN,DONGIABAN
FROM INSERTED
PRINT ‘Dữ liệu mới đã được thêm vào table CTHD

21

22

Sửa đổi Trigger sử dụng giao
diện

Lệnh Sửa đổi nội dung Trigger

ALTER TRIGGER trigger_name
ON { table | view }
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
AS
{ sql_statement [ ; ] [ ,...n ]}

Right Click
23

24

6


16/04/2015

Lệnh xóa một Trigger

Xóa Trigger sử dụng giao diện

DROP TRIGGER <tên trigger>
 Ví dụ:
USE Vidu
GO
DROP TRIGGER trg01_CTHD
GO

Right Click

25

26

Vô hiệu hóa Trigger
 Làm cho các trigger đang tồn tại nhưng không hoạt
động.
 Cú pháp:
ALTER TABLE table_name DISABLE TRIGGER
ALL | trigger_name
Table_name: Tên của table có gắn các trigger
ALL: Tất cả các trigger trên table_name sẽ bị vô hiệu
hóa
trigger_name: Chỉ trigger có tên chỉ ra mới bị vô hiệu
hóa
27

Vô hiệu hóa Trigger
 Ví dụ:
- Vô hiệu hóa tất cả các trigger trên table CTPN
trong CSDL hiện hành
ALTER TABLE CTPN DISABLE TRIGGER ALL
- Chỉ vô hiệu hóa trigger có tên trg_CTPN trên table
CTPN trong CSDL hiện hành
ALTER TABLE CTPN DISABLE
TRIGGER trg_CTPN
28

7



16/04/2015

Cho phép các Trigger hoạt động
lại (sau khi đã bị vô hiệu hóa)
 Cú pháp:
ALTER TABLE table_name ENABLE TRIGGER
ALL | trigger_name
Trong đó:
Table_name: Tên của table có gắn các trigger
ALL: Tất cả các trigger trên table_name sẽ có hiệu
lực trở lại
trigger_name: Chỉ trigger có tên chỉ ra mới có hiệu
lực trở lại
29

Vô hiệu hóa/cho phép hoạt động động
của Trigger (sử dụng giao diện)

30

31

8



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×