42

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

  • Upload
    june

  • View
    20

  • Download
    3

Embed Size (px)

DESCRIPTION

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU. SQL SERVER. NỘI DUNG. KHUNG NHÌN (VIEW) THỦ TỤC LƯU TRÚ (STORED PROCEDURE - SP) TRIGGER HÀM CỦA NGƯỜI DÙNG (USER DEFINED FUNCTION - UDF). VIEW. KHUNG NHÌN. Bảng ảo. NỘI DUNG. Định nghĩa Câu lệnh Mục đích Cập nhật dữ liệu thông qua View Mã hóa View. - PowerPoint PPT Presentation

Citation preview

Page 1: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Page 2: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

NỘI DUNGNỘI DUNG

KHUNG NHÌN (VIEW)KHUNG NHÌN (VIEW)

THỦ TỤC LƯU TRÚ (STORED PROCEDURE - SP)THỦ TỤC LƯU TRÚ (STORED PROCEDURE - SP)

TRIGGERTRIGGER

HÀM CỦA NGƯỜI DÙNG (USER DEFINED HÀM CỦA NGƯỜI DÙNG (USER DEFINED

FUNCTION - UDF)FUNCTION - UDF)

Page 3: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Page 4: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Định nghĩaĐịnh nghĩa Câu lệnh Câu lệnh Mục đíchMục đích Cập nhật dữ liệu thông qua ViewCập nhật dữ liệu thông qua View Mã hóa ViewMã hóa View

NỘI DUNGNỘI DUNG

Page 5: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Định nghĩa VIEW Định nghĩa VIEW

View là View là bảng không chứa dữ liệubảng không chứa dữ liệu, nó chỉ là , nó chỉ là truy truy vấn kết hợp dữ liệuvấn kết hợp dữ liệu từ 1 hay nhiều bảng có quan từ 1 hay nhiều bảng có quan hệ với nhau và được hệ với nhau và được lưulưu thành một thành một đối tượngđối tượng của của SQL SV SQL SV

NSD có thể áp dụng NSD có thể áp dụng ngôn ngữ thao tác dữ liệungôn ngữ thao tác dữ liệu trên các View giống như Table.trên các View giống như Table.

Page 6: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Định nghĩa VIEWĐịnh nghĩa VIEWĐịnh nghĩa VIEWĐịnh nghĩa VIEW

USER_VIEWSUSER_VIEWS nv_kinhdoanhnv_kinhdoanhSELECT manv, hoten,luongFROM NHANVIENWHERE ma_phong = ‘KDA’;

SELECT *FROM nv_kinhdoanh;

NHANVIEN

SQL ServerSQL Server

Page 7: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Câu lệnh tạo VIEWCâu lệnh tạo VIEW

CREATE VIEWCREATE VIEW <Tên_View> <Tên_View>

[(<danh sách tên cột>) ] [(<danh sách tên cột>) ]

[WITH ENCRYPTION][WITH ENCRYPTION]

AS AS <Câu lệnh <Câu lệnh SELECTSELECT>>[with check option][with check option]

Page 8: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Câu lệnh tạo VIEWCâu lệnh tạo VIEW

Ví dụ 1: tạo View nv_kinh doanhVí dụ 1: tạo View nv_kinh doanh

CREAT VIEWCREAT VIEW nv_kinhdoanh nv_kinhdoanh

ASAS

SELECTSELECT Manv, Hoten, Luong Manv, Hoten, Luong

FROMFROM NHANVIEN NHANVIEN

* Sử dụng View:* Sử dụng View:

SELECT * FROM NV_KINHDOANHSELECT * FROM NV_KINHDOANH

Page 9: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Câu lệnh tạo VIEWCâu lệnh tạo VIEW

Ví dụ 2: tạo View nv_tre (nhân viên dưới 35 tuổi)Ví dụ 2: tạo View nv_tre (nhân viên dưới 35 tuổi)

CREAT VIEWCREAT VIEW nv_tre (Manv, Hoten, Tuoi) nv_tre (Manv, Hoten, Tuoi)ASAS

