ĐỀ THI HT MÔN HC CÁC H CƠ S D LIU
1) Transaction là gì, mc đích và cơ chế trin khai ca nó trong SQL Server. Cho 1 ví d v 1
transaction và viết Script SQL thc thi transaction đó.
Transaction (giao tác) là mt dãy các thao tác cn thc hin trên cơ s d liu dưới mt đơn
v duy nht, nghĩa là hoc thc hin tt c các thao tác hoc không thc hin thao tác nào
c.
Transaction (Giao dch) trong SQL Server là mt tp hp tun t ca các câu lnh SQL đơn
để to thành mt đơn v lun lý duy nht. Đơn v lun lý này làm vic phi đảm bo 4 tính
cht: tính nguyên t (atomicity), tính nht quán (consistency), tính cô lp (isolation) và tính
bn vng (durability) - (ACID).
Ví d: giao tác chuyn khon A sang B gm 2 thao tác sau:
– Tr tin A.
– Cng tin B.
Chuyn khon được thc hin dưới dng giao tác (transaction) nghĩa là hoc thc hin c 2 vic tr
tin A và cng tin B hoc nếu có s c thì không làm gì c và thông báo giao tác tht bi.
Mc đích: Gii quyết các vn đề:
oVn đề mt d liu đã cp nht.
oVn đề không th đọc li.
oVn đề d liu không nht quán.
Cài transaction trên SQL Server: begin transaction, commit, rollback, save transaction
Ví d v mt d liu đã cp nht:
oVí d 1: Nhà sách còn 500 quyn sách.
– Vào lúc T1 nhân viên A nhn yêu cu mua 400 quyn t khách hàng X.
– Cũng vào lúc T1 nhân viên B nhn yêu cu mua 300 quyn t khách hàng Y.
– A và B đọc d liu thy còn 500 quyn nên đều đồng ý bán.
oVí d 2: Nhà sách còn 500 quyn sách.
– Vào lúc T2 nhân viên A s thc hin cp nht s sách t 500 thành 100.
– Vào lúc T3 nhân viên B s thc hin cp nht s sách t 500 thành 200.
Như vy thao tác cp nht ca A không có tác dng hay d liu mà A cp nht s b mt vì
B cp nht sau. (last in wind)
Ví d v d liu không th đọc li:
oVí d 1: Gi s nhà sách còn 200 quyn sách.
Vào lúc T1 nhân viên A bán cho khách 150 quyn, s thc hin cp nht s sách t 200
thành 50. (Giao dch chưa hoàn thành chng hn vì vic giao nhn tin chưa xong).
Sau đó lúc T2, B nhn được yêu cu mua 100 quyn sách, nếu B được đọc d liu chưa
hoàn tt thì B s t chi bán 100 quyn sách này.
oVí d 2: Gi s nhà sách còn 200 quyn sách.
– Nếu vào lúc T3 vì lý do nào đó chng hn không đủ tin khách hàng ca A không mua 150
quyn sách na. Giao tác bán hàng ca A s không th thc hin nên quay vê trng thái s sách
còn là 200.
– Nhưng B đã t chi khách hàng.
– Nếu B không đọc được d liu t lúc T1 đến T3 thì s như thê nào?
Ví d v d liu không nht quán: Gi s nhân viên C cân tng hp 5 dòng d liu 1 2 3 4 5
để làm mt bn báo cáo.
– T1 : C đc và đưa các dòng 1 2 3 4 vào báo cáo.
– T2 : D li xóa dòng 1 thay bng dòng 6.
– T3 : C đc tiếp 5 6 đưa vào báo cáo.
– Vy báo cáo này x lý c d liu cũ và mi
sai.
Transaction in SQL Server
oTransaction Recovery: 2 thao tác
– COMMIT: hoàn tât giao tác thành công.
– ROLLBACK: giao tác tht bi quay vê trng thái trước khi thc hin giao tác
oTransaction Log: undo the changes
Khi user mun mt chnh sa d liu, trong transaction log lưu 2 phiên bn ca dòng d
liu đó: trước và sau khi chnh sa.
Nếu user thc hin câu lnh Commit thì end-of-transaction được ghi xung transaction log.
Nếu user thc hin câu lenh Rollback thì h thng s tìm phiên bn trước khi chnh sa và
cp nht li vào CSDL.
Ví d v đảm bo tính nht quán ca d liu:
Mt nhân viên có mã ‘000002’ được chn làm ‘Sales Manager’ (position code = ‘0001’). Ta
s cn cp nht trong bng Employee và c trong bng Position s lượng người hin ti
nm gi v trí có Position Code = ‘0001’.
UPDATE Employee
SET cCurrentPosition = '0001'
WHERE cEmployeeCode = '000002‘
UPDATE Position
SET iCurrentStrength = iCurrentStrength + 1
WHERE cPositionCode = '0001’
Gii quyết:
BEGIN TRANSACTION trnUpdatePosition
UPDATE Employee
SET cCurrentPosition = '0001'
WHERE cEmployeeCode = '000002'
UPDATE Position
SET iCurrentStrength = iCurrentStrength + 1
WHERE cPositionCode = '0001'
COMMIT TRANSACTION trnUpdatePosition
2) Cho bng SinhVien (MASV, TenNV, Tuoi, MaKhoa) vi MASV là khóa chính. Trong cơ s d
liu hin có 2 sinh viên: sinh viên Nguyn Văn A có mã s SV001, 18 tui và thuc khoa Toán
và sinh viên Nguyn Văn B có mã s SV002, 22 tui và thuc khoa Lý. Cho bng Khoa
(MaKhoa, TenKhoa) vi MaKhoa là khóa chính. Trong CSDL hin có 2 khoa: khoa Toán có mã
khoa là MT và khoa Lý có mã khoa là ML.
a) Viết câu lnh to bng vi khóa chính khóa ngoi thích hp và các câu lnh insert d liu
vào các bng trên.
Create table Khoa(
MaKhoa nchar(10) primary key,
TenKhoa nchar(30)
)
Create table SinhVien(
MASV char(10) primary key,
TenNV nchar(50),
Tuoi int,
MaKhoa nchar(10) references Khoa(MaKhoa)
)
Insert into Khoa (MaKhoa, TenKhoa)
values (‘MT’, N’Khoa Toán’)
Insert into Khoa (MaKhoa, TenKhoa)
values (‘ML’, N’Khoa Lý’)
Insert into SinhVien (MASV, TenNV, Tuoi, MaKhoa)
values (SV001’, N’Nguyn Văn A’, 18, ‘MT’)
Insert into SinhVien (MASV, TenNV, Tuoi, MaKhoa)
Values (‘SV002’, N’Nguyn Văn B’, 22, ‘ML’)
b) Viết câu lnh to bng o vw_SinhVienKhoa có các thông tin MASV, TenSV và TenKhoa
ca sinh viên.
CREATE VIEW vw_SinhVienKhoa
AS
SELECT MASV, TenSV, TenKhoa
FROM SinhVien
JOIN Khoa
ON SinhVien.MaKhoa = Khoa.MaKhoa
c) Viết câu lnh to store để thêm mt khoa vi 2 tham s. Sau đó dùng store này thêm 1
Khoa vào CSDL. Viết câu lnh to trigger không cho phép thêm sinh viên có tui nh hơn
18.
CREATE PROCEDURE prc_ThemKhoa(
@MaKhoa nchar(10),
@TenKhoa nchar(30))
AS
INSERT INTO Khoa (@MaKhoa, @TenKhoa)
EXECUTE prc_ThemKhoa ‘MH’, N’Khoa Hóa’
CREATE TRIGGER trgThemSinhVien
ON SinhVien
FOR INSERT
AS
DECLARE @Tuoi int
SELECT @Tuoi = Tuoi
FROM SinhVien
IF @Tuoi < 18
BEGIN
PRINT ‘Tuoi sinh vien phai lon hon 18 !’
ROLLBACK TRANSACTION
END
3) V cây phân tích <SFW> ca câu truy vn sau và biến đổi sang đại s quan h:
Select TenSV, Tuoi
From SinhVien, Khoa
Where MaKhoa in (select MaKhoa from Khoa where TenKhoa like ‘L%’) and Tuoi > 20
<Query>
<SFW>
SELECT <Select list> FROM <From list> WHERE <Condition>
Attribute> , <Attribute> <Relation> , <Relation>
TenSV Tuoi SinhVien Khoa
<Condition> AND <Condition>
<Attribute> > <Attribute> <Attribute> IN <Attribute>
Tuoi 20 MaKhoa <Query>
<SFW>