By GokiSoft.com|
15:47 23/02/2021|
SQL Server/MySQL
[Share Code] Tìm hiểu index + trigger - Lập trình SQL Server
select * from SinhVien
select * from SinhVien where TenSinhVien like '%V%' --nhanh: 80-90 %
-- insert, update, delete: 10% (2-3%)
create clustered index IX_SinhVien on SinhVien (MaSinhVien)
drop index IX_SinhVien on SinhVien
--------------------------------------------------------------------------
------------------------------- Trigger ----------------------------------
--------------------------------------------------------------------------
select * from SinhVien
select * from MonHoc
select * from Course
select * from SinhVien
alter table SinhVien
add birthday date
alter table SinhVien
add gender nvarchar(20)
-- gender: Male, Female
update SinhVien set gender = 'Male'
update SinhVien set gender = 'DDD' where MaSinhVien = 'DDD'
insert into SinhVien(MaSinhVien, TenSinhVien, NgaySinh, gender)
values
('AA', 'Xin Chao', '1999-01-02', 'OKOK')
alter table SinhVien
add constraint check_gender check (gender = 'Male' or gender = 'Female')
alter table SinhVien
drop constraint check_gender
delete from SinhVien where MaSinhVien in ('AA', 'DTD')
update SinhVien set gender = 'DDD' where MaSinhVien = 'DDD'
insert into SinhVien(MaSinhVien, TenSinhVien, NgaySinh, gender)
values
('FSD', 'Xin Chao', '1999-01-02', 'Male')
select * from SinhVien
-- Trigger
create trigger trigger_check_gender on SinhVien
for insert
as
begin
-- Khi cau lenh insert duoc thuc hien -> goi toi khoi code nay de kiem tra
-- du lieu dc insert vao no nam trong bien inserted
if (select count(*) from inserted where gender not in ('Male', 'Female')) > 0
begin
-- Huy lenh di
print N'Gioi tinh phai la cac gia tri Male hoac Female'
rollback transaction
end
end
alter trigger trigger_check_gender on SinhVien
for insert
as
begin
-- Khi cau lenh insert duoc thuc hien -> goi toi khoi code nay de kiem tra
-- du lieu dc insert vao no nam trong bien inserted
-- if (select count(*) from inserted where gender not in ('Male', 'Female')) > 0
-- begin
-- Huy lenh di
print N'Gioi tinh phai la cac gia tri Male hoac Female'
rollback transaction
-- end
end
drop trigger trigger_check_gender
-- update
update SinhVien set gender = 'Female' where MaSinhVien = 'DDD'
--> Tat ca cac ban ghi bi anh huong => inserted
select * from SinhVien
create trigger trigger_update_check_gender on SinhVien
for update
as
begin
-- Khi cau lenh insert duoc thuc hien -> goi toi khoi code nay de kiem tra
-- du lieu dc insert vao no nam trong bien inserted
if (select count(*) from inserted where gender not in ('Male', 'Female')) > 0
begin
-- Huy lenh di
print N'Gioi tinh phai la cac gia tri Male hoac Female'
rollback transaction
end
end
-- Viet 1 trigger => khong cho phep thay doi MaSinhVien
update SinhVien set MaSinhVien = '123' where MaSinhVien = 'AA'
update SinhVien set TenSinhVien = 'Xin Chao' where MaSinhVien = 'AA'
select * from SinhVien
create trigger trigger_not_update_msv on SinhVien
for update
as
begin
print N'Khong dc phep thay doi MSV'
rollback transaction
end
alter trigger trigger_not_update_msv on SinhVien
for update
as
begin
if update(MaSinhVien)
begin
print N'Khong dc phep thay doi MSV'
rollback transaction
end
end
-- trigger delete
select * from SinhVien
delete from SinhVien where MaSinhVien like '*A*' -- du lieu xoa nam trong bien deleted
delete from SinhVien where MaSinhVien = 'AA' -- du lieu xoa nam trong bien deleted
delete from SinhVien where MaSinhVien = 'dd' -- du lieu xoa nam trong bien deleted
create trigger trigger_not_delete_msv_aa on SinhVien
for delete
as
begin
if (select count(*) from deleted where MaSinhVien = 'AA') > 0
begin
print N'Khong dc phep xoa sinh vien vs msv = AA'
rollback transaction
end
end
-------------------------------------------------------------------------
select * from MonHoc
select * from Course
delete from GiangVien
delete from SinhVien_Hoc_Course
delete from MonHoc where MaMonHoc = 'HTML' --> Co cach nao de chay dc cau lenh nay ko???
delete from MonHoc where MaMonHoc = 'AA'
insert into MonHoc (MaMonHoc, TenMonHoc)
values
('AA', 'AAAAAAAAAAAAAAAAAAAA')
delete from Course where Ma_MonHoc = 'HTML' -- OK
alter trigger trigger_instead_of_mmh on MonHoc
instead of delete
as
begin
delete from Course where Ma_MonHoc in (select MaMonHoc from deleted)
delete from MonHoc where MaMonHoc in (select MaMonHoc from deleted)
end
Tags:
Phản hồi từ học viên
5
(Dựa trên đánh giá ngày hôm nay)