SELECTSELECT Manv, Hoten, Year(Getdate()) – Year(Ngaysinh) Manv, Hoten, Year(Getdate()) – Year(Ngaysinh)FROMFROM NHANVIEN NHANVIENWHEREWHERE Year(Getdate()) – Year(Ngaysinh) <= 35 Year(Getdate()) – Year(Ngaysinh) <= 35

* Sử dụng View:* Sử dụng View:SELECT * FROM NV_TRESELECT * FROM NV_TRE

Nếu một thuộc tính trong View được xây dựng từ một Nếu một thuộc tính trong View được xây dựng từ một biểu thức thì bắt buộc phải đặt tên cho thuộc tính đó.biểu thức thì bắt buộc phải đặt tên cho thuộc tính đó.

Page 10: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Mục đích dùng VIEWMục đích dùng VIEW

Hạn chế tính phức tạp của dữ liệu đối với NSD Hạn chế tính phức tạp của dữ liệu đối với NSD đơn giản.đơn giản.

Tạo ra bảng ảo có dữ liệu theo yêu cầu cho NSD Tạo ra bảng ảo có dữ liệu theo yêu cầu cho NSD và sử dụng trong thiết kế báo cáo.và sử dụng trong thiết kế báo cáo.

Hạn chế quyền truy cập dữ liệu của NSD.Hạn chế quyền truy cập dữ liệu của NSD. VieView dùng để trình bày các thông tin dẫn xuất.w dùng để trình bày các thông tin dẫn xuất.

Page 11: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Cập nhật dữ liệu thông qua ViewCập nhật dữ liệu thông qua View

View định nghĩa dữ liệu trên View định nghĩa dữ liệu trên một bảngmột bảng thì thì có thểcó thể dùng dùng InsertInsert

Nếu trong định nghĩa View có chứa mệnh Nếu trong định nghĩa View có chứa mệnh đề đề Inner joinInner join thì thì không thểkhông thể dùng các thao tác dùng các thao tác InsertInsert hay hay DeleteDelete để thay đổi dữ liệu để thay đổi dữ liệu

Nếu trong định nghĩa View có chứa mệnh Nếu trong định nghĩa View có chứa mệnh đề đề With check optionWith check option thì chỉ thì chỉ những bản ghi những bản ghi thỏa mãn điều kiệnthỏa mãn điều kiện của View mới được của View mới được InsertInsert, , UpdateUpdate

Page 12: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Xây dựng View dựa trên View khácXây dựng View dựa trên View khác

Khi xóa 1 view, mọi view được xây dựng dựa Khi xóa 1 view, mọi view được xây dựng dựa trên view đó cũng bị xóa.trên view đó cũng bị xóa.

Có thể dùng thủ tục sp_helptext để xem định Có thể dùng thủ tục sp_helptext để xem định nghĩaViewnghĩaView

Tạo View bằng EMTạo View bằng EM MMã hoá View: dùng ã hoá View: dùng WITH ENCRYPTIONWITH ENCRYPTION

KhKhông thể xem được nội dung Viewông thể xem được nội dung View Không thể thay đổi lại đượcKhông thể thay đổi lại được

Page 13: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Page 14: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)

SP SP được xây dựng từ các câu lệnh T-SQL và được lưu được xây dựng từ các câu lệnh T-SQL và được lưu trú trên SQL server.trú trên SQL server.

Muốn thực hiện một SP, NSD chỉ cần thực hiện một Muốn thực hiện một SP, NSD chỉ cần thực hiện một lời gọi hàm.lời gọi hàm.

Khi SP được chạy lần đầu tiên nó sẽ được biên dịch Khi SP được chạy lần đầu tiên nó sẽ được biên dịch qua 5 bước và sinh ra một mô hình truy vấn. Mô hình qua 5 bước và sinh ra một mô hình truy vấn. Mô hình này sẽ được đặt trong một CSDL của SQL server, lần này sẽ được đặt trong một CSDL của SQL server, lần sau chạy lại thủ tục sẽ không phải dịch lại nữa.sau chạy lại thủ tục sẽ không phải dịch lại nữa.

Page 15: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)

