– Lệnh cập nhật phải viết sao cho chỉ làm thay đổi dữ liệu thật sự trong một bảng (lệnh xóa chỉ thực hiện được nếu view chỉ tham chiếu đến đúng một bảng) – Không thỏa các điều kiện [r]
(1)(2)Nội dung
•
Trigger
•
Khung nhìn
(3)Trigger -Giới thiệu
•
Là loại stored procedure đặc biệt
– Tự động thực có thao tác insert, delete update liệu
– Thường dùng để kiểm tra ràng buộc toàn vẹn CSDL qui tắc nghiệp vụ
(4)Trigger – giới thiệu (tt)
•
Xử lý trigger thường cần sử dụng đến hai
bảng tạm:
– Inserted: chứa dòng vừa thao tác insert/ update thêm vào bảng
– Deleted: chứa dịng vừa bị xóa khỏi bảng thao tác update/delete
(update = delete dòng chứa giá trị cũ+ insert dòng chứa giá trị mới)
(5)Trigger – giới thiệu
•
Inserted Deleted bảng nhớ
chính
– Cục cho trigger
– Có cấu trúc giống bảng (table) mà trigger định nghĩa
(6)Trigger – giới thiệu(tt)
•
Nếu thao tác insert/ delete/ update thực
trên nhiều dòng, trigger gọi
lần
(7)Khai báo trigger
• Cú pháp:
Create trigger tên_trigger On {tên_bảng|tên_view}
{For| After| Instead of } { [delete] [,] [insert] [,] [update] }
As
{ các lệnh T-sql }
(8)Khai báo trigger (tt)
•
For | After:
– Trigger gọi thực sau thao tác delete/ insert/ update tương ứng thực thành cơng
Các dịng thêm chứa đồng thời bảng liệu bảng inserted
Các dịng bị xố nằm bảng deleted (đã bị xoá khỏi bảng liệu)
(9)Khai báo trigger (tt)
•
Instead of:
– Trigger gọi thực thay cho thao tác delete/ insert/ update tương ứng
Các dòng thêm chỉ chứa bảng inserted
Các dịng bị định xố nằm đồng thời bảng deleted bảng liệu (dữ liệu không bị xoá)
– Trigger Instead of thường dùng để xử lý cập
(10)Khai báo trigger (tt)
•
Lưu ý:
– Lệnh tạo trigger phải lệnh
query batch
– Trên bảng định nghĩa nhiều trigger
for/after cho thao tác…
(11)Khai báo trigger (tt)
– Không thể định nghĩa trigger instead of update/
delete bảng có cài đặt khố ngoại dạng update
cascade/ delete cascade
– Trong thân trigger, sử dụng hàm
Update(tên_cột) để kiểm tra xem việc cập nhật/ insert thực cột
Update(tên_cột) = true : có thực cập nhật cột
(12)Trigger -Ví dụ
•
Cho CSDL:
DatHang(MaPDT, NgayDH,…)
GiaoHang(MaPGH, MaPDH, NgayGH,…)
Ràng buộc: Ngày giao hàng nhỏ
(13)Trigger -Ví dụ
•
Bảng tầm ảnh hưởng:
Cần cài đặt trigger cho thao tác sửa đặt hàng, thêm/sửa giao hàng
Thêm Xoá Sửa
DatHang - -(*) +(NgayDH)
(14)Trigger -Ví dụ (tt)
•
Trigger cho thao tác thêm sửa giao
hàng:
Create trigger tr_GH_ins_upd_NgayGH
On GIAOHANG for insert, update As
(15)Trigger -Ví dụ (tt)
if update(MaPDH) or update (NgayGH)
if exists(select * from inserted i, DatHang d where i.MaPDH = d.MaPDH
and i.NgayGH<d.NgayDH) begin
raiserror (N‘Ngày GH nhỏ ngày ĐH,15,1) rollback tran
(16)Trigger -Ví dụ (tt)
(17)(18)Trigger - Ví dụ (tt)
•
Qui định:
– Các trận đấu đội bóng phải cách tối thiểu 24
– Cầu thủ thi đấu trận đấu mà đội cầu thủ tham gia
(19)Thay đổi xóa trigger
•
Thay đổi nội dung trigger:
Thay từ khóa create lệnh tạo trigger
từ khóa alter
•
Xóa trigger
(20)Nội dung
•
Trigger
•
Khung nhìn
(21)View – Khái niệm
•
View (khung nhìn) bảng ảo định
nghĩa lệnh select
– Đối với người dùng: view giống bảng thật – Dữ liệu view liệu nhiều
bảng thật (view không chứa liệu thật sự)
(22)View – Khái niệm (tt)
•
Mục đích sử dụng:
– Thể liệu dạng phù hợp với nhóm nghiệp vụ/ nhóm NSD
(23)View – Khai báo
•
Cú pháp:
Create view view_name [(column_name [ , n ])] [with Schemabinding]
(24)View – khai báo (tt)
– Schemabinding: gắn kết view với lược đồ, đó: Khơng thể xóa bảng hay view khác có liên quan đến định
nghĩa view có schemabinding
Khơng thể thay đổi cấu trúc bảng/ view việc thay đổi ảnh hưởng đến định nghĩa view có schemabinding
Các tên bảng, view câu select phải viết dạng owner.Tênbảng/Tênview tất phải database
Nếu view schemabinding định nghĩa view khác, view phải dạng schemabinding
(25)View – Khai báo (tt)
•
Ví dụ:
Create view ThiSinh_Nganh (SBD, HoTen, MaNganh, TenNganh) as
select ts.SBD, ts.HoTen, ts.Nganh, n.TenNganh from ThiSinh ts, Nganh n
where ts.Nganh = n.MaNganh
(26)Khai báo view – Lưu ý
•
Lệnh select định nghĩa view khơng
chứa:
– Order by, có phải kèm với TOP – Compute/ Compute…by
– Select into
•
Khơng thể gắn kết rule hay default vào view
•
Khơng thể khai báo
trigger for/after
view
(chỉ khai báo
trigger instead of
)
(27)View – Sử dụng
•
Truy xuất liệu từ view (select)
– Như truy xuất bảng
•
Cập nhật liệu (insert/ delete/ update)
– Dùng lệnh insert / delete / update tương tự thao tác bảng
cần xem xét thêm số vấn đề
(28)Cập nhật liệu view
•
View cập nhật (insert/ update/
delete) nếu:
– lệnh select định nghĩa view khơng chứa:
Cột dẫn suất (tính toán từ cột liệu thật sự) Trong số trường hợp xóa
Các hàm tổng hợp (count, sum, avg, max,…)
Group by,Top, Select distinct
(29)Cập nhật liệu view (tt)
– Trong mệnh đề from lệnh select phải tham
chiếu đến bảng ( view với liệu lấy từ bảng), phải select cột từ liệu
– Lệnh cập nhật phải viết cho làm thay đổi liệu thật một bảng (lệnh xóa thực view tham chiếu đến bảng) – Không thỏa điều kiện trên, có trigger
(30)Cập nhật liệu view (tt)
•
Ví dụ: Các view định nghĩa sau khơng thể
cập nhật được:
Create view V_SoNV
As Select MaPhong, Count (*) as SoNV From NhanVien
Group by MaPhong
Create View V_NhanVien
As select MaNV, HoNV + ‘ ‘ +TenNV as HoTen From NhanVien
Create View V1 Có thể
(31)Cập nhật view với Trigger Instead of
•
Có thể dùng trigger instead of để cập nhật
view
– Tự xử lý thao tác cập nhật
•
Ví dụ: Viết trigger instead of phép
insert view
V_NhanVien
(32)Cập nhật view với Trigger Instead of
create trigger tr_Ins_View_NV on V_NhanVien
instead of insert as
insert into NhanVien (MaNV, HoNV, TenNV) select MaNV,
left(TenNV, CharIndex(' ',TenNV)),
(33)Indexed View
•
Dùng liệu view lớn, truy xuất
thường xuyên
•
Cài đặt cluster index view
view trở
thành index view
– Dữ liệu index view lưu trữ lại bảng
(34)Thay đổi xóa view
•
Thay đổi cấu trúc view:
Thay từ khóa create lệnh tạo view
từ khóa alter