1. Trang chủ
  2. » Công Nghệ Thông Tin

hệ quản trị csdl sql server - chương 8 trigger

18 729 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 18
Dung lượng 139,04 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

I- Khái niệm:I- Khái niệm: • Trigger là một thủ tục không có tham số • Một Table có thể chứa nhiều Trigger • Trigger tự động thực hiện khi một trong 3 phát biểu Insert, Update, Delete t

Trang 1

Chương 8:

TRIGGER

Giáo viên: Tạ Thúc Nhu Khoa CNTT trường ĐH Lạc Hồng

HỆ QUẢN TRỊ CSDL

SQL SERVER

Trang 2

I- Khái niệm:

I- Khái niệm:

Trigger là một thủ tục không có tham số

Một Table có thể chứa nhiều Trigger

Trigger tự động thực hiện khi một trong 3 phát biểu Insert,

Update, Delete thay đổi dữ liệu trên table chứa trigger.

Trigger chỉ được thực hiện khi phát biểu cập nhật thoả mãn các ràng buộc đã khai báo trên Table Do đó, Trigger

thường được dùng để kiểm tra các ràng buộc mà không thể khai báo trên Table như các ràng buộc liên thuộc tính liên

quan hệ, liên bộ liên quan hệ, ràng buộc chu trình

Sử dụng lệnh ROLLBACK TRAN trong Trigger để bãi bỏ

phát biểu cập nhật khi cần thiết.

Trang 3

II- Tạo Trigger cho Table:

II- Tạo Trigger cho Table:

1 Dùng lệnh Create Trigger

2 Dùng công cụ Management Studio

Trang 4

1- Lệnh Create Trigger:

1- Lệnh Create Trigger:

CREATE TRIGGER <trigger_name> ON <table name>

[WITH ENCRYPTION]

AFTER | FOR {DELETE, INSERT, UPDATE}

AS <Các phát biểu T-sql>

Tập con của { DELETE, INSERT, UPDATE} dùng chỉ định

những phát biểu cập nhật nào trên Table sẽ kích hoạt

Trigger.

Trang 5

2- Sử dụng bảng tạm: Inserted và Deleted

2- Sử dụng bảng tạm: Inserted và Deleted

Khi thực hiện Trigger, SQL tự động tạo 2 bảng tạm có cùng

cấu trúc với Table được cập nhật:

Bảng INSERTED : dùng chứa tạm các mẫu tin mới khi thực

hiện lệnh Insert hoặc mẫu tin chứa dữ liệu đã sửa đổi khi

thực hiện lệnh Update.

Bảng DELETED : dùng chứa tạm các mẫu tin bị xóa khi thực hiện lệnh Delete hoặc mẫu tin chứa dữ liệu cũ khi thực hiện lệnh Update.

Ta sử dụng dữ liệu trên các table này để thực hiện xử lý bên

trong Trigger liên quan đến các mẫu tin vừa mới thêm, sửa hay xóa

Trang 6

a) Khi Insert mẫu tin mới

a) Khi Insert mẫu tin mới

INSERTED

100

SL DGBan MaLH

SoHD

CTHD

100 30 10 23 12 56

SL

20 9

10249

DGBan MaLH

SoHD

10249

10249

10248

10248

10248

3 8

8 2

9 6

4 1

10 4

DELETED

SL DGBan MaLH

SoHD

100

Ví dụ : Kiểm tra RB: Một hóa đơn không có quá 10 chi tiết hóa đơn.

+ [SoHD]

T

Trang 7

-Ví dụ: Khi thêm 1 CTHD, kiểm tra RB: Một

hóa đơn không có quá 10 chi tiết hóa đơn.

Ví dụ: Khi thêm 1 CTHD, kiểm tra RB: Một

hóa đơn không có quá 10 chi tiết hóa đơn.

Create Trigger itrg_SoCTHD On CTHD

For Insert

As

If (Select Count(a.SoHD)

From CTHD a Join INSERTED b On a.SoHD = b.SoHD) >= 10

Begin

Print ‘So CTHD Khong the > 10’

RollBack Tran

End

Trang 8

Ví dụ: Khi thêm chi tiết hóa đơn thì phải giảm số tồn

của mặt hàng đã ghi trên chi tiết hóa đơn.

Ví dụ: Khi thêm chi tiết hóa đơn thì phải giảm số tồn

của mặt hàng đã ghi trên chi tiết hóa đơn.

Create Trigger itrg_GiamTon On CTHD

For Insert

As

Declare @D int

Select @D = Count( * ) From MatHang a Join INSERTED b On a.MaMH = b.MaMH

Where SoTon - b.SL < 0

If (@D > 0 )

Begin

Print ‘Khong du hang de ban’

RollBack Tran Return

End

Update MatHang Set SoTon = SoTon - SL

From INSERTED Where MatHang.MaMH = INSERTED.MaMH

Trang 9

b) Khi Delete mẫu tin

b) Khi Delete mẫu tin

INSERTED

SL DGBan MaLH

SoHD CTHD

30 10 23 12 56

SL DGBan MaLH

SoHD

10249

10249

10248

10248

10248

3 8

8 2

9 6

4 1

10 4

DELETED

100

SL DGBan MaLH

SoHD

100

Ví dụ: Khi xóa một chi tiết hóa đơn thì phải tăng số tồn của mặt hàng đã ghi

trên chi tiết hóa đơn.

Trang 10

Ví dụ: Khi xóa một chi tiết hóa đơn thì phải tăng số

tồn của mặt hàng đã ghi trên chi tiết hóa đơn.

Ví dụ: Khi xóa một chi tiết hóa đơn thì phải tăng số

tồn của mặt hàng đã ghi trên chi tiết hóa đơn.