NNăm bước biên dịch thủ tục:ăm bước biên dịch thủ tục: Thủ tục được phân tích ra thành nhiều phần Thủ tục được phân tích ra thành nhiều phần Kiểm tra sự tồn tại của các đối tượng (view, table, …) mà thủ Kiểm tra sự tồn tại của các đối tượng (view, table, …) mà thủ

tục tham chiếu tới.tục tham chiếu tới. Lưu trữ tên thủ tục vào bảng sysobject, lưu trữ các mã lệnh Lưu trữ tên thủ tục vào bảng sysobject, lưu trữ các mã lệnh

của thủ tục vào bảng syscomments.của thủ tục vào bảng syscomments. Sinh ra mô hình truy vấn của thủ tục và lưu vào bảng Sinh ra mô hình truy vấn của thủ tục và lưu vào bảng

sysproceduresysprocedure Khi SP được chạy lần đầu tiên, cây truy vấn sẽ được đọc và Khi SP được chạy lần đầu tiên, cây truy vấn sẽ được đọc và

được tối ưu thành một kế hoạch thủ tục và chạy được tối ưu thành một kế hoạch thủ tục và chạy tiết kiệm tiết kiệm thời gian tái phân tích, biên dịch cây truy vấn mỗi khi chạy thời gian tái phân tích, biên dịch cây truy vấn mỗi khi chạy thủ tục.thủ tục.

Page 16: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)

Trong mTrong một phiên làm việc, nếu SP được thực hiện, nó ột phiên làm việc, nếu SP được thực hiện, nó sẽ được lưu trữ vào vùng nhớ đệm. Những lần sau nếu sẽ được lưu trữ vào vùng nhớ đệm. Những lần sau nếu SP được gọi thực hiện lại thì nó sẽ được đọc trực tiếp SP được gọi thực hiện lại thì nó sẽ được đọc trực tiếp ra từ vùng nhớ đệm ra từ vùng nhớ đệm nâng cao hiệu suất chạy truy nâng cao hiệu suất chạy truy vấn.vấn.

Page 17: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)

CCú pháp lệnh tạo SP:ú pháp lệnh tạo SP:CREATE PROC[EDURE] <tên SP>CREATE PROC[EDURE] <tên SP>

[@ <tên tham số 1> <kiểu DL> [@ <tên tham số 1> <kiểu DL>

[= <gi[= <giá trị>á trị>] [OUTPUT], . . .]] [OUTPUT], . . .]

[WITH RECCOMPILE|ENCRYPTION|RECOMPILE, ENCRYPTION][WITH RECCOMPILE|ENCRYPTION|RECOMPILE, ENCRYPTION]

ASAS

<các câu lệnh SQL, câu lệnh điều khiển, . . .><các câu lệnh SQL, câu lệnh điều khiển, . . .>

GiGiải thích:ải thích:- =<giá trị>: gán giá trị ban đầu cho tham số=<giá trị>: gán giá trị ban đầu cho tham số- OUTPUT: giOUTPUT: giá trị thay đổi của tham số ở trong thủ tục được đưa á trị thay đổi của tham số ở trong thủ tục được đưa

ra bên ngoài thủ tục.ra bên ngoài thủ tục.

VVí dụí dụ

Page 18: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)

TThực hiện thủ tục: hực hiện thủ tục: EXEC <tên SP>EXEC <tên SP> Thay đổi thủ tụcThay đổi thủ tục

ALTER PROALTER PRO[[CEDURECEDURE]] . . . . . . XXóa thủ tụcóa thủ tụcDROP PRO[CEDURE] <tên SP>DROP PRO[CEDURE] <tên SP> BBó thủ tụcó thủ tục

Page 19: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)

Sử dụng tùy chọn Sử dụng tùy chọn RECOMPILERECOMPILE trong câu lệnh trong câu lệnh CREATE CREATE

PROPRO: : Thủ tục sẽ được biên dịch lại từ đầu mỗi khi thực hiệnThủ tục sẽ được biên dịch lại từ đầu mỗi khi thực hiện Khi biên dịch lại các thông tin mới của SP được cập nhật và Khi biên dịch lại các thông tin mới của SP được cập nhật và

tối ưu lại.tối ưu lại. Sử dụng tùy chọn Sử dụng tùy chọn RECOMPILERECOMPILE trong câu lệnh trong câu lệnh EXECEXEC

