Mục Tiêu
(cid:1) Các thành phần liên quan. (cid:1) Tổ chức vật lý của SQL Server. (cid:1) Cấu trúc lưu trữ và phương thức truy
xuất. xuất.
DBMS04 – Slides 2
Tổ Chức Vật Lý trên SQL Server
Các Thành Phần Liên Quan
(cid:1) Bộ phận quản lý tập tin
(cid:1) Dữ liệu trong CSDL ñược tổ chức thành các thành phần (Component) logic cho user sử dụng như: Table, View….
(cid:1) .mdf (cid:1) .ldf .bak (cid:1) .bak
: meta data file : log data file : bakup data file : bakup data file
(cid:1) Dữ liệu vật lý có thể lưu trên nhiều file (cid:1) Dữ liệu vật lý có thể lưu trên nhiều file
hay thậm chí nhiều ổ ñĩa.
(cid:1) Bộ phận quản lý ñĩa (cid:1) Bộ phận quản lý dữ liệu vật lý
(cid:1) Người dùng (trừ các DBA) chỉ làm việc trên các thành phần logic của SQL Server.
DBMS04 – Slides 3
DBMS04 – Slides 4
Kiến trúc của SQL Server
Kiến trúc của SQL Server
(cid:1) Các database hệ thống của SQL Server (cid:1) master Database chứa thông tin về cấu
hình, phần quyền của hệ thống
(cid:1) tempdb Database chứa dữ liệu tạm cần lưu
trữ trữ
(cid:1) model Database chứa database mẫu ñể tạo
một database mới
(cid:1) msdb Database ñể hỗ trợ SQL Server Agent
DBMS04 – Slides 5
DBMS04 – Slides 6
Kiến trúc của SQL Server
Cấu Trúc Lưu Trữ và Phương Thức Truy Xuất
• Tập tin tuần tự • Tập tin chỉ mục (Index) • Tập tin tuần tự chỉ mục • Tập tin tuần tự chỉ mục • Cây B+ và Kỹ thuật bảng băm
DBMS04 – Slides 7
DBMS04 – Slides 8
Giới thiệu Index
Các Loại Index
(cid:1) Clustered/Non clustered
(cid:1) Tại sao tạo Index
(cid:1) Clustered = thứ tự các record lưu trữ vật lý sắp thứ
tự của index
(cid:1) Non clustered = thứ tự các record lưu trữ vật lý
(cid:1) Tăng tốc ñộ truy xuất dữ liệu (cid:1) Không bắt buộc tính liên tục trên các dòng
không sắp thứ tự của index
(cid:1) Khi nào không nên tạo Index?
(cid:1) Dense/sparse (cid:1) Dense/sparse
(cid:1) Dense = ðánh chỉ mục cho tất cả các records (cid:1) Sparse = Chỉ ñánh chỉ một số records
Tốn bộ nhớ trên ñĩa ñể lưu trữ Index. Khi (cid:1) Tốn bộ nhớ trên ñĩa ñể lưu trữ Index. Khi user cập nhật dữ liệu trên cột Index, SQL Server cũng cập nhật index
(cid:1) Primary/secondary
(cid:1) Ví dụ: Sắp tăng theo tên, cùng tên thì sắp theo tuổi
thì tên là primary và tuổi là secondary.
(cid:1) B+ tree / Hash table / …
(cid:1) Việc quản lý Index sẽ tốn thời gian và tài nguyên nên nếu Index không thường sử dụng thì không cần tạo.
DBMS04 – Slides 9
DBMS04 – Slides 10
Clustered Index
Non clustered Indexes
(cid:1) File ñược sắp theo thứ tự của thuộc
(cid:1) Dùng ñể sắp chỉ mục các thuộc tính không
tính chỉ mục index
phải là khóa chính
10
20 20
30
10
40
10
20
50
20
60
70
20
80
30
30
30
10 20 ục 20 ục 20 30 30 40 30 20 50 60 10 20 70 80 10 30
DBMS04 – Slides 11
DBMS04 – Slides 12
Clustered vs. Non clustered Index
Cây B+
(cid:1) d là bậc (cid:1) Mỗi node có >= d và <= 2d keys trừ nút gốc
30
120
240
Data entries
Data entries
Keys k < 30 Keys 120<=k<240 Keys 240<=k Keys 30<=k<120
(Index File) (Data file)
(cid:1) Nút lá:
Data Records
40
50
60
Data Records
Next leaf
CLUSTERED
UNCLUSTERED
40 50 60
DBMS04 – Slides 13
DBMS04 – Slides 14
B+ Tree Example
B+ Tree Design
d = 2
(cid:1) How large d ? (cid:1) Example:
80
20
60
100
120
140
(cid:1) Key size = 4 bytes (cid:1) Pointer size = 8 bytes (cid:1) Pointer size = 8 bytes (cid:1) Block size = 4096 byes
(cid:1) 2d x 4 + (2d+1) x 8 <= 4096 (cid:1) d = 170
10 15 18 20 30 40 50 60 65 80 85 90
10 15 18 20 30 40 50 60 65 80 85 90
DBMS04 – Slides 15
DBMS04 – Slides 16
Searching a B+ Tree
Insertion in a B+ Tree
Insert K=19
80
(cid:1) Exact key values: (cid:1) Start at the root (cid:1) Proceed down, to the leaf
20
60
100
120
140
Select name From people Where age = 25
(cid:1) Range queries:
(cid:1) As above (cid:1) Then sequential traversal
Select name From people Where 20 <= age and age <= 30
10 15 18 20 30 40 50 60 65 80 85 90
10 15 18 20 30 40 50 60 65 80 85 90
DBMS04 – Slides 17
DBMS04 – Slides 18
Insertion in a B+ Tree
Insertion in a B+ Tree
Now insert 25
After insertion
80
80
20
60
100
120
140
20
60
100
120
140
10 15 18 19 20 30 40 50 60 65 80 85 90 10 15 18 19 20 30 40 50 60 65 80 85 90
10 15 18 19 20 30 40 50 60 65 80 85 90 10 15 18 19 20 30 40 50 60 65 80 85 90
DBMS04 – Slides 19
DBMS04 – Slides 20
Insertion in a B+ Tree
Insertion in a B+ Tree
After insertion
But now have to split !
80
80
20
60
100
120
140
20
60
100
120
140
10 15 18 19 20 25 30 40 50 60 65 80 85 90 10 15 18 19 20 25 30 40 50 60 65 80 85 90
10 15 18 19 20 25 30 40 50 60 65 80 85 90 10 15 18 19 20 25 30 40 50 60 65 80 85 90
DBMS04 – Slides 21
DBMS04 – Slides 22
Insertion in a B+ Tree
Deletion from a B+ Tree
After the split
Delete 30
80
80
20
30
60
100
120
140
20
30
60
10
15
18
19
20
25
30
40
50
60
65
80
85
90
10
15
18
19
20
25
30
40
50
60
65
80
85
90
100 120 140
10 15 18 19 20 25 30 40 50 60 65 80 85 90 10 15 18 19 20 25 30 40 50 60 65 80 85 90
DBMS04 – Slides 23
DBMS04 – Slides 24
Deletion from a B+ Tree
Deletion from a B+ Tree
After deleting 30
Now delete 25
80
80
May change to 40, or not
20
30
60
20
30
60
25
10
15
18
19
20
25
40
50
60
65
80
85
90
10
15
18
19
20
40
50
60
65
80
85
90
100 120 140 100 120 140
10 15 18 19 20 25 40 50 60 65 80 85 90 10 15 18 19 20 25 40 50 60 65 80 85 90
DBMS04 – Slides 25
DBMS04 – Slides 26
Deletion from a B+ Tree
Deletion from a B+ Tree
Now delete 40
80
80
After deleting 25 Need to rebalance Rotate
20
30
60
19
30
60
10
15
18
19
20
40
50
60
65
80
85
90
10
15
18
19
20
40
50
60
65
80
85
90
100 120 140 100 120 140
10 15 18 19 20 40 50 60 65 80 85 90 10 15 18 19 20 40 50 60 65 80 85 90
DBMS04 – Slides 27
DBMS04 – Slides 28
Deletion from a B+ Tree
Deletion from a B+ Tree
Final tree
After deleting 40 Rotation not possible Need to merge nodes
80
80
19
30
60
19
60
10
15
18
19
20
50
60
65
80
85
90
10
15
18
19
20
50
60
65
80
85
90
100 120 140 100 120 140
10 15 18 19 20 50 60 65 80 85 90 10 15 18 19 20 50 60 65 80 85 90
DBMS04 – Slides 29
DBMS04 – Slides 30
Variation on B+tree: B-tree (no +)
(cid:1) Idea:
Hash Tables
(cid:1) Avoid duplicate keys (cid:1) Have record pointers in non-leaf nodes
(cid:1) Note: Textbook’s B-Tree means B+-tree!
DBMS04 – Slides 31
Hash Tables
Ví dụ bảng băm
(cid:1) Giả lưu giữ khối các dữ liệu với các khóa
(cid:1) Bảng băm:
(cid:1) Có n khối dữ liệu cần lưu trữ (cid:1) Cho một hàm hash f(k):khóa k (cid:2) {0, 1, …,
e
0 0
n-1} (cid:1) f(k) sẽ trỏ ñến dữ liệu có khóa k f(k) sẽ trỏ ñến dữ liệu có khóa k
b
1
f
như sau (cid:1) h(e)=0 (cid:1) h(b)=h(f)=1 (cid:1) h(b)=h(f)=1 (cid:1) h(g)=2 (cid:1) h(a)=h(c)=3
g
2
a
3
c
DBMS04 – Slides 33
DBMS04 – Slides 34
Tìm một record trong bảng băm
Thêm vào bảng băm
(cid:1) Thêm record vào một khối khi còn chỗ
trống
(cid:1) Ví dụ: thêm d với h(d)=2
e
e e
0 0
0 0
b
b
(cid:1) Tìm khối dữ liệu a: (cid:1) Tính hàm băm (hash) h(a)=3 (cid:1) ðọc khối dữ liệu 3 (cid:1) Truy cập lần lượt các (cid:1) Truy cập lần lượt các record trong khối 3
1
1
f
f
g
g
2
2
d
a
3
a
3
c
c
DBMS04 – Slides 35
DBMS04 – Slides 36
Thêm vào bảng băm
Hiệu suất của bảng băm
(cid:1) Tốt nếu ít khối overflow.
(cid:1) Tạo khối tràn (overflow) nếu hết chỗ
e
0 0
b
k
1
f
trống (cid:1) Ví dụ: (cid:1) Ví dụ: thêm k với h(k)=1
g
2
d
a
3
c
DBMS04 – Slides 37
DBMS04 – Slides 38
Tạo Index trên SQL Server
Tạo Index trên SQL Server
(cid:1) Trên SQL hỗ trợ 2 loại Index:
(cid:1) Cluster Index (cid:1) Non Cluster Index
(cid:1) Cluster Index: chỉ có thể tạo một cluster index duy nhất cho một bảng dữ liệu. (cid:1) Mặc ñịnh khóa chính sẽ thành cluster index (cid:1) Dữ liệu của bảng sắp xếp theo thứ tự của
cluster index cluster index
DBMS04 – Slides 39
DBMS04 – Slides 40
Tạo Index trên SQL Server
Tạo Index trên SQL Server
(cid:1) Cú pháp tạo Index:
(cid:1) CREATE [UNIQUE] [CLUSTERED |
(cid:1) Non Cluster Index: có thể tạo 249 non- cluster index cho một bảng dữ liệu. (cid:1) Dữ liệu của bảng không sắp theo thứ tự
NONCLUSTERED] INDEX index_name ON table_name (column_name[,column_name]…) (column_name[,column_name]…)
của non-cluster index. Thường tạo index cho các cột dữ liệu dùng (cid:1) Thường tạo index cho các cột dữ liệu dùng ñể join hay trong ñiều kiện where hoặc giá trị cột này thương xuyên thay ñổi.
DBMS04 – Slides 41
DBMS04 – Slides 42
Bài tập tạo Index trên SQL Server
Tạo Index trên SQL Server
Giả sử CSDL của bạn có 1 bảng sau:
(cid:1) Cú pháp tạo Index:
(cid:1) CREATENONCLUSTEREDINDEX
idxExternalCandidate ONExternalCandidate(cAgencyCode) ONExternalCandidate(cAgencyCode)
(cid:1) CREATECLUSTEREDINDEX
SinhVien(MaSV, TenSV, TuoiSV, DiaChi) Trong ñó MaSV là khóa chính, thường dùng ñể join các bảng khác; tên (TenSV) thường xuất join các bảng khác; tên (TenSV) thường xuất hiện trong ñiều kiện WHERE trong các câu hiện trong ñiều kiện WHERE trong các câu truy vấn thông tin.
idxRecruitment ON RecruitmentAgencies(cAgencyCode)
Yêu cầu: Xác ñịnh Cluster và non cluster index cho bảng SinhVien. Viết câu lệnh SQL tạo bảng và tạo các câu Index tương ứng.
DBMS04 – Slides 43
DBMS04 – Slides 44
Index trên SQL Server
Tóm lại
(cid:1) Các thành phần liên quan ñến tổ chức vật
lý của một Hệ quản trị Cơ Sở Dữ Liệu
(cid:1) Khóa chính (cid:2) Cluster Index (cid:1) Các cột hay truy xuất nên tạo non
cluster index.
(cid:1) Kiến trúc Hệ quản trị Cơ Sở Dữ Liệu (cid:1) Cấu trúc lưu trữ và phương thức truy xuất (cid:1) Cấu trúc lưu trữ và phương thức truy xuất
(cid:3) tăng tốc ñộ truy xuất CSDL. (cid:3) tăng tốc ñộ truy xuất CSDL. (cid:1) Ngoài ra, có thể sử dụng cộng cụ Index Turning của SQL Server ñể tạo index cho CSDL của mình tự ñộng theo suggest của SQL Server
DBMS04 – Slides 45
DBMS04 – Slides 46
Stored Procedure
(cid:1) Cho phép lập trình theo hướng Module (cid:1) Thực thi nhanh hơn, giảm ñược việc
chiếm dụng ñường truyền mạng
Stored Procedure và Trigger
(cid:1) Bảo mật (cid:1) Bảo mật (cid:1) Xử lý các chức năng và chia sẽ với các
ứng dụng khác
DBMS04 – Slides 48
Stored Procedure
Stored Procedure Syntax
(cid:4) Cú pháp:
CREATE PROCEDURE proc_name
AS BEGIN
sql_statement1 sql_statement1 sql_statement2
END
DBMS04 – Slides 49
DBMS04 – Slides 50
Ví dụ 1 – SP không tham số
Ví dụ 2 – SP có tham số
• Mở Query Analyzer, gõ:
• Mở Query Analyzer, gõ: CREATE PROCEDURE sp_XemSV @MaSV nvarchar(11)
CREATE PROCEDURE sp_XemDSSV AS BEGIN
AS BEGIN BEGIN
PRINT N‘DANH SÁCH SINH VIÊN’ PRINT N‘DANH SÁCH SINH VIÊN’ SELECT MSSV, HoLot, Ten, NgaySinh,
NoiSinh, DiaChi
PRINT N‘SINH VIÊN’ SELECT HoLot, Ten, NgaySinh,
FROM SinhVien
NoiSinh, DiaChi
END
FROM SinhVien WHERE MSSV = @MaSV
• Bấm F5 ñể thực thi
END
• Bấm F5 ñể thực thi
DBMS04 – Slides 51
DBMS04 – Slides 52
Xem nội dung SP
Gọi Stored Procedure
(cid:4) Cú pháp:
• Cú pháp:
EXECUTE proc_name danh_sách_tham_số
sp_helptext proc_name
(cid:4)Ví dụ:
hoặc
• Mở Query Analyzer, gõ:
EXEC proc_name danh_sách_tham_số EXEC proc_name danh_sách_tham_số
sp_helptext sp_XemDSSV
hoặc
sp_helptext sp_XemSV
proc_name danh_sách_tham_số
• Kiểm tra chính tả, nội dung procedure.
//Mỗi tham số các nhau một dấu phẩy
DBMS04 – Slides 53
DBMS04 – Slides 54
Ví dụ
Trigger là gì?
• Mở Query Analyzer, gõ: EXECUTE sp_XemDSSV
(cid:1) Là một Stored Procedure gắn liền với Table cụ thể, ñược gọi tự ñộng khi user thay ñổi dữ liệu trên một table.
EXECUTE sp_XemSV ‘K29.103.010’
hoặc
EXEC sp_XemDSSV
(cid:1) Khi có thao tác cập nhật dữ liệu (insert, update, delete) thì trigger ứng với thao tác ñó ñược thực delete) thì trigger ứng với thao tác ñó ñược thực hiện tự ñộng
EXEC sp_XemSV ‘K29.103.010’
(cid:1) Trigger không ñược gọi trực tiếp, không có tham
hoặc
số
sp_XemDSSV
(cid:1) Là thành phần của Transaction: Những lệnh
sp_XemSV ‘K29.103.010’
trong Trigger có thể ROLL BACK.
• Bấm F5 ñể thực thi
DBMS04 – Slides 55
DBMS04 – Slides 56
Sử dụng Trigger ñể làm gì?
Tạo Trigger: Cú pháp chung
(cid:1) ðể thực hiện cascade updates và cascade
CREATE TRIGGER trigger_name
deletes qua các table quan hệ trong database (cid:1) Ép buộc tính toàn vẹn của dữ liệu phức tạp: (cid:1) Thực hiện các ràng buộc có tham chiếu ñến các
column trong nhiều table. column trong nhiều table.
ON table_name [WITH ENCRYPTION] FOR [INSERT | DELETE | UPDATE] FOR [INSERT | DELETE | UPDATE] AS sql_statements
(cid:1) ðịnh nghĩa Custom Error Messages:
(cid:1) Dùng trigger ñể trả về các chuỗi thông báo trạng
thái của môt hành ñộng nào ñó.
(cid:1) Bảo trì các dữ liệu không ñược chuẩn hoá
DBMS04 – Slides 57
DBMS04 – Slides 58
Tạo Trigger trong câu lệnh Update
Ví dụ
CauThu (MACT, HOTEN, VITRI, NGAYSINH,
DIACHI, MACLB, MAQG, SO)
Yêu cầu: Khi thêm 1 cầu thủ, kiểm tra số áo
không ñược trùng nhau! không ñược trùng nhau!
CREATE TRIGGER tên_Trigger ON tên_bảng FOR UPDATE AS AS
IF UPDATE (tên_cột)
[AND UPDATE(tên_cột)| OR UPDATE(tên_cột)]
các câu lệnh của trigger
DBMS04 – Slides 59
DBMS04 – Slides 60
Trigger
Lời giải
(cid:1) Khi INSERT mới 1 record thì nó sẽ nằm
trong bảng INSERTED.
(cid:1) Khi UPDATE, DELETE 1 record thì nó sẽ
CREATE TRIGGER trg_KiemTraSoAo ON CauThu FOR INSERT AS
nằm trong bảng DELETED. nằm trong bảng DELETED.
BEGIN
DECLARE @So int DECLARE @MaCLB varchar(6) --Lấy Số áo và Mã CLB vừa Insert SELECT @So = SO, @MaCLB = MACLB FROM INSERTED
DBMS04 – Slides 61
DBMS04 – Slides 62
Lời giải
Lập trình với con trỏ
(cid:1) Một con trỏ là một ñối tượng cơ sở dữ liệu ñược
IF (SELECT COUNT(SO) FROM CAUTHU WHERE MACLB = @MaCLB AND SO = @SO) > 1
sử dụng bởi ứng dụng ñể thao tác với các hàng dữ liệu thay vì các tập hợp dữ liệu.
BEGIN
PRINT N’Bị trùng số áo’ ROLLBACK ROLLBACK
(cid:1) Con trỏ ñược dùng với Procedure và Trigger (cid:1) Với con trỏ chúng ta có thể: (cid:1) Với con trỏ chúng ta có thể:
END
(cid:1) Cho phép ñịnh vị các hàng chỉ ñịnh của tập kết quả. (cid:1) Nhận về một hàng ñơn hoặc tập hợp các hàng từ vị trí
ELSE
hiện tại của tập kết quả.
BEGIN
(cid:1) Hỗ trợ sửa ñổi dữ liệu của hàng ở vị trí hiện tại trong
tập kết quả.
PRINT N’Thêm cầu thủ thành công’ COMMIT
END
(cid:1) Hỗ trợ nhiều cấp ñộ quan sát ñối với các thay ñổi ñược tạo ra bởi các người dùng khác trên các dữ liêu của tập kết quả.
END
DBMS04 – Slides 63
DBMS04 – Slides 64
Quy trình xử lý con trỏ
Tạo con trỏ
(cid:1) Lệnh DECLARE dùng ñể tạo một con trỏ. (cid:1) Nó chứa các lệnh SELECT ñể bao gồm các bản ghi từ
bảng.
(cid:1) Cú pháp là:
DECLARE
DBMS04 – Slides 65
DBMS04 – Slides 66
Các bước sử dụng con trỏ
Truy xuất và duyệt con trỏ
(cid:1) Mở con trỏ:
(cid:1) FETCH FIRST: Truy xuất hàng ñầu tiên. (cid:1) FETCH NEXT: Truy xuất hàng tiếp theo hàng truy
OPEN
xuất trước ñó.
(cid:1) Nhận về các bản ghi:
(cid:1) FETCH PRIOR: Truy xuất hàng trước hàng truy
xuất trước ñó. xuất trước ñó.
FETCH
(cid:1) ðóng con trỏ:
(cid:1) FETCH LAST: Truy xuất hàng cuối cùng. (cid:1) FETCH ABSOLUTE n: Nếu nlà một số nguyên
CLOSE
(cid:1) Xoá các tham chiếu tới con trỏ:
DEALLOCATE
DBMS04 – Slides 67
dương, nó sẽ truy xuất nhàng trong con trỏ. Nếu nlà một số nguyên âm, nhàng trước hàng cuối cùng trong con trỏ ñược truy xuất. Nếu nbằng 0, không hàng nào ñược truy xuất. Ví dụ, FETCH Absolute 2 sẽ hiển thị bản ghi thứ hai của một bảng. DBMS04 – Slides 68
Các biến toàn cục của lệnh FETCH
Truy xuất và duyệt con trỏ
(cid:1) @@FETCH _STATUS: Biến này trả về một số nguyên biễu diễn kết quả của lệnh truy xuất cuối cùng của con trỏ. (cid:1) @@CURSOR_ROWS: Biến này trả về (cid:1) @@CURSOR_ROWS: Biến này trả về
(cid:5) FETCH RELATIVE n: Truy xuất n hàng từ hàng truy xuất trước ñó, nếu n là số dương. Nếu n là số âm, n hàng trước hàng truy xuất trước ñó ñược truy xuất. Nếu n bằng 0, hàng hiện tại ñược nhận Nếu n bằng 0, hàng hiện tại ñược nhận về.
tổng số hàng hiện tại trong con trỏ ñang mở.
DBMS04 – Slides 69
DBMS04 – Slides 70
Ví dụ tạo con trỏ
Con trỏ (tt)
(cid:5) Một con trỏ là một ñối tượng cơ sở dữ liệu ñược sử dụng bởi ứng dụng ñể thao tác với các hàng dữ liệu thay vì các tập hợp dữ liệu. Sử dụng con trỏ, nhiều tác vụ có thể ñược thực hiện theo từng vụ có thể ñược thực hiện theo từng hàng trên tập kết quả mà có thể cần hoặc ko cần sự có mặt của bảng gốc
DBMS04 – Slides 71
DBMS04 – Slides 72
Con trỏ (tt)
Con trỏ (tt)
(cid:1) Con trỏ ñược tạo bằng lệnh DECLARE. ðầu tiên con trỏ ñược khai báo và tạo ra trong bộ nhớ. Sau ñó nó mới ñược mở.
(cid:1) Khi một con trỏ tạm thời không cần thiết, nó có thể ñược ñóng bởi lệnh CLOSE.
(cid:1) Mỗi khi con trỏ không ñược sử dụng, (cid:1) Mỗi khi con trỏ không ñược sử dụng,
(cid:1) Lệnh OPEN mở con trỏ. Việc nhận về các bản ghi từ một con trỏ ñược gọi là fetching. Một người dùng chỉ có thể nhận về một bản ghi tại một thời ñiểm. có thể nhận về một bản ghi tại một thời ñiểm.
(cid:1) Lệnh FETCH ñược sử dụng ñể ñọc các bản ghi từ con
trỏ.
các tham chiếu ñến nó nên ñược loại bỏ bằng lệnh DEALLOCATE
(cid:1) Ngầm ñịnh, một con trỏ là forward only. Nó có thể
truy xuất tuần tự các bản ghi từ bản ghi ñầu tiên ñến bản ghi cuối cùng. Nó không thể truy xuất trực tiếp hàng thứ 1 hoặc hàng cuối cùng trong một bảng.
DBMS04 – Slides 73
DBMS04 – Slides 74
Câu hỏi
(cid:1) Các DBMS hỗ trợ stored procedure? trigger?
(cid:1) Công dụng của Stored Procedure? Trigger?
(cid:1) So sánh Store Procedure và Trigger?