Create Trigger trg_XoaCTHD On CTHD

For Delete

As

Update MatHang Set SoTon = SoTon + SL

From DELETED Where MatHang.MaMH = DELETED.MaMH

Go

Trang 11

c) Khi Update mẫu tin

c) Khi Update mẫu tin

INSERTED

10

SL DGBan MaLH

SoHD

CTHD

10 30 10 23 12 56

SL

20 9

10249

DGBan MaLH

SoHD

10249

10249

10248

10248

10248

3 8

8 2

9 6

4 1

10 4

DELETED

100

SL DGBan MaLH

SoHD

100

Ví dụ: Khi sửa SoHD của CTHD, kiểm tra RB: Một hóa đơn không có quá

10 chi tiết hóa đơn.

+

T

Trang 12

-Ví dụ: Khi sửa SoHD của CTHD, kiểm tra RB: Một

hóa đơn không có quá 10 chi tiết hóa đơn.

Ví dụ: Khi sửa SoHD của CTHD, kiểm tra RB: Một

hóa đơn không có quá 10 chi tiết hóa đơn.

Create Trigger utrg_SoCTHD On CTHD

For Update

As

If (Select Count(a.SoHD)

From CTHD a Join INSERTED b On a.SoHD = b.SoHD) > 10

Begin

Print ‘So CTHD Khong the > 10’

RollBack Tran

End

+ [SoHD]

T

Trang 13

-Ví dụ: Khi sửa số lượng trên các chi tiết hóa đơn thì phải

sửa số tồn của mặt hàng đã ghi trên chi tiết hóa đơn

Ví dụ: Khi sửa số lượng trên các chi tiết hóa đơn thì phải

sửa số tồn của mặt hàng đã ghi trên chi tiết hóa đơn

Create Trigger utrg_SuaCTHD On CTHD For Update

As

Declare @D int

Select @D = Count( * ) From MatHang a, DELETED b, INSERTED c

Where a.MaMH = b.MaMH And a.MaMH = c.MaMH And SoTon + b.SL - c.SL < 0

If (@D > 0 )

Begin

Print ‘Khong du hang de ban’

RollBack Tran

Return

End

Update MatHang Set SoTon = SoTon + b.SL - c.SL

From MatHang a, DELETED b, INSERTED c

Trang 14

3- Nhận biết Cột được cập nhật :

3- Nhận biết Cột được cập nhật :

Hàm Update (<Column Name>) : Trả về giá trị TRUE nếu

<Column Name> được cập nhật dữ liệu.

Ví dụ: Khi sửa thông tin chi tiết hóa đơn:

Nếu sửa SoHD thì kiểm tra RB "Một hóa đơn không có quá

10 CTHD

Nếu sửa SL thì thay đổi số tồn của mặt hàng

Trang 15

Ví dụ: Sử dụng hàm Update

Ví dụ: Sử dụng hàm Update

If (@D > 0 )

Begin RollBack Tran Return

End

Update MatHang

Set SoTon = SoTon + b.SL – c.SL

From MatHang a, DELETED b, INSERTED c

Where a.MaMH = b.MaMH And a.MaMH = c.MaMH

End

Create Trigger utrg_CTHD

On CTHD For Update

As

If Update(SoHD )

If ( Select Count(a.SoHD)

From CTHD a, INSERTED b

Where a.SoHD = b.SoHD)>=10

Begin

RollBack Tran

Return

End

If Update(SL)

Begin

Declare @D int

Select @D = Count( * )

From MatHang a, DELETED b,

INSERTED c

Where a.MaMH = b.MaMH And

Trang 16

4- Chỉ định thứ tự thực hiện các Trigger

4- Chỉ định thứ tự thực hiện các Trigger

Nếu cùng một thao tác trên một Table mà có nhiều Trigger

(khác tên nhau) Khi đó thứ tự thực hiện các trigger được

xác định dựa trên thứ tự tạo ra chúng

Để thay đổi thứ tự thực hiện mặc định này, sử dụng thủ tục:

sp_settriggerorder [@triggername = ] 'Tên trigger'

, [@order = ] 'First | Last | None ' , [@stmttype = ] 'Insert | Update | Delete '

Ví dụ: sp_SetTriggerOrder itrg_SoCTHD, 'First', ‘Insert’

sp_SetTriggerOrder itrg_GiamTon, 'Last', ‘Insert’

SP này chỉ có thể chỉ định trigger nào được thực hiện đầu

tiên và Trigger nào được thực hiện cuối cùng Các Trigger

còn lại sẽ thực hiện theo thứ tự tạo ra chúng.

Trang 17

5- Thực hiện hay không thực hiện Trigger

5- Thực hiện hay không thực hiện Trigger

ALTER TABLE <têntable>

ENABLE | DISABLE TRIGGER ALL | <têntrigger>[,…n]

Ví dụ: Không thực hiện tất cả Triggers của table CTHD

ALTER TABLE <têntable> DISABLE TRIGGER ALL

Ví dụ: Không thực hiện Trigger itrg_SoCTHD và utrg_SoCTHD

của table CTHD

ALTER TABLE <têntable>

DISABLE TRIGGER itrg_SoCTHD , utrg_SoCTHD

Trang 18

III- Sửa, Xóa Trigger:

III- Sửa, Xóa Trigger:

1 Sửa Trigger:

ALTER TRIGGER <trigger_name> ON <table name>

[WITH ENCRYPTION]

AFTER | FOR {DELETE, INSERT, UPDATE}

AS <Các phát biểu T-sql>

2 Xóa Trigger:

DROP TRIGGER <tên_trigger> [,…n]

Ngày đăng: 05/07/2014, 15:56

TỪ KHÓA LIÊN QUAN

w