Thủ tục sẽ được biên dịch lại trong lần thực thi đó và lưu lại Thủ tục sẽ được biên dịch lại trong lần thực thi đó và lưu lại kế hoạch thực thi mới của nó vào vùng nhớ đệm.kế hoạch thực thi mới của nó vào vùng nhớ đệm.

Biên dịch lại tất cả các thủ tục của bảng:Biên dịch lại tất cả các thủ tục của bảng:

EXECEXEC sp_recompile <tên bảng> sp_recompile <tên bảng>

Page 20: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)

Ví dụ: Ví dụ: USE qlnv;USE qlnv;

GOGO

CREATE PROC DS_PhongCREATE PROC DS_Phong

@BienMaPhong CHAR (3)@BienMaPhong CHAR (3)

ASAS

SELECT Manv, HoTen, NgaySinhSELECT Manv, HoTen, NgaySinh

FROM NhanVienFROM NhanVien

WHERE MaPhong=@BienMaPhong WHERE MaPhong=@BienMaPhong

GOGO

Exec DS_Phong 'KDA'Exec DS_Phong 'KDA'

SP này như một view có tham số!

Page 21: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)

Ví dụ: Ví dụ: USE qlnv;USE qlnv;

GOGO

CREATE PROC Soluong_PhongCREATE PROC Soluong_Phong

@BienMaPhong CHAR (3),@BienMaPhong CHAR (3),

@SL int OUTPUT@SL int OUTPUT

ASAS

SELECT @SL = COUNT (*)SELECT @SL = COUNT (*)

FROM NhanVienFROM NhanVien

WHERE MaPhong=@BienMaPhong WHERE MaPhong=@BienMaPhong

GOGO

-- Thuc hien thu tuc luu tru-- Thuc hien thu tuc luu truDECLARE @dem INT; DECLARE @phong CHAR(3); DECLARE @dem INT; DECLARE @phong CHAR(3);

SET @phong='KDA';SET @phong='KDA';

EXEC Soluong_Phong @phong, @dem OUTPUTEXEC Soluong_Phong @phong, @dem OUTPUT

--Hoac--Hoac

EXEC Soluong_Phong @BienMaPhong=@phong, @SL=@dem OUTPUTEXEC Soluong_Phong @BienMaPhong=@phong, @SL=@dem OUTPUT

PRINT 'So luong nhan vien phong ' + @phong + ' la: ' + CAST (@dem AS CHAR(20))PRINT 'So luong nhan vien phong ' + @phong + ' la: ' + CAST (@dem AS CHAR(20))

--Xoa thu tuc luu tru--Xoa thu tuc luu tru

DROP PROC Soluong_PhongDROP PROC Soluong_Phong

Page 22: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)

Ví dụ: (Thu tuc luu tru voi tham so mac dinh)Ví dụ: (Thu tuc luu tru voi tham so mac dinh)CREATE PROC Soluong_Phong_DefaultCREATE PROC Soluong_Phong_Default

@BienMaPhong CHAR (3)='KDA'@BienMaPhong CHAR (3)='KDA',,

@SL int OUTPUT@SL int OUTPUT

ASAS

SELECT @SL = COUNT (*)SELECT @SL = COUNT (*)

FROM NhanVienFROM NhanVien

WHERE MaPhong=@BienMaPhong WHERE MaPhong=@BienMaPhong

GOGO

DECLARE @dem INT; DECLARE @dem INT;

EXEC Soluong_Phong_Default @SL=@demEXEC Soluong_Phong_Default @SL=@dem

EXEC Soluong_Phong_Default 'QTA', @demEXEC Soluong_Phong_Default 'QTA', @dem

Page 23: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORE PROCEDURE)(STORE PROCEDURE)

Create proc XepLoaiSV @MaSV varchar(10), @DTB float output, @XL nvarchar(20) output

AsSet @DTB = (Select avg(Diem) from KetQua KqWhere MaSV = @MaSV and not exists (

select * from KetQua Kq1where Kq1.MaSV = @MaSV and

Kq1.MaMH=Kq.MaMHand Kq1.LanThi > Kq.LanThi

) )

If @DTB >= 9Set @XL = N’Xuât sac’

Else if @DTB >= 8Set @XL = N’Gi~i’

Else if @DTB >= 7Set @XL = N’Khá’

Else if @DTB >= 5Set @XL = N’Trung bình’

ElseSet @XL = N’Yêu’

Go

Page 24: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Page 25: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

HHÀM CỦA NSDÀM CỦA NSD(USER DEFINED FUNCTIONS-UDFs)(USER DEFINED FUNCTIONS-UDFs)

Cú pháp câu lệnh:Cú pháp câu lệnh:

CREATE FUNCTION <tên hàm>CREATE FUNCTION <tên hàm>

([@<tên tham số> <kiểu DL vô hướng> [= <giá trị>] [, . . .]])([@<tên tham số> <kiểu DL vô hướng> [= <giá trị>] [, . . .]])

RETURNRETURNSS <kiểu vô hướng>|<table> <kiểu vô hướng>|<table>

[WITH ENCRYPTION][WITH ENCRYPTION]

ASAS

BEGINBEGIN

[<các câu lệnh>][<các câu lệnh>]

RETURN <giá trị vô hướng>| (<câu lệnh RETURN <giá trị vô hướng>| (<câu lệnh SELECT>)SELECT>)

Page 26: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

HHÀM CỦA NSDÀM CỦA NSD(USER DEFINED FUNCTIONS-UDFs)(USER DEFINED FUNCTIONS-UDFs)

--Ham vo huong--Ham vo huongCREATE FUNCTION Ham_Soluong_Phong ( @BienMaPhong CHAR (3) )CREATE FUNCTION Ham_Soluong_Phong ( @BienMaPhong CHAR (3) )

RETURNRETURNSS int int

ASAS

BEGINBEGIN

DECLARE @SL int;DECLARE @SL int;

SELECT @SL = COUNT (*)SELECT @SL = COUNT (*)

FROM NhanVienFROM NhanVien

WHERE MaPhong=@BienMaPhong ;WHERE MaPhong=@BienMaPhong ;

RETURN (@SL);RETURN (@SL);

ENDEND--Su dung ham (Ham xuat hien trong bieu thuc)--Su dung ham (Ham xuat hien trong bieu thuc)

SELECT dbo.Ham_Soluong_Phong('KDA');SELECT dbo.Ham_Soluong_Phong('KDA');

SELECT MaPhong, count (*) SELECT MaPhong, count (*)

FROM NhanVien FROM NhanVien

GROUP BY MaPhongGROUP BY MaPhong

HAVING count(*) > dbo.Ham_Soluong_Phong('QTA')HAVING count(*) > dbo.Ham_Soluong_Phong('QTA')

Page 27: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

--Ham cho ket qua la mot bang--Ham cho ket qua la mot bangCREATE FUNCTION Ham_DS_Phong (@BienMaPhong CHAR (3))CREATE FUNCTION Ham_DS_Phong (@BienMaPhong CHAR (3))

RETURNS @kq TABLE (Manv CHAR(5), HoTen NCHAR(40), NgaySinh DATETIME)RETURNS @kq TABLE (Manv CHAR(5), HoTen NCHAR(40), NgaySinh DATETIME)

BEGINBEGIN

INSERT INTO @kqINSERT INTO @kq

SELECT Manv, HoTen, NgaySinhSELECT Manv, HoTen, NgaySinh

FROM NhanVienFROM NhanVien

WHERE MaPhong=@BienMaPhong WHERE MaPhong=@BienMaPhong

RETURNRETURN

ENDEND

-- Su dung ham tra ket qua bang nhu la TABLE-- Su dung ham tra ket qua bang nhu la TABLE

SELECT * SELECT *

FROM FROM Ham_DS_Phong ('QTA')Ham_DS_Phong ('QTA')

HHÀM CỦA NSDÀM CỦA NSD(USER DEFINED FUNCTIONS-UDFs)(USER DEFINED FUNCTIONS-UDFs)

Page 28: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

UDFs giống như SP nhưng khác ở các điểm sau:UDFs giống như SP nhưng khác ở các điểm sau:

