PDA

View Full Version : mấy pro cho em hỏi



thankforgod
14-06-2008, 20:29
create trigger trgdeletetitle on titles
for delete
as
delete titleauthor
from titleauthor t join deleted d
on t.title_id = d.title_id

select * from titles
select * from titleauthor

delete from titles
where title_id = '0001'

cau lênh trigger trên dùng để xóa các bảng phụ thuộc. khi xóa title_id_id ='0001' trong bảng titles thì tất cả các đòng có title_id ='0001'sẽ bi xóa phải không. Nếu sai thì mong mấy pác trả lời dùm em

vqt
15-06-2008, 16:34
Đúng rồi. Khi bạn xóa bản ghi trên bảng titles thì nó sẽ tự tìm và xóa các bản ghi liên quan trên bảng titleauthor.

thankforgod
15-06-2008, 21:06
vậy khi mình xóa bảng bên titles nếu có khóa ngoại thì nó không cho xóa trigger xung đột với constraint. còn khi bỏ khóa ngoại thì nó xóa tất cả thông tin bên bảng titlesauthor nhung các thông tim có title_id = '0001' thì nó lại để lại. em pó tay lun. mấy bác giải thích dùm em.

vqt
16-06-2008, 17:22
Để thực hiện công việc này, người ta thường dùng cascade delete (tức là thiết lập cascade delete khi tạo bảng chứa khoá chính).

Nếu bạn muốn dùng trigger để quản lý thì phải dùng INSTEAD OF trigger.

Một số thông tin thêm:

Một trigger thông thường sẽ được thực hiện sau khi kiểm tra ràng buộc khoá ngoại.
Một INSTEAD OF trigger sẽ được thực hiện trước bước kiểm tra ràng buộc khoá ngoại.
Một AFTER trigger sẽ được thực hiện sau khi hành động insert/update/delete hoàn tất.