UDF SP

- Giá trị các tham số không được truyền ra ngoài.

- Trả ra một giá trị bằng mệnh đề RETURN

- Có thể trả về một giá trị vô hướng hoặc một bảng dữ liệu.

- Có thể đưa giá trị của tham số ra ngoài bằng thuộc tính OUTPUT

- Chỉ trả về kiểu DL giá trị

kiểu nguyên

HHÀM CỦA NSDÀM CỦA NSD(USER DEFINED FUNCTIONS-UDFs)(USER DEFINED FUNCTIONS-UDFs)

Page 29: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Page 30: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Nội dungNội dung

Khái niệm về triggerKhái niệm về trigger

Câu lệnh tạo triggerCâu lệnh tạo trigger

Các loại triggerCác loại trigger

Ứng dụng của triggerỨng dụng của trigger

Sửa, xóa triggerSửa, xóa trigger

Page 31: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Khái niệm về triggerKhái niệm về trigger

Thủ tục lưu trú (Stored Procedure) đặc biệt Thủ tục lưu trú (Stored Procedure) đặc biệt Triger Triger tự động được chạytự động được chạy mỗi khi có một mỗi khi có một

hành độnghành động liên quan đến nó xảy ra liên quan đến nó xảy ra Triger Triger không có tham sốkhông có tham số, , không trả ra giá không trả ra giá

trịtrị như SP bình thường. như SP bình thường. Các loại trigger: Insert trigger, Delete Các loại trigger: Insert trigger, Delete

trigger, Update trigger, trigger tổng hợp.trigger, Update trigger, trigger tổng hợp.

Page 32: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Cú pháp câu lệnh tạo triggerCú pháp câu lệnh tạo trigger

CREATE TRIGGERCREATE TRIGGER <tên triger> <tên triger>

ONON <tên bảng>|<tên view> <tên bảng>|<tên view>

[[WITH ENCRYPTIONWITH ENCRYPTION]]

{{

{{FORFOR | | AFTERAFTER| | INSTEAD OFINSTEAD OF}}

<<INSERTINSERT [, [, UPDATEUPDATE] [, ] [, DELETEDELETE]>]>

}}

ASAS

<câu lệnh SQL><câu lệnh SQL>

Page 33: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Trigger chèn (Insert trigger): định nghĩaTrigger chèn (Insert trigger): định nghĩa

Tự độngTự động được thực hiện mỗi khi bản ghi được thực hiện mỗi khi bản ghi mới được chèn vào bảng gắn với nómới được chèn vào bảng gắn với nó

Một bảng tạm Một bảng tạm InsertedInserted sẽ được sinh ra sẽ được sinh ra Bản ghi cần chèn sẽ được ghi vào bảng cơ Bản ghi cần chèn sẽ được ghi vào bảng cơ

sở và bảng Insertedsở và bảng Inserted

Page 34: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Trigger chèn: ví dụTrigger chèn: ví dụ

CREATE TRIGGER trInsNVCREATE TRIGGER trInsNV

ON NHANVIENON NHANVIEN

FOR INSERTFOR INSERT

ASAS

RAISERROR('%d hang da duoc them vao bang RAISERROR('%d hang da duoc them vao bang NHANVIEN', 0, 1,@@rowcount) NHANVIEN', 0, 1,@@rowcount)

Trigger này tự động được thực hiện mỗi khi có bản Trigger này tự động được thực hiện mỗi khi có bản ghi mới được chèn vào bảng NHANVIENghi mới được chèn vào bảng NHANVIEN

Page 35: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Trigger xóa: ví dụTrigger xóa: ví dụ

CREATE TRIGGER trDelNVCREATE TRIGGER trDelNV

ON NHANVIENON NHANVIEN

FOR DELETEFOR DELETE

ASAS

RAISERROR('%d hàng bị xóa trong bảng RAISERROR('%d hàng bị xóa trong bảng NHANVIEN', 0, 1,@@rowcount)NHANVIEN', 0, 1,@@rowcount)

Trigger này tự động được thực hiện mỗi khi có một Trigger này tự động được thực hiện mỗi khi có một hoặc nhiều bản ghi bị xóa ở bảng NHANVIENhoặc nhiều bản ghi bị xóa ở bảng NHANVIEN

Page 36: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Trigger cập nhật (Update trigger): ví dụTrigger cập nhật (Update trigger): ví dụ

CREATE TRIGGER trUpNVCREATE TRIGGER trUpNV

ON NHANVIENON NHANVIEN

FOR UPDATEFOR UPDATE

ASAS

RAISERROR('%d RAISERROR('%d %d hàng đã được sửa ở bảng bảng %d hàng đã được sửa ở bảng bảng

NHANVIEN'NHANVIEN', 0, , 0, 1,@@rowcount)1,@@rowcount)

Trigger này tự động được thực hiện mỗi khi có một Trigger này tự động được thực hiện mỗi khi có một câu lệnh Update được thực hiện trên bảng câu lệnh Update được thực hiện trên bảng NHANVIEN.NHANVIEN.

Page 37: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Trigger tổng hợp: ví dụTrigger tổng hợp: ví dụ

CREATE TRIGGER trIns_UpNVCREATE TRIGGER trIns_UpNV

ON NHANVIENON NHANVIEN

FOR INSERT, UPDATEFOR INSERT, UPDATE

ASAS

RAISERROR('%d hàng đã được thêm hoặc sửa ở RAISERROR('%d hàng đã được thêm hoặc sửa ở bảng NHANVIEN', 0, 1,@@rowcount)bảng NHANVIEN', 0, 1,@@rowcount)

Page 38: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Trigger Trigger Instead ofInstead of

cho phép cập nhật DL các bảng thông qua cho phép cập nhật DL các bảng thông qua view có liên kết nhiều bảngview có liên kết nhiều bảng

Page 39: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Ứng dụng: Đảm bảo ràng buộc toàn vẹn dữ liệuỨng dụng: Đảm bảo ràng buộc toàn vẹn dữ liệu

CREATE TRIGGER trDelNVCREATE TRIGGER trDelNVON NHANVIENON NHANVIENFOR DELETEFOR DELETEASASRAISERROR('%d hang bi xoa trong bang NHANVIEN', 0, RAISERROR('%d hang bi xoa trong bang NHANVIEN', 0,

1,@@rowcount)1,@@rowcount)------------------------CREATE TRIGGER trDelPhongCREATE TRIGGER trDelPhongON PHONGON PHONGFOR DELETEFOR DELETEASASDELETE NHANVIEN FROM DELETED WHERE DELETE NHANVIEN FROM DELETED WHERE

DELETED.MAPHONG =NHANVIEN.MAPHONG DELETED.MAPHONG =NHANVIEN.MAPHONG

Page 40: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Ứng dụng: Đóng gói quy tắc nghiệp vụỨng dụng: Đóng gói quy tắc nghiệp vụ

CREATE TRIGGER trInsNV_PHONGCREATE TRIGGER trInsNV_PHONG

ON NHANVIENON NHANVIEN

FOR INSERTFOR INSERT

ASAS

UPDATE PHONG SET SONV = SONV+1 UPDATE PHONG SET SONV = SONV+1 WHERE PHONG.MAPHONG = (SELECT WHERE PHONG.MAPHONG = (SELECT MAPHONG FROM INSERTED)MAPHONG FROM INSERTED)

Page 41: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Một số chú ý khi dùng triggerMột số chú ý khi dùng trigger

Một bảng có nhiều triggerMột bảng có nhiều trigger Mỗi một trigger có tên duy nhấtMỗi một trigger có tên duy nhất Trong trigger thường dùng mệnh đề IF Trong trigger thường dùng mệnh đề IF

EXISTSEXISTS

Page 42: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Xóa, sửa Xóa, sửa triggertrigger

Xoá triggerXoá trigger

DROP TRIGGER <tên trigger>DROP TRIGGER <tên trigger> Sửa triggerSửa trigger

ALTER TRIGGER <tên trigger> . . .ALTER TRIGGER <tên trigger> . . .

Xem lại định nghĩa của trigger: sp_helptextXem lại định nghĩa của trigger: sp_helptext

Tạo trigger bằng EMTạo trigger bằng EM