SlideShare uma empresa Scribd logo
1 de 82
Baixar para ler offline
BỘ GIAO THÔNG VẬN TẢI
TRƯỜNG ĐẠI HỌC HÀNG HẢI
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN HỆ THỐNG THÔNG TIN
BÀI GIẢNG
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
TÊN HỌC PHẦN : HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
MÃ HỌC PHẦN : 17402
TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CHÍNH QUY
DÙNG CHO SV NGÀNH : CÔNG NGHỆ THÔNG TIN
HẢI PHÒNG - 2009
MỤC LỤC
Chương 1. Giới thiệu 5
1.1. Hệ quản trị cơ sở dữ liệu Microsoft SQL Server 5
1.2. Các thành phần cơ bản trong Microsoft SQL Server 18
1.3. Ngôn ngữ truy vấn dữ liệu có cấu trúc (SQL) 24
Chương 2. Tạo và quản lý cơ sở dữ liệu 26
2.1. Các tệp tin cơ sở dữ liệu (Database files) 26
2.2. Tạo cơ sở dữ liệu (Database) 26
2.3. Quản lý cơ sở dữ liệu 30
2.4. Xóa cơ sở dữ liệu 32
Chương 3. Tạo và quản lý các bảng 35
3.1. Tạo bảng (Tables) 35
3.2. Định nghĩa các cột (Columns) 36
3.3. Định nghĩa các ràng buộc (Constrains) 37
3.4. Sửa bảng (ALTER TABLE) 38
3.5. Xóa bảng (DROP TABLE) 39
3.6. Thêm bản ghi mới (INSERT) 39
3.7. Cập nhật bản ghi (UPDATE) 41
3.8. Xóa bản ghi (DELETE) 42
Chương 4. Truy vấn dữ liệu 44
4.1. Truy vấn cơ bản 44
4.2. Truy vấn từ nhiều bảng 51
4.2.1. Inner Joins 51
4.2.2. Outer Joins 51
4.3. Truy vấn lồng nhau (Subqueries) 51
Chương 5. Tạo và quản lý các chỉ mục 54
5.1. Các kiểu chỉ mục (Indexes) 54
5.2. Tạo các chỉ mục 54
5.3. Quản lý các chỉ mục 58
5.4. Xóa các chỉ mục 58
Chương 6. Tạo và quản lý khung nhìn 60
6.1. Định nghĩa 60
6.2. Tạo các khung nhìn (Views) 60
6.3. Quản lý các khung nhìn 61
6.4. Xóa các khung nhìn 61
Chương 7. Tạo và quản lý các thủ tục thường trú 62
7.1. Tạo các thủ tục thường trú (Stored procedures) 62
7.2. Thực thi các thủ tục thường trú 64
7.3. Xem và sửa các thủ tục thường trú 64
7.4. Tham số vào và ra (Parameters) 65
7.5. Các thủ tục thường trú của hệ thống 65
Chương 8. Tạo và quản lý hàm người dùng định nghĩa 68
8.1. Các kiểu hàm người dùng định nghĩa (User-defined functions) 68
8.2. Tạo hàm người dùng định nghĩa 68
8.3. Quản lý hàm người dùng định nghĩa 69
Chương 9. Tạo và quản lý các Trigger 70
9.1. Tạo các Trigger thao tác dữ liệu (DML Triggers) 70
9.2. Tạo các Trigger định nghĩa dữ liệu (DDL Triggers) 70
9.3. Sử dụng các Trigger lồng nhau (Nested Triggers) 71
9.4. Sử dụng các Trigger đệ quy (Recursive Triggers) 74
Một số đề thi mẫu 76
2
Tên học phần: Hệ quản trị Cơ sở dữ liệu Loại học phần: 4
Bộ môn phụ trách giảng dạy: Hệ thống Thông tin Khoa phụ trách: CNTT.
Mã học phần: 17402 Tổng số TC: 4
Tổng số tiết Lý thuyết Thực hành/ Xemina Tự học Bài tập lớn Đồ án môn học
90 45 30 0 x 0
Học phần học trước: Không yêu cầu.
Học phần tiên quyết: Không yêu cầu.
Học phần song song: Không yêu cầu.
Mục tiêu của học phần:
Cung cấp cho sinh viên những kiến thức cơ bản về hệ quản trị cơ sở dữ liệu; Các chức năng
và công cụ cần thiết để quản trị cơ sở dữ liệu cho người phát triển hệ thống.
Nội dung chủ yếu:
Giới thiệu về hệ quản trị cơ sở dữ liệu; Tạo và quản lý cơ sở dữ liệu; Tạo và quản lý các
bảng; Truy vấn dữ liệu; Tạo và quản lý các chỉ mục; Tạo và quản lý các khung nhìn; Tạo và quản lý
các thủ tục thường trú; Tạo và quản lý các hàm người dùng định nghĩa; Tạo và quản lý các Trigger.
Nội dung chi tiết:
TÊN CHƯƠNG MỤC
PHÂN PHỐI SỐ TIẾT
TS LT BT TH KT
Chương 1. Giới thiệu 5 3 2
1.1. Hệ quản trị cơ sở dữ liệu Microsoft SQL Server (2005)
1.2. Các thành phần cơ bản trong Microsoft SQL Server (2005)
1.3. Ngôn ngữ truy vấn dữ liệu có cấu trúc (SQL)
Chương 2. Tạo và quản lý cơ sở dữ liệu 10 6 4
2.1. Các tệp tin cơ sở dữ liệu (Database files)
2.2. Tạo cơ sở dữ liệu (Database)
2.3. Quản lý cơ sở dữ liệu
2.4. Xóa cơ sở dữ liệu
Chương 3. Tạo và quản lý các bảng 15 9 6
3.1. Tạo bảng (Tables)
3.2. Định nghĩa các cột (Columns)
3.3. Định nghĩa các ràng buộc (Constrains)
3.4. Sửa bảng (ALTER TABLE)
3.5. Xóa bảng (DROP TABLE)
3.6. Thêm bản ghi mới (INSERT)
3.7. Cập nhật bản ghi (UPDATE)
3.8. Xóa bản ghi (DELETE)
Chương 4. Truy vấn dữ liệu 20 12 8
4.1. Truy vấn cơ bản
4.1.1. Mệnh đề SELECT
4.1.2. Mệnh đề FROM
4.1.3. Mệnh đề WHERE
4.1.4. Mệnh đề GROUP BY và HAVING
4.1.5. Mệnh đề ORDER BY
4.1.6. Kết hợp kết quả từ nhiều truy vấn khác nhau
4.2. Truy vấn từ nhiều bảng
4.2.1. Inner Joins
4.2.2. Outer Joins
4.3. Truy vấn lồng nhau (Subqueries)
Chương 5. Tạo và quản lý các chỉ mục 5 3 2
3
TÊN CHƯƠNG MỤC
PHÂN PHỐI SỐ TIẾT
TS LT BT TH KT
5.1. Các kiểu chỉ mục (Indexes)
5.2. Tạo các chỉ mục
5.3. Quản lý các chỉ mục
5.4. Xóa các chỉ mục
Chương 6. Tạo và quản lý khung nhìn 5 3 2
6.1. Định nghĩa
6.2. Tạo các khung nhìn (Views)
6.3. Quản lý các khung nhìn
6.4. Xóa các khung nhìn
Chương 7. Tạo và quản lý các thủ tục thường trú 5 3 2
7.1. Tạo các thủ tục thường trú (Stored procedures)
7.2. Thực thi các thủ tục thường trú
7.3. Xem và sửa các thủ tục thường trú
7.4. Tham số vào và ra (Parameters)
7.5. Các thủ tục thường trú của hệ thống
Chương 8. Tạo và quản lý hàm người dùng định nghĩa 5 3 2
8.1. Các kiểu hàm người dùng định nghĩa (User-defined
functions)
8.2. Tạo hàm người dùng định nghĩa
8.3. Quản lý hàm người dùng định nghĩa
Chương 9. Tạo và quản lý các Trigger 5 3 2
9.1. Tạo các Trigger thao tác dữ liệu (DML Triggers)
9.2. Tạo các Trigger định nghĩa dữ liệu (DDL Triggers)
9.3. Sử dụng các Trigger lồng nhau (Nested Triggers)
9.4. Sử dụng các Trigger đệ quy (Recursive Triggers)
Nhiệm vụ của sinh viên:
Tham dự các buổi học lý thuyết và thực hành, làm các bài tập được giao, làm các bài thi
giữa học phần và bài thi kết thúc học phần theo đúng quy định.
Tài liệu học tập:
1. Dương Quang Thiện, SQL Server 2000: Lập trình T - SQL, NXB Văn hóa Sài Gòn, 2007.
2. Ray Rankins, Paul Bertucci, Chris Gallelli, Alex T.Silverstein, Microsoft SQL Server 2005
Unleashed, Sams Publishing, 2007.
3. Brian Knightet al, Professional SQL Server 2005 Administration, Wrox Press, 2007.
4. Paul Turley & Dan Wood, Beginning Transact-SQL with SQL Server 2000 and 2005, Wrox
Press, 2006.
Hình thức và tiêu chuẩn đánh giá sinh viên:
− Hình thức thi: thi viết hoặc vấn đáp.
− Tiêu chuẩn đánh giá sinh viên: căn cứ vào sự tham gia học tập của sinh viên trong các buổi
học lý thuyết và thực hành, kết quả làm các bài tập được giao, kết quả của các bài thi giữa
học phần và bài thi kết thúc học phần.
Thang điểm: Thang điểm chữ A, B, C, D, F.
Điểm đánh giá học phần: Z = 0,4X + 0,6Y.
Bài giảng này là tài liệu chính thức và thống nhất của Bộ môn Hệ thống Thông tin,
Khoa Công nghệ Thông tin và được dùng để giảng dạy cho sinh viên.
Ngày phê duyệt: / /
Trưởng Bộ môn
4
Chương 1. Giới thiệu
1.1. Hệ quản trị cơ sở dữ liệu Microsoft SQL Server
1.1.1.Khái niệm về CSDL và CSDL quan hệ
A. Khái niệm về cơ sở dữ liệu (Database)
Cơ sở dữ liệu là một tập hợp có tổ chức các dữ liệu có liên quan luận lý với nhau. Nói cách khác
đó là một hệ thống các thông tin có cấu trúc được lưu trữ trên các thiết bị lưu trữ thông tin thứ cấp,
ví dụ như: đĩa từ, băng từ, bộ nhớ flash,… nhằm mục đích thỏa mãn yêu cầu tổ chức dữ liệu để
giúp cho việc khai thác dữ liệu được nhanh chóng và chính xác. Cơ sở dữ liệu phải được thiết kế
sao cho có thể cho phép nhiều người dùng và nhiều ứng dụng khác nhau cùng khai thác.
Hình 1: Sơ đồ tổng quát về một hệ cơ sở dữ liệu
B. Khái niệm về cơ sở dữ liệu quan hệ
Cơ sở dữ liệu quan hệ là cơ sở dữ liệu được tổ chức dựa trên mô hình của đại số quan hệ
(Relational Model). Trong đó, dữ liệu được tổ chức thành các bảng dữ liệu (tables). Mỗi bảng dữ
liệu gồm có các cột (column) hay còn gọi là các trường (field) và các dòng (row) hay còn gọi là các
bản ghi (record). Ví dụ:
Mã Sinh viên Tên Sinh viên Lớp
HHA01 Lê Hoàng Long KTB48ĐH1
HHA02 Trần Bình Minh KTB48ĐH1
5
Về phương diện toán học, một bảng dữ liệu gồm có n cột: A1, A2, A3…, An có thể coi là một tập
con R của tích Đề các dom(A1) x dom(A2)…x dom(An):
R ⊆ dom(A1) x dom(A2)…x dom(An)
Người ta gọi đó là quan hệ R xác định trên tập thuộc tính {A1, A2,…, An}. Trong đó dom(Ai) là ký
hiệu miền giá trị (domain) của cột Ai.
Giữa các cột trong bảng có những mối quan hệ ràng buộc phụ thuộc lẫn nhau gọi là các phụ
thuộc hàm. Ví dụ: Trong bảng sinh viên có phụ thuộc hàm:
Mã Sinh Viên → Tên Sinh Viên, Lớp
Trong một bảng dữ liệu, có thể có một cột (hoặc một số tối thiểu các cột) mà giá trị trên mỗi
dòng của nó là duy nhất. Ta gọi đó là khóa (Key). Khi biết giá trị của trường khóa ta có thể suy ra
các trường còn lại. Ví dụ: Trong bảng Sinh Viên thì Mã Sinh Viên là khóa. Khi biết Mã Sinh Viên ta
có thể tra cứu ra các thuộc tính như Tên Sinh Viên và Lớp.
Giữa hai bảng trong cơ sở dữ liệu cũng tồn tại các mối quan hệ ràng buộc lẫn nhau (bắt nguồn
từ mô hình ER):
Quan hệ 1 – 1: Một bản ghi thuộc bảng này tương ứng với một và chỉ một bản ghi ở bảng kia và
ngược lại. Trong trường hợp này người ta thường nhập 2 bảng vào làm một.
Quan hệ 1 – n: Một bản ghi thuộc bảng này tương ứng với n bản ghi ở bảng kia (n ≥ 0) nhưng
ngược lại một bản ghi ở bảng kia chỉ tương ứng với không quá 1 bản ghi ở bảng này. Bảng ở phía
ứng với ứng số nhiều n gọi là bảng con (child) còn bảng ở phía ứng với ứng số 1 gọi là bảng cha
(parents). Bảng cha phải có một trường khóa gọi là khóa chính (PK - Primary Key) còn bảng con
phải có một trường tham chiếu đến khóa chính của bảng cha gọi là khóa ngoại (FK - Foreign Key).
Hình 2: Quan hệ 1- 1
6
Hình 3: Quan hệ 1 - n
Quan hệ n – n: Quan hệ n – n không được biểu diễn tường minh trong CSDL. Người ta thường
tách quan hệ n – n về thành các quan hệ 1 – n dựa trên mô hình thực thể liên kết (ER).
1.1.2. Khái niệm về hệ quản trị Cơ sở dữ liệu
A. Hệ quản trị CSDL là gì?
Hệ quản trị cơ sở dữ liệu là một tập hợp chương trình giúp cho người sử dụng tạo ra, duy trì và
khai thác một cơ sở dữ liệu. Đó là một hệ thống phần mềm phổ dụng, cung cấp môi trường và
công cụ giúp cho việc định nghĩa, xây dựng và thao tác cơ sở dữ liệu cho các ứng dụng khác nhau
một cách dễ dàng.
Định nghĩa một cơ sở dữ liệu là đặc tả các kiểu dữ liệu, các cấu trúc, các ràng buộc cho các dữ
liệu sẽ được lưu trữ.
Xây dựng cơ sở dữ liệu là lưu trữ dữ liệu lên các phương tiện lưu trữ được hệ quản trị cơ sở dữ
liệu kiểm soát.
Thao tác trên một cơ sở dữ liêu là quá trình truy vấn cơ sở dữ liệu để lấy ra các dữ liệu cụ thể,
cập nhật cơ sở dữ liệu, tạo ra các báo cáo từ dữ liệu.
7
Hình 4: Mô hình Hệ quản trị cơ sở dữ liệu
Mỗi hệ quản trị cơ sở dữ liệu có một ngôn ngữ định nghĩa dữ liệu riêng (DDL - Data
Definition Languague). Đây là ngôn ngữ dùng để định nghĩa, khai báo cấu trúc của của cơ sở dữ
liêu. Những người thiết kế và quản trị cơ sở dữ liệu thực hiện các công việc khai báo cấu trúc cơ sở
dữ liệu. Các chương trình khai báo cấu trúc CSDL được viết bằng ngôn ngữ DDL mà hệ quản trị
CSDL cho phép.
Các chương trình ứng dụng được viết bằng các ngôn ngữ lập trình C++/C#/Java/Delphi… kết
hợp với các ngôn ngữ thao tác dữ liệu (DML - Data Manipulation Language) thông qua các thư
viện hoặc đối tượng kết nối CSDL được ngôn ngữ lập trình hỗ trợ: ODBC, RDO, ADO,…
Các hệ quản trị cơ sở dữ liệu quan hệ ngày nay phổ biến sử dụng các ngôn ngữ DDL và DML
dựa trên ngôn ngữ SQL.
Đối với hệ quản trị cơ sở dữ liệu SQL Server thì ngôn ngữ dùng để tương tác với cơ sở dữ liệu
là T – SQL. Đây là một phiên bản của ngôn ngữ SQL. Ngôn ngữ T – SQL trên SQL Server bao gồm
nhiều câu lệnh khác nhau, có thể chia thành 2 nhóm:
o Nhóm ngôn ngữ định nghĩa dữ liệu DDL: với các lệnh cho phép tạo, thay đổi cấu trúc và
xóa các đối tượng CSDL: database, table, view,…
o Nhóm ngôn ngữ thao tác dữ liệu DML: với các lệnh như
SELECT/INSERT/UPDATE/DELETE cho phép lấy về dữ liệu cụ thể, thay đổi giá trị của dữ
liệu.
8
Hình 5: Tương tác với hệ quản trị Cơ sở dữ liệu
B. Hoạt động của hệ quản trị cơ sở dữ liệu
Hình 6: Hoạt động của hệ quản trị cơ sở dữ liệu
Các yêu cầu của chương trình ứng dụng được chuyển tới hệ quản trị CSDL (theo con đường số 1).
Tại đây hệ quản trị CSDL sẽ tham khảo các từ điển dữ liệu (Meta DataBase) để tìm kiếm các ánh
xạ cấu trúc ngoài với cấu trúc quan niệm và cấu trúc vật lý (các ngõ a, b và c). Tại đây hệ quản trị
9
CSDL có thể sẽ tham khảo tới vùng đệm của nó để xác định xem câu trả lời đã có sẵn ở đó chưa,
nếu có thì trả lại cho chương trình ứng dụng thông qua con đường số 8b; ngược lại sẽ yêu cầu hệ
điều hành truy xuất thông tin theo con đường số 2. Tới đây hệ điều hành sẽ gửi yêu cầu truy xuất
thông tin trong CSDL thông qua hệ thống xuất nhập của HĐH (các con đường số 3 và 5). Nếu việc
truy xuất không thành công nó sẽ trả lại yêu cầu về cho hệ quản trị CSDL (có thể thông qua các mã
lỗi) qua con đường số 6; nếu thành công thì dữ liệu sẽ được chuyển vào vùng đệm của hệ quản trị
CSDL. Qua xử lý, hệ quản trị CSDL sẽ chuyển dữ liệu vào vùng đệm của chương trình ứng dụng đề
nó xử lý (qua con đường 8a) và cho ra kết quả trả lời của chương trình ứng dụng qua con đường số
10.
1.1.3. Giới thiệu về SQL Server và mô hình Client/Server
1.1.3.1. Khái niệm về mô hình Client/Server
Hình 7: Mô hình Client/Server
Mô hình client/server hay còn gọi là mô hình khách/chủ là một mô hình nổi tiếng trong mạng máy
tính, được áp dụng rất rộng rãi. Ý tưởng của mô hình này là máy trạm (hay còn gọi là máy khách)
gửi yêu cầu (request) cho máy chủ (đóng vai trò người cung ứng dịch vụ), máy chủ sẽ xử lý và trả
kết quả về cho máy khách.
Client/Server là mô hình mang tính tổng quát. Trên thực tế thì một server có thể được nối tới nhiều
server khác nhằm làm việc hiệu quả và nhanh hơn. Khi nhận được 1 yêu cầu từ client, server này có
thể gửi tiếp yêu cầu vừa nhận được cho server khác ví dụ như database server vì bản thân nó không
thể xử lý yêu cầu này được. Máy server có thể thi hành các nhiệm vụ đơn giản hoặc phức tạp. Ví
dụ như một máy chủ trả lời thời gian hiện tại trong ngày, khi một máy client yêu cầu lấy
thông tin về thời gian nó sẽ phải gửi một yêu cầu theo một tiêu chuẩn do server định
10
ra, nếu yêu cầu được chấp nhận thì máy server sẽ trả về thông tin mà client yêu cầu. Có rất nhiều
các dịch vụ server trên mạng nhưng nó đều hoạt động theo nguyên lý là nhận các yêu cầu từ client
sau đó xử lý và trả kết quả cho client yêu cầu. Thông thường chương trình server và client được thi
hành trên hai máy khác nhau. Cho dù lúc nào server cũng ở trạng thái sẵn sàng chờ nhận yêu cầu từ
client nhưng trên thực tế một tiến trình liên tác qua lại (interaction) giữa client và server lại bắt đầu
ở phía client, khi mà client gửi tín hiệu yêu cầu tới server. Các chương trình server thường đều thi
hành ở mức ứng dụng (tầng ứng dụng của mạng). Sự thuận lợi của phương pháp này là nó có thể
làm việc trên bất cứ một mạng máy tính nào có hỗ trợ giao thức truyền thông chuẩn cụ thể ở đây là
giao thức TCP/IP. Với các giao thức chuẩn này cũng giúp cho các nhà sản xuất có thể tích hợp
nhiều sản phẩm khác nhau của họ lên mạng mà không gặp phải khó khăn gì. Với các chuẩn này thì
các chương trình server cho một dịch vụ nào đấy có thể thi hành trên một hệ thống chia sẻ thời gian
(timesharing system) với nhiều chương trình và dịch vụ khác hoặc nó có thể chạy trên chính một
máy tính các nhân bình thường. Có thể có nhiều chương trình server cùng làm một dịch vụ, chúng
có thể nằm trên nhiều máy tính hoặc một máy tính. Với mô hình trên chúng ta nhận thấy rằng mô
hình client/server chỉ mang đặc điểm của phần mềm không liên quan gì đến phần cứng mặc dù trên
thực tế yêu cầu cho một máy server là cao hơn nhiều so với máy client. Lý do là bởi vì máy server
phải quản lý rất nhiều các yêu cầu từ các clients khác nhau trên mạng. Ưu và nhược điểm chính Có
thể nói rằng với mô hình client/server thì mọi thứ dường như đều nằm trên bàn của người sử dụng,
nó có thể truy cập dữ liệu từ xa (bao gồm các công việc như gửi và nhận file, tìm kiếm thông tin, ...)
với nhiều dịch vụ đa dạng mà mô hình cũ không thể làm được. Mô hình client/server cung cấp một
nền tảng lý tưởng cho phép tích hợp các kỹ thuật hiện đại như mô hình thiết kế hướng đối tượng, hệ
chuyên gia, hệ thông tin địa lý (GIS) ... Một trong những vấn đề nảy sinh trong mô hình này đó là
tính an toàn và bảo mật thông tin trên mạng. Do phải trao đổi dữ liệu giữa 2 máy ở 2 khu vực khác
nhau cho nên dễ dàng xảy ra hiện tượng thông tin truyền trên mạng bị lộ.
1.1.3.2. SQL Server và mô hình Client/Server
11
Hình 8a: SQL Server và mô hình Client/Server
Hình 8b: Dùng các công cụ của SQL Server để truy xuất từ máy khách
SQL Server là một hệ quản trị cơ sở dữ liệu quan hệ hoạt động trên môi trường mạng theo mô hình
khách/chủ. Phía máy chủ chạy các dịch vụ cần thiết mà quan trọng nhất là dịch vụ cơ sở dữ liệu
SQL Server Service. Máy chủ lắng nghe các yêu cầu kết nối đến từ các máy khách và đáp ứng các
yêu cầu này. Các ứng dụng phía máy khách kết nối vào các dịch vụ cơ sở dữ liệu có thể là những
phần mềm quản lý được viết bởi các ngôn ngữ lập trình có sử dụng các thư viện đối tượng truy xuất
CSDL như ADO, ADO.Net, RDO, ODBC, JDBC,... hoặc có thể là chính các công cụ của SQL
Server như: Service Manager, Enterprise Manager hay Query Analyzer.
Trong môi trường SQL Server, các yêu cầu từ phía máy khách sẽ nằm dưới dạng các lệnh T-SQL.
SQL Server sẽ xử lý các lệnh này rồi trả về một resultset cho ứng dụng client với những thông tin
được yêu cầu hoặc chỉ xác nhận là công việc được hoàn thành mỹ mãn. Nhiều ứng dụng client hoặc
người sử dụng có thể song hành đưa ra cùng lúc những yêu cầu và SQL Server có thể xử lý chúng
song song. Một ứng dụng client có thể cung cấp một "cấp độ thoải mái" khác nhau cho người sử
dụng. Các công cụ đơn giản nhất (nhưng không dễ dùng) cho phép người sử dụng đưa vào một yêu
cầu dưới dạng lệnh T-SQL rồi nhận được những resultset dưới dạng văn bản hoặc table. Còn các
công cụ tinh vi hơn sẽ cho ra những biểu mẫu, báo cáo, biểu đồ,... cũng như các đối tượng màn hình
thân thiện hơn.
Cũng như đã trình bày ở trên, để thiết lập kết nối vật lý với một server CSDL và chuyển những yêu
cầu cũng như nhận về kết quả (resultset), các ứng dụng phía client có thể sử dụng nhiều đối tượng
hoặc các thư viện truy xuất cơ sở dữ liệu khác nhau.(data access objects hoặc data access API).
Những đối tượng truy xuất cơ sở dữ liệu thông dụng hiện nay bao gồm:
o ADO (ActiveX Database Object)
o RDO (Remote Database Object)
o DB - Library
o ODBC (Open Database Connectivity)
12
o OLE DB (Object Linking and Embbeding Database)
o DAO (Data Access Object)
Các nhà phát triển ứng dụng dùng các đối tượng kể trên hoặc các hàm API để truy cập các đối
tượng cơ sở dữ liệu và dữ liệu được lưu trữ trong các đối tượng này để triển khai những ứng dụng
trong các ngôn ngữ lập trình chẳng hạn VB, C/C++, Java, VB.Net, C#,...
1.1.3.4. Mô hình Client/Server cục bộ
Nếu trình ứng dụng truy xuất CSDL và hệ quản trị CSDL SQL Server được cài đặt trên cùng một
máy tính vật lý thì ta có mô hình Client/Server cục bộ. Lúc này, vai trò của SQL Server không
khác với các hệ quản trị CSDL truyền thống như Foxpro hay MS Access. SQL Server che dấu sự
khác biệt giữa kết nối cục bộ và kết nối qua mạng. Người dùng không nhận thấy sự khác biệt ngoài
việc tốc độ truyền thông trên mạng chậm hơn tốc độ truyền thông cục bộ.
Hình 9: Mô hình Client/Server cục bộ
1.1.3.5. SQL Server và mô hình cơ sở dữ liệu phân tán
Cơ sở dữ liệu phân tán là tập hợp các dữ liệu thuộc về cùng một hệ thống, có liên quan logic với
nhau và được trải ra trên hệ thống mạng. Hệ quản trị cơ sở dữ liệu phân tán là tập các phần mềm
quản trị một cơ sở dữ liệu phân tán, làm cho việc phân tán trở nên trong suốt với người dùng. Khái
niệm trong suốt ở đây được hiểu là chủ đích che dấu sự phân tán đối với người sử dụng, làm cho
người sử dụng sử dụng cơ sở dữ liệu phân tán như là cơ sở dữ liệu tập trung.
SQL Server là hệ quản trị cơ sở dữ liệu hỗ trợ cơ sở dữ liệu phân tán. Nó cho phép tạo ra các view
từ các bảng dữ liệu trên các Server khác nhau được kết nối (linked server), thực thi các truy vấn hay
chuyển tác phân tán trải dài trên nhiều Server,...
13
Hình 10: Mô hình cơ sở dữ liệu phân tán
1.1.3.6. Kiến trúc đa tầng
Hình 11: Mô hình phân lớp hệ thống
SQL Server là hệ quản trị cơ sở dữ liệu hoạt động trên môi trường mạng theo mô hình client/server,
cho nên khi nên khi phát triển các ứng dụng cơ sở dữ liệu người ta có thể sử dụng các kiến trúc
phân lớp (phân chia hệ thống thành các components hay layer), các lớp có thể được thực thi một
phần ở server, một phần ở client (kiến trúc nhị tầng) và có thể trên một số trạm trung gian nữa nếu
cần thiết (kiến trúc tam tầng).
A. Kiến trúc nhị tầng Fat Client
Đây là kiểu kiến trúc client/server phổ biến. Phía client của một hệ thống như thế sẽ bao gồm các
lớp:
14
o User interface: lớp giao diện người sử dụng.
o Presentation service: lớp dịch vụ trình bày.
o Business services: lớp thi công các quy tắc nghiệp vụ của hệ thống.
o Data services: lớp truy cập và xử lý dữ liệu.
Hình 12: Kiến trúc nhị tầng Fat Client
Trong khi đó, Data Storage (lớp lưu trữ và quản lý dữ liệu), thường là hệ thống cơ sở dữ liệu
(database system), sẽ được đặt tại server. Vì Business services và Data services được thực thi hoàn
toàn ở phía client, còn phía server chỉ thực thi các chức năng lưu trữ và quản trị dữ liệu nên sức
nặng của hệ thống dồn về phía client. Người ta gọi kiến trúc phân tâng như vậy là Fat Client (Client
"béo": chức năng xử lý dồn về phía client) (xem hình 12).
B. Kiến trúc nhị tầng Fat Server
Ngoài kiểu thực thi hệ thống như trên, người ta có thể cho thực thi toàn bộ Data Services và một
phần Business services ở phía server, ví dụ dưới dạng các thủ tục thường trú (stored procedure).
Loại kiến trúc như thế thường được gọi là Fat Server. Kiến trúc này giúp san sẻ một phần sức nặng
xử lý từ client lên server để giảm tải cho client, tận dụng hiệu năng xử lý phía server.
15
Hình 13: Kiến trúc nhị tầng Fat Server
C. Kiến trúc tam tầng
Để cải tiến xa hơn hệ thống, ta có thể sử dụng kiến trúc tam tầng, theo đấy các lớp Data services,
Business services và Presentation services sẽ nằm trên những tầng khác nhau một cách chặt chẽ.
Người ta bổ sung thêm một tầng trung gian (middleware component), Business services sẽ được
thực thi trên tầng trung gian này. Biện pháp này giúp giảm tải cho cả server và client, tăng hiệu
năng xử lý của hệ thống. Trong mô hình thực tế, tầng trung gian có thể bao gồm một số các máy
tính chuyên dụng để chạy các dịch vụ Business Services (xem hình 14)
Hình 14: Kiến trúc tam tầng
16
1.2. Các thành phần cơ bản trong Microsoft SQL Server
1.2.1. Cài đặt và cấu hình SQL Server
Bước 1:
Khi cửa sổ cài đặt xuất hiện ta thấy có các mục để lựa chọn:
• Install Database Server tức là cài đặt các thành phần cơ bản và quan trọng nhất của hệ quản
trị CSDL SQL Server bao gồm các dịch vụ chạy trên server, các công cụ quản lý như
Services Manager, Enterprise Manager, Query Analyzer,...
• Install Analysis Services là cài đặt các dịch vụ phân tích phục vụ cho khai phá dữ liệu (data
mining).
• Install English Query là cài đặt công cụ cho phép thực thi các truy vấn bằng cách sử dụng
ngôn ngữ tự nhiên (tiếng Anh) thay vì sử dụng ngôn ngữ SQL.
Ta chọn Install Database Server để cài đặt các thành phần của hệ quản trị. Các lựa chọn cài đặt
Install Analysis Services và Install English Query trước mắt chưa cần quan tâm đến, khi nào cần
dùng đến chúng ta sẽ cài đặt bổ sung.
Bước 2:
Cửa sổ Computer Name xuất hiện. Tại đây cho phép ta điền vào tên máy tính mà ta muốn cài đặt
SQL Server. Nếu ta chọn cài đặt trên Local Computer thì tên máy tính hiện hành sẽ tự động được
điền vào. Nếu ta chọn Remote Computer tức là cài đặt SQL Server lên máy tính khác (có kết nối
mạng với máy tính hiện hành) thì ta phải chỉ rõ tên máy đó.
Trong trường hợp của ta, chọn Local Computer và nhấn Next để cài lên máy tính hiện hành.
17
Bước 3:
Cửa sổ Installation Selection xuất hiện cho phép ta lựa chọn chế độ cài đặt:
• Create a new instance of SQL Server, or install Client Tools: Chọn mục này nếu ta muốn
cài mới hoàn toàn một phiên bản (hay còn gọi là "thể hiện" - instance) của SQL Server hoặc
muốn cài đặt các công cụ phía Client cho phép truy xuất, quản lý Server.
• Upgrade, remove or add components to an existing instance of SQL Server: Chọn mục
này nếu ta muốn nâng cấp, thêm bớt một số components của một phiên bản SQL Server đã
được cài đặt trước đó trên máy tính.
• Advanced options: Một số tùy chọn cài đặt nâng cao, với các tùy chọn cài đặt ở mức hết
sức chi tiết dành cho những người dùng có kinh nghiệm.
Trong trường hợp của ta, chọn mục đầu tiên: Create a new instance of SQL Server, or install
Client Tools và nhấn Next để sang bước tiếp theo.
18
Bước 4:
Cửa sổ User Information xuất hiện yêu cầu ta nhập các thông tin cơ bản về người dùng và công ty
sử dụng sản phầm SQL Server.
Bước 5:
Hộp thoại Software License Agreement xuất hiện, yêu cầu ta chấp nhận các điều khoản về License.
Nhấn Next để tiếp tục.
19
Bước 6:
Hộp thoại Installation Definition xuất hiện cho phép ta chỉ định các thành phần cài đặt với các tùy
chọn:
• Client Tools Only: Chỉ cài đặt các công cụ truy xuất và quản trị phía Client chứ không cài
đặt các thành phần dịch vụ của Database Server lên máy tính hiện hành. Tùy chọn này dùng
khi ta đã đặt Server dữ liệu trên một máy khác và giờ ta muốn ngồi ở máy hiện hành để truy
xuất, điều khiển, cấu hình Server dữ liệu từ xa.
• Server and Client Tools: Cài đặt tất cả các thành phần bao gồm Database Server, các công
cụ phía Server và Client lên máy tính hiện hành.
• Conectivity Only: Chỉ cài đặt các thư viện kết nối để hỗ trợ các ứng dụng trên máy Client
có thể kết nối với SQL Server.
Trong trường hợp của ta, chọn mục Server and Client Tools và nhấn Next để tiếp tục.
20
Bước 7:
Cửa sổ Setup Type xuất hiện cho ta lựa chọn một số thông số cài đặt. Có mấy tùy chọn sau:
• Typical: Cài đặt với các tùy chọn thông dụng nhất.
• Minimum: Cài đặt với các tùy chọn tối thiểu (yêu cầu cấu hình thấp nhất).
• Custom: Cho phép người dùng tự mình lựa chọn và loại bỏ những thành phần có thể được
cài đặt.
Trong trường hợp của ta, chọn mục Typical. Ở phần Destination Folder gồm hai mục:
• Program Files: Cho phép chỉ định nơi cài đặt SQL Server
• Data Files: Chỉ định nơi lưu trữ mặc định các tệp tin cơ sở dữ liệu của SQL Server.
Sau khi đã thiết lập xong các thông số, nhấn Next để tiếp tục.
Bước 8:
21
Hộp thoại Services Account xuất hiện yêu cầu ta thiết lập một số thông số ban đầu liên quan tới
tài khoản người dùng dùng để đăng nhập vào SQL Server. Có hai tùy chọn cơ bản:
• Use the same account for each service. Auto start SQL Server Service: Dùng chung một
account cho tất cả các dịch vụ của SQL Server. Dịch vụ SQL Server Service sẽ tự động
được khởi động nếu cần thiết.
• Customize the setting for each service: Thay vì dùng chung, mỗi dịch vụ sẽ có tùy chọn
riêng. Lựa chọn này có tính bảo mật cao nhưng khá phiền phức.
Trong trường hợp của ta, chọn mục Use the same account for each service. Auto start SQL
Server Service.
Ở phần Service Setting có hai tùy chọn:
• Use the Local System account: Sử dụng tài khoản hệ thống trên máy tính hiện hành làm tài
khoản đăng nhập vào SQL Server.
• User a Domain User Account: Sử dụng tài khoản Domain User để đăng nhập vào SQL
Server nếu máy tính hiện hành đang làm việc trong môi trường Domain của Windows
Server 2000/2003.
Trong trường hợp của ta, chọn mục Use the Local System account. Nhấn Next để tiếp tục
Bước 9:
Hộp thoại Authentication Mode xuất hiện cho phép chúng ta thiết lập chế độ xác thực người
dùng của SQL Server. Có hai lựa chọn:
• Windows Authentication Mode: Xác thực dựa trên account của Windows. Chỉ những
người dùng có account đăng nhập của hệ điều hành Windows (những account Windows này
phải được đăng ký trước với SQL Server) thì mới có thể đăng nhập vào hệ thống SQL
Server.
22
• Mixed Mode: Chế độ xác thực hỗn hợp. Chế độ này cho phép cả những người dùng có
account của Windows và những người dùng có account riêng của SQL Server đều có thể
đăng nhập hệ thống. Trong trường hợp này, tài khoản sa - tài khoản quản trị hệ thống mặc
định của SQL Server trở nên có hiệu lực, SQL Server gợi ý người dùng nên nhập password
cho account này để đảm bảo tính bảo mật cho hệ thống.
Trong trường hợp của ta, chọn chế độ Mixed Mode, account của sa để trống sau đó nhấn Next để
tiếp tục cài đăt.
Các bước tiếp theo không có gì đặc biệt. Cứ nhấn Next để tiếp tục quá trình cài đặt. Việc cài đặt
diễn ra nhanh hay chậm tùy thuộc vào từng máy tính. Quá trình cài đặt xong xuôi, nhấn Finish để
kết thúc.
1.3. Ngôn ngữ truy vấn dữ liệu có cấu trúc (SQL)
SQL, viết tắt của Structured Query Language (ngôn ngữ hỏi có cấu trúc), là công cụ sử dụng để tổ
chức, quản lý và truy xuất dữ liệu đuợc lưu trữ trong các cơ sở dữ liệu. SQL là một hệ thống ngôn
ngữ bao gồm tập các câu lệnh sử dụng để tương tác với cơ sở dữ liệu quan hệ.
Tên gọi ngôn ngữ hỏi có cấu trúc phần nào làm chúng ta liên tưởng đến một công cụ (ngôn ngữ)
dùng để truy xuất dữ liệu trong các cơ sở dữ liệu. Thực sự mà nói, khả năng của SQL vượt xa so với
một công cụ truy xuất dữ liệu, mặc dù đây là mục đích ban đầu khi SQL được xây dựng nên và truy
xuất dữ liệu vẫn còn là một trong những chức năng quan trọng của nó. SQL được sử dụng để điều
khiển tất cả các chức năng mà một hệ quản trị cơ sở dữ liệu cung cấp cho người dùng bao gồm:
1 • Định nghĩa dữ liệu: SQL cung cấp khả năng định nghĩa các cơ sở dữ liệu, các cấu trúc
lưu trữ và tổ chức dữ liệu cũng như mối quan hệ giữa các thành phần dữ liệu.
2 • Truy xuất và thao tác dữ liệu: Với SQL, người dùng có thể dễ dàng thực hiện các
thao tác truy xuất, bổ sung, cập nhật và loại bỏ dữ liệu trong các cơ sở dữ liệu.
23
3 • Điều khiển truy cập: SQL có thể được sử dụng để cấp phát và kiểm soát các thao
tác của người sử dụng trên dữ liệu, đảm bảo sự an toàn cho cơ sở dữ liệu
1 Đảm bảo toàn vẹn dữ liệu: SQL định nghĩa các ràng buộc toàn vẹn trong cơ sở dữ liệu
nhờ đó đảm bảo tính hợp lệ và chính xác của dữ liệu trước các thao tác cập nhật cũng
như các lỗi của hệ thống.
Như vậy, có thể nói rằng SQL là một ngôn ngữ hoàn thiện được sử dụng trong các hệ thống cơ
sở dữ liệu và là một thành phần không thể thiếu trong các hệ quản trị cơ sở dữ liệu. Mặc dù SQL
không phải là một ngôn ngữ lập trình như C, C++, Java,... song các câu lệnh mà SQL cung cấp có
thể được nhúng vào trong các ngôn ngữ lập trình nhằm xây dựng các ứng dụng tương tác với cơ sở
dữ liệu.
Khác với các ngôn ngữ lập trình quen thuộc như C, C++, Java,... SQL là ngôn ngữ có tính khai
báo. Với SQL, người dùng chỉ cần mô tả các yêu cầu cần phải thực hiện trên cơ sở dữ liệu mà
không cần phải chỉ ra cách thức thực hiện các yêu cầu như thế nào. Chính vì vậy, SQL là ngôn ngữ
dễ tiếp cận và dễ sử dụng.
Trong hầu hết các hệ quản trị cơ sở dữ liệu quan hệ, SQL có những vai trò như sau:
1 • SQL là ngôn ngữ hỏi có tính tương tác: Người sử dụng có thể dễ dàng thông qua các
trình tiện ích để gởi các yêu cầu dưới dạng các câu lệnh SQL đến cơ sở dữ liệu và nhận
kết quả trả về từ cơ sở dữ liệu
2 • SQL là ngôn ngữ lập trình cơ sở dữ liệu: Các lập trình viên có thể nhúng các câu lệnh
SQL vào trong các ngôn ngữ lập trình để xây dựng nên các chương trình ứng dụng giao
tiếp với cơ sở dữ liệu
3 • SQL là ngôn ngữ quản trị cơ sở dữ liệu: Thông qua SQL, người quản trị cơ sở dữ
liệu có thể quản lý được cơ sở dữ liệu, định nghĩa các cấu trúc lưu trữ dữ liệu, điều khiển
truy cập cơ sở dữ liệu,...
4 • SQL là ngôn ngữ cho các hệ thống khách/chủ (client/server): Trong các hệ thống cơ
sở dữ liệu khách/chủ, SQL được sử dụng như là công cụ để giao tiếp giữa các trình ứng
dụng phía máy khách với máy chủ cơ sở dữ liệu.
5 • SQL là ngôn ngữ truy cập dữ liệu trên Internet: Cho đến nay, hầu hết các máy chủ
Web cũng như các máy chủ trên Internet sử dụng SQL với vai trò là ngôn ngữ để tương
tác với dữ liệu trong các cơ sở dữ liệu.
6 • SQL là ngôn ngữ cơ sở dữ liệu phân tán: Đối với các hệ quản trị cơ sở dữ liệu phân
tán, mỗi một hệ thống sử dụng SQL để giao tiếp với các hệ thống khác trên mạng, gởi và
nhận các yêu cầu truy xuất dữ liệu với nhau.
Bài tập
Câu 1: Trình bày khái niệm về cơ sở dữ liệu quan hệ. Cơ sở dữ liệu quan hệ có những điểm khác
biệt gì so với hệ thống xử lý file truyền thống?
24
Câu 2: Trình bày khái niệm về hệ quản trị cơ sở dữ liệu quan hệ.
Câu 3: Trình bày về mô hình Client/Server và kiến trúc phân tầng.
Câu 4: Nêu các thành phần cơ bản của hệ quản trị CSDL SQL Server.
Câu 3: Trình bày những đặc điểm cơ bản của ngôn ngữ vấn tin SQL.
25
Chương 2. Tạo và quản lý cơ sở dữ liệu
2.1. Các tệp tin cơ sở dữ liệu (Database files)
Trong SQL Server, một user database có thể bao gồm hai hay nhiều tập tin (mặc định là 2). Các
tập tin trong một database có thể chia làm 3 loại:
• Primary Data File: Mỗi database phải có ít nhất một tập tin Primary data file với phần mở
rộng là .MDF. Tập tin này ngoài nhiệm vụ cất trữ dữ liệu thuần túy còn nhiệm vụ lưu trữ
thông tin liên quan đến cấu trúc và đặc điểm của chính database đó (lưu trong các system
tables). Ta tuyệt đối không nên can thiệp vào các system tables này vì việc này có thể phá
hỏng database.
• Secondary Data File: Mỗi database có thể không có hoặc có nhiều Secondary Data File.
Các tập tin này chỉ thuần túy lưu trữ dữ liệu và có phần mở rộng là .NDF.
• Log File: Mỗi database phải có ít nhất một transaction log file (có phần mở rộng là .LDF).
Log file làm nhiệm vụ lưu trữ thông tin liên quan các giao dịch (transaction) thực hiện trên
database đó. Thông tin này một phần phục vụ cho thao tác Roll Back khi có lỗi giao dịch
xảy ra.
Mỗi tập tin trong CSDL (.MDF,.NDF,.LDF) đêu có 5 thuộc tính:
• NAME: Tên logic của tập tin.
• FILENAME: Đường dẫn đầy đủ (tên vật lý).
• SIZE: Kích thước ban đầu của tập tin (KB, MB, GB, TB).
• MAXSIZE: Kích thước tối đa cho phép của tập tin (KB, MB, GB,TB).
• FILEGROWTH : Tốc độ gia tăng kích thước của tập tin (KB, MB, GB, TB,%).
Các tập tin CSDL được tổ chức thành các nhóm gọi là file group theo nguyên tắc:
• Một CSDL có thể có một hay nhiều file group. Trong đó bắt buộc phải có một file group
chính gọi là PRIMARY.
• Mỗi file group có thể chứa một hay nhiều tập tin dữ liệu (.MDF, .NDF). Trong đó phải có ít
nhát 1 tập tin Primary Data File (.MDF) nằm trong group chính PRIMARY.
• Các tập tin Log không thuộc về một file group nào cả.
2.2. Tạo cơ sở dữ liệu (Database)
2.2.1. Sử dụng lệnh CREATE DATABASE
CREATE DATABASE <tên CSDL>
26
[ ON
PRIMARY
<Khai báo tập tin .MDF>,
[<Khai báo tập tin .NDF>,]
. . . ]
[ FILEGROUP <tên file group>
<Khai báo tập tin .NDF>,
[<Khai báo tập tin .NDF>,]
. . . ]
. . .
[LOG ON
<Khai báo tập tin .LDF>,
[<Khai báo tập tin .LDF>,]
. . . ]
[COLLATE <tên collation>]
[FOR ATTACH]
Cú pháp đơn giản hay được sử dụng hơn cả là:
CREATE DATABASE <tên CSDL>
ON
PRIMARY
<Khai báo tập tin .MDF>
LOG ON
<Khai báo tập tin .LDF>
Hoặc thậm chí đơn giản hơn nữa
CREATE DATABASE <tên CSDL>
Trong đó phần khai báo tập tin được bao bởi cặp ngoặc đơn “(…)” và gồm các thành phần:
( [NAME = <tên logic của tập tin>,]
FILENAME = <tên vật lý (đường dẫn)>,
[SIZE = <kích thước ban đầu>,]
[MAXSIZE = <kích thước lớn nhất có thể> | UNLIMITED],
[FILEGROWTH = <Tỷ lệ gia tăng kích thước>])
Chú ý:
Khi không chỉ rõ kích thước ban đầu (SIZE) của tập tin thì:
• Đối với tập tin .MDF, SQL Server sẽ lấy kích thước của tập tin .MDF trong Model
Database.
• Đối với các tập tin .NDF, .LDF, SQL Server tự khởi tạo giá trị mặc định là 1MB.
27
• Đơn vị mặc định của SIZE và MAXSIZE là MB.
2.1.2. Sử dụng Enterprise Manager để tạo CSDL
28
29
30
2.3. Quản lý cơ sở dữ liệu
2.3.1. Sử dụng lệnh ALTER DATABSE
ALTER DATABASE <tên CSDL>
[ ADD FILE <Khai báo tập tin .MDF,.NDF> [, . . .] [ TO FILEGROUP <Tên File Group>] ]
[ADD LOG FILE <Khai báo tập tin .LDF> [, . . .]]
[ADD FILEGROUP <Tên File Group>]
[REMOVE FILE <Tên logic của tập tin>]
[REMOVE FILEGROUP <Tên File Group>]
[MODIFY NAME = <Tên mới cho Database>]
[MODIFY FILE <Khai báo tập tin>]
[MODIFY FILEGROUP <Tên File Group> <Thuộc tính File Group>|NAME = <Tên mới>]
[COLLATE <Tên collation>]
Trong đó phần khai báo tập tin được bao bởi cặp ngoặc đơn “(…)” và gồm các thành phần:
( NAME = <tên logic của tập tin>,
[NEWNAME = <tên logic mới cho tập tin>,]
[FILENAME = <tên vật lý (đường dẫn)>],
[SIZE = <kích thước ban đầu>,]
[MAXSIZE = <kích thước lớn nhất có thể> | UNLIMITED],
[FILEGROWTH = <Tỷ lệ gia tăng kích thước>])
Chú ý: Riêng NEWNAME chỉ dùng khi MODIFY FILE
<Thuộc tính File Group> bao gồm:
• READONLY: Khi một file group bị đánh dấu READONLY thì mọi thao tác cập nhật dữ
liệu trên các tập tin thuộc file group này đều không thể thực hiện được. Không được phép áp
dụng thuộc tính này cho Primary Group.
• READWRITE: Ngược lại với READONLY
• DEFAULT: Đánh dấu file group như là file group mặc định của database hiện thời.
31
2.3.2. Sửa đổi cơ sở dữ liệu bằng Enterprise Manager
32
2.4. Xóa cơ sở dữ liệu
2.4.1. Sử dụng lệnh DROP DATABASE trên Query Analyzer
DROP DATABASE <tên CSDL>
2.4.2. Xóa CSDL sử dụng Enterprise Manager
2.5. Các system database đặc biệt
Ngay sau khi SQL Server mới được cài đặt xong, có 6 database tự động được cung cấp. Người ta
gọi những database này là các system database để phân biệt với các database do người dùng tự tạo
ra sau này (user database). Các system database bao gồm:
• Model database
• Master database
• Msdb database
33
• Tempdb database
• Pubs database
• Northwind database
A. Master database
Bao gồm tất cả các system table lưu trữ dữ liệu theo dõi việc cài đặt Server về mặt tổng thể cũng
như theo dõi tất cả các user database được tạo ra về sau. Cụ thể hơn, Master database có chứa
những system catalog lưu trữ thông tin liên quan đến:
• Khoảng trống đĩa (space disk).
• Cấp phát tập tin.
• Cài đặt để cấu hình toàn hệ thống.
• Tài khoản đăng nhập.
• Sự hiện hữu của các database khác.
• Sự hiện hữu của các SQL Server khác (trong các giao dịch phân tán).
Mỗi khi tạo một database mới, thay đổi cấu hình, tài khoản đăng nhập,… tất cả thông tin đều
được cập nhật vào Master database.
B.Model database
Đóng vai trò như một khuôn mẫu (template). Mỗi lần người dùng tạo mới một user database thì
SQL Server sẽ dùng Model database làm “khuôn mẫu” cho việc tạo mới user database. Mỗi user
database lúc mới tạo sẽ kế thừa các thuộc tính và có cấu trúc giống như Model database. Nếu ta
muốn mỗi user database lúc mới tạo ra đã có sẵn một số đặc điểm nào đấy, ta có thể thiết lập các
đặc điểm đó trên Model database. Các user database được tạo ra sau này sẽ tự động được kế thừa
các đặc điểm đó.
C. Tempdb database
Là một database để lưu trữ dữ liệu tạm thời (tempotary). Nó được dùng để lưu trữ:
• Những dữ liệu tam thời (bảng tạm) do người dùng tạo ra
• Những kết quả trung gian phục vụ cho quá trình xử lý của nội bộ SQL Server: xử lý các câu
truy vấn (Query), sắp xếp (Sorting),…
Mặc định mỗi khi SQL Server được khởi động thì Tempdb database được tái tạo lại, mới hoàn toàn,
mọi dữ liệu (bảng tạm) do người dùng lưu trữ lên Tempdb database trước đó sẽ biến mất
D. Msdb Database
Là một database phục vụ cho hoạt động SQL Server Agent service. Nó lưu trữ thông tin liên
quan đến việc hoạch định tác vụ (Task Shedule) cho các hoạt động như: backup dữ liệu, tạo thứ bản
(replication),…
E. Pubs database và Northwind database
34
Đây là hai CSDL được dùng làm thí dụ mẫu trong SQL Server book và các tài liệu hướng dẫn
về SQL Server.
Chú ý
• Tuyệt đối không được tự ý xóa hay can thiệp trực tiếp vào các cơ sở dữ liệu Master và
Msdb. Việc này có thể làm ảnh hưởng nghiêm trọng đến hoạt động của Server.
• Không nên tự ý sửa đổi CSDL dữ liệu Model nếu không có lý do chính đáng.
• Các CSDL Northwind và Pubs có thể xóa được nhưng không nên làm thế vì chúng là những
ví dụ hay về CSDL rất nên tham khảo.
Bài tập:
Câu 1: Trình bày về tổ chức tập tin trong cơ sở dữ liệu SQL Server. Phân loại tập tin trong SQL
Server. Cách khai báo đặc tả tập tin trong SQL Server (5 thuộc tính).
Câu 2: Nêu chức năng các cơ sở dữ liệu hệ thống trong SQL Server.
Câu 3: Trình bày cú pháp đầy đủ của lệnh CREATE DATABASE và giải thích ý nghĩa các tham số.
35
Chương 3. Tạo và quản lý các bảng
3.1. Tạo bảng (Tables)
3.1.1. Sử dụng lệnh CREATE TABLE
CREATE TABLE <Tên bảng dữ liệu>
(
<Cột 1> <Kiểu dữ liệu> [<Thuộc tính nếu có>],
<Cột 2> <Kiểu dữ liệu> [<Thuộc tính nếu có>],
. . .
<Cột n> <Kiểu dữ liệu> [<Thuộc tính nếu có>],
[Các ràng buộc nếu có]
)
[ON <Tên file group> | DEFAULT]
3.1.2. Sử dụng Enterprise Manager
• Vào mục Tables trong CSDL muốn tạo
• Chọn New Table
36
3.2. Định nghĩa các cột (Columns)
A. Thuộc tính NULL và NOT NULL
 Thuộc tính NULL
o Khi một cột được xác lập thuộc tính là NULL giá trị tại cột đó được phép để trống (mang
giá trị null)
o Thuộc tính NULL là thuộc tính mặc định. Khi một cột không có khai báo gì thêm thì mặc
định thuộc tính của cột đó NULL.
37
 Thuộc tính NOT NULL
Khi một cột được xác lập thuộc tính là NOT NULL thì giá trị tại cột đó không được phép để trống.
Khai báo: <Tên cột> <Kiểu dữ liệu> NULL | NOT NULL
B. Thuộc tính IDENTITY
o Thuộc tính này cho phép ta chỉ định một cột kiểu số nguyên như là một cột định danh
(Identity Comlumn) của table (gần giống như cột STT trong các bảng dữ liệu trên giấy).
o Ta không phải nhập dữ liệu cho cột này mà các giá trị trên cột được tự đông phát sinh bắt
đầu từ một giá trị khởi tạo và tăng dần theo một công sai nào đó được chỉ định, đồng thời
đảm bảo tính duy nhất một cách tuyệt đối (không có hai giá trị nào trùng nhau).
o Mục đích: có thể dùng cho việc tạo khóa tự động
Khai báo: <Tên cột> <Kiểu dữ liệu> … Identity(seed, increment)
Với: seed: giá trị khởi tạo, increment: mức tăng
Ví dụ: Khai báo cột STT tăng tự động từ 1
STT bigint Identity(1,1) NOT NULL
C. Thuộc tính ROWGUICOL
o Thuộc tính này cho phép ta chỉ định một cột kiểu UniqueIdentifier như là cột mã định danh
quốc tế duy nhất gọi là GUID (Gloabal Unique Identifier)
o Tương tự như Identity, ROWGUICOL có thể dùng để tạo khóa tự động bằng cách sử dụng
hàm hệ thống NEWID() như là giá trị mặc định cho cột.
Khai báo:
<Tên cột> UniqueIdentifier ROWGUICOL NOT NULL DEFAULT NEWID()
3.3. Định nghĩa các ràng buộc (Constrains)
A. Ràng buộc khóa chính PRIMARY KEY
Khi muốn chỉ định một cột làm khóa chính, ta sử dụng ràng buộc PRIMARY KEY trên cột đó theo
cú pháp:
Constraint <Tên ràng buộc> Primary Key(<Tên cột>)
B. Ràng buộc khóa ngoại FOREIGN KEY
Khi muốn chỉ định một cột làm khóa ngoại tham chiếu đến bảng cha, ta sử dụng ràng buộc
FOREIGN KEY theo cú pháp:
Constraint <Tên ràng buộc> Foreign Key(<Tên cột>)
References <Tên bảng cha>(<Khóa chính>)
C. Ràng buộc kiểm tra CHECK
Khi muốn dữ liệu nhập vào phải thỏa mãn một biểu thức điều kiện nào đó ta có thể sử dụng ràng
buộc kiểm tra CHECK với cú pháp
Constraint <Tên ràng buộc> CHECK(<Biểu thức điều kiện>)
38
D. Ràng buộc mặc định DEFAULT
Khi muốn khởi tạo giá trị mặc định cho một cột nào đó của bảng, ta khai báo ràng buộc DEFAULT
ngay bên cạnh khai báo cột
<Tên cột> <Kiểu dữ liệu> … DEFAULT <Giá trị mặc định>
3.4. Sửa bảng
3.4.1. Dùng lệnh ALTER TABLE
ALTER TABLE <Tên bảng>
[ADD <Tên cột> <Kiểu dữ liệu> [<Thuộc tính nếu có>],…]
[ADD <Định nghĩa ràng buộc>,…]
[ALTER COLUMN <Tên cột>
[<Tên kiểu dữ liệu mới>] [NULL | NOT NULL]
[ADD | DROP ROWGUIDCOL]
[DROP COLUMN <Tên cột>,…]
[DROP CONSTRAINT <Tên ràng buộc> ,…]
[NOCHECK | CHECK CONSTRAINT <Tên ràng buộc>]
Chú ý:
NOCHECK dùng để tạm thời vô hiệu hóa một ràng buộc chứ không xóa bỏ nó khỏi CSDL.
3.4.2. Sửa đổi bảng dữ liệu sử dụng Enterprise Manager
• Click chuột phải lên bảng muốn sửa đổi.
• Chọn Design Table
39
3.5. Xóa bảng (DROP TABLE)
3.5.1. Sử dụng lệnh DROP TABLE
DROP TABLE <Tên bảng dữ liệu>
3.5.2. Sử dụng Enterprise Manager
3.6. Thêm bản ghi mới (INSERT)
Dữ liệu trong các bảng được thể hiện dưới dạng các dòng (bản ghi). Để bổ sung thêm các dòng dữ
liệu vào một bảng, ta sử dụng câu lệnh INSERT. Hầu hết các hệ quản trị CSDL dựa trên SQL cung
cấp các cách dưới đây để thực hiện thao tác bổ sung dữ liệu cho bảng:
40
1 • Bổ sung từng dòng dữ liệu với mỗi câu lệnh INSERT. Đây là các sử dụng thường
gặp nhất trong giao tác SQL.
2 • Bổ sung nhiều dòng dữ liệu bằng cách truy xuất dữ liệu từ các bảng dữ liệu khác.
Bổ sung từng dòng dữ liệu với lệnh INSERT
Để bổ sung một dòng dữ liệu mới vào bảng, ta sử dụng câu lệnh INSERT với cú pháp như sau:
INSERT INTO tên_bảng[(danh_sách_cột)]
VALUES(danh_sách_trị)
Trong câu lệnh INSERT, danh sách cột ngay sau tên bảng không cần thiết phải chỉ định nếu giá trị
các trường của bản ghi mới được chỉ định đầy đủ trong danh sách trị. Trong trường hợp này, thứ tự
các giá trị trong danh sách trị phải bằng với số lượng các trường của bảng cần bổ sung dữ liệu cũng
như phải tuân theo đúng thứ tự của các trường như khi bảng được định nghĩa.
Ví dụ: Câu lệnh dưới đây bổ sung thêm một dòng dữ liệu vào bảng KHOA
INSERT INTO khoa
VALUES(‘DHT10’,’Khoa Luật’,’054821135’)
Trong trường hợp chỉ nhập giá trị cho một số cột trong bảng, ta phải chỉ định danh sách các
cột cần nhập dữ liệu ngay sau tên bảng. Khi đó, các cột không được nhập dữ liệu sẽ nhận giá trị mặc
định (nếu có) hoặc nhận giá trị NULL (nếu cột cho phép chấp nhận giá trị NULL). Nếu một cột
không có giá trị mặc định và không chấp nhận giá trị NULL mà không đuợc nhập dữ liệu, câu lệnh
sẽ bị lỗi.
Ví dụ: Câu lệnh dưới đây bổ sung một bản ghi mới cho bảng SINHVIEN
INSERT INTO sinhvien(masv,hodem,ten,gioitinh,malop)
VALUES(‘0241020008’,‘Nguyễn Công’,’Chính’,1,’C24102’)
câu lệnh trên còn có thể được viết như sau:
INSERT INTO sinhvien
VALUES(‘0241020008’,‘Nguyễn Công’,’Chính’,
NULL,1,NULL,’C24102’)
Bổ sung nhiều dòng dữ liệu từ bảng khác
Một cách sử dụng khác của câu lệnh INSERT được sử dụng để bổ sung nhiều dòng dữ liệu
vào một bảng, các dòng dữ liệu này được lấy từ một bảng khác thông qua câu lệnh SELECT. Ở
cách này, các giá trị dữ liệu được bổ sung vào bảng không được chỉ định tường minh mà thay vào
đó là một câu lệnh SELECT truy vấn dữ liệu từ bảng khác.
Cú pháp câu lệnh INSERT có dạng như sau:
INSERT INTO tên_bảng[(danh_sách_cột)] câu_lệnh_SELECT
Ví dụ: Giả sử ta có bảng LUUSINHVIEN bao gồm các trường HODEM, TEN, NGAYSINH. Câu
lệnh dưới đây bổ sung vào bảng LUUSINHVIEN các dòng dữ liệu có được từ câu truy vấn
SELECT:
41
INSERT INTO luusinhvien
SELECT hodem,ten,ngaysinh
FROM sinhvien
WHERE noisinh like ‘%Huế%’
Khi bổ sung dữ liệu theo cách này cần lưu ý một số điểm sau:
• Kết quả của câu lệnh SELECT phải có số cột bằng với số cột được chỉ định trong
bảng đích và phải tương thích về kiểu dữ liệu.
• Trong câu lệnh SELECT được sử dụng mệnh đề COMPUTE ... BY
3.7. Cập nhật bản ghi (UPDATE)
Câu lệnh UPDATE trong SQL được sử dụng để cập nhật dữ liệu trong các bảng. Câu lệnh này có cú
pháp như sau:
UPDATE tên_bảng
SET tên_cột = biểu_thức
[, ..., tên_cột_k = biểu_thức_k]
[FROM danh_sách_bảng]
[WHERE điều_kiện]
Sau UPDATE là tên của bảng cần cập nhật dữ liệu. Một câu lệnh UPDATE có thể cập nhật dữ liệu
cho nhiều cột bằng cách chỉ định các danh sách tên cột và biểu thức tương ứng sau từ khoá SET.
Mệnh đề WHERE trong câu lệnh UPDATE thường được sử dụng để chỉ định các dòng dữ liệu chịu
tác động của câu lệnh (nếu không chỉ định, phạm vi tác động của câu lệnh được hiểu là toàn bộ các
dòng trong bảng)
Ví dụ 2.51: Câu lệnh dưới đây cập nhật lại số đơn vị học trình của các môn học có số đơn vị học
trình nhỏ hơn 2
UPDATE monhoc
SET sodvht = 3
WHERE sodvht = 2
Sử dụng cấu trúc CASE trong câu lệnh UPDATE
Cấu trúc CASE có thể được sử dụng trong biểu thức khi cần phải đưa ra các quyết định khác nhau
về giá trị của biểu thức
Ví dụ Giả sử ta có bảng NHATKYPHONG sau đây
Sau khi thực hiện câu lệnh:
42
UPDATE nhatkyphong
SET tienphong=songay*CASE WHEN loaiphong='A' THEN 100
WHEN loaiphong='B' THEN 70
ELSE 50
END
Dữ liệu trong bảng sẽ là:
Điều kiện cập nhật dữ liệu liên quan đến nhiều bảng
Mệnh đề FROM trong câu lệnh UPDATE được sử dụng khi cần chỉ định các điều kiện liên quan
đến các bảng khác với bảng cần cập nhật dữ liệu. Trong truờng hợp này, trong mệnh đề WHERE
thường có điều kiện nối giữa các bảng.
Ví dụ: Giả sử ta có hai bảng MATHANG và NHATKYBANHANG như sau:
Câu lệnh dưới đây sẽ cập nhật giá trị trường THANHTIEN của bảng NHATKYBANHANG theo
công thức THANHTIEN = SOLUONG × GIA
UPDATE nhatkybanhang
SET thanhtien = soluong*gia
FROM mathang
WHERE nhatkybanhang.mahang = mathang.mahang
3.8. Xóa bản ghi (DELETE)
Để xoá dữ liệu trong một bảng, ta sử dụng câu lệnh DELETE. Cú pháp của câu lệnh này như sau:
DELETE FROM tên_bảng
[FROM danh_sách_bảng]
[WHERE điều_kiện]
Trong câu lệnh này, tên của bảng cần xoá dữ liệu được chỉ định sau DELETE FROM. Mệnh đề
WHERE trong câu lệnh được sử dụng để chỉ định điều kiện đối với các dòng dữ liệu cần xoá. Nếu
câu lệnh DELETE không có mệnh đề WHERE thì toàn bộ các dòng dữ liệu trong bảng đều bị xoá.
Ví dụ 2.55: Câu lệnh dưới đây xoá khỏi bảng SINHVIEN những sinh viên sinh tại Huế
DELETE FROM sinhvien
43
WHERE noisinh LIKE ‘%Huế%’
Xoá dữ liệu khi điều kiện liên quan đến nhiều bảng
Nếu điều kiện trong câu lệnh DELETE liên quan đến các bảng không phải là bảng cần xóa
dữ liệu, ta phải sử dụng thêm mệnh đề FROM và sau đó là danh sách tên các bảng đó. Trong trường
hợp này, trong mệnh đề WHERE ta chỉ định thêm điều kiện nối giữa các bảng
Ví dụ: Câu lệnh dưới đây xoá ra khỏi bảng SINHVIEN những sinh viên lớp Tin K24
DELETE FROM sinhvien
FROM lop
WHERE lop.malop=sinhvien.malop AND tenlop='Tin K24'
Sử dụng truy vấn con trong câu lệnh DELETE
Một câu lệnh SELECT có thể được lồng vào trong mệnh đề WHERE trong câu lệnh DELETE để
làm điều kiện cho câu lệnh tương tự như câu lệnh UPDATE.
Ví dụ: Câu lệnh dưới đây xoá khỏi bảng LOP những lớp không có sinh viên nào học
DELETE FROM lop
WHERE malop NOT IN (SELECT DISTINCT malop
FROM sinhvien)
Xoá toàn bộ dữ liệu trong bảng
Câu lệnh DELETE không chỉ định điều kiện đối với các dòng dữ liệu cần xoá trong mệnh đề
WHERE sẽ xoá toàn bộ dữ liệu trong bảng. Thay vì sử dụng câu lệnh DELETE trong trường hợp
này, ta có thể sử dụng câu lệnh TRUNCATE có cú pháp như sau:
TRUNCATE TABLE tên_bảng
Bài tập
Câu 1: Phân biệt user table và system table trong cơ sở dữ liệu SQL Server. Các system table
thường lưu trữ những thông tin gì?
Câu 2: Liệt kê và phân loại các kiểu dữ liệu mà SQL Server 2000 hỗ trợ.
Câu 3: Trình bày cú pháp đầy đủ của lệnh CREATE TABLE và giải thích chức năng của từng tham
số.
Câu 4: Tạo cơ sở dữ liệu với các bảng dữ liệu sau đây:
KhachHang(MaKH, TenKH, DiaChi)
NhaCungCap(MaNCC, TenNCC, DiaChi)
MatHang(MaMH,TenMH,DonViTinh, DonGia, MaNCC)
HoaDon(MaHD, MaKH, NgayGiaoDich)
ChiTietHoaDon(MaHD, MaMH, SoLuong)
(Sinh viên tự xác định kiểu dữ liệu và mối liên kết giữa các bảng)
44
Chương 4. Truy vấn dữ liệu
4.1. Truy vấn cơ bản
4.1.1. Mệnh đề SELECT
Câu lệnh SELECT được sử dụng để truy xuất dữ liệu từ các dòng và các cột của một hay nhiều
bảng, khung nhìn. Câu lệnh này có thể dùng để thực hiện phép chọn (tức là truy xuất một tập con
các dòng trong một hay nhiều bảng), phép chiếu (tức là truy xuất một tập con các cột trong một hay
nhiều bảng) và phép nối (tức là liên kết các dòng trong hai hay nhiều bảng để truy xuất dữ liệu).
Ngoài ra, câu lệnh này còn cung cấp khả năng thực hiện các thao tác truy vấn và thống kê dữ liệu
phức tạp khác. Cú pháp chung của câu lệnh SELECT có dạng:
SELECT [ALL | DISTINCT][TOP n] danh_sách_chọn
[INTO tên_bảng_mới]
FROM danh_sách_bảng/khung_nhìn
[WHERE điều_kiện]
[GROUP BY danh_sách_cột]
[HAVING điều_kiện]
[ORDER BY cột_sắp_xếp]
[COMPUTE danh_sách_hàm_gộp [BY danh_sách_cột]]
Điều cần lưu ý đầu tiên đối với câu lệnh này là các thành phần trong câu lệnh SELECT nếu
được sử dụng phải tuân theo đúng thứ tự như trong cú pháp. Nếu không, câu lệnh sẽ được xem là
không hợp lệ. Câu lệnh SELECT được sử dụng để tác động lên các bảng dữ liệu và kết quả của câu
lệnh cũng được hiển thị dưới dạng bảng, tức là một tập hợp các dòng và các cột (ngoại trừ trường
hợp sử dụng câu lệnh SELECT với mệnh đề COMPUTE).
4.1.2. Mệnh đề FROM
Mệnh đề FROM trong câu lệnh SELECT được sử dung nhằm chỉ định các bảng và khung nhìn cần
truy xuất dữ liệu. Sau FROM là danh sách tên của các bảng và khung nhìn tham gia vào truy vấn,
tên của các bảng và khung nhìn được phân cách nhau bởi dấu phẩy.
Ví dụ: Câu lệnh dưới đây hiển thị danh sách các khoa trong trường
SELECT * FROM khoa
kết quả câu lệnh như sau:
45
Ta có thể sử dụng các bí danh cho các bảng hay khung nhìn trong câu lệnh SELECT. Bí
danh được gán trong mệnh đề FROM bằng cách chỉ định bí danh ngay sau tên bảng.
Ví dụ 2.3: câu lệnh sau gán bí danh là a cho bảng khoa
SELECT * FROM khoa a
4.1.3. Mệnh đề WHERE
Mệnh đề WHERE trong câu lệnh SELECT được sử dụng nhằm xác định các điều kiện đối với việc
truy xuất dữ liệu. Sau mệnh đề WHERE là một biểu thức logic và chỉ những dòng dữ liệu nào thoả
mãn điều kiện được chỉ định mới được hiển thị trong kết quả truy vấn.
Ví dụ: Câu lệnh dưới đây hiển thị danh sách các môn học có số đơn vị học trình lớn hơn 3
SELECT * FROM monhoc WHERE sodvht>3
Trong mệnh đề WHERE thường sử dụng:
1 • Các toán tử kết hợp điều kiện (AND, OR)
2 • Các toán tử so sánh
3 • Kiểm tra giới hạn của dữ liệu (BETWEEN/ NOT BETWEEN)
4 • Danh sách
5 • Kiểm tra khuôn dạng dữ liệu.
6 • Các giá trị NULL
a. Các toán tử so sánh
Toán tử ý nghĩa
= Bằng
> Lớn hơn
< Nhỏ hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
<> Khác
!> Không lớn hơn
!< Không nhỏ hơn
Ví dụ: Câu lệnh:
46
SELECT masv,hodem,ten,ngaysinh
FROM sinhvien
WHERE (ten='Anh')
AND (YEAR(GETDATE())-YEAR(ngaysinh)<=20)
cho biết mã, họ tên và ngày sinh của các sinh viên có tên là Anh và có tuổi nhỏ hơn hoặc bằng 20.
b. Kiểm tra giới hạn của dữ liệu
Để kiểm tra xem giá trị dữ liệu nằm trong (ngoài) một khoảng nào đó, ta sử dụng toán tử
BETWEEN (NOT BETWEEN) như sau:
Cách sử dụng Ý nghĩa
giá_trị BETWEEN a AND b a ≤ giá_trị ≤ b
giá_trị NOT BETWEEN a AND b (giá_trị < a) AND
(giá_trị>b)
Ví dụ: Câu lệnh dưới đây cho biết họ tên và tuổi của các sinh viên có tên là Bình và có tuổi nằm
trong khoảng từ 20 đến 22
SELECT hodem,ten,year(getdate())-year(ngaysinh) AS tuoi
FROM sinhvien
WHERE ten='Bình' AND
YEAR(GETDATE())-YEAR(ngaysinh) BETWEEN 20 AND 22
c. Danh sách (IN và NOT IN)
Từ khoá IN được sử dụng khi ta cần chỉ định điều kiện tìm kiếm dữ liệu cho câu lệnh
SELECT là một danh sách các giá trị. Sau IN (hoặc NOT IN) có thể là một danh sách các giá trị
hoặc là một câu lệnh SELECT khác.
Ví dụ: Để biết danh sách các môn học có số đơn vị học trình là 2, 4 hoặc 5, thay vì sử dụng câu
lệnh
SELECT * FROM monhoc
WHERE sodvht=2 OR sodvht=4 OR sodvht=5
ta có thể sử dụng câu lệnh
SELECT * FROM monhoc
WHERE sodvht IN (2,4,5)
d. Toán tử LIKE và các ký tự đại diện
47
Từ khoá LIKE (NOT LIKE) sử dụng trong câu lệnh SELECT nhằm mô tả khuôn dạng của dữ
liệu cần tìm kiếm. Chúng thường được kết hợp với các ký tự đại diện sau đây:
Ký tự đại
diện
ý nghĩa
% Chuỗi ký tự bất kỳ gồm không hoặc nhiều ký tự
_ Ký tự đơn bất kỳ
[] Ký tự đơn bất kỳ trong giới hạn được chỉ định (ví dụ [a-f]) hay một tập
(ví dụ [abcdef])
[^] Ký tự đơn bất kỳ không nằm trong giới hạn được chỉ định ( ví dụ [^a-f]
hay một tập (ví dụ [^abcdef]).
Ví dụ : Câu lệnh dưới đây
SELECT hodem,ten FROM sinhvien
WHERE hodem LIKE 'Lê%'
cho biết họ tên của các sinh viên có họ là Lê và có kết quả như sau
Câu lệnh:
SELECT hodem,ten FROM sinhvien
WHERE hodem LIKE 'Lê%' AND ten LIKE '[AB]%'
Có kết quả là:
e. Giá trị NULL
Dữ liệu trong một cột cho phép NULL sẽ nhận giá trị NULL trong các trường hợp sau:
1 Nếu không có dữ liệu được nhập cho cột và không có mặc định cho cột hay kiểu
dữ liệu trên cột đó.
48
2 • Người sử dụng trực tiếp đưa giá trị NULL vào cho cột đó.
3 • Một cột có kiểu dữ liệu là kiểu số sẽ chứa giá trị NULL nếu giá trị được chỉ định
gây tràn số.
Trong mệnh đề WHERE, để kiểm tra giá trị của một cột có giá trị NULL hay không, ta sử
dụng cách viết:
WHERE tên_cột IS NULL
hoặc:
WHERE tên_cột IS NOT NULL
4.1.4. Mệnh đề GROUP BY và HAVING
Ngoài khả năng thực hiện các yêu cầu truy vấn dữ liệu thông thường (chiếu, chọn, nối,…)
như đã đề cập như ở các phần trước, câu lệnh SELECT còn cho phép thực hiện các thao tác truy vấn
và tính toán thống kê trên dữ liệu như: cho biết tổng số tiết dạy của mỗi giáo viên, điểm trung bình
các môn học của mỗi sinh viên,…
Mệnh đề GROUP BY sử dụng trong câu lệnh SELECT nhằm phân hoạch các dòng dữ liệu trong
bảng thành các nhóm dữ liệu, và trên mỗi nhóm dữ liệu thực hiện tính toán các giá trị thống kê như
tính tổng, tính giá trị trung bình,...
Các hàm gộp được sử dụng để tính giá trị thống kê cho toàn bảng hoặc trên mỗi nhóm dữ liệu.
Chúng có thể được sử dụng như là các cột trong danh sách chọn của câu lệnh SELECT hoặc xuất
hiện trong mệnh đề HAVING, nhưng không được phép xuất hiện trong mệnh đề WHERE
SQL cung cấp các hàm gộp dưới đây:
Hàm gộp Chức năng
SUM([ALL | DISTINCT] biểu_thức) Tính tổng các giá trị.
AVG([ALL | DISTINCT] biểu_thức) Tính trung bình của các giá trị
COUNT([ALL | DISTINCT]
biểu_thức)
Đếm số các giá trị trong biểu thức.
COUNT(*) Đếm số các dòng được chọn.
MAX(biểu_thức) Tính giá trị lớn nhất
MIN(biểu_thức) Tính giá trị nhỏ nhất
Trong đó:
1 • Hàm SUM và AVG chỉ làm việc với các biểu thức số.
2 • Hàm SUM, AVG, COUNT, MIN và MAX bỏ qua các giá trị NULL khi tính toán.
3 • Hàm COUNT(*) không bỏ qua các giá trị NULL.
Mặc định, các hàm gộp thực hiện tính toán thống kê trên toàn bộ dữ liệu. Trong trường hợp
cần loại bỏ bớt các giá trị trùng nhau (chỉ giữ lại một giá trị), ta chỉ định thêm từ khoá DISTINCT ở
trước biểu thức là đối số của hàm.
Mệnh đề HAVING được sử dụng nhằm chỉ định điều kiện đối với các giá trị thống kê được sản sinh
từ các hàm gộp tương tự như cách thức mệnh đề WHERE thiết lập các điều kiện cho câu lệnh
49
SELECT. Mệnh đề HAVING thường không thực sự có nghĩa nếu như không sử dụng kết hợp
với mệnh đề GROUP BY. Một điểm khác biệt giữa HAVING và WHERE là trong điều kiện của
WHERE không được có các hàm gộp trong khi HAVING lại cho phép sử dụng các hàm gộp trong
điều kiện của mình.
Ví dụ: Để biết trung bình điểm thi lần 1 của các sinh viên có điểm trung bình lớn hơn hoặc bằng 5,
ta sử dụng câu lệnh như sau:
SELECT sinhvien.masv,hodem,ten,
SUM(diemlan1*sodvht)/sum(sodvht)
FROM sinhvien,diemthi,monhoc
WHERE sinhvien.masv=diemthi.masv AND
diemthi.mamonhoc=monhoc.mamonhoc
GROUP BY sinhvien.masv,hodem,ten
HAVING sum(diemlan1*sodvht)/sum(sodvht)>=5
4.1.5. Mệnh đề ORDER BY
Mặc định, các dòng dữ liệu trong kết quả của câu truy vấn tuân theo thứ tự của chúng trong
bảng dữ liệu hoặc được sắp xếp theo chỉ mục (nếu trên bảng có chỉ mục). Trong trường hợp muốn
dữ liệu được sắp xếp theo chiều tăng hoặc giảm của giá trị của một hoặc nhiều trường, ta sử dụng
thêm mệnh đề ORDER BY trong câu lệnh SELECT; Sau ORDER BY là danh sách các cột cần sắp
xếp (tối đa là 16 cột). Dữ liệu được sắp xếp có thể theo chiều tăng (ASC) hoặc giảm (DESC), mặc
định là sắp xếp theo chiều tăng.
Ví dụ: Câu lệnh dưới đây hiển thị danh sách các môn học và sắp xếp theo chiều giảm dần của số
đơn vị học trình
SELECT * FROM monhoc
ORDER BY sodvht DESC
Nếu sau ORDER BY có nhiều cột thì việc sắp xếp dữ liệu sẽ được ưu tiên theo thứ tự từ trái qua
phải.
Ví dụ 2.21: Câu lệnh
SELECT hodem,ten,gioitinh,
YEAR(GETDATE())-YEAR(ngaysinh) AS tuoi
FROM sinhvien
WHERE ten='Bình'
ORDER BY gioitinh,tuoi
có kết quả là:
Thay vì chỉ định tên cột sau ORDER BY, ta có thể chỉ định số thứ tự của cột cấn được sắp xếp. Câu
lệnh ở ví dụ trên có thể được viết lại như sau:
50
SELECT hodem,ten,gioitinh,
YEAR(GETDATE())-YEAR(ngaysinh) AS tuoi
FROM sinhvien
WHERE ten='Bình'
ORDER BY 3, 4
4.1.6. Kết hợp kết quả từ nhiều truy vấn khác nhau
Phép hợp được sử dụng trong trường hợp ta cần gộp kết quả của hai hay nhiều truy vấn thành một
tập kết quả duy nhất. SQL cung cấp toán tử UNION để thực hiện phép hợp. Cú pháp như sau
Câu_lệnh_1
UNION [ALL] Câu_lệnh_2
[UNION [ALL] Câu_lệnh_3]
...
[UNION [ALL] Câu_lệnh_n]
[ORDER BY cột_sắp_xếp]
[COMPUTE danh_sách_hàm_gộp [BY danh_sách_cột]]
Trong đó
Câu_lệnh_1 có dạng
SELECT danh_sách_cột
[INTO tên_bảng_mới]
[FROM danh_sách_bảng|khung_nhìn]
[WHERE điều_kiện]
[GROUP BY danh_sách_cột]
[HAVING điều_kiện]
và Câu_lệnh_i (i = 2,..,n) có dạng
SELECT danh_sách_cột
[FROM danh_sách_bảng|khung_nhìn]
[WHERE điều_kiện]
[GROUP BY danh_sách_cột]
[HAVING điều_kiện]
Ví dụ: Giả sử ta có hai bảng Table1 và Table2 lần lượt như sau:
câu lệnh
SELECT A,B FROM Table1
UNION
SELECT D,E FROM table2
Cho kết quả như sau:
51
Mặc định, nếu trong các truy vấn thành phần của phép hợp xuất hiện những dòng dữ liệu giống
nhau thì trong kết quả truy vấn chỉ giữ lại một dòng. Nếu muốn giữ lại các dòng này, ta phải sử
dụng thêm từ khoá ALL trong truy vấn thành phần.
Ví dụ: Câu lệnh
SELECT A,B FROM Table1
UNION ALL
SELECT D,E FROM table2
Cho kết quả như sau
Khi sử dụng toán tử UNION để thực hiện phép hợp, ta cần chú ý các nguyên tắc sau:
1 • Danh sách cột trong các truy vấn thành phần phải có cùng số lượng.
2 • Các cột tương ứng trong tất cả các bảng, hoặc tập con bất kỳ các cột được sử dụng
trong bản thân mỗi truy vấn thành phần phải cùng kiểu dữ liệu.
3 • Các cột tương ứng trong bản thân từng truy vấn thành phần của một câu lệnh UNION
phải xuất hiện theo thứ tự như nhau. Nguyên nhân là do phép hợp so sánh các cột từng
cột một theo thứ tự được cho trong mỗi truy vấn.
4 • Khi các kiểu dữ liệu khác nhau được kết hợp với nhau trong câu lệnh UNION, chúng sẽ
được chuyển sang kiểu dữ liệu cao hơn (nếu có thể được).
5 • Tiêu đề cột trong kết quả của phép hợp sẽ là tiêu đề cột được chỉ định trong truy vấn
đầu tiên.
1 Truy vấn thành phần đầu tiên có thể có INTO để tạo mới một bảng từ kết quả của chính
phép hợp.
2 • Mệnh đề ORDER BY và COMPUTE dùng để sắp xếp kết quả truy vấn hoặc tính toán
các giá trị thống kê chỉ được sử dụng ở cuối câu lệnh UNION. Chúng không được sử
dụng ở trong bất kỳ truy vấn thành phần nào.
3 • Mệnh đề GROUP BY và HAVING chỉ có thể được sử dụng trong bản thân từng truy
vấn thành phần. Chúng không được phép sử dụng để tác động lên kết quả chung của
phép hợp.
4 • Phép toán UNION có thể được sử dụng bên trong câu lệnh INSERT.
5 • Phép toán UNION không được sử dụng trong câu lệnh CREATE VIEW.
4.2. Truy vấn từ nhiều bảng
4.2.1. Inner Joins
Điều kiện để thực hiện phép nối trong được chỉ định trong mệnh đề FROM theo cú pháp như sau:
tên_bảng_1 [INNER] JOIN tên_bảng_2 ON điều_kiện_nối
52
Ví dụ 2.31: Để hiển thị họ tên và ngày sinh của các sinh viên lớp Tin K24, thay vì sử dụng câu
lệnh:
SELECT hodem,ten,ngaysinh
FROM sinhvien,lop
WHERE tenlop='Tin K24' AND
sinhvien.malop=lop.malop
ta có thể sử dụng câu lệnh như sau:
SELECT hodem,ten,ngaysinh
FROM sinhvien INNER JOIN lop
ON sinhvien.malop=lop.malop
WHERE tenlop='Tin K24'
4.2.2. Outer Joins
SQL2 cung cấp các phép nối ngoài sau đây:
1 • Phép nối ngoài trái (LEFT OUTER JOIN)
2 • Phép nối ngoài phải (RIGHT OUTER JOIN)
3 • Phép nối ngoài đầy đủ (FULL OUTER JOIN)
Cũng tương tự như phép nối trong, điều kiện của phép nối ngoài cũng được chỉ định ngay trong
mệnh đề FROM theo cú pháp:
tên_bảng_1 LEFT|RIGHT|FULL [OUTER] JOIN tên_bảng_2
ON điều_kiện_nối
Ví dụ: Giả sử ta có hai bảng dữ liệu như sau:
Bảng DONVI Bảng NHANVIEN
Phép nối ngoài trái giữa hai bảng NHANVIEN và DONVI được biểu diễn bởi câu lệnh:
SELECT *
FROM nhanvien LEFT OUTER JOIN donvi
ON nhanvien.madv=donvi.madv
có kết quả là:
Câu lệnh:
SELECT *
FROM nhanvien RIGHT OUTER JOIN donvi
ON nhanvien.madv=donvi.madv
thực hiện phép nối ngoài phải giữa hai bảng NHANVIEN và DONVI, và có kết quả là:
Nếu phép nối ngoài trái (tương ứng phải) hiển thị trong kết quả truy vấn cả những dòng dữ liệu
không thoả điều kiện nối của bảng bên trái (tương ứng phải) trong phép nối thì phép nối ngoài đầy
đủ hiển thị trong kết quả truy vấn cả những dòng dữ liệu không thoả điều kiện nối của cả hai bảng
tham gia vào phép nối.
53
Ví dụ: Với hai bảng NHANVIEN và DONVI như ở trên, câu lệnh
SELECT *
FROM nhanvien FULL OUTER JOIN donvi
ON nhanvien.madv=donvi.madv
cho kết quả là:
Một đặc điểm nổi bật của SQL2 là cho phép biểu diễn phép nối trên nhiều bảng dữ liệu một cách rõ
ràng. Thứ tự thực hiện phép nối giữa các bảng được xác định theo nghĩa kết quả của phép nối này
được sử dụng trong một phép nối khác.
Ví dụ: Câu lệnh dưới đây hiển thị họ tên và ngày sinh của các sinh viên thuộc Khoa Công nghệ
Thông tin
SELECT hodem,ten,ngaysinh FROM (sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop)
INNER JOIN khoa ON lop.makhoa=khoa.makhoa
WHERE tenkhoa=N'Khoa công nghệ thông tin'
Trong câu lệnh trên, thứ tự thực hiện phép nối giữa các bảng được chỉ định rõ ràng: phép nối giữa
hai bảng sinhvien và lop được thực hiện trước và kết quả của phép nối này lại tiếp tục được nối với
bảng khoa.
Bài tập
Câu 1: Trình bày cú pháp chung của câu lệnh truy vấn SELECT. Chỉ ra sự tương đương giữa câu
lệnh SELECT và biểu thức đại số quan hệ.
Câu 2: Phân biệt các phép kết nối bảng dữ liệu: các dạng Join (Inner Join, Outer Join, Cross Join).
Câu 3: Trình bày về phép toán Union. Điều kiện để thực hiện được phép toán này là gì?
Câu 4: Trình bày chức năng các hàm thống kê: COUNT, SUM, MAX, MIN, AVG đi kèm với
GROUP BY.
54
Chương 5. Tạo và quản lý các chỉ mục
5.1. Các kiểu chỉ mục (Indexes)
CLUSTERED
 Sắp xếp lại dữ liệu về mặt vật lý.
 Chỉ có duy nhất một clustered trong một bảng
 Yêu cầu ít nhất 120% kích thước của bảng cóthể sử dụng trong vùng tạm.
 Khoảng trống vùng tạm tồn tại trong CSDL tạo chỉ mục mà chúng ta tạo chỉ mục.
NON - CLUSTERED
 Thứtự các dòng trong bảng không sắp xếp về mặt vật lý giống Clustered
 Đây là kiểu điển hình để tạo chỉmục cho cột liên kết các cột khác. Các giá trị có thể được
thay đổi thường xuyên
 SQL server sử dụng mặc định khi tạo chỉ mục là non – clustered
 Chúng ta cóthểtạo 249 non–clustered cho mỗi bảng
5.2. Tạo các chỉ mục
Có thể sử dụng lệnh CREATE INDEX:
CREATE [UNIQUE] INDEX tengọi khoá INDEX ON tên bảng
( Namefield1 [ASC/DESC],Namefield2 [ASC/DESC],....) WITH PRIMARY
[ DISALLOW NULL ]/ [ IGNORE NULL ]
Hoặc sử dụng Wizard:
55
56
57
58
5.3. Quản lý và gỡ bỏ các chỉ mục
DROP INDEX
{ <drop_relational_or_xml_or_spatial_index> [ ,...n ]
| <drop_backward_compatible_index> [ ,...n ]
}
<drop_relational_or_xml_or_spatial_index> ::=
index_name ON <object>
[ WITH ( <drop_clustered_index_option> [ ,...n ] ) ]
<drop_backward_compatible_index> ::=
[ owner_name. ] table_or_view_name.index_name
<object> ::=
{
[ database_name. [ schema_name ] . | schema_name. ]
table_or_view_name
}
<drop_clustered_index_option> ::=
{
MAXDOP = max_degree_of_parallelism
59
| ONLINE = { ON | OFF }
| MOVE TO { partition_scheme_name ( column_name )
| filegroup_name
| "default"
}
[ FILESTREAM_ON { partition_scheme_name
| filestream_filegroup_name
| "default" } ]
}
Bài tập
Câu 1: Trình bày khái niệm và vai trò của chỉ mục trong cơ sở dữ liệu.
Câu 2: Khái niệm về B-Tree và tổ chức chỉ mục trong SQL Server 2000.
Câu 3: Trình bày cú pháp đầy đủ của lệnh tạo chỉ mục và giải thích ý nghĩa từng tham số.
60
Chương 6. Tạo và quản lý khung nhìn
6.1. Định nghĩa
Khung nhìn là một lược đồ dữ liệu được lấy ra từ một lược đồ dữ liệu khác đã có.
6.2. Tạo các khung nhìn (Views)
Câu lệnh CREATE VIEW như sau:
CREATE VIEW tên_khung_nhìn[(danh_sách_tên_cột)] AS
câu_lệnh_SELECT
Ví dụ: Câu lệnh dưới đây tạo khung nhìn có tên DSSV từ câu lệnh SELECT truy vấn từ hai bảng
SINHVIEN và LOP
CREATE VIEW dssv AS
SELECT masv,hodem
FROM sinhvien,lop
WHERE sinhvien.malop=lop.malop
thựiện câu lệnh:
SELECT * FROM dssv
ta có được kết quả như sau:
6.3. Quản lý các khung nhìn
Câu lệnh ALTER VIEW được sử dụng để định nghĩa lại khung nhìn hiện có nhưng không làm
thay đổi các quyền đã được cấp phát cho người sử dụng trước đó. Câu lệnh này sử dụng tương tự
như câu lệnh CREATE VIEW và có cú pháp như sau:
ALTER VIEW tên_khung_nhìn [(danh_sách_tên_cột)]
AS
61
Câu_lệnh_SELECT
Ví dụ: Ta định nghĩa khung nhìn như sau:
CREATE VIEW viewlop
AS
SELECT malop,tenlop,tenkhoa
FROM lop INNER JOIN khoa ON lop.makhoa=khoa.makhoa
WHERE tenkhoa='Khoa Vật lý’
và có thể định nghĩa lại khung nhìn trên bằng câu lệnh:
ALTER VIEW view_lop
AS
SELECT malop,tenlop,hedaotao
FROM lop INNER JOIN khoa ON lop.makhoa=khoa.makhoa
WHERE tenkhoa='Khoa Công nghệ thông tin'
6.4. Xóa các khung nhìn
Khi một khung nhìn không còn sử dụng, ta có thể xoá nó ra khỏi cơ sở dữ liệu thông qua câu
lệnh:
DROP VIEW tên_khung_nhìn
Nếu một khung nhìn bị xoá, toàn bộ những quyền đã cấp phát cho người sử dụng trên khung
nhìn cũng đồng thời bị xoá. Do đó, nếu ta tạo lại khung nhìn thì phải tiến hành cấp phát lại quyền
cho người sử dụng.
Ví dụ: Câu lệnh dưới đây xoá khung nhìn VIEW_LOP ra khỏi cơ sở dữ liệu
DROP VIEW view_lop
Bài tập
Câu 1:
Trình bày khái niệm về view (bảng ảo). View giúp tăng tính bảo mật cho cơ sở dữ liệu như thế nào?
Câu 2:
Trình bày các lệnh tạo, sửa đổi và xóa view.
Câu 3:
Cập nhật dữ liệu thông qua view như thế nào?
Câu 4:
Nếu ý nghĩa của tùy chọn WITH ENCRYPTION trong cú pháp lệnh tạo view.
62
Chương 7. Tạo và quản lý các thủ tục thường
trú
7.1. Tạo các thủ tục thường trú (Stored procedures)
Thủ tục lưu trữ được tạo bởi câu lệnh CREATE PROCEDURE với cú pháp như sau:
CREATE PROCEDURE tên_thủ_tục [(danh_sách_tham_số)]
[WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION]
AS
Các_câu_lệnh_của_thủ_tục
Trong đó:
tên_thủ_tục Tên của thủ tục cần tạo. Tên phải tuân theo qui tắc định danh và không được
vượt quá 128 ký tự.
danh_sách_tham_số Các tham số của thủ tục được khai báo ngay sau tên thủ tục và nếu thủ tục có
nhiều tham số thì các khai báo phân cách nhau bởi dấu phẩy. Khai báo của
mỗi một tham số tối thiểu phải bao gồm hai phần:
1 • tên tham số được bắt đầu bởi dấu @.
2 • kiểu dữ liệu của tham số
Ví dụ:
@mamonhoc nvarchar(10)
RECOMPILE Thông thường, thủ tục sẽ được phân tích, tối ưu và dịch sẵn ở lần gọi đầu
tiên. Nếu tuỳ chọn WITH RECOMPILE được chỉ định, thủ tục sẽ được dịch
lại mỗi khi được gọi.
ENCRYPTION Thủ tục sẽ được mã hoá nếu tuỳ chọn WITH ENCRYPTION được chỉ
định. Nếu thủ tục đã được mã hoá, ta không thể xem được nội dung
của thủ tục.
các_câu_lệnh_của_thủ_tục Tập hợp các câu lệnh sử dụng trong nội dung thủ tục. Các câu lệnh
này có thể đặt trong cặp từ khoá BEGIN...END hoặc có thể không.
Ví dụ 5.1: Giả sử ta cần thực hiện một chuỗi các thao tác như sau trên cơ sở dữ liệu
1 1. Bổ sung thêm môn học cơ sở dữ liệu có mã TI-005 và số đơn vị học trình là 5 vào
bảng MONHOC
2 2. Lên danh sách nhập điểm thi môn cơ sở dữ liệu cho các sinh viên học lớp có mã
C24102 (tức là bổ sung thêm vào bảng DIEMTHI các bản ghi với cột
63
MAMONHOC nhận giá trị TI-005, cột MASV nhận giá trị lần lượt là mã các
sinh viên học lớp có mã C24105 và các cột điểm là NULL).
Nếu thực hiện yêu cầu trên thông qua các câu lệnh SQL như thông thường, ta phải thực thi hai câu
lệnh như sau:
INSERT INTO MONHOC
VALUES('TI-005','Cơ sở dữ liệu',5)
INSERT INTO DIEMTHI(MAMONHOC,MASV)
SELECT ‘TI-005’,MASV
FROM SINHVIEN
WHERE MALOP='C24102'
Thay vì phải sử dụng hai câu lệnh như trên, ta có thể định nghĩa môt thủ tục lưu trữ với các tham số
vào là @mamonhoc, @tenmonhoc, @sodvht và @malop như sau:
CREATE PROC sp_LenDanhSachDiem(
@mamonhoc NVARCHAR(10),
@tenmonhoc NVARCHAR(50),
@sodvht SMALLINT,
@malop NVARCHAR(10))
AS
BEGIN
INSERT INTO monhoc
VALUES(@mamonhoc,@tenmonhoc,@sodvht)
INSERT INTO diemthi(mamonhoc,masv)
SELECT ‘TI-005’,MASV
FROM SINHVIEN
WHERE MALOP='C24102'
Thay vì phải sử dụng hai câu lệnh như trên, ta có thể định nghĩa môt thủ tục lưu trữ với các tham số
vào là @mamonhoc, @tenmonhoc, @sodvht và @malop như sau:
CREATE PROC sp_LenDanhSachDiem(
@mamonhoc NVARCHAR(10),
@tenmonhoc NVARCHAR(50),
@sodvht SMALLINT,
@malop NVARCHAR(10))
AS
BEGIN
INSERT INTO monhoc
64
VALUES(@mamonhoc,@tenmonhoc,@sodvht)
INSERT INTO diemthi(mamonhoc,masv)
SELECT @mamonhoc,masv
FROM sinhvien
WHERE malop=@malop
END
Khi thủ tục trên đã được tạo ra, ta có thể thực hiện được hai yêu cầu đặt ra ở trên một cách đơn giản
thông qua lòi gọi thủ tục:
sp_LenDanhSachDiem 'TI-005','Cơ sở dữ liệu',5,'C24102'
7.2. Thực thi các thủ tục thường trú
Như đã thấy ở ví dụ ở trên, khi một thủ tục lưu trữ đã được tạo ra, ta có thể yêu cầu hệ quản trị cơ
sở dữ liệu thực thi thủ tục bằng lời gọi thủ tục có dạng:
tên_thủ_tục [danh_sách_các_đối_số]
Số lượng các đối số cũng như thứ tự của chúng phải phù hợp với số lượng và thứ tự của các tham số
khi định nghĩa thủ tục.
Trong trường hợp lời gọi thủ tục được thực hiện bên trong một thủ tục khác, bên trong một trigger
hay kết hợp với các câu lệnh SQL khác, ta sử dụng cú pháp như sau:
EXECUTE tên_thủ_tục [danh_sách_các_đối_số]
Thứ tự của các đối số được truyền cho thủ tục có thể không cần phải tuân theo thứ tự của các tham
số như khi định nghĩa thủ tục nếu tất cả các đối số được viết dưới dạng:
@tên_tham_số = giá_trị
Ví dụ 5.2: Lời gọi thủ tục ở ví dụ trên có thể viết như sau:
sp_LenDanhSachDiem @malop='C24102',
@tenmonhoc='Cơ sở dữ liệu',
@mamonhoc='TI-005',
@sodvht=5
7.3. Xem và sửa các thủ tục thường trú
Khi một thủ tục đã được tạo ra, ta có thể tiến hành định nghĩa lại thủ tục đó bằng câu lệnh
ALTER PROCEDURE có cú pháp như sau:
ALTER PROCEDURE tên_thủ_tục [(danh_sách_tham_số)]
[WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION]
AS
Các_câu_lệnh_Của_thủ_tục
65
Câu lệnh này sử dụng tương tự như câu lệnh CREATE PROCEDURE. Việc sửa đổi lại một
thủ tục đã có không làm thay đổi đến các quyền đã cấp phát trên thủ tục cũng như không tác động
đến các thủ tục khác hay trigger phụ thuộc vào thủ tục này.
7.4. Tham số vào và ra (Parameters)
Ngoài những tham số được truyền cho thủ tục, bên trong thủ tục còn có thể sử dụng các biến nhằm
lưu giữ các giá trị tính toán được hoặc truy xuất được từ cơ sở dữ liệu. Các biến trong thủ tục được
khai báo bằng từ khoá DECLARE theo cú pháp như sau:
DECLARE @tên_biến kiểu_dữ_liệu
Tên biến phải bắt đầu bởi ký tự @ và tuân theo qui tắc về định danh. Ví dụ dưới đây minh hoạ việc
sử dụng biến trong thủ tục
Ví dụ 5.3: Trong định nghĩa của thủ tục dưới đây sử dung các biến chứa các giá trị truy xuất được
từ cơ sở dữ liệu.
CREATE PROCEDURE sp_Vidu(
@malop1 NVARCHAR(10),
@malop2 NVARCHAR(10))
AS
DECLARE @tenlop1 NVARCHAR(30)
DECLARE @namnhaphoc1 INT
DECLARE @tenlop2 NVARCHAR(30)
DECLARE @namnhaphoc2 INT
SELECT @tenlop1=tenlop,
@namnhaphoc1=namnhaphoc
FROM lop WHERE malop=@malop1
SELECT @tenlop2=tenlop,
@namnhaphoc2=namnhaphoc
FROM lop WHERE malop=@malop2
PRINT @tenlop1+' nhap hoc nam '+str(@namnhaphoc1)
print @tenlop2+' nhap hoc nam '+str(@namnhaphoc2)
IF @namnhaphoc1=@namnhaphoc2
PRINT 'Hai lớp nhập học cùng năm'
ELSE
PRINT 'Hai lớp nhập học khác năm'
Trong các ví dụ trước, nếu đối số truyền cho thủ tục khi có lời gọi đến thủ tục là biến, những thay
đổi giá trị của biền trong thủ tục sẽ không được giữ lại khi kết thúc quá trình thực hiện thủ tục.
Ví dụ 5.4: Xét câu lệnh sau đây
66
CREATE PROCEDURE sp_Conghaiso(@a INT,@b INT, @c INT)
AS
SELECT @c=@a+@b
Nếu sau khi đã tạo thủ tục với câu lệnh trên, ta thực thi một tập các câu lệnh như sau:
DECLARE @tong INT
SELECT @tong=0
EXECUTE sp_Conghaiso 100,200,@tong
SELECT @tong
Câu lệnh “SELECT @tong” cuối cùng trong loạt các câu lệnh trên sẽ cho kết quả là: 0
Trong trường hợp cần phải giữ lại giá trị của đối số sau khi kết thúc thủ tục, ta phải khai báo tham
số của thủ tục theo cú pháp như sau:
@tên_tham_số kiểu_dữ_liệu OUTPUT
hoặc:
@tên_tham_số kiểu_dữ_liệu OUT
và trong lời gọi thủ tục, sau đối số được truyền cho thủ tục, ta cũng phải chỉ định thêm từ khoá
OUTPUT (hoặc OUT)
Ví dụ 5.5: Ta định nghĩa lại thủ tục ở ví dụ 5.4 như sau:
CREATE PROCEDURE sp_Conghaiso(
@a INT,
@b INT,
@c INT OUTPUT)
AS
SELECT @c=@a+@b
và thực hiện lời gọi thủ tục trong một tập các câu lệnh như sau:
DECLARE @tong INT
SELECT @tong=0
EXECUTE sp_Conghaiso 100,200,@tong OUTPUT
SELECT @tong
thì câu lệnh “SELECT @tong” sẽ cho kết quả là: 300
Tham số với giá trị mặc định
Các tham số được khai báo trong thủ tục có thể nhận các giá trị mặc định. Giá trị mặc định sẽ được
gán cho tham số trong trường hợp không truyền đối số cho tham số khi có lời gọi đến thủ tục.
Tham số với giá trị mặc định được khai báo theo cú pháp như sau:
@tên_tham_số kiểu_dữ_liệu = giá_trị_mặc_định
Ví dụ 5.6: Trong câu lệnh dưới đây:
CREATE PROC sp_TestDefault(
67
@tenlop NVARCHAR(30)=NULL,
@noisinh NVARCHAR(100)='Huế')
AS
BEGIN
IF @tenlop IS NULL
SELECT hodem,ten
FROM sinhvien INNER JOIN lop
ON sinhvien.malop=lop.malop
WHERE noisinh=@noisinh
ELSE
SELECT hodem,ten
FROM sinhvien INNER JOIN lop
ON sinhvien.malop=lop.malop
WHERE noisinh=@noisinh AND
tenlop=@tenlop
END
thủ tục sp_TestDefault được định nghĩa với tham số @tenlop có giá trị mặc định là NULL và tham
số @noisinh có giá trị mặc định là Huế. Với thủ tục được định nghĩa như trên, ta có thể thực hiện
các lời gọi với các mục đích khác nhau như sau:
1 • Cho biết họ tên của các sinh viên sinh tại Huế:
sp_testdefault
1 • Cho biết họ tên của các sinh viên lớp Tin K24 sinh tại Huế:
sp_testdefault @tenlop='Tin K24'
1 • Cho biết họ tên của các sinh viên sinh tại Nghệ An:
sp_testDefault @noisinh=N'Nghệ An'
1 • Cho biết họ tên của các sinh viên lớp Tin K26 sinh tại Đà Nẵng:
sp_testdefault @tenlop='Tin K26',@noisinh='Đà Nẵng'
Bài tập cuối chương
Câu 1: Trình bày khái niệm về thủ tục thường trú.
Câu 2: Cú pháp đầy đủ của lệnh tạo, sửa đổi và xóa thủ tục thường trú. Giải thích ý nghĩa các tham
số.
Câu 3: Ý nghĩa của tùy chọn WITH ENCRYPTION trong cú pháp lệnh tạo thủ tục.
Câu 4: Thực thi thủ tục như thế nào? Thủ tục trong SQL Server có thể được gọi từ các ngôn ngữ
lập trình ngoài không?
68
Chương 8. Tạo và quản lý hàm người dùng
định nghĩa
8.1. Các kiểu hàm người dùng định nghĩa (User-defined
functions)
Hàm là đối tượng cơ sở dữ liệu tương tự như thủ tục. Điểm khác biệt giữa hàm và thủ tục là
hàm trả về một giá trị thông qua tên hàm còn thủ tục thì không. Điều này cho phép ta sử dụng hàm
như là một thành phần của một biêu thức (chẳng hạn trong danh sách chọn của câu lệnh SELECT).
Ngoài những hàm do hệ quản trị cơ sở dữ liệu cung cấp sẵn, người sử dụng có thể định nghĩa
thêm các hàm nhằm phục vụ cho mục đích riêng của mình.
8.2. Tạo hàm người dùng định nghĩa
Hàm được định nghĩa thông qua câu lệnh CREATE FUNCTION với cú pháp như sau:
CREATE FUNCTION tên_hàm ([danh_sách_tham_số])
RETURNS (kiểu_trả_về_của_hàm)
AS
BEGIN
các_câu_lệnh_của_hàm
END
Ví dụ 5.7: Câu lệnh dưới đây định nghĩa hàm tính ngày trong tuần (thứ trong tuần) của một giá trị
kiểu ngày
CREATE FUNCTION thu(@ngay DATETIME)
RETURNS NVARCHAR(10)
AS
BEGIN
DECLARE @st NVARCHAR(10)
SELECT @st=CASE DATEPART(DW,@ngay)
WHEN 1 THEN 'Chu nhật'
WHEN 2 THEN 'Thứ hai'
WHEN 3 THEN 'Thứ ba'
WHEN 4 THEN 'Thứ tư'
WHEN 5 THEN 'Thứ năm'
WHEN 6 THEN 'Thứ sáu'
ELSE 'Thứ bảy'
END
69
RETURN (@st) /* Trị trả về của hàm */
END
Một hàm khi đã được định nghĩa có thể được sử dụng như các hàm do hệ quản trị cơ sở dữ liệu
cung cấp (thông thường trước tên hàm ta phải chỉ định thêm tên của người sở hữu hàm)
Ví dụ 5.8: Câu lệnh SELECT dưới đây sử dụng hàm đã được định nghĩa ở ví dụ trước:
SELECT masv,hodem,ten,dbo.thu(ngaysinh),ngaysinh
FROM sinhvien
WHERE malop=’C24102’
có kết quả là:
8.3. Quản lý hàm người dùng định nghĩa
Thay đổi cấu trúc hàm, dùng lệnh ALTER FUNCTION
ALTER FUNCTION tên_hàm ([danh_sách_tham_số])
RETURNS (kiểu_trả_về_của_hàm)
AS
BEGIN
các_câu_lệnh_của_hàm
END
Bài tập
Câu 1: Trình bày khái niệm về hàm người dùng.
Câu 2: Cú pháp đầy đủ của lệnh tạo, sửa đổi và xóa hàm người dùng. Giải thích ý nghĩa các tham
số.
Câu 3: Ý nghĩa của tùy chọn WITH ENCRYPTION trong cú pháp lệnh tạo hàm người dùng.
Câu 4: Gọi hàm người dùng như thế nào? Hàm người dùng trong SQL Server có thể được gọi từ
các ngôn ngữ lập trình ngoài không?
70
Bai giang he qtdl
Bai giang he qtdl
Bai giang he qtdl
Bai giang he qtdl
Bai giang he qtdl
Bai giang he qtdl
Bai giang he qtdl
Bai giang he qtdl
Bai giang he qtdl
Bai giang he qtdl
Bai giang he qtdl
Bai giang he qtdl

Mais conteúdo relacionado

Mais procurados

Bài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệuBài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệutrieulongweb
 
Chương 4. Chuẩn hóa cơ sở dữ liệu
Chương 4. Chuẩn hóa cơ sở dữ liệu Chương 4. Chuẩn hóa cơ sở dữ liệu
Chương 4. Chuẩn hóa cơ sở dữ liệu Hoa Le
 
tổng hợp bài tập java có đáp án chi tiết
 tổng hợp bài tập java có đáp án chi tiết tổng hợp bài tập java có đáp án chi tiết
tổng hợp bài tập java có đáp án chi tiếtHoàng Trí Phan
 
Cơ Sở Dữ Liệu - Chương 1
Cơ Sở Dữ Liệu - Chương 1Cơ Sở Dữ Liệu - Chương 1
Cơ Sở Dữ Liệu - Chương 1Nguyễn Trọng
 
Lập sơ đồ thiết kế mạng
Lập sơ đồ thiết kế mạngLập sơ đồ thiết kế mạng
Lập sơ đồ thiết kế mạngnamtran471
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựleemindinh
 
[123doc.vn] thiet ke mang lan cho truong hoc copy
[123doc.vn]   thiet ke mang lan cho truong hoc copy[123doc.vn]   thiet ke mang lan cho truong hoc copy
[123doc.vn] thiet ke mang lan cho truong hoc copynenohap
 
Chuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệChuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệHưởng Nguyễn
 
Cơ sở dữ liệu PTIT slide 3
Cơ sở dữ liệu PTIT slide 3Cơ sở dữ liệu PTIT slide 3
Cơ sở dữ liệu PTIT slide 3NguynMinh294
 
Bài 7: Thiết kế cơ sở dữ liệu vật lý
Bài 7: Thiết kế cơ sở dữ liệu vật lýBài 7: Thiết kế cơ sở dữ liệu vật lý
Bài 7: Thiết kế cơ sở dữ liệu vật lýMasterCode.vn
 
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTBài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTMasterCode.vn
 
Xây dựng biểu đồ use case
Xây dựng biểu đồ use caseXây dựng biểu đồ use case
Xây dựng biểu đồ use caseTrung Chinh Hà
 
Xây dựng cơ sở dữ liệu trong quản lý nhân sự
Xây dựng cơ sở dữ liệu trong quản lý nhân sựXây dựng cơ sở dữ liệu trong quản lý nhân sự
Xây dựng cơ sở dữ liệu trong quản lý nhân sựAskSock Ngô Quang Đạo
 
Big data là gì và người ta khai thác
Big data là gì và người ta khai thácBig data là gì và người ta khai thác
Big data là gì và người ta khai thácletranganh
 
Cơ sở dữ liệu PTIT slide 2
Cơ sở dữ liệu PTIT slide 2Cơ sở dữ liệu PTIT slide 2
Cơ sở dữ liệu PTIT slide 2NguynMinh294
 
Báo cáo phân tích thiết kế mạng
Báo cáo phân tích thiết kế mạngBáo cáo phân tích thiết kế mạng
Báo cáo phân tích thiết kế mạngjackjohn45
 
Bai tap-thuc-hanh-he-quan-tri-csdl
Bai tap-thuc-hanh-he-quan-tri-csdlBai tap-thuc-hanh-he-quan-tri-csdl
Bai tap-thuc-hanh-he-quan-tri-csdlgiang nguyen le
 

Mais procurados (20)

Bài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệuBài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệu
 
Chương 4. Chuẩn hóa cơ sở dữ liệu
Chương 4. Chuẩn hóa cơ sở dữ liệu Chương 4. Chuẩn hóa cơ sở dữ liệu
Chương 4. Chuẩn hóa cơ sở dữ liệu
 
tổng hợp bài tập java có đáp án chi tiết
 tổng hợp bài tập java có đáp án chi tiết tổng hợp bài tập java có đáp án chi tiết
tổng hợp bài tập java có đáp án chi tiết
 
Cơ Sở Dữ Liệu - Chương 1
Cơ Sở Dữ Liệu - Chương 1Cơ Sở Dữ Liệu - Chương 1
Cơ Sở Dữ Liệu - Chương 1
 
Lập sơ đồ thiết kế mạng
Lập sơ đồ thiết kế mạngLập sơ đồ thiết kế mạng
Lập sơ đồ thiết kế mạng
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sự
 
[123doc.vn] thiet ke mang lan cho truong hoc copy
[123doc.vn]   thiet ke mang lan cho truong hoc copy[123doc.vn]   thiet ke mang lan cho truong hoc copy
[123doc.vn] thiet ke mang lan cho truong hoc copy
 
Các mô hình dữ liệu
Các mô hình dữ liệuCác mô hình dữ liệu
Các mô hình dữ liệu
 
Đề tài: Thiết kế hệ thống mạng cho một công ty, HOT, 9đ
Đề tài: Thiết kế hệ thống mạng cho một công ty, HOT, 9đĐề tài: Thiết kế hệ thống mạng cho một công ty, HOT, 9đ
Đề tài: Thiết kế hệ thống mạng cho một công ty, HOT, 9đ
 
Chuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệChuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệ
 
Cơ sở dữ liệu PTIT slide 3
Cơ sở dữ liệu PTIT slide 3Cơ sở dữ liệu PTIT slide 3
Cơ sở dữ liệu PTIT slide 3
 
Báo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin Tức
Báo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin TứcBáo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin Tức
Báo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin Tức
 
Bài 7: Thiết kế cơ sở dữ liệu vật lý
Bài 7: Thiết kế cơ sở dữ liệu vật lýBài 7: Thiết kế cơ sở dữ liệu vật lý
Bài 7: Thiết kế cơ sở dữ liệu vật lý
 
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTBài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
 
Xây dựng biểu đồ use case
Xây dựng biểu đồ use caseXây dựng biểu đồ use case
Xây dựng biểu đồ use case
 
Xây dựng cơ sở dữ liệu trong quản lý nhân sự
Xây dựng cơ sở dữ liệu trong quản lý nhân sựXây dựng cơ sở dữ liệu trong quản lý nhân sự
Xây dựng cơ sở dữ liệu trong quản lý nhân sự
 
Big data là gì và người ta khai thác
Big data là gì và người ta khai thácBig data là gì và người ta khai thác
Big data là gì và người ta khai thác
 
Cơ sở dữ liệu PTIT slide 2
Cơ sở dữ liệu PTIT slide 2Cơ sở dữ liệu PTIT slide 2
Cơ sở dữ liệu PTIT slide 2
 
Báo cáo phân tích thiết kế mạng
Báo cáo phân tích thiết kế mạngBáo cáo phân tích thiết kế mạng
Báo cáo phân tích thiết kế mạng
 
Bai tap-thuc-hanh-he-quan-tri-csdl
Bai tap-thuc-hanh-he-quan-tri-csdlBai tap-thuc-hanh-he-quan-tri-csdl
Bai tap-thuc-hanh-he-quan-tri-csdl
 

Destaque (7)

Trigger in SQL
Trigger in SQLTrigger in SQL
Trigger in SQL
 
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql
 
The legendary-book
The legendary-bookThe legendary-book
The legendary-book
 
Stored procedure in sql server
Stored procedure in sql serverStored procedure in sql server
Stored procedure in sql server
 
csdl-trigger
csdl-triggercsdl-trigger
csdl-trigger
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
Bài 2: Hệ quản trị cơ sở dữ liệu
Bài 2: Hệ quản trị cơ sở dữ liệuBài 2: Hệ quản trị cơ sở dữ liệu
Bài 2: Hệ quản trị cơ sở dữ liệu
 

Semelhante a Bai giang he qtdl

Chuong trinh hoc phan phan tich thiet ke httt
Chuong trinh hoc phan phan tich thiet ke htttChuong trinh hoc phan phan tich thiet ke httt
Chuong trinh hoc phan phan tich thiet ke htttlvtoi1403
 
Bài Giảng Môn Học Cơ Sở Dữ Liệu Nâng Cao
Bài Giảng Môn Học Cơ Sở Dữ Liệu Nâng Cao Bài Giảng Môn Học Cơ Sở Dữ Liệu Nâng Cao
Bài Giảng Môn Học Cơ Sở Dữ Liệu Nâng Cao nataliej4
 
Gioi_thieu_mon_hoc CSDLNC.pptx
Gioi_thieu_mon_hoc CSDLNC.pptxGioi_thieu_mon_hoc CSDLNC.pptx
Gioi_thieu_mon_hoc CSDLNC.pptxKienTrung93
 
Giao trinh phan tich thiet ke he thong.pdf
Giao trinh phan tich thiet ke he thong.pdfGiao trinh phan tich thiet ke he thong.pdf
Giao trinh phan tich thiet ke he thong.pdfTuyenKieu5
 
Cơ sở dữ liệu
Cơ sở dữ liệuCơ sở dữ liệu
Cơ sở dữ liệuThành Luân
 
Chuong 1_Gioo thieu DB.pdf
Chuong 1_Gioo thieu DB.pdfChuong 1_Gioo thieu DB.pdf
Chuong 1_Gioo thieu DB.pdfCriz20
 
Hệ quản trị cơ sở dữ liệu trường đại học công nghệ.
Hệ quản trị cơ sở dữ liệu trường đại học công nghệ.Hệ quản trị cơ sở dữ liệu trường đại học công nghệ.
Hệ quản trị cơ sở dữ liệu trường đại học công nghệ.TrngTn67
 
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.comBài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.commai_non
 
Cơ sở dữ liệu ts.phạm thế quế[bookbooming.com]
Cơ sở dữ liệu   ts.phạm thế quế[bookbooming.com]Cơ sở dữ liệu   ts.phạm thế quế[bookbooming.com]
Cơ sở dữ liệu ts.phạm thế quế[bookbooming.com]bookbooming1
 
Bài 1: Một số khái niệm cơ bản
Bài 1: Một số khái niệm cơ bảnBài 1: Một số khái niệm cơ bản
Bài 1: Một số khái niệm cơ bảnChâu Trần
 
Hệ quản trị cơ sở dữ liệu phạm gia tiến[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   phạm gia tiến[bookbooming.com]Hệ quản trị cơ sở dữ liệu   phạm gia tiến[bookbooming.com]
Hệ quản trị cơ sở dữ liệu phạm gia tiến[bookbooming.com]bookbooming1
 
baigiangcosodulieunangcao.pdf
baigiangcosodulieunangcao.pdfbaigiangcosodulieunangcao.pdf
baigiangcosodulieunangcao.pdfLeQuoc19
 
Bai giang tin_hoc_ql_2_046
Bai giang tin_hoc_ql_2_046Bai giang tin_hoc_ql_2_046
Bai giang tin_hoc_ql_2_046Heo Mọi
 

Semelhante a Bai giang he qtdl (20)

Chuong trinh hoc phan phan tich thiet ke httt
Chuong trinh hoc phan phan tich thiet ke htttChuong trinh hoc phan phan tich thiet ke httt
Chuong trinh hoc phan phan tich thiet ke httt
 
Qt he co so du lieu
Qt he co so du lieuQt he co so du lieu
Qt he co so du lieu
 
Csdl
CsdlCsdl
Csdl
 
Bài Giảng Môn Học Cơ Sở Dữ Liệu Nâng Cao
Bài Giảng Môn Học Cơ Sở Dữ Liệu Nâng Cao Bài Giảng Môn Học Cơ Sở Dữ Liệu Nâng Cao
Bài Giảng Môn Học Cơ Sở Dữ Liệu Nâng Cao
 
Gioi_thieu_mon_hoc CSDLNC.pptx
Gioi_thieu_mon_hoc CSDLNC.pptxGioi_thieu_mon_hoc CSDLNC.pptx
Gioi_thieu_mon_hoc CSDLNC.pptx
 
Chuong 1
Chuong 1Chuong 1
Chuong 1
 
Giao trinh phan tich thiet ke he thong.pdf
Giao trinh phan tich thiet ke he thong.pdfGiao trinh phan tich thiet ke he thong.pdf
Giao trinh phan tich thiet ke he thong.pdf
 
Cơ sở dữ liệu
Cơ sở dữ liệuCơ sở dữ liệu
Cơ sở dữ liệu
 
Chuong 1_Gioo thieu DB.pdf
Chuong 1_Gioo thieu DB.pdfChuong 1_Gioo thieu DB.pdf
Chuong 1_Gioo thieu DB.pdf
 
51645016 csdl
51645016 csdl51645016 csdl
51645016 csdl
 
Hệ quản trị cơ sở dữ liệu trường đại học công nghệ.
Hệ quản trị cơ sở dữ liệu trường đại học công nghệ.Hệ quản trị cơ sở dữ liệu trường đại học công nghệ.
Hệ quản trị cơ sở dữ liệu trường đại học công nghệ.
 
Bg access
Bg accessBg access
Bg access
 
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.comBài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
 
Csdl
CsdlCsdl
Csdl
 
Cơ sở dữ liệu ts.phạm thế quế[bookbooming.com]
Cơ sở dữ liệu   ts.phạm thế quế[bookbooming.com]Cơ sở dữ liệu   ts.phạm thế quế[bookbooming.com]
Cơ sở dữ liệu ts.phạm thế quế[bookbooming.com]
 
CSDL_In ngay
CSDL_In ngayCSDL_In ngay
CSDL_In ngay
 
Bài 1: Một số khái niệm cơ bản
Bài 1: Một số khái niệm cơ bảnBài 1: Một số khái niệm cơ bản
Bài 1: Một số khái niệm cơ bản
 
Hệ quản trị cơ sở dữ liệu phạm gia tiến[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   phạm gia tiến[bookbooming.com]Hệ quản trị cơ sở dữ liệu   phạm gia tiến[bookbooming.com]
Hệ quản trị cơ sở dữ liệu phạm gia tiến[bookbooming.com]
 
baigiangcosodulieunangcao.pdf
baigiangcosodulieunangcao.pdfbaigiangcosodulieunangcao.pdf
baigiangcosodulieunangcao.pdf
 
Bai giang tin_hoc_ql_2_046
Bai giang tin_hoc_ql_2_046Bai giang tin_hoc_ql_2_046
Bai giang tin_hoc_ql_2_046
 

Mais de Đỗ Đức Hùng

Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐỗ Đức Hùng
 
Hanh trangviet.ucoz.net giao trinh sql server 2005
Hanh trangviet.ucoz.net giao trinh sql server 2005Hanh trangviet.ucoz.net giao trinh sql server 2005
Hanh trangviet.ucoz.net giao trinh sql server 2005Đỗ Đức Hùng
 
Lession 6.introduction to records
Lession 6.introduction to recordsLession 6.introduction to records
Lession 6.introduction to recordsĐỗ Đức Hùng
 
Lession 5 the columns of a table
Lession 5 the columns of a tableLession 5 the columns of a table
Lession 5 the columns of a tableĐỗ Đức Hùng
 
Lession 4 the tables of a database
Lession 4 the tables of a databaseLession 4 the tables of a database
Lession 4 the tables of a databaseĐỗ Đức Hùng
 
Lession 3 introduction to database
Lession 3 introduction to databaseLession 3 introduction to database
Lession 3 introduction to databaseĐỗ Đức Hùng
 
Lession 2 starting with mssqlserver
Lession 2 starting with mssqlserverLession 2 starting with mssqlserver
Lession 2 starting with mssqlserverĐỗ Đức Hùng
 

Mais de Đỗ Đức Hùng (10)

Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
 
Đề cương xử lý ảnh
Đề cương xử lý ảnhĐề cương xử lý ảnh
Đề cương xử lý ảnh
 
Hanh trangviet.ucoz.net giao trinh sql server 2005
Hanh trangviet.ucoz.net giao trinh sql server 2005Hanh trangviet.ucoz.net giao trinh sql server 2005
Hanh trangviet.ucoz.net giao trinh sql server 2005
 
Lession 6.introduction to records
Lession 6.introduction to recordsLession 6.introduction to records
Lession 6.introduction to records
 
Lession 5 the columns of a table
Lession 5 the columns of a tableLession 5 the columns of a table
Lession 5 the columns of a table
 
Lession 4 the tables of a database
Lession 4 the tables of a databaseLession 4 the tables of a database
Lession 4 the tables of a database
 
Lession 3 introduction to database
Lession 3 introduction to databaseLession 3 introduction to database
Lession 3 introduction to database
 
Lession 2 starting with mssqlserver
Lession 2 starting with mssqlserverLession 2 starting with mssqlserver
Lession 2 starting with mssqlserver
 
Lession 7 records maintenance
Lession 7 records maintenanceLession 7 records maintenance
Lession 7 records maintenance
 
Chuan dau ra nganh cntt
Chuan dau ra nganh cnttChuan dau ra nganh cntt
Chuan dau ra nganh cntt
 

Bai giang he qtdl

  • 1. BỘ GIAO THÔNG VẬN TẢI TRƯỜNG ĐẠI HỌC HÀNG HẢI KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN HỆ THỐNG THÔNG TIN BÀI GIẢNG HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU TÊN HỌC PHẦN : HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MÃ HỌC PHẦN : 17402 TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CHÍNH QUY DÙNG CHO SV NGÀNH : CÔNG NGHỆ THÔNG TIN HẢI PHÒNG - 2009
  • 2. MỤC LỤC Chương 1. Giới thiệu 5 1.1. Hệ quản trị cơ sở dữ liệu Microsoft SQL Server 5 1.2. Các thành phần cơ bản trong Microsoft SQL Server 18 1.3. Ngôn ngữ truy vấn dữ liệu có cấu trúc (SQL) 24 Chương 2. Tạo và quản lý cơ sở dữ liệu 26 2.1. Các tệp tin cơ sở dữ liệu (Database files) 26 2.2. Tạo cơ sở dữ liệu (Database) 26 2.3. Quản lý cơ sở dữ liệu 30 2.4. Xóa cơ sở dữ liệu 32 Chương 3. Tạo và quản lý các bảng 35 3.1. Tạo bảng (Tables) 35 3.2. Định nghĩa các cột (Columns) 36 3.3. Định nghĩa các ràng buộc (Constrains) 37 3.4. Sửa bảng (ALTER TABLE) 38 3.5. Xóa bảng (DROP TABLE) 39 3.6. Thêm bản ghi mới (INSERT) 39 3.7. Cập nhật bản ghi (UPDATE) 41 3.8. Xóa bản ghi (DELETE) 42 Chương 4. Truy vấn dữ liệu 44 4.1. Truy vấn cơ bản 44 4.2. Truy vấn từ nhiều bảng 51 4.2.1. Inner Joins 51 4.2.2. Outer Joins 51 4.3. Truy vấn lồng nhau (Subqueries) 51 Chương 5. Tạo và quản lý các chỉ mục 54 5.1. Các kiểu chỉ mục (Indexes) 54 5.2. Tạo các chỉ mục 54 5.3. Quản lý các chỉ mục 58 5.4. Xóa các chỉ mục 58 Chương 6. Tạo và quản lý khung nhìn 60 6.1. Định nghĩa 60 6.2. Tạo các khung nhìn (Views) 60 6.3. Quản lý các khung nhìn 61 6.4. Xóa các khung nhìn 61 Chương 7. Tạo và quản lý các thủ tục thường trú 62 7.1. Tạo các thủ tục thường trú (Stored procedures) 62 7.2. Thực thi các thủ tục thường trú 64 7.3. Xem và sửa các thủ tục thường trú 64 7.4. Tham số vào và ra (Parameters) 65 7.5. Các thủ tục thường trú của hệ thống 65 Chương 8. Tạo và quản lý hàm người dùng định nghĩa 68 8.1. Các kiểu hàm người dùng định nghĩa (User-defined functions) 68 8.2. Tạo hàm người dùng định nghĩa 68 8.3. Quản lý hàm người dùng định nghĩa 69 Chương 9. Tạo và quản lý các Trigger 70 9.1. Tạo các Trigger thao tác dữ liệu (DML Triggers) 70 9.2. Tạo các Trigger định nghĩa dữ liệu (DDL Triggers) 70 9.3. Sử dụng các Trigger lồng nhau (Nested Triggers) 71 9.4. Sử dụng các Trigger đệ quy (Recursive Triggers) 74 Một số đề thi mẫu 76 2
  • 3. Tên học phần: Hệ quản trị Cơ sở dữ liệu Loại học phần: 4 Bộ môn phụ trách giảng dạy: Hệ thống Thông tin Khoa phụ trách: CNTT. Mã học phần: 17402 Tổng số TC: 4 Tổng số tiết Lý thuyết Thực hành/ Xemina Tự học Bài tập lớn Đồ án môn học 90 45 30 0 x 0 Học phần học trước: Không yêu cầu. Học phần tiên quyết: Không yêu cầu. Học phần song song: Không yêu cầu. Mục tiêu của học phần: Cung cấp cho sinh viên những kiến thức cơ bản về hệ quản trị cơ sở dữ liệu; Các chức năng và công cụ cần thiết để quản trị cơ sở dữ liệu cho người phát triển hệ thống. Nội dung chủ yếu: Giới thiệu về hệ quản trị cơ sở dữ liệu; Tạo và quản lý cơ sở dữ liệu; Tạo và quản lý các bảng; Truy vấn dữ liệu; Tạo và quản lý các chỉ mục; Tạo và quản lý các khung nhìn; Tạo và quản lý các thủ tục thường trú; Tạo và quản lý các hàm người dùng định nghĩa; Tạo và quản lý các Trigger. Nội dung chi tiết: TÊN CHƯƠNG MỤC PHÂN PHỐI SỐ TIẾT TS LT BT TH KT Chương 1. Giới thiệu 5 3 2 1.1. Hệ quản trị cơ sở dữ liệu Microsoft SQL Server (2005) 1.2. Các thành phần cơ bản trong Microsoft SQL Server (2005) 1.3. Ngôn ngữ truy vấn dữ liệu có cấu trúc (SQL) Chương 2. Tạo và quản lý cơ sở dữ liệu 10 6 4 2.1. Các tệp tin cơ sở dữ liệu (Database files) 2.2. Tạo cơ sở dữ liệu (Database) 2.3. Quản lý cơ sở dữ liệu 2.4. Xóa cơ sở dữ liệu Chương 3. Tạo và quản lý các bảng 15 9 6 3.1. Tạo bảng (Tables) 3.2. Định nghĩa các cột (Columns) 3.3. Định nghĩa các ràng buộc (Constrains) 3.4. Sửa bảng (ALTER TABLE) 3.5. Xóa bảng (DROP TABLE) 3.6. Thêm bản ghi mới (INSERT) 3.7. Cập nhật bản ghi (UPDATE) 3.8. Xóa bản ghi (DELETE) Chương 4. Truy vấn dữ liệu 20 12 8 4.1. Truy vấn cơ bản 4.1.1. Mệnh đề SELECT 4.1.2. Mệnh đề FROM 4.1.3. Mệnh đề WHERE 4.1.4. Mệnh đề GROUP BY và HAVING 4.1.5. Mệnh đề ORDER BY 4.1.6. Kết hợp kết quả từ nhiều truy vấn khác nhau 4.2. Truy vấn từ nhiều bảng 4.2.1. Inner Joins 4.2.2. Outer Joins 4.3. Truy vấn lồng nhau (Subqueries) Chương 5. Tạo và quản lý các chỉ mục 5 3 2 3
  • 4. TÊN CHƯƠNG MỤC PHÂN PHỐI SỐ TIẾT TS LT BT TH KT 5.1. Các kiểu chỉ mục (Indexes) 5.2. Tạo các chỉ mục 5.3. Quản lý các chỉ mục 5.4. Xóa các chỉ mục Chương 6. Tạo và quản lý khung nhìn 5 3 2 6.1. Định nghĩa 6.2. Tạo các khung nhìn (Views) 6.3. Quản lý các khung nhìn 6.4. Xóa các khung nhìn Chương 7. Tạo và quản lý các thủ tục thường trú 5 3 2 7.1. Tạo các thủ tục thường trú (Stored procedures) 7.2. Thực thi các thủ tục thường trú 7.3. Xem và sửa các thủ tục thường trú 7.4. Tham số vào và ra (Parameters) 7.5. Các thủ tục thường trú của hệ thống Chương 8. Tạo và quản lý hàm người dùng định nghĩa 5 3 2 8.1. Các kiểu hàm người dùng định nghĩa (User-defined functions) 8.2. Tạo hàm người dùng định nghĩa 8.3. Quản lý hàm người dùng định nghĩa Chương 9. Tạo và quản lý các Trigger 5 3 2 9.1. Tạo các Trigger thao tác dữ liệu (DML Triggers) 9.2. Tạo các Trigger định nghĩa dữ liệu (DDL Triggers) 9.3. Sử dụng các Trigger lồng nhau (Nested Triggers) 9.4. Sử dụng các Trigger đệ quy (Recursive Triggers) Nhiệm vụ của sinh viên: Tham dự các buổi học lý thuyết và thực hành, làm các bài tập được giao, làm các bài thi giữa học phần và bài thi kết thúc học phần theo đúng quy định. Tài liệu học tập: 1. Dương Quang Thiện, SQL Server 2000: Lập trình T - SQL, NXB Văn hóa Sài Gòn, 2007. 2. Ray Rankins, Paul Bertucci, Chris Gallelli, Alex T.Silverstein, Microsoft SQL Server 2005 Unleashed, Sams Publishing, 2007. 3. Brian Knightet al, Professional SQL Server 2005 Administration, Wrox Press, 2007. 4. Paul Turley & Dan Wood, Beginning Transact-SQL with SQL Server 2000 and 2005, Wrox Press, 2006. Hình thức và tiêu chuẩn đánh giá sinh viên: − Hình thức thi: thi viết hoặc vấn đáp. − Tiêu chuẩn đánh giá sinh viên: căn cứ vào sự tham gia học tập của sinh viên trong các buổi học lý thuyết và thực hành, kết quả làm các bài tập được giao, kết quả của các bài thi giữa học phần và bài thi kết thúc học phần. Thang điểm: Thang điểm chữ A, B, C, D, F. Điểm đánh giá học phần: Z = 0,4X + 0,6Y. Bài giảng này là tài liệu chính thức và thống nhất của Bộ môn Hệ thống Thông tin, Khoa Công nghệ Thông tin và được dùng để giảng dạy cho sinh viên. Ngày phê duyệt: / / Trưởng Bộ môn 4
  • 5. Chương 1. Giới thiệu 1.1. Hệ quản trị cơ sở dữ liệu Microsoft SQL Server 1.1.1.Khái niệm về CSDL và CSDL quan hệ A. Khái niệm về cơ sở dữ liệu (Database) Cơ sở dữ liệu là một tập hợp có tổ chức các dữ liệu có liên quan luận lý với nhau. Nói cách khác đó là một hệ thống các thông tin có cấu trúc được lưu trữ trên các thiết bị lưu trữ thông tin thứ cấp, ví dụ như: đĩa từ, băng từ, bộ nhớ flash,… nhằm mục đích thỏa mãn yêu cầu tổ chức dữ liệu để giúp cho việc khai thác dữ liệu được nhanh chóng và chính xác. Cơ sở dữ liệu phải được thiết kế sao cho có thể cho phép nhiều người dùng và nhiều ứng dụng khác nhau cùng khai thác. Hình 1: Sơ đồ tổng quát về một hệ cơ sở dữ liệu B. Khái niệm về cơ sở dữ liệu quan hệ Cơ sở dữ liệu quan hệ là cơ sở dữ liệu được tổ chức dựa trên mô hình của đại số quan hệ (Relational Model). Trong đó, dữ liệu được tổ chức thành các bảng dữ liệu (tables). Mỗi bảng dữ liệu gồm có các cột (column) hay còn gọi là các trường (field) và các dòng (row) hay còn gọi là các bản ghi (record). Ví dụ: Mã Sinh viên Tên Sinh viên Lớp HHA01 Lê Hoàng Long KTB48ĐH1 HHA02 Trần Bình Minh KTB48ĐH1 5
  • 6. Về phương diện toán học, một bảng dữ liệu gồm có n cột: A1, A2, A3…, An có thể coi là một tập con R của tích Đề các dom(A1) x dom(A2)…x dom(An): R ⊆ dom(A1) x dom(A2)…x dom(An) Người ta gọi đó là quan hệ R xác định trên tập thuộc tính {A1, A2,…, An}. Trong đó dom(Ai) là ký hiệu miền giá trị (domain) của cột Ai. Giữa các cột trong bảng có những mối quan hệ ràng buộc phụ thuộc lẫn nhau gọi là các phụ thuộc hàm. Ví dụ: Trong bảng sinh viên có phụ thuộc hàm: Mã Sinh Viên → Tên Sinh Viên, Lớp Trong một bảng dữ liệu, có thể có một cột (hoặc một số tối thiểu các cột) mà giá trị trên mỗi dòng của nó là duy nhất. Ta gọi đó là khóa (Key). Khi biết giá trị của trường khóa ta có thể suy ra các trường còn lại. Ví dụ: Trong bảng Sinh Viên thì Mã Sinh Viên là khóa. Khi biết Mã Sinh Viên ta có thể tra cứu ra các thuộc tính như Tên Sinh Viên và Lớp. Giữa hai bảng trong cơ sở dữ liệu cũng tồn tại các mối quan hệ ràng buộc lẫn nhau (bắt nguồn từ mô hình ER): Quan hệ 1 – 1: Một bản ghi thuộc bảng này tương ứng với một và chỉ một bản ghi ở bảng kia và ngược lại. Trong trường hợp này người ta thường nhập 2 bảng vào làm một. Quan hệ 1 – n: Một bản ghi thuộc bảng này tương ứng với n bản ghi ở bảng kia (n ≥ 0) nhưng ngược lại một bản ghi ở bảng kia chỉ tương ứng với không quá 1 bản ghi ở bảng này. Bảng ở phía ứng với ứng số nhiều n gọi là bảng con (child) còn bảng ở phía ứng với ứng số 1 gọi là bảng cha (parents). Bảng cha phải có một trường khóa gọi là khóa chính (PK - Primary Key) còn bảng con phải có một trường tham chiếu đến khóa chính của bảng cha gọi là khóa ngoại (FK - Foreign Key). Hình 2: Quan hệ 1- 1 6
  • 7. Hình 3: Quan hệ 1 - n Quan hệ n – n: Quan hệ n – n không được biểu diễn tường minh trong CSDL. Người ta thường tách quan hệ n – n về thành các quan hệ 1 – n dựa trên mô hình thực thể liên kết (ER). 1.1.2. Khái niệm về hệ quản trị Cơ sở dữ liệu A. Hệ quản trị CSDL là gì? Hệ quản trị cơ sở dữ liệu là một tập hợp chương trình giúp cho người sử dụng tạo ra, duy trì và khai thác một cơ sở dữ liệu. Đó là một hệ thống phần mềm phổ dụng, cung cấp môi trường và công cụ giúp cho việc định nghĩa, xây dựng và thao tác cơ sở dữ liệu cho các ứng dụng khác nhau một cách dễ dàng. Định nghĩa một cơ sở dữ liệu là đặc tả các kiểu dữ liệu, các cấu trúc, các ràng buộc cho các dữ liệu sẽ được lưu trữ. Xây dựng cơ sở dữ liệu là lưu trữ dữ liệu lên các phương tiện lưu trữ được hệ quản trị cơ sở dữ liệu kiểm soát. Thao tác trên một cơ sở dữ liêu là quá trình truy vấn cơ sở dữ liệu để lấy ra các dữ liệu cụ thể, cập nhật cơ sở dữ liệu, tạo ra các báo cáo từ dữ liệu. 7
  • 8. Hình 4: Mô hình Hệ quản trị cơ sở dữ liệu Mỗi hệ quản trị cơ sở dữ liệu có một ngôn ngữ định nghĩa dữ liệu riêng (DDL - Data Definition Languague). Đây là ngôn ngữ dùng để định nghĩa, khai báo cấu trúc của của cơ sở dữ liêu. Những người thiết kế và quản trị cơ sở dữ liệu thực hiện các công việc khai báo cấu trúc cơ sở dữ liệu. Các chương trình khai báo cấu trúc CSDL được viết bằng ngôn ngữ DDL mà hệ quản trị CSDL cho phép. Các chương trình ứng dụng được viết bằng các ngôn ngữ lập trình C++/C#/Java/Delphi… kết hợp với các ngôn ngữ thao tác dữ liệu (DML - Data Manipulation Language) thông qua các thư viện hoặc đối tượng kết nối CSDL được ngôn ngữ lập trình hỗ trợ: ODBC, RDO, ADO,… Các hệ quản trị cơ sở dữ liệu quan hệ ngày nay phổ biến sử dụng các ngôn ngữ DDL và DML dựa trên ngôn ngữ SQL. Đối với hệ quản trị cơ sở dữ liệu SQL Server thì ngôn ngữ dùng để tương tác với cơ sở dữ liệu là T – SQL. Đây là một phiên bản của ngôn ngữ SQL. Ngôn ngữ T – SQL trên SQL Server bao gồm nhiều câu lệnh khác nhau, có thể chia thành 2 nhóm: o Nhóm ngôn ngữ định nghĩa dữ liệu DDL: với các lệnh cho phép tạo, thay đổi cấu trúc và xóa các đối tượng CSDL: database, table, view,… o Nhóm ngôn ngữ thao tác dữ liệu DML: với các lệnh như SELECT/INSERT/UPDATE/DELETE cho phép lấy về dữ liệu cụ thể, thay đổi giá trị của dữ liệu. 8
  • 9. Hình 5: Tương tác với hệ quản trị Cơ sở dữ liệu B. Hoạt động của hệ quản trị cơ sở dữ liệu Hình 6: Hoạt động của hệ quản trị cơ sở dữ liệu Các yêu cầu của chương trình ứng dụng được chuyển tới hệ quản trị CSDL (theo con đường số 1). Tại đây hệ quản trị CSDL sẽ tham khảo các từ điển dữ liệu (Meta DataBase) để tìm kiếm các ánh xạ cấu trúc ngoài với cấu trúc quan niệm và cấu trúc vật lý (các ngõ a, b và c). Tại đây hệ quản trị 9
  • 10. CSDL có thể sẽ tham khảo tới vùng đệm của nó để xác định xem câu trả lời đã có sẵn ở đó chưa, nếu có thì trả lại cho chương trình ứng dụng thông qua con đường số 8b; ngược lại sẽ yêu cầu hệ điều hành truy xuất thông tin theo con đường số 2. Tới đây hệ điều hành sẽ gửi yêu cầu truy xuất thông tin trong CSDL thông qua hệ thống xuất nhập của HĐH (các con đường số 3 và 5). Nếu việc truy xuất không thành công nó sẽ trả lại yêu cầu về cho hệ quản trị CSDL (có thể thông qua các mã lỗi) qua con đường số 6; nếu thành công thì dữ liệu sẽ được chuyển vào vùng đệm của hệ quản trị CSDL. Qua xử lý, hệ quản trị CSDL sẽ chuyển dữ liệu vào vùng đệm của chương trình ứng dụng đề nó xử lý (qua con đường 8a) và cho ra kết quả trả lời của chương trình ứng dụng qua con đường số 10. 1.1.3. Giới thiệu về SQL Server và mô hình Client/Server 1.1.3.1. Khái niệm về mô hình Client/Server Hình 7: Mô hình Client/Server Mô hình client/server hay còn gọi là mô hình khách/chủ là một mô hình nổi tiếng trong mạng máy tính, được áp dụng rất rộng rãi. Ý tưởng của mô hình này là máy trạm (hay còn gọi là máy khách) gửi yêu cầu (request) cho máy chủ (đóng vai trò người cung ứng dịch vụ), máy chủ sẽ xử lý và trả kết quả về cho máy khách. Client/Server là mô hình mang tính tổng quát. Trên thực tế thì một server có thể được nối tới nhiều server khác nhằm làm việc hiệu quả và nhanh hơn. Khi nhận được 1 yêu cầu từ client, server này có thể gửi tiếp yêu cầu vừa nhận được cho server khác ví dụ như database server vì bản thân nó không thể xử lý yêu cầu này được. Máy server có thể thi hành các nhiệm vụ đơn giản hoặc phức tạp. Ví dụ như một máy chủ trả lời thời gian hiện tại trong ngày, khi một máy client yêu cầu lấy thông tin về thời gian nó sẽ phải gửi một yêu cầu theo một tiêu chuẩn do server định 10
  • 11. ra, nếu yêu cầu được chấp nhận thì máy server sẽ trả về thông tin mà client yêu cầu. Có rất nhiều các dịch vụ server trên mạng nhưng nó đều hoạt động theo nguyên lý là nhận các yêu cầu từ client sau đó xử lý và trả kết quả cho client yêu cầu. Thông thường chương trình server và client được thi hành trên hai máy khác nhau. Cho dù lúc nào server cũng ở trạng thái sẵn sàng chờ nhận yêu cầu từ client nhưng trên thực tế một tiến trình liên tác qua lại (interaction) giữa client và server lại bắt đầu ở phía client, khi mà client gửi tín hiệu yêu cầu tới server. Các chương trình server thường đều thi hành ở mức ứng dụng (tầng ứng dụng của mạng). Sự thuận lợi của phương pháp này là nó có thể làm việc trên bất cứ một mạng máy tính nào có hỗ trợ giao thức truyền thông chuẩn cụ thể ở đây là giao thức TCP/IP. Với các giao thức chuẩn này cũng giúp cho các nhà sản xuất có thể tích hợp nhiều sản phẩm khác nhau của họ lên mạng mà không gặp phải khó khăn gì. Với các chuẩn này thì các chương trình server cho một dịch vụ nào đấy có thể thi hành trên một hệ thống chia sẻ thời gian (timesharing system) với nhiều chương trình và dịch vụ khác hoặc nó có thể chạy trên chính một máy tính các nhân bình thường. Có thể có nhiều chương trình server cùng làm một dịch vụ, chúng có thể nằm trên nhiều máy tính hoặc một máy tính. Với mô hình trên chúng ta nhận thấy rằng mô hình client/server chỉ mang đặc điểm của phần mềm không liên quan gì đến phần cứng mặc dù trên thực tế yêu cầu cho một máy server là cao hơn nhiều so với máy client. Lý do là bởi vì máy server phải quản lý rất nhiều các yêu cầu từ các clients khác nhau trên mạng. Ưu và nhược điểm chính Có thể nói rằng với mô hình client/server thì mọi thứ dường như đều nằm trên bàn của người sử dụng, nó có thể truy cập dữ liệu từ xa (bao gồm các công việc như gửi và nhận file, tìm kiếm thông tin, ...) với nhiều dịch vụ đa dạng mà mô hình cũ không thể làm được. Mô hình client/server cung cấp một nền tảng lý tưởng cho phép tích hợp các kỹ thuật hiện đại như mô hình thiết kế hướng đối tượng, hệ chuyên gia, hệ thông tin địa lý (GIS) ... Một trong những vấn đề nảy sinh trong mô hình này đó là tính an toàn và bảo mật thông tin trên mạng. Do phải trao đổi dữ liệu giữa 2 máy ở 2 khu vực khác nhau cho nên dễ dàng xảy ra hiện tượng thông tin truyền trên mạng bị lộ. 1.1.3.2. SQL Server và mô hình Client/Server 11
  • 12. Hình 8a: SQL Server và mô hình Client/Server Hình 8b: Dùng các công cụ của SQL Server để truy xuất từ máy khách SQL Server là một hệ quản trị cơ sở dữ liệu quan hệ hoạt động trên môi trường mạng theo mô hình khách/chủ. Phía máy chủ chạy các dịch vụ cần thiết mà quan trọng nhất là dịch vụ cơ sở dữ liệu SQL Server Service. Máy chủ lắng nghe các yêu cầu kết nối đến từ các máy khách và đáp ứng các yêu cầu này. Các ứng dụng phía máy khách kết nối vào các dịch vụ cơ sở dữ liệu có thể là những phần mềm quản lý được viết bởi các ngôn ngữ lập trình có sử dụng các thư viện đối tượng truy xuất CSDL như ADO, ADO.Net, RDO, ODBC, JDBC,... hoặc có thể là chính các công cụ của SQL Server như: Service Manager, Enterprise Manager hay Query Analyzer. Trong môi trường SQL Server, các yêu cầu từ phía máy khách sẽ nằm dưới dạng các lệnh T-SQL. SQL Server sẽ xử lý các lệnh này rồi trả về một resultset cho ứng dụng client với những thông tin được yêu cầu hoặc chỉ xác nhận là công việc được hoàn thành mỹ mãn. Nhiều ứng dụng client hoặc người sử dụng có thể song hành đưa ra cùng lúc những yêu cầu và SQL Server có thể xử lý chúng song song. Một ứng dụng client có thể cung cấp một "cấp độ thoải mái" khác nhau cho người sử dụng. Các công cụ đơn giản nhất (nhưng không dễ dùng) cho phép người sử dụng đưa vào một yêu cầu dưới dạng lệnh T-SQL rồi nhận được những resultset dưới dạng văn bản hoặc table. Còn các công cụ tinh vi hơn sẽ cho ra những biểu mẫu, báo cáo, biểu đồ,... cũng như các đối tượng màn hình thân thiện hơn. Cũng như đã trình bày ở trên, để thiết lập kết nối vật lý với một server CSDL và chuyển những yêu cầu cũng như nhận về kết quả (resultset), các ứng dụng phía client có thể sử dụng nhiều đối tượng hoặc các thư viện truy xuất cơ sở dữ liệu khác nhau.(data access objects hoặc data access API). Những đối tượng truy xuất cơ sở dữ liệu thông dụng hiện nay bao gồm: o ADO (ActiveX Database Object) o RDO (Remote Database Object) o DB - Library o ODBC (Open Database Connectivity) 12
  • 13. o OLE DB (Object Linking and Embbeding Database) o DAO (Data Access Object) Các nhà phát triển ứng dụng dùng các đối tượng kể trên hoặc các hàm API để truy cập các đối tượng cơ sở dữ liệu và dữ liệu được lưu trữ trong các đối tượng này để triển khai những ứng dụng trong các ngôn ngữ lập trình chẳng hạn VB, C/C++, Java, VB.Net, C#,... 1.1.3.4. Mô hình Client/Server cục bộ Nếu trình ứng dụng truy xuất CSDL và hệ quản trị CSDL SQL Server được cài đặt trên cùng một máy tính vật lý thì ta có mô hình Client/Server cục bộ. Lúc này, vai trò của SQL Server không khác với các hệ quản trị CSDL truyền thống như Foxpro hay MS Access. SQL Server che dấu sự khác biệt giữa kết nối cục bộ và kết nối qua mạng. Người dùng không nhận thấy sự khác biệt ngoài việc tốc độ truyền thông trên mạng chậm hơn tốc độ truyền thông cục bộ. Hình 9: Mô hình Client/Server cục bộ 1.1.3.5. SQL Server và mô hình cơ sở dữ liệu phân tán Cơ sở dữ liệu phân tán là tập hợp các dữ liệu thuộc về cùng một hệ thống, có liên quan logic với nhau và được trải ra trên hệ thống mạng. Hệ quản trị cơ sở dữ liệu phân tán là tập các phần mềm quản trị một cơ sở dữ liệu phân tán, làm cho việc phân tán trở nên trong suốt với người dùng. Khái niệm trong suốt ở đây được hiểu là chủ đích che dấu sự phân tán đối với người sử dụng, làm cho người sử dụng sử dụng cơ sở dữ liệu phân tán như là cơ sở dữ liệu tập trung. SQL Server là hệ quản trị cơ sở dữ liệu hỗ trợ cơ sở dữ liệu phân tán. Nó cho phép tạo ra các view từ các bảng dữ liệu trên các Server khác nhau được kết nối (linked server), thực thi các truy vấn hay chuyển tác phân tán trải dài trên nhiều Server,... 13
  • 14. Hình 10: Mô hình cơ sở dữ liệu phân tán 1.1.3.6. Kiến trúc đa tầng Hình 11: Mô hình phân lớp hệ thống SQL Server là hệ quản trị cơ sở dữ liệu hoạt động trên môi trường mạng theo mô hình client/server, cho nên khi nên khi phát triển các ứng dụng cơ sở dữ liệu người ta có thể sử dụng các kiến trúc phân lớp (phân chia hệ thống thành các components hay layer), các lớp có thể được thực thi một phần ở server, một phần ở client (kiến trúc nhị tầng) và có thể trên một số trạm trung gian nữa nếu cần thiết (kiến trúc tam tầng). A. Kiến trúc nhị tầng Fat Client Đây là kiểu kiến trúc client/server phổ biến. Phía client của một hệ thống như thế sẽ bao gồm các lớp: 14
  • 15. o User interface: lớp giao diện người sử dụng. o Presentation service: lớp dịch vụ trình bày. o Business services: lớp thi công các quy tắc nghiệp vụ của hệ thống. o Data services: lớp truy cập và xử lý dữ liệu. Hình 12: Kiến trúc nhị tầng Fat Client Trong khi đó, Data Storage (lớp lưu trữ và quản lý dữ liệu), thường là hệ thống cơ sở dữ liệu (database system), sẽ được đặt tại server. Vì Business services và Data services được thực thi hoàn toàn ở phía client, còn phía server chỉ thực thi các chức năng lưu trữ và quản trị dữ liệu nên sức nặng của hệ thống dồn về phía client. Người ta gọi kiến trúc phân tâng như vậy là Fat Client (Client "béo": chức năng xử lý dồn về phía client) (xem hình 12). B. Kiến trúc nhị tầng Fat Server Ngoài kiểu thực thi hệ thống như trên, người ta có thể cho thực thi toàn bộ Data Services và một phần Business services ở phía server, ví dụ dưới dạng các thủ tục thường trú (stored procedure). Loại kiến trúc như thế thường được gọi là Fat Server. Kiến trúc này giúp san sẻ một phần sức nặng xử lý từ client lên server để giảm tải cho client, tận dụng hiệu năng xử lý phía server. 15
  • 16. Hình 13: Kiến trúc nhị tầng Fat Server C. Kiến trúc tam tầng Để cải tiến xa hơn hệ thống, ta có thể sử dụng kiến trúc tam tầng, theo đấy các lớp Data services, Business services và Presentation services sẽ nằm trên những tầng khác nhau một cách chặt chẽ. Người ta bổ sung thêm một tầng trung gian (middleware component), Business services sẽ được thực thi trên tầng trung gian này. Biện pháp này giúp giảm tải cho cả server và client, tăng hiệu năng xử lý của hệ thống. Trong mô hình thực tế, tầng trung gian có thể bao gồm một số các máy tính chuyên dụng để chạy các dịch vụ Business Services (xem hình 14) Hình 14: Kiến trúc tam tầng 16
  • 17. 1.2. Các thành phần cơ bản trong Microsoft SQL Server 1.2.1. Cài đặt và cấu hình SQL Server Bước 1: Khi cửa sổ cài đặt xuất hiện ta thấy có các mục để lựa chọn: • Install Database Server tức là cài đặt các thành phần cơ bản và quan trọng nhất của hệ quản trị CSDL SQL Server bao gồm các dịch vụ chạy trên server, các công cụ quản lý như Services Manager, Enterprise Manager, Query Analyzer,... • Install Analysis Services là cài đặt các dịch vụ phân tích phục vụ cho khai phá dữ liệu (data mining). • Install English Query là cài đặt công cụ cho phép thực thi các truy vấn bằng cách sử dụng ngôn ngữ tự nhiên (tiếng Anh) thay vì sử dụng ngôn ngữ SQL. Ta chọn Install Database Server để cài đặt các thành phần của hệ quản trị. Các lựa chọn cài đặt Install Analysis Services và Install English Query trước mắt chưa cần quan tâm đến, khi nào cần dùng đến chúng ta sẽ cài đặt bổ sung. Bước 2: Cửa sổ Computer Name xuất hiện. Tại đây cho phép ta điền vào tên máy tính mà ta muốn cài đặt SQL Server. Nếu ta chọn cài đặt trên Local Computer thì tên máy tính hiện hành sẽ tự động được điền vào. Nếu ta chọn Remote Computer tức là cài đặt SQL Server lên máy tính khác (có kết nối mạng với máy tính hiện hành) thì ta phải chỉ rõ tên máy đó. Trong trường hợp của ta, chọn Local Computer và nhấn Next để cài lên máy tính hiện hành. 17
  • 18. Bước 3: Cửa sổ Installation Selection xuất hiện cho phép ta lựa chọn chế độ cài đặt: • Create a new instance of SQL Server, or install Client Tools: Chọn mục này nếu ta muốn cài mới hoàn toàn một phiên bản (hay còn gọi là "thể hiện" - instance) của SQL Server hoặc muốn cài đặt các công cụ phía Client cho phép truy xuất, quản lý Server. • Upgrade, remove or add components to an existing instance of SQL Server: Chọn mục này nếu ta muốn nâng cấp, thêm bớt một số components của một phiên bản SQL Server đã được cài đặt trước đó trên máy tính. • Advanced options: Một số tùy chọn cài đặt nâng cao, với các tùy chọn cài đặt ở mức hết sức chi tiết dành cho những người dùng có kinh nghiệm. Trong trường hợp của ta, chọn mục đầu tiên: Create a new instance of SQL Server, or install Client Tools và nhấn Next để sang bước tiếp theo. 18
  • 19. Bước 4: Cửa sổ User Information xuất hiện yêu cầu ta nhập các thông tin cơ bản về người dùng và công ty sử dụng sản phầm SQL Server. Bước 5: Hộp thoại Software License Agreement xuất hiện, yêu cầu ta chấp nhận các điều khoản về License. Nhấn Next để tiếp tục. 19
  • 20. Bước 6: Hộp thoại Installation Definition xuất hiện cho phép ta chỉ định các thành phần cài đặt với các tùy chọn: • Client Tools Only: Chỉ cài đặt các công cụ truy xuất và quản trị phía Client chứ không cài đặt các thành phần dịch vụ của Database Server lên máy tính hiện hành. Tùy chọn này dùng khi ta đã đặt Server dữ liệu trên một máy khác và giờ ta muốn ngồi ở máy hiện hành để truy xuất, điều khiển, cấu hình Server dữ liệu từ xa. • Server and Client Tools: Cài đặt tất cả các thành phần bao gồm Database Server, các công cụ phía Server và Client lên máy tính hiện hành. • Conectivity Only: Chỉ cài đặt các thư viện kết nối để hỗ trợ các ứng dụng trên máy Client có thể kết nối với SQL Server. Trong trường hợp của ta, chọn mục Server and Client Tools và nhấn Next để tiếp tục. 20
  • 21. Bước 7: Cửa sổ Setup Type xuất hiện cho ta lựa chọn một số thông số cài đặt. Có mấy tùy chọn sau: • Typical: Cài đặt với các tùy chọn thông dụng nhất. • Minimum: Cài đặt với các tùy chọn tối thiểu (yêu cầu cấu hình thấp nhất). • Custom: Cho phép người dùng tự mình lựa chọn và loại bỏ những thành phần có thể được cài đặt. Trong trường hợp của ta, chọn mục Typical. Ở phần Destination Folder gồm hai mục: • Program Files: Cho phép chỉ định nơi cài đặt SQL Server • Data Files: Chỉ định nơi lưu trữ mặc định các tệp tin cơ sở dữ liệu của SQL Server. Sau khi đã thiết lập xong các thông số, nhấn Next để tiếp tục. Bước 8: 21
  • 22. Hộp thoại Services Account xuất hiện yêu cầu ta thiết lập một số thông số ban đầu liên quan tới tài khoản người dùng dùng để đăng nhập vào SQL Server. Có hai tùy chọn cơ bản: • Use the same account for each service. Auto start SQL Server Service: Dùng chung một account cho tất cả các dịch vụ của SQL Server. Dịch vụ SQL Server Service sẽ tự động được khởi động nếu cần thiết. • Customize the setting for each service: Thay vì dùng chung, mỗi dịch vụ sẽ có tùy chọn riêng. Lựa chọn này có tính bảo mật cao nhưng khá phiền phức. Trong trường hợp của ta, chọn mục Use the same account for each service. Auto start SQL Server Service. Ở phần Service Setting có hai tùy chọn: • Use the Local System account: Sử dụng tài khoản hệ thống trên máy tính hiện hành làm tài khoản đăng nhập vào SQL Server. • User a Domain User Account: Sử dụng tài khoản Domain User để đăng nhập vào SQL Server nếu máy tính hiện hành đang làm việc trong môi trường Domain của Windows Server 2000/2003. Trong trường hợp của ta, chọn mục Use the Local System account. Nhấn Next để tiếp tục Bước 9: Hộp thoại Authentication Mode xuất hiện cho phép chúng ta thiết lập chế độ xác thực người dùng của SQL Server. Có hai lựa chọn: • Windows Authentication Mode: Xác thực dựa trên account của Windows. Chỉ những người dùng có account đăng nhập của hệ điều hành Windows (những account Windows này phải được đăng ký trước với SQL Server) thì mới có thể đăng nhập vào hệ thống SQL Server. 22
  • 23. • Mixed Mode: Chế độ xác thực hỗn hợp. Chế độ này cho phép cả những người dùng có account của Windows và những người dùng có account riêng của SQL Server đều có thể đăng nhập hệ thống. Trong trường hợp này, tài khoản sa - tài khoản quản trị hệ thống mặc định của SQL Server trở nên có hiệu lực, SQL Server gợi ý người dùng nên nhập password cho account này để đảm bảo tính bảo mật cho hệ thống. Trong trường hợp của ta, chọn chế độ Mixed Mode, account của sa để trống sau đó nhấn Next để tiếp tục cài đăt. Các bước tiếp theo không có gì đặc biệt. Cứ nhấn Next để tiếp tục quá trình cài đặt. Việc cài đặt diễn ra nhanh hay chậm tùy thuộc vào từng máy tính. Quá trình cài đặt xong xuôi, nhấn Finish để kết thúc. 1.3. Ngôn ngữ truy vấn dữ liệu có cấu trúc (SQL) SQL, viết tắt của Structured Query Language (ngôn ngữ hỏi có cấu trúc), là công cụ sử dụng để tổ chức, quản lý và truy xuất dữ liệu đuợc lưu trữ trong các cơ sở dữ liệu. SQL là một hệ thống ngôn ngữ bao gồm tập các câu lệnh sử dụng để tương tác với cơ sở dữ liệu quan hệ. Tên gọi ngôn ngữ hỏi có cấu trúc phần nào làm chúng ta liên tưởng đến một công cụ (ngôn ngữ) dùng để truy xuất dữ liệu trong các cơ sở dữ liệu. Thực sự mà nói, khả năng của SQL vượt xa so với một công cụ truy xuất dữ liệu, mặc dù đây là mục đích ban đầu khi SQL được xây dựng nên và truy xuất dữ liệu vẫn còn là một trong những chức năng quan trọng của nó. SQL được sử dụng để điều khiển tất cả các chức năng mà một hệ quản trị cơ sở dữ liệu cung cấp cho người dùng bao gồm: 1 • Định nghĩa dữ liệu: SQL cung cấp khả năng định nghĩa các cơ sở dữ liệu, các cấu trúc lưu trữ và tổ chức dữ liệu cũng như mối quan hệ giữa các thành phần dữ liệu. 2 • Truy xuất và thao tác dữ liệu: Với SQL, người dùng có thể dễ dàng thực hiện các thao tác truy xuất, bổ sung, cập nhật và loại bỏ dữ liệu trong các cơ sở dữ liệu. 23
  • 24. 3 • Điều khiển truy cập: SQL có thể được sử dụng để cấp phát và kiểm soát các thao tác của người sử dụng trên dữ liệu, đảm bảo sự an toàn cho cơ sở dữ liệu 1 Đảm bảo toàn vẹn dữ liệu: SQL định nghĩa các ràng buộc toàn vẹn trong cơ sở dữ liệu nhờ đó đảm bảo tính hợp lệ và chính xác của dữ liệu trước các thao tác cập nhật cũng như các lỗi của hệ thống. Như vậy, có thể nói rằng SQL là một ngôn ngữ hoàn thiện được sử dụng trong các hệ thống cơ sở dữ liệu và là một thành phần không thể thiếu trong các hệ quản trị cơ sở dữ liệu. Mặc dù SQL không phải là một ngôn ngữ lập trình như C, C++, Java,... song các câu lệnh mà SQL cung cấp có thể được nhúng vào trong các ngôn ngữ lập trình nhằm xây dựng các ứng dụng tương tác với cơ sở dữ liệu. Khác với các ngôn ngữ lập trình quen thuộc như C, C++, Java,... SQL là ngôn ngữ có tính khai báo. Với SQL, người dùng chỉ cần mô tả các yêu cầu cần phải thực hiện trên cơ sở dữ liệu mà không cần phải chỉ ra cách thức thực hiện các yêu cầu như thế nào. Chính vì vậy, SQL là ngôn ngữ dễ tiếp cận và dễ sử dụng. Trong hầu hết các hệ quản trị cơ sở dữ liệu quan hệ, SQL có những vai trò như sau: 1 • SQL là ngôn ngữ hỏi có tính tương tác: Người sử dụng có thể dễ dàng thông qua các trình tiện ích để gởi các yêu cầu dưới dạng các câu lệnh SQL đến cơ sở dữ liệu và nhận kết quả trả về từ cơ sở dữ liệu 2 • SQL là ngôn ngữ lập trình cơ sở dữ liệu: Các lập trình viên có thể nhúng các câu lệnh SQL vào trong các ngôn ngữ lập trình để xây dựng nên các chương trình ứng dụng giao tiếp với cơ sở dữ liệu 3 • SQL là ngôn ngữ quản trị cơ sở dữ liệu: Thông qua SQL, người quản trị cơ sở dữ liệu có thể quản lý được cơ sở dữ liệu, định nghĩa các cấu trúc lưu trữ dữ liệu, điều khiển truy cập cơ sở dữ liệu,... 4 • SQL là ngôn ngữ cho các hệ thống khách/chủ (client/server): Trong các hệ thống cơ sở dữ liệu khách/chủ, SQL được sử dụng như là công cụ để giao tiếp giữa các trình ứng dụng phía máy khách với máy chủ cơ sở dữ liệu. 5 • SQL là ngôn ngữ truy cập dữ liệu trên Internet: Cho đến nay, hầu hết các máy chủ Web cũng như các máy chủ trên Internet sử dụng SQL với vai trò là ngôn ngữ để tương tác với dữ liệu trong các cơ sở dữ liệu. 6 • SQL là ngôn ngữ cơ sở dữ liệu phân tán: Đối với các hệ quản trị cơ sở dữ liệu phân tán, mỗi một hệ thống sử dụng SQL để giao tiếp với các hệ thống khác trên mạng, gởi và nhận các yêu cầu truy xuất dữ liệu với nhau. Bài tập Câu 1: Trình bày khái niệm về cơ sở dữ liệu quan hệ. Cơ sở dữ liệu quan hệ có những điểm khác biệt gì so với hệ thống xử lý file truyền thống? 24
  • 25. Câu 2: Trình bày khái niệm về hệ quản trị cơ sở dữ liệu quan hệ. Câu 3: Trình bày về mô hình Client/Server và kiến trúc phân tầng. Câu 4: Nêu các thành phần cơ bản của hệ quản trị CSDL SQL Server. Câu 3: Trình bày những đặc điểm cơ bản của ngôn ngữ vấn tin SQL. 25
  • 26. Chương 2. Tạo và quản lý cơ sở dữ liệu 2.1. Các tệp tin cơ sở dữ liệu (Database files) Trong SQL Server, một user database có thể bao gồm hai hay nhiều tập tin (mặc định là 2). Các tập tin trong một database có thể chia làm 3 loại: • Primary Data File: Mỗi database phải có ít nhất một tập tin Primary data file với phần mở rộng là .MDF. Tập tin này ngoài nhiệm vụ cất trữ dữ liệu thuần túy còn nhiệm vụ lưu trữ thông tin liên quan đến cấu trúc và đặc điểm của chính database đó (lưu trong các system tables). Ta tuyệt đối không nên can thiệp vào các system tables này vì việc này có thể phá hỏng database. • Secondary Data File: Mỗi database có thể không có hoặc có nhiều Secondary Data File. Các tập tin này chỉ thuần túy lưu trữ dữ liệu và có phần mở rộng là .NDF. • Log File: Mỗi database phải có ít nhất một transaction log file (có phần mở rộng là .LDF). Log file làm nhiệm vụ lưu trữ thông tin liên quan các giao dịch (transaction) thực hiện trên database đó. Thông tin này một phần phục vụ cho thao tác Roll Back khi có lỗi giao dịch xảy ra. Mỗi tập tin trong CSDL (.MDF,.NDF,.LDF) đêu có 5 thuộc tính: • NAME: Tên logic của tập tin. • FILENAME: Đường dẫn đầy đủ (tên vật lý). • SIZE: Kích thước ban đầu của tập tin (KB, MB, GB, TB). • MAXSIZE: Kích thước tối đa cho phép của tập tin (KB, MB, GB,TB). • FILEGROWTH : Tốc độ gia tăng kích thước của tập tin (KB, MB, GB, TB,%). Các tập tin CSDL được tổ chức thành các nhóm gọi là file group theo nguyên tắc: • Một CSDL có thể có một hay nhiều file group. Trong đó bắt buộc phải có một file group chính gọi là PRIMARY. • Mỗi file group có thể chứa một hay nhiều tập tin dữ liệu (.MDF, .NDF). Trong đó phải có ít nhát 1 tập tin Primary Data File (.MDF) nằm trong group chính PRIMARY. • Các tập tin Log không thuộc về một file group nào cả. 2.2. Tạo cơ sở dữ liệu (Database) 2.2.1. Sử dụng lệnh CREATE DATABASE CREATE DATABASE <tên CSDL> 26
  • 27. [ ON PRIMARY <Khai báo tập tin .MDF>, [<Khai báo tập tin .NDF>,] . . . ] [ FILEGROUP <tên file group> <Khai báo tập tin .NDF>, [<Khai báo tập tin .NDF>,] . . . ] . . . [LOG ON <Khai báo tập tin .LDF>, [<Khai báo tập tin .LDF>,] . . . ] [COLLATE <tên collation>] [FOR ATTACH] Cú pháp đơn giản hay được sử dụng hơn cả là: CREATE DATABASE <tên CSDL> ON PRIMARY <Khai báo tập tin .MDF> LOG ON <Khai báo tập tin .LDF> Hoặc thậm chí đơn giản hơn nữa CREATE DATABASE <tên CSDL> Trong đó phần khai báo tập tin được bao bởi cặp ngoặc đơn “(…)” và gồm các thành phần: ( [NAME = <tên logic của tập tin>,] FILENAME = <tên vật lý (đường dẫn)>, [SIZE = <kích thước ban đầu>,] [MAXSIZE = <kích thước lớn nhất có thể> | UNLIMITED], [FILEGROWTH = <Tỷ lệ gia tăng kích thước>]) Chú ý: Khi không chỉ rõ kích thước ban đầu (SIZE) của tập tin thì: • Đối với tập tin .MDF, SQL Server sẽ lấy kích thước của tập tin .MDF trong Model Database. • Đối với các tập tin .NDF, .LDF, SQL Server tự khởi tạo giá trị mặc định là 1MB. 27
  • 28. • Đơn vị mặc định của SIZE và MAXSIZE là MB. 2.1.2. Sử dụng Enterprise Manager để tạo CSDL 28
  • 29. 29
  • 30. 30
  • 31. 2.3. Quản lý cơ sở dữ liệu 2.3.1. Sử dụng lệnh ALTER DATABSE ALTER DATABASE <tên CSDL> [ ADD FILE <Khai báo tập tin .MDF,.NDF> [, . . .] [ TO FILEGROUP <Tên File Group>] ] [ADD LOG FILE <Khai báo tập tin .LDF> [, . . .]] [ADD FILEGROUP <Tên File Group>] [REMOVE FILE <Tên logic của tập tin>] [REMOVE FILEGROUP <Tên File Group>] [MODIFY NAME = <Tên mới cho Database>] [MODIFY FILE <Khai báo tập tin>] [MODIFY FILEGROUP <Tên File Group> <Thuộc tính File Group>|NAME = <Tên mới>] [COLLATE <Tên collation>] Trong đó phần khai báo tập tin được bao bởi cặp ngoặc đơn “(…)” và gồm các thành phần: ( NAME = <tên logic của tập tin>, [NEWNAME = <tên logic mới cho tập tin>,] [FILENAME = <tên vật lý (đường dẫn)>], [SIZE = <kích thước ban đầu>,] [MAXSIZE = <kích thước lớn nhất có thể> | UNLIMITED], [FILEGROWTH = <Tỷ lệ gia tăng kích thước>]) Chú ý: Riêng NEWNAME chỉ dùng khi MODIFY FILE <Thuộc tính File Group> bao gồm: • READONLY: Khi một file group bị đánh dấu READONLY thì mọi thao tác cập nhật dữ liệu trên các tập tin thuộc file group này đều không thể thực hiện được. Không được phép áp dụng thuộc tính này cho Primary Group. • READWRITE: Ngược lại với READONLY • DEFAULT: Đánh dấu file group như là file group mặc định của database hiện thời. 31
  • 32. 2.3.2. Sửa đổi cơ sở dữ liệu bằng Enterprise Manager 32
  • 33. 2.4. Xóa cơ sở dữ liệu 2.4.1. Sử dụng lệnh DROP DATABASE trên Query Analyzer DROP DATABASE <tên CSDL> 2.4.2. Xóa CSDL sử dụng Enterprise Manager 2.5. Các system database đặc biệt Ngay sau khi SQL Server mới được cài đặt xong, có 6 database tự động được cung cấp. Người ta gọi những database này là các system database để phân biệt với các database do người dùng tự tạo ra sau này (user database). Các system database bao gồm: • Model database • Master database • Msdb database 33
  • 34. • Tempdb database • Pubs database • Northwind database A. Master database Bao gồm tất cả các system table lưu trữ dữ liệu theo dõi việc cài đặt Server về mặt tổng thể cũng như theo dõi tất cả các user database được tạo ra về sau. Cụ thể hơn, Master database có chứa những system catalog lưu trữ thông tin liên quan đến: • Khoảng trống đĩa (space disk). • Cấp phát tập tin. • Cài đặt để cấu hình toàn hệ thống. • Tài khoản đăng nhập. • Sự hiện hữu của các database khác. • Sự hiện hữu của các SQL Server khác (trong các giao dịch phân tán). Mỗi khi tạo một database mới, thay đổi cấu hình, tài khoản đăng nhập,… tất cả thông tin đều được cập nhật vào Master database. B.Model database Đóng vai trò như một khuôn mẫu (template). Mỗi lần người dùng tạo mới một user database thì SQL Server sẽ dùng Model database làm “khuôn mẫu” cho việc tạo mới user database. Mỗi user database lúc mới tạo sẽ kế thừa các thuộc tính và có cấu trúc giống như Model database. Nếu ta muốn mỗi user database lúc mới tạo ra đã có sẵn một số đặc điểm nào đấy, ta có thể thiết lập các đặc điểm đó trên Model database. Các user database được tạo ra sau này sẽ tự động được kế thừa các đặc điểm đó. C. Tempdb database Là một database để lưu trữ dữ liệu tạm thời (tempotary). Nó được dùng để lưu trữ: • Những dữ liệu tam thời (bảng tạm) do người dùng tạo ra • Những kết quả trung gian phục vụ cho quá trình xử lý của nội bộ SQL Server: xử lý các câu truy vấn (Query), sắp xếp (Sorting),… Mặc định mỗi khi SQL Server được khởi động thì Tempdb database được tái tạo lại, mới hoàn toàn, mọi dữ liệu (bảng tạm) do người dùng lưu trữ lên Tempdb database trước đó sẽ biến mất D. Msdb Database Là một database phục vụ cho hoạt động SQL Server Agent service. Nó lưu trữ thông tin liên quan đến việc hoạch định tác vụ (Task Shedule) cho các hoạt động như: backup dữ liệu, tạo thứ bản (replication),… E. Pubs database và Northwind database 34
  • 35. Đây là hai CSDL được dùng làm thí dụ mẫu trong SQL Server book và các tài liệu hướng dẫn về SQL Server. Chú ý • Tuyệt đối không được tự ý xóa hay can thiệp trực tiếp vào các cơ sở dữ liệu Master và Msdb. Việc này có thể làm ảnh hưởng nghiêm trọng đến hoạt động của Server. • Không nên tự ý sửa đổi CSDL dữ liệu Model nếu không có lý do chính đáng. • Các CSDL Northwind và Pubs có thể xóa được nhưng không nên làm thế vì chúng là những ví dụ hay về CSDL rất nên tham khảo. Bài tập: Câu 1: Trình bày về tổ chức tập tin trong cơ sở dữ liệu SQL Server. Phân loại tập tin trong SQL Server. Cách khai báo đặc tả tập tin trong SQL Server (5 thuộc tính). Câu 2: Nêu chức năng các cơ sở dữ liệu hệ thống trong SQL Server. Câu 3: Trình bày cú pháp đầy đủ của lệnh CREATE DATABASE và giải thích ý nghĩa các tham số. 35
  • 36. Chương 3. Tạo và quản lý các bảng 3.1. Tạo bảng (Tables) 3.1.1. Sử dụng lệnh CREATE TABLE CREATE TABLE <Tên bảng dữ liệu> ( <Cột 1> <Kiểu dữ liệu> [<Thuộc tính nếu có>], <Cột 2> <Kiểu dữ liệu> [<Thuộc tính nếu có>], . . . <Cột n> <Kiểu dữ liệu> [<Thuộc tính nếu có>], [Các ràng buộc nếu có] ) [ON <Tên file group> | DEFAULT] 3.1.2. Sử dụng Enterprise Manager • Vào mục Tables trong CSDL muốn tạo • Chọn New Table 36
  • 37. 3.2. Định nghĩa các cột (Columns) A. Thuộc tính NULL và NOT NULL  Thuộc tính NULL o Khi một cột được xác lập thuộc tính là NULL giá trị tại cột đó được phép để trống (mang giá trị null) o Thuộc tính NULL là thuộc tính mặc định. Khi một cột không có khai báo gì thêm thì mặc định thuộc tính của cột đó NULL. 37
  • 38.  Thuộc tính NOT NULL Khi một cột được xác lập thuộc tính là NOT NULL thì giá trị tại cột đó không được phép để trống. Khai báo: <Tên cột> <Kiểu dữ liệu> NULL | NOT NULL B. Thuộc tính IDENTITY o Thuộc tính này cho phép ta chỉ định một cột kiểu số nguyên như là một cột định danh (Identity Comlumn) của table (gần giống như cột STT trong các bảng dữ liệu trên giấy). o Ta không phải nhập dữ liệu cho cột này mà các giá trị trên cột được tự đông phát sinh bắt đầu từ một giá trị khởi tạo và tăng dần theo một công sai nào đó được chỉ định, đồng thời đảm bảo tính duy nhất một cách tuyệt đối (không có hai giá trị nào trùng nhau). o Mục đích: có thể dùng cho việc tạo khóa tự động Khai báo: <Tên cột> <Kiểu dữ liệu> … Identity(seed, increment) Với: seed: giá trị khởi tạo, increment: mức tăng Ví dụ: Khai báo cột STT tăng tự động từ 1 STT bigint Identity(1,1) NOT NULL C. Thuộc tính ROWGUICOL o Thuộc tính này cho phép ta chỉ định một cột kiểu UniqueIdentifier như là cột mã định danh quốc tế duy nhất gọi là GUID (Gloabal Unique Identifier) o Tương tự như Identity, ROWGUICOL có thể dùng để tạo khóa tự động bằng cách sử dụng hàm hệ thống NEWID() như là giá trị mặc định cho cột. Khai báo: <Tên cột> UniqueIdentifier ROWGUICOL NOT NULL DEFAULT NEWID() 3.3. Định nghĩa các ràng buộc (Constrains) A. Ràng buộc khóa chính PRIMARY KEY Khi muốn chỉ định một cột làm khóa chính, ta sử dụng ràng buộc PRIMARY KEY trên cột đó theo cú pháp: Constraint <Tên ràng buộc> Primary Key(<Tên cột>) B. Ràng buộc khóa ngoại FOREIGN KEY Khi muốn chỉ định một cột làm khóa ngoại tham chiếu đến bảng cha, ta sử dụng ràng buộc FOREIGN KEY theo cú pháp: Constraint <Tên ràng buộc> Foreign Key(<Tên cột>) References <Tên bảng cha>(<Khóa chính>) C. Ràng buộc kiểm tra CHECK Khi muốn dữ liệu nhập vào phải thỏa mãn một biểu thức điều kiện nào đó ta có thể sử dụng ràng buộc kiểm tra CHECK với cú pháp Constraint <Tên ràng buộc> CHECK(<Biểu thức điều kiện>) 38
  • 39. D. Ràng buộc mặc định DEFAULT Khi muốn khởi tạo giá trị mặc định cho một cột nào đó của bảng, ta khai báo ràng buộc DEFAULT ngay bên cạnh khai báo cột <Tên cột> <Kiểu dữ liệu> … DEFAULT <Giá trị mặc định> 3.4. Sửa bảng 3.4.1. Dùng lệnh ALTER TABLE ALTER TABLE <Tên bảng> [ADD <Tên cột> <Kiểu dữ liệu> [<Thuộc tính nếu có>],…] [ADD <Định nghĩa ràng buộc>,…] [ALTER COLUMN <Tên cột> [<Tên kiểu dữ liệu mới>] [NULL | NOT NULL] [ADD | DROP ROWGUIDCOL] [DROP COLUMN <Tên cột>,…] [DROP CONSTRAINT <Tên ràng buộc> ,…] [NOCHECK | CHECK CONSTRAINT <Tên ràng buộc>] Chú ý: NOCHECK dùng để tạm thời vô hiệu hóa một ràng buộc chứ không xóa bỏ nó khỏi CSDL. 3.4.2. Sửa đổi bảng dữ liệu sử dụng Enterprise Manager • Click chuột phải lên bảng muốn sửa đổi. • Chọn Design Table 39
  • 40. 3.5. Xóa bảng (DROP TABLE) 3.5.1. Sử dụng lệnh DROP TABLE DROP TABLE <Tên bảng dữ liệu> 3.5.2. Sử dụng Enterprise Manager 3.6. Thêm bản ghi mới (INSERT) Dữ liệu trong các bảng được thể hiện dưới dạng các dòng (bản ghi). Để bổ sung thêm các dòng dữ liệu vào một bảng, ta sử dụng câu lệnh INSERT. Hầu hết các hệ quản trị CSDL dựa trên SQL cung cấp các cách dưới đây để thực hiện thao tác bổ sung dữ liệu cho bảng: 40
  • 41. 1 • Bổ sung từng dòng dữ liệu với mỗi câu lệnh INSERT. Đây là các sử dụng thường gặp nhất trong giao tác SQL. 2 • Bổ sung nhiều dòng dữ liệu bằng cách truy xuất dữ liệu từ các bảng dữ liệu khác. Bổ sung từng dòng dữ liệu với lệnh INSERT Để bổ sung một dòng dữ liệu mới vào bảng, ta sử dụng câu lệnh INSERT với cú pháp như sau: INSERT INTO tên_bảng[(danh_sách_cột)] VALUES(danh_sách_trị) Trong câu lệnh INSERT, danh sách cột ngay sau tên bảng không cần thiết phải chỉ định nếu giá trị các trường của bản ghi mới được chỉ định đầy đủ trong danh sách trị. Trong trường hợp này, thứ tự các giá trị trong danh sách trị phải bằng với số lượng các trường của bảng cần bổ sung dữ liệu cũng như phải tuân theo đúng thứ tự của các trường như khi bảng được định nghĩa. Ví dụ: Câu lệnh dưới đây bổ sung thêm một dòng dữ liệu vào bảng KHOA INSERT INTO khoa VALUES(‘DHT10’,’Khoa Luật’,’054821135’) Trong trường hợp chỉ nhập giá trị cho một số cột trong bảng, ta phải chỉ định danh sách các cột cần nhập dữ liệu ngay sau tên bảng. Khi đó, các cột không được nhập dữ liệu sẽ nhận giá trị mặc định (nếu có) hoặc nhận giá trị NULL (nếu cột cho phép chấp nhận giá trị NULL). Nếu một cột không có giá trị mặc định và không chấp nhận giá trị NULL mà không đuợc nhập dữ liệu, câu lệnh sẽ bị lỗi. Ví dụ: Câu lệnh dưới đây bổ sung một bản ghi mới cho bảng SINHVIEN INSERT INTO sinhvien(masv,hodem,ten,gioitinh,malop) VALUES(‘0241020008’,‘Nguyễn Công’,’Chính’,1,’C24102’) câu lệnh trên còn có thể được viết như sau: INSERT INTO sinhvien VALUES(‘0241020008’,‘Nguyễn Công’,’Chính’, NULL,1,NULL,’C24102’) Bổ sung nhiều dòng dữ liệu từ bảng khác Một cách sử dụng khác của câu lệnh INSERT được sử dụng để bổ sung nhiều dòng dữ liệu vào một bảng, các dòng dữ liệu này được lấy từ một bảng khác thông qua câu lệnh SELECT. Ở cách này, các giá trị dữ liệu được bổ sung vào bảng không được chỉ định tường minh mà thay vào đó là một câu lệnh SELECT truy vấn dữ liệu từ bảng khác. Cú pháp câu lệnh INSERT có dạng như sau: INSERT INTO tên_bảng[(danh_sách_cột)] câu_lệnh_SELECT Ví dụ: Giả sử ta có bảng LUUSINHVIEN bao gồm các trường HODEM, TEN, NGAYSINH. Câu lệnh dưới đây bổ sung vào bảng LUUSINHVIEN các dòng dữ liệu có được từ câu truy vấn SELECT: 41
  • 42. INSERT INTO luusinhvien SELECT hodem,ten,ngaysinh FROM sinhvien WHERE noisinh like ‘%Huế%’ Khi bổ sung dữ liệu theo cách này cần lưu ý một số điểm sau: • Kết quả của câu lệnh SELECT phải có số cột bằng với số cột được chỉ định trong bảng đích và phải tương thích về kiểu dữ liệu. • Trong câu lệnh SELECT được sử dụng mệnh đề COMPUTE ... BY 3.7. Cập nhật bản ghi (UPDATE) Câu lệnh UPDATE trong SQL được sử dụng để cập nhật dữ liệu trong các bảng. Câu lệnh này có cú pháp như sau: UPDATE tên_bảng SET tên_cột = biểu_thức [, ..., tên_cột_k = biểu_thức_k] [FROM danh_sách_bảng] [WHERE điều_kiện] Sau UPDATE là tên của bảng cần cập nhật dữ liệu. Một câu lệnh UPDATE có thể cập nhật dữ liệu cho nhiều cột bằng cách chỉ định các danh sách tên cột và biểu thức tương ứng sau từ khoá SET. Mệnh đề WHERE trong câu lệnh UPDATE thường được sử dụng để chỉ định các dòng dữ liệu chịu tác động của câu lệnh (nếu không chỉ định, phạm vi tác động của câu lệnh được hiểu là toàn bộ các dòng trong bảng) Ví dụ 2.51: Câu lệnh dưới đây cập nhật lại số đơn vị học trình của các môn học có số đơn vị học trình nhỏ hơn 2 UPDATE monhoc SET sodvht = 3 WHERE sodvht = 2 Sử dụng cấu trúc CASE trong câu lệnh UPDATE Cấu trúc CASE có thể được sử dụng trong biểu thức khi cần phải đưa ra các quyết định khác nhau về giá trị của biểu thức Ví dụ Giả sử ta có bảng NHATKYPHONG sau đây Sau khi thực hiện câu lệnh: 42
  • 43. UPDATE nhatkyphong SET tienphong=songay*CASE WHEN loaiphong='A' THEN 100 WHEN loaiphong='B' THEN 70 ELSE 50 END Dữ liệu trong bảng sẽ là: Điều kiện cập nhật dữ liệu liên quan đến nhiều bảng Mệnh đề FROM trong câu lệnh UPDATE được sử dụng khi cần chỉ định các điều kiện liên quan đến các bảng khác với bảng cần cập nhật dữ liệu. Trong truờng hợp này, trong mệnh đề WHERE thường có điều kiện nối giữa các bảng. Ví dụ: Giả sử ta có hai bảng MATHANG và NHATKYBANHANG như sau: Câu lệnh dưới đây sẽ cập nhật giá trị trường THANHTIEN của bảng NHATKYBANHANG theo công thức THANHTIEN = SOLUONG × GIA UPDATE nhatkybanhang SET thanhtien = soluong*gia FROM mathang WHERE nhatkybanhang.mahang = mathang.mahang 3.8. Xóa bản ghi (DELETE) Để xoá dữ liệu trong một bảng, ta sử dụng câu lệnh DELETE. Cú pháp của câu lệnh này như sau: DELETE FROM tên_bảng [FROM danh_sách_bảng] [WHERE điều_kiện] Trong câu lệnh này, tên của bảng cần xoá dữ liệu được chỉ định sau DELETE FROM. Mệnh đề WHERE trong câu lệnh được sử dụng để chỉ định điều kiện đối với các dòng dữ liệu cần xoá. Nếu câu lệnh DELETE không có mệnh đề WHERE thì toàn bộ các dòng dữ liệu trong bảng đều bị xoá. Ví dụ 2.55: Câu lệnh dưới đây xoá khỏi bảng SINHVIEN những sinh viên sinh tại Huế DELETE FROM sinhvien 43
  • 44. WHERE noisinh LIKE ‘%Huế%’ Xoá dữ liệu khi điều kiện liên quan đến nhiều bảng Nếu điều kiện trong câu lệnh DELETE liên quan đến các bảng không phải là bảng cần xóa dữ liệu, ta phải sử dụng thêm mệnh đề FROM và sau đó là danh sách tên các bảng đó. Trong trường hợp này, trong mệnh đề WHERE ta chỉ định thêm điều kiện nối giữa các bảng Ví dụ: Câu lệnh dưới đây xoá ra khỏi bảng SINHVIEN những sinh viên lớp Tin K24 DELETE FROM sinhvien FROM lop WHERE lop.malop=sinhvien.malop AND tenlop='Tin K24' Sử dụng truy vấn con trong câu lệnh DELETE Một câu lệnh SELECT có thể được lồng vào trong mệnh đề WHERE trong câu lệnh DELETE để làm điều kiện cho câu lệnh tương tự như câu lệnh UPDATE. Ví dụ: Câu lệnh dưới đây xoá khỏi bảng LOP những lớp không có sinh viên nào học DELETE FROM lop WHERE malop NOT IN (SELECT DISTINCT malop FROM sinhvien) Xoá toàn bộ dữ liệu trong bảng Câu lệnh DELETE không chỉ định điều kiện đối với các dòng dữ liệu cần xoá trong mệnh đề WHERE sẽ xoá toàn bộ dữ liệu trong bảng. Thay vì sử dụng câu lệnh DELETE trong trường hợp này, ta có thể sử dụng câu lệnh TRUNCATE có cú pháp như sau: TRUNCATE TABLE tên_bảng Bài tập Câu 1: Phân biệt user table và system table trong cơ sở dữ liệu SQL Server. Các system table thường lưu trữ những thông tin gì? Câu 2: Liệt kê và phân loại các kiểu dữ liệu mà SQL Server 2000 hỗ trợ. Câu 3: Trình bày cú pháp đầy đủ của lệnh CREATE TABLE và giải thích chức năng của từng tham số. Câu 4: Tạo cơ sở dữ liệu với các bảng dữ liệu sau đây: KhachHang(MaKH, TenKH, DiaChi) NhaCungCap(MaNCC, TenNCC, DiaChi) MatHang(MaMH,TenMH,DonViTinh, DonGia, MaNCC) HoaDon(MaHD, MaKH, NgayGiaoDich) ChiTietHoaDon(MaHD, MaMH, SoLuong) (Sinh viên tự xác định kiểu dữ liệu và mối liên kết giữa các bảng) 44
  • 45. Chương 4. Truy vấn dữ liệu 4.1. Truy vấn cơ bản 4.1.1. Mệnh đề SELECT Câu lệnh SELECT được sử dụng để truy xuất dữ liệu từ các dòng và các cột của một hay nhiều bảng, khung nhìn. Câu lệnh này có thể dùng để thực hiện phép chọn (tức là truy xuất một tập con các dòng trong một hay nhiều bảng), phép chiếu (tức là truy xuất một tập con các cột trong một hay nhiều bảng) và phép nối (tức là liên kết các dòng trong hai hay nhiều bảng để truy xuất dữ liệu). Ngoài ra, câu lệnh này còn cung cấp khả năng thực hiện các thao tác truy vấn và thống kê dữ liệu phức tạp khác. Cú pháp chung của câu lệnh SELECT có dạng: SELECT [ALL | DISTINCT][TOP n] danh_sách_chọn [INTO tên_bảng_mới] FROM danh_sách_bảng/khung_nhìn [WHERE điều_kiện] [GROUP BY danh_sách_cột] [HAVING điều_kiện] [ORDER BY cột_sắp_xếp] [COMPUTE danh_sách_hàm_gộp [BY danh_sách_cột]] Điều cần lưu ý đầu tiên đối với câu lệnh này là các thành phần trong câu lệnh SELECT nếu được sử dụng phải tuân theo đúng thứ tự như trong cú pháp. Nếu không, câu lệnh sẽ được xem là không hợp lệ. Câu lệnh SELECT được sử dụng để tác động lên các bảng dữ liệu và kết quả của câu lệnh cũng được hiển thị dưới dạng bảng, tức là một tập hợp các dòng và các cột (ngoại trừ trường hợp sử dụng câu lệnh SELECT với mệnh đề COMPUTE). 4.1.2. Mệnh đề FROM Mệnh đề FROM trong câu lệnh SELECT được sử dung nhằm chỉ định các bảng và khung nhìn cần truy xuất dữ liệu. Sau FROM là danh sách tên của các bảng và khung nhìn tham gia vào truy vấn, tên của các bảng và khung nhìn được phân cách nhau bởi dấu phẩy. Ví dụ: Câu lệnh dưới đây hiển thị danh sách các khoa trong trường SELECT * FROM khoa kết quả câu lệnh như sau: 45
  • 46. Ta có thể sử dụng các bí danh cho các bảng hay khung nhìn trong câu lệnh SELECT. Bí danh được gán trong mệnh đề FROM bằng cách chỉ định bí danh ngay sau tên bảng. Ví dụ 2.3: câu lệnh sau gán bí danh là a cho bảng khoa SELECT * FROM khoa a 4.1.3. Mệnh đề WHERE Mệnh đề WHERE trong câu lệnh SELECT được sử dụng nhằm xác định các điều kiện đối với việc truy xuất dữ liệu. Sau mệnh đề WHERE là một biểu thức logic và chỉ những dòng dữ liệu nào thoả mãn điều kiện được chỉ định mới được hiển thị trong kết quả truy vấn. Ví dụ: Câu lệnh dưới đây hiển thị danh sách các môn học có số đơn vị học trình lớn hơn 3 SELECT * FROM monhoc WHERE sodvht>3 Trong mệnh đề WHERE thường sử dụng: 1 • Các toán tử kết hợp điều kiện (AND, OR) 2 • Các toán tử so sánh 3 • Kiểm tra giới hạn của dữ liệu (BETWEEN/ NOT BETWEEN) 4 • Danh sách 5 • Kiểm tra khuôn dạng dữ liệu. 6 • Các giá trị NULL a. Các toán tử so sánh Toán tử ý nghĩa = Bằng > Lớn hơn < Nhỏ hơn >= Lớn hơn hoặc bằng <= Nhỏ hơn hoặc bằng <> Khác !> Không lớn hơn !< Không nhỏ hơn Ví dụ: Câu lệnh: 46
  • 47. SELECT masv,hodem,ten,ngaysinh FROM sinhvien WHERE (ten='Anh') AND (YEAR(GETDATE())-YEAR(ngaysinh)<=20) cho biết mã, họ tên và ngày sinh của các sinh viên có tên là Anh và có tuổi nhỏ hơn hoặc bằng 20. b. Kiểm tra giới hạn của dữ liệu Để kiểm tra xem giá trị dữ liệu nằm trong (ngoài) một khoảng nào đó, ta sử dụng toán tử BETWEEN (NOT BETWEEN) như sau: Cách sử dụng Ý nghĩa giá_trị BETWEEN a AND b a ≤ giá_trị ≤ b giá_trị NOT BETWEEN a AND b (giá_trị < a) AND (giá_trị>b) Ví dụ: Câu lệnh dưới đây cho biết họ tên và tuổi của các sinh viên có tên là Bình và có tuổi nằm trong khoảng từ 20 đến 22 SELECT hodem,ten,year(getdate())-year(ngaysinh) AS tuoi FROM sinhvien WHERE ten='Bình' AND YEAR(GETDATE())-YEAR(ngaysinh) BETWEEN 20 AND 22 c. Danh sách (IN và NOT IN) Từ khoá IN được sử dụng khi ta cần chỉ định điều kiện tìm kiếm dữ liệu cho câu lệnh SELECT là một danh sách các giá trị. Sau IN (hoặc NOT IN) có thể là một danh sách các giá trị hoặc là một câu lệnh SELECT khác. Ví dụ: Để biết danh sách các môn học có số đơn vị học trình là 2, 4 hoặc 5, thay vì sử dụng câu lệnh SELECT * FROM monhoc WHERE sodvht=2 OR sodvht=4 OR sodvht=5 ta có thể sử dụng câu lệnh SELECT * FROM monhoc WHERE sodvht IN (2,4,5) d. Toán tử LIKE và các ký tự đại diện 47
  • 48. Từ khoá LIKE (NOT LIKE) sử dụng trong câu lệnh SELECT nhằm mô tả khuôn dạng của dữ liệu cần tìm kiếm. Chúng thường được kết hợp với các ký tự đại diện sau đây: Ký tự đại diện ý nghĩa % Chuỗi ký tự bất kỳ gồm không hoặc nhiều ký tự _ Ký tự đơn bất kỳ [] Ký tự đơn bất kỳ trong giới hạn được chỉ định (ví dụ [a-f]) hay một tập (ví dụ [abcdef]) [^] Ký tự đơn bất kỳ không nằm trong giới hạn được chỉ định ( ví dụ [^a-f] hay một tập (ví dụ [^abcdef]). Ví dụ : Câu lệnh dưới đây SELECT hodem,ten FROM sinhvien WHERE hodem LIKE 'Lê%' cho biết họ tên của các sinh viên có họ là Lê và có kết quả như sau Câu lệnh: SELECT hodem,ten FROM sinhvien WHERE hodem LIKE 'Lê%' AND ten LIKE '[AB]%' Có kết quả là: e. Giá trị NULL Dữ liệu trong một cột cho phép NULL sẽ nhận giá trị NULL trong các trường hợp sau: 1 Nếu không có dữ liệu được nhập cho cột và không có mặc định cho cột hay kiểu dữ liệu trên cột đó. 48
  • 49. 2 • Người sử dụng trực tiếp đưa giá trị NULL vào cho cột đó. 3 • Một cột có kiểu dữ liệu là kiểu số sẽ chứa giá trị NULL nếu giá trị được chỉ định gây tràn số. Trong mệnh đề WHERE, để kiểm tra giá trị của một cột có giá trị NULL hay không, ta sử dụng cách viết: WHERE tên_cột IS NULL hoặc: WHERE tên_cột IS NOT NULL 4.1.4. Mệnh đề GROUP BY và HAVING Ngoài khả năng thực hiện các yêu cầu truy vấn dữ liệu thông thường (chiếu, chọn, nối,…) như đã đề cập như ở các phần trước, câu lệnh SELECT còn cho phép thực hiện các thao tác truy vấn và tính toán thống kê trên dữ liệu như: cho biết tổng số tiết dạy của mỗi giáo viên, điểm trung bình các môn học của mỗi sinh viên,… Mệnh đề GROUP BY sử dụng trong câu lệnh SELECT nhằm phân hoạch các dòng dữ liệu trong bảng thành các nhóm dữ liệu, và trên mỗi nhóm dữ liệu thực hiện tính toán các giá trị thống kê như tính tổng, tính giá trị trung bình,... Các hàm gộp được sử dụng để tính giá trị thống kê cho toàn bảng hoặc trên mỗi nhóm dữ liệu. Chúng có thể được sử dụng như là các cột trong danh sách chọn của câu lệnh SELECT hoặc xuất hiện trong mệnh đề HAVING, nhưng không được phép xuất hiện trong mệnh đề WHERE SQL cung cấp các hàm gộp dưới đây: Hàm gộp Chức năng SUM([ALL | DISTINCT] biểu_thức) Tính tổng các giá trị. AVG([ALL | DISTINCT] biểu_thức) Tính trung bình của các giá trị COUNT([ALL | DISTINCT] biểu_thức) Đếm số các giá trị trong biểu thức. COUNT(*) Đếm số các dòng được chọn. MAX(biểu_thức) Tính giá trị lớn nhất MIN(biểu_thức) Tính giá trị nhỏ nhất Trong đó: 1 • Hàm SUM và AVG chỉ làm việc với các biểu thức số. 2 • Hàm SUM, AVG, COUNT, MIN và MAX bỏ qua các giá trị NULL khi tính toán. 3 • Hàm COUNT(*) không bỏ qua các giá trị NULL. Mặc định, các hàm gộp thực hiện tính toán thống kê trên toàn bộ dữ liệu. Trong trường hợp cần loại bỏ bớt các giá trị trùng nhau (chỉ giữ lại một giá trị), ta chỉ định thêm từ khoá DISTINCT ở trước biểu thức là đối số của hàm. Mệnh đề HAVING được sử dụng nhằm chỉ định điều kiện đối với các giá trị thống kê được sản sinh từ các hàm gộp tương tự như cách thức mệnh đề WHERE thiết lập các điều kiện cho câu lệnh 49
  • 50. SELECT. Mệnh đề HAVING thường không thực sự có nghĩa nếu như không sử dụng kết hợp với mệnh đề GROUP BY. Một điểm khác biệt giữa HAVING và WHERE là trong điều kiện của WHERE không được có các hàm gộp trong khi HAVING lại cho phép sử dụng các hàm gộp trong điều kiện của mình. Ví dụ: Để biết trung bình điểm thi lần 1 của các sinh viên có điểm trung bình lớn hơn hoặc bằng 5, ta sử dụng câu lệnh như sau: SELECT sinhvien.masv,hodem,ten, SUM(diemlan1*sodvht)/sum(sodvht) FROM sinhvien,diemthi,monhoc WHERE sinhvien.masv=diemthi.masv AND diemthi.mamonhoc=monhoc.mamonhoc GROUP BY sinhvien.masv,hodem,ten HAVING sum(diemlan1*sodvht)/sum(sodvht)>=5 4.1.5. Mệnh đề ORDER BY Mặc định, các dòng dữ liệu trong kết quả của câu truy vấn tuân theo thứ tự của chúng trong bảng dữ liệu hoặc được sắp xếp theo chỉ mục (nếu trên bảng có chỉ mục). Trong trường hợp muốn dữ liệu được sắp xếp theo chiều tăng hoặc giảm của giá trị của một hoặc nhiều trường, ta sử dụng thêm mệnh đề ORDER BY trong câu lệnh SELECT; Sau ORDER BY là danh sách các cột cần sắp xếp (tối đa là 16 cột). Dữ liệu được sắp xếp có thể theo chiều tăng (ASC) hoặc giảm (DESC), mặc định là sắp xếp theo chiều tăng. Ví dụ: Câu lệnh dưới đây hiển thị danh sách các môn học và sắp xếp theo chiều giảm dần của số đơn vị học trình SELECT * FROM monhoc ORDER BY sodvht DESC Nếu sau ORDER BY có nhiều cột thì việc sắp xếp dữ liệu sẽ được ưu tiên theo thứ tự từ trái qua phải. Ví dụ 2.21: Câu lệnh SELECT hodem,ten,gioitinh, YEAR(GETDATE())-YEAR(ngaysinh) AS tuoi FROM sinhvien WHERE ten='Bình' ORDER BY gioitinh,tuoi có kết quả là: Thay vì chỉ định tên cột sau ORDER BY, ta có thể chỉ định số thứ tự của cột cấn được sắp xếp. Câu lệnh ở ví dụ trên có thể được viết lại như sau: 50
  • 51. SELECT hodem,ten,gioitinh, YEAR(GETDATE())-YEAR(ngaysinh) AS tuoi FROM sinhvien WHERE ten='Bình' ORDER BY 3, 4 4.1.6. Kết hợp kết quả từ nhiều truy vấn khác nhau Phép hợp được sử dụng trong trường hợp ta cần gộp kết quả của hai hay nhiều truy vấn thành một tập kết quả duy nhất. SQL cung cấp toán tử UNION để thực hiện phép hợp. Cú pháp như sau Câu_lệnh_1 UNION [ALL] Câu_lệnh_2 [UNION [ALL] Câu_lệnh_3] ... [UNION [ALL] Câu_lệnh_n] [ORDER BY cột_sắp_xếp] [COMPUTE danh_sách_hàm_gộp [BY danh_sách_cột]] Trong đó Câu_lệnh_1 có dạng SELECT danh_sách_cột [INTO tên_bảng_mới] [FROM danh_sách_bảng|khung_nhìn] [WHERE điều_kiện] [GROUP BY danh_sách_cột] [HAVING điều_kiện] và Câu_lệnh_i (i = 2,..,n) có dạng SELECT danh_sách_cột [FROM danh_sách_bảng|khung_nhìn] [WHERE điều_kiện] [GROUP BY danh_sách_cột] [HAVING điều_kiện] Ví dụ: Giả sử ta có hai bảng Table1 và Table2 lần lượt như sau: câu lệnh SELECT A,B FROM Table1 UNION SELECT D,E FROM table2 Cho kết quả như sau: 51
  • 52. Mặc định, nếu trong các truy vấn thành phần của phép hợp xuất hiện những dòng dữ liệu giống nhau thì trong kết quả truy vấn chỉ giữ lại một dòng. Nếu muốn giữ lại các dòng này, ta phải sử dụng thêm từ khoá ALL trong truy vấn thành phần. Ví dụ: Câu lệnh SELECT A,B FROM Table1 UNION ALL SELECT D,E FROM table2 Cho kết quả như sau Khi sử dụng toán tử UNION để thực hiện phép hợp, ta cần chú ý các nguyên tắc sau: 1 • Danh sách cột trong các truy vấn thành phần phải có cùng số lượng. 2 • Các cột tương ứng trong tất cả các bảng, hoặc tập con bất kỳ các cột được sử dụng trong bản thân mỗi truy vấn thành phần phải cùng kiểu dữ liệu. 3 • Các cột tương ứng trong bản thân từng truy vấn thành phần của một câu lệnh UNION phải xuất hiện theo thứ tự như nhau. Nguyên nhân là do phép hợp so sánh các cột từng cột một theo thứ tự được cho trong mỗi truy vấn. 4 • Khi các kiểu dữ liệu khác nhau được kết hợp với nhau trong câu lệnh UNION, chúng sẽ được chuyển sang kiểu dữ liệu cao hơn (nếu có thể được). 5 • Tiêu đề cột trong kết quả của phép hợp sẽ là tiêu đề cột được chỉ định trong truy vấn đầu tiên. 1 Truy vấn thành phần đầu tiên có thể có INTO để tạo mới một bảng từ kết quả của chính phép hợp. 2 • Mệnh đề ORDER BY và COMPUTE dùng để sắp xếp kết quả truy vấn hoặc tính toán các giá trị thống kê chỉ được sử dụng ở cuối câu lệnh UNION. Chúng không được sử dụng ở trong bất kỳ truy vấn thành phần nào. 3 • Mệnh đề GROUP BY và HAVING chỉ có thể được sử dụng trong bản thân từng truy vấn thành phần. Chúng không được phép sử dụng để tác động lên kết quả chung của phép hợp. 4 • Phép toán UNION có thể được sử dụng bên trong câu lệnh INSERT. 5 • Phép toán UNION không được sử dụng trong câu lệnh CREATE VIEW. 4.2. Truy vấn từ nhiều bảng 4.2.1. Inner Joins Điều kiện để thực hiện phép nối trong được chỉ định trong mệnh đề FROM theo cú pháp như sau: tên_bảng_1 [INNER] JOIN tên_bảng_2 ON điều_kiện_nối 52
  • 53. Ví dụ 2.31: Để hiển thị họ tên và ngày sinh của các sinh viên lớp Tin K24, thay vì sử dụng câu lệnh: SELECT hodem,ten,ngaysinh FROM sinhvien,lop WHERE tenlop='Tin K24' AND sinhvien.malop=lop.malop ta có thể sử dụng câu lệnh như sau: SELECT hodem,ten,ngaysinh FROM sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop WHERE tenlop='Tin K24' 4.2.2. Outer Joins SQL2 cung cấp các phép nối ngoài sau đây: 1 • Phép nối ngoài trái (LEFT OUTER JOIN) 2 • Phép nối ngoài phải (RIGHT OUTER JOIN) 3 • Phép nối ngoài đầy đủ (FULL OUTER JOIN) Cũng tương tự như phép nối trong, điều kiện của phép nối ngoài cũng được chỉ định ngay trong mệnh đề FROM theo cú pháp: tên_bảng_1 LEFT|RIGHT|FULL [OUTER] JOIN tên_bảng_2 ON điều_kiện_nối Ví dụ: Giả sử ta có hai bảng dữ liệu như sau: Bảng DONVI Bảng NHANVIEN Phép nối ngoài trái giữa hai bảng NHANVIEN và DONVI được biểu diễn bởi câu lệnh: SELECT * FROM nhanvien LEFT OUTER JOIN donvi ON nhanvien.madv=donvi.madv có kết quả là: Câu lệnh: SELECT * FROM nhanvien RIGHT OUTER JOIN donvi ON nhanvien.madv=donvi.madv thực hiện phép nối ngoài phải giữa hai bảng NHANVIEN và DONVI, và có kết quả là: Nếu phép nối ngoài trái (tương ứng phải) hiển thị trong kết quả truy vấn cả những dòng dữ liệu không thoả điều kiện nối của bảng bên trái (tương ứng phải) trong phép nối thì phép nối ngoài đầy đủ hiển thị trong kết quả truy vấn cả những dòng dữ liệu không thoả điều kiện nối của cả hai bảng tham gia vào phép nối. 53
  • 54. Ví dụ: Với hai bảng NHANVIEN và DONVI như ở trên, câu lệnh SELECT * FROM nhanvien FULL OUTER JOIN donvi ON nhanvien.madv=donvi.madv cho kết quả là: Một đặc điểm nổi bật của SQL2 là cho phép biểu diễn phép nối trên nhiều bảng dữ liệu một cách rõ ràng. Thứ tự thực hiện phép nối giữa các bảng được xác định theo nghĩa kết quả của phép nối này được sử dụng trong một phép nối khác. Ví dụ: Câu lệnh dưới đây hiển thị họ tên và ngày sinh của các sinh viên thuộc Khoa Công nghệ Thông tin SELECT hodem,ten,ngaysinh FROM (sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop) INNER JOIN khoa ON lop.makhoa=khoa.makhoa WHERE tenkhoa=N'Khoa công nghệ thông tin' Trong câu lệnh trên, thứ tự thực hiện phép nối giữa các bảng được chỉ định rõ ràng: phép nối giữa hai bảng sinhvien và lop được thực hiện trước và kết quả của phép nối này lại tiếp tục được nối với bảng khoa. Bài tập Câu 1: Trình bày cú pháp chung của câu lệnh truy vấn SELECT. Chỉ ra sự tương đương giữa câu lệnh SELECT và biểu thức đại số quan hệ. Câu 2: Phân biệt các phép kết nối bảng dữ liệu: các dạng Join (Inner Join, Outer Join, Cross Join). Câu 3: Trình bày về phép toán Union. Điều kiện để thực hiện được phép toán này là gì? Câu 4: Trình bày chức năng các hàm thống kê: COUNT, SUM, MAX, MIN, AVG đi kèm với GROUP BY. 54
  • 55. Chương 5. Tạo và quản lý các chỉ mục 5.1. Các kiểu chỉ mục (Indexes) CLUSTERED  Sắp xếp lại dữ liệu về mặt vật lý.  Chỉ có duy nhất một clustered trong một bảng  Yêu cầu ít nhất 120% kích thước của bảng cóthể sử dụng trong vùng tạm.  Khoảng trống vùng tạm tồn tại trong CSDL tạo chỉ mục mà chúng ta tạo chỉ mục. NON - CLUSTERED  Thứtự các dòng trong bảng không sắp xếp về mặt vật lý giống Clustered  Đây là kiểu điển hình để tạo chỉmục cho cột liên kết các cột khác. Các giá trị có thể được thay đổi thường xuyên  SQL server sử dụng mặc định khi tạo chỉ mục là non – clustered  Chúng ta cóthểtạo 249 non–clustered cho mỗi bảng 5.2. Tạo các chỉ mục Có thể sử dụng lệnh CREATE INDEX: CREATE [UNIQUE] INDEX tengọi khoá INDEX ON tên bảng ( Namefield1 [ASC/DESC],Namefield2 [ASC/DESC],....) WITH PRIMARY [ DISALLOW NULL ]/ [ IGNORE NULL ] Hoặc sử dụng Wizard: 55
  • 56. 56
  • 57. 57
  • 58. 58
  • 59. 5.3. Quản lý và gỡ bỏ các chỉ mục DROP INDEX { <drop_relational_or_xml_or_spatial_index> [ ,...n ] | <drop_backward_compatible_index> [ ,...n ] } <drop_relational_or_xml_or_spatial_index> ::= index_name ON <object> [ WITH ( <drop_clustered_index_option> [ ,...n ] ) ] <drop_backward_compatible_index> ::= [ owner_name. ] table_or_view_name.index_name <object> ::= { [ database_name. [ schema_name ] . | schema_name. ] table_or_view_name } <drop_clustered_index_option> ::= { MAXDOP = max_degree_of_parallelism 59
  • 60. | ONLINE = { ON | OFF } | MOVE TO { partition_scheme_name ( column_name ) | filegroup_name | "default" } [ FILESTREAM_ON { partition_scheme_name | filestream_filegroup_name | "default" } ] } Bài tập Câu 1: Trình bày khái niệm và vai trò của chỉ mục trong cơ sở dữ liệu. Câu 2: Khái niệm về B-Tree và tổ chức chỉ mục trong SQL Server 2000. Câu 3: Trình bày cú pháp đầy đủ của lệnh tạo chỉ mục và giải thích ý nghĩa từng tham số. 60
  • 61. Chương 6. Tạo và quản lý khung nhìn 6.1. Định nghĩa Khung nhìn là một lược đồ dữ liệu được lấy ra từ một lược đồ dữ liệu khác đã có. 6.2. Tạo các khung nhìn (Views) Câu lệnh CREATE VIEW như sau: CREATE VIEW tên_khung_nhìn[(danh_sách_tên_cột)] AS câu_lệnh_SELECT Ví dụ: Câu lệnh dưới đây tạo khung nhìn có tên DSSV từ câu lệnh SELECT truy vấn từ hai bảng SINHVIEN và LOP CREATE VIEW dssv AS SELECT masv,hodem FROM sinhvien,lop WHERE sinhvien.malop=lop.malop thựiện câu lệnh: SELECT * FROM dssv ta có được kết quả như sau: 6.3. Quản lý các khung nhìn Câu lệnh ALTER VIEW được sử dụng để định nghĩa lại khung nhìn hiện có nhưng không làm thay đổi các quyền đã được cấp phát cho người sử dụng trước đó. Câu lệnh này sử dụng tương tự như câu lệnh CREATE VIEW và có cú pháp như sau: ALTER VIEW tên_khung_nhìn [(danh_sách_tên_cột)] AS 61
  • 62. Câu_lệnh_SELECT Ví dụ: Ta định nghĩa khung nhìn như sau: CREATE VIEW viewlop AS SELECT malop,tenlop,tenkhoa FROM lop INNER JOIN khoa ON lop.makhoa=khoa.makhoa WHERE tenkhoa='Khoa Vật lý’ và có thể định nghĩa lại khung nhìn trên bằng câu lệnh: ALTER VIEW view_lop AS SELECT malop,tenlop,hedaotao FROM lop INNER JOIN khoa ON lop.makhoa=khoa.makhoa WHERE tenkhoa='Khoa Công nghệ thông tin' 6.4. Xóa các khung nhìn Khi một khung nhìn không còn sử dụng, ta có thể xoá nó ra khỏi cơ sở dữ liệu thông qua câu lệnh: DROP VIEW tên_khung_nhìn Nếu một khung nhìn bị xoá, toàn bộ những quyền đã cấp phát cho người sử dụng trên khung nhìn cũng đồng thời bị xoá. Do đó, nếu ta tạo lại khung nhìn thì phải tiến hành cấp phát lại quyền cho người sử dụng. Ví dụ: Câu lệnh dưới đây xoá khung nhìn VIEW_LOP ra khỏi cơ sở dữ liệu DROP VIEW view_lop Bài tập Câu 1: Trình bày khái niệm về view (bảng ảo). View giúp tăng tính bảo mật cho cơ sở dữ liệu như thế nào? Câu 2: Trình bày các lệnh tạo, sửa đổi và xóa view. Câu 3: Cập nhật dữ liệu thông qua view như thế nào? Câu 4: Nếu ý nghĩa của tùy chọn WITH ENCRYPTION trong cú pháp lệnh tạo view. 62
  • 63. Chương 7. Tạo và quản lý các thủ tục thường trú 7.1. Tạo các thủ tục thường trú (Stored procedures) Thủ tục lưu trữ được tạo bởi câu lệnh CREATE PROCEDURE với cú pháp như sau: CREATE PROCEDURE tên_thủ_tục [(danh_sách_tham_số)] [WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS Các_câu_lệnh_của_thủ_tục Trong đó: tên_thủ_tục Tên của thủ tục cần tạo. Tên phải tuân theo qui tắc định danh và không được vượt quá 128 ký tự. danh_sách_tham_số Các tham số của thủ tục được khai báo ngay sau tên thủ tục và nếu thủ tục có nhiều tham số thì các khai báo phân cách nhau bởi dấu phẩy. Khai báo của mỗi một tham số tối thiểu phải bao gồm hai phần: 1 • tên tham số được bắt đầu bởi dấu @. 2 • kiểu dữ liệu của tham số Ví dụ: @mamonhoc nvarchar(10) RECOMPILE Thông thường, thủ tục sẽ được phân tích, tối ưu và dịch sẵn ở lần gọi đầu tiên. Nếu tuỳ chọn WITH RECOMPILE được chỉ định, thủ tục sẽ được dịch lại mỗi khi được gọi. ENCRYPTION Thủ tục sẽ được mã hoá nếu tuỳ chọn WITH ENCRYPTION được chỉ định. Nếu thủ tục đã được mã hoá, ta không thể xem được nội dung của thủ tục. các_câu_lệnh_của_thủ_tục Tập hợp các câu lệnh sử dụng trong nội dung thủ tục. Các câu lệnh này có thể đặt trong cặp từ khoá BEGIN...END hoặc có thể không. Ví dụ 5.1: Giả sử ta cần thực hiện một chuỗi các thao tác như sau trên cơ sở dữ liệu 1 1. Bổ sung thêm môn học cơ sở dữ liệu có mã TI-005 và số đơn vị học trình là 5 vào bảng MONHOC 2 2. Lên danh sách nhập điểm thi môn cơ sở dữ liệu cho các sinh viên học lớp có mã C24102 (tức là bổ sung thêm vào bảng DIEMTHI các bản ghi với cột 63
  • 64. MAMONHOC nhận giá trị TI-005, cột MASV nhận giá trị lần lượt là mã các sinh viên học lớp có mã C24105 và các cột điểm là NULL). Nếu thực hiện yêu cầu trên thông qua các câu lệnh SQL như thông thường, ta phải thực thi hai câu lệnh như sau: INSERT INTO MONHOC VALUES('TI-005','Cơ sở dữ liệu',5) INSERT INTO DIEMTHI(MAMONHOC,MASV) SELECT ‘TI-005’,MASV FROM SINHVIEN WHERE MALOP='C24102' Thay vì phải sử dụng hai câu lệnh như trên, ta có thể định nghĩa môt thủ tục lưu trữ với các tham số vào là @mamonhoc, @tenmonhoc, @sodvht và @malop như sau: CREATE PROC sp_LenDanhSachDiem( @mamonhoc NVARCHAR(10), @tenmonhoc NVARCHAR(50), @sodvht SMALLINT, @malop NVARCHAR(10)) AS BEGIN INSERT INTO monhoc VALUES(@mamonhoc,@tenmonhoc,@sodvht) INSERT INTO diemthi(mamonhoc,masv) SELECT ‘TI-005’,MASV FROM SINHVIEN WHERE MALOP='C24102' Thay vì phải sử dụng hai câu lệnh như trên, ta có thể định nghĩa môt thủ tục lưu trữ với các tham số vào là @mamonhoc, @tenmonhoc, @sodvht và @malop như sau: CREATE PROC sp_LenDanhSachDiem( @mamonhoc NVARCHAR(10), @tenmonhoc NVARCHAR(50), @sodvht SMALLINT, @malop NVARCHAR(10)) AS BEGIN INSERT INTO monhoc 64
  • 65. VALUES(@mamonhoc,@tenmonhoc,@sodvht) INSERT INTO diemthi(mamonhoc,masv) SELECT @mamonhoc,masv FROM sinhvien WHERE malop=@malop END Khi thủ tục trên đã được tạo ra, ta có thể thực hiện được hai yêu cầu đặt ra ở trên một cách đơn giản thông qua lòi gọi thủ tục: sp_LenDanhSachDiem 'TI-005','Cơ sở dữ liệu',5,'C24102' 7.2. Thực thi các thủ tục thường trú Như đã thấy ở ví dụ ở trên, khi một thủ tục lưu trữ đã được tạo ra, ta có thể yêu cầu hệ quản trị cơ sở dữ liệu thực thi thủ tục bằng lời gọi thủ tục có dạng: tên_thủ_tục [danh_sách_các_đối_số] Số lượng các đối số cũng như thứ tự của chúng phải phù hợp với số lượng và thứ tự của các tham số khi định nghĩa thủ tục. Trong trường hợp lời gọi thủ tục được thực hiện bên trong một thủ tục khác, bên trong một trigger hay kết hợp với các câu lệnh SQL khác, ta sử dụng cú pháp như sau: EXECUTE tên_thủ_tục [danh_sách_các_đối_số] Thứ tự của các đối số được truyền cho thủ tục có thể không cần phải tuân theo thứ tự của các tham số như khi định nghĩa thủ tục nếu tất cả các đối số được viết dưới dạng: @tên_tham_số = giá_trị Ví dụ 5.2: Lời gọi thủ tục ở ví dụ trên có thể viết như sau: sp_LenDanhSachDiem @malop='C24102', @tenmonhoc='Cơ sở dữ liệu', @mamonhoc='TI-005', @sodvht=5 7.3. Xem và sửa các thủ tục thường trú Khi một thủ tục đã được tạo ra, ta có thể tiến hành định nghĩa lại thủ tục đó bằng câu lệnh ALTER PROCEDURE có cú pháp như sau: ALTER PROCEDURE tên_thủ_tục [(danh_sách_tham_số)] [WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS Các_câu_lệnh_Của_thủ_tục 65
  • 66. Câu lệnh này sử dụng tương tự như câu lệnh CREATE PROCEDURE. Việc sửa đổi lại một thủ tục đã có không làm thay đổi đến các quyền đã cấp phát trên thủ tục cũng như không tác động đến các thủ tục khác hay trigger phụ thuộc vào thủ tục này. 7.4. Tham số vào và ra (Parameters) Ngoài những tham số được truyền cho thủ tục, bên trong thủ tục còn có thể sử dụng các biến nhằm lưu giữ các giá trị tính toán được hoặc truy xuất được từ cơ sở dữ liệu. Các biến trong thủ tục được khai báo bằng từ khoá DECLARE theo cú pháp như sau: DECLARE @tên_biến kiểu_dữ_liệu Tên biến phải bắt đầu bởi ký tự @ và tuân theo qui tắc về định danh. Ví dụ dưới đây minh hoạ việc sử dụng biến trong thủ tục Ví dụ 5.3: Trong định nghĩa của thủ tục dưới đây sử dung các biến chứa các giá trị truy xuất được từ cơ sở dữ liệu. CREATE PROCEDURE sp_Vidu( @malop1 NVARCHAR(10), @malop2 NVARCHAR(10)) AS DECLARE @tenlop1 NVARCHAR(30) DECLARE @namnhaphoc1 INT DECLARE @tenlop2 NVARCHAR(30) DECLARE @namnhaphoc2 INT SELECT @tenlop1=tenlop, @namnhaphoc1=namnhaphoc FROM lop WHERE malop=@malop1 SELECT @tenlop2=tenlop, @namnhaphoc2=namnhaphoc FROM lop WHERE malop=@malop2 PRINT @tenlop1+' nhap hoc nam '+str(@namnhaphoc1) print @tenlop2+' nhap hoc nam '+str(@namnhaphoc2) IF @namnhaphoc1=@namnhaphoc2 PRINT 'Hai lớp nhập học cùng năm' ELSE PRINT 'Hai lớp nhập học khác năm' Trong các ví dụ trước, nếu đối số truyền cho thủ tục khi có lời gọi đến thủ tục là biến, những thay đổi giá trị của biền trong thủ tục sẽ không được giữ lại khi kết thúc quá trình thực hiện thủ tục. Ví dụ 5.4: Xét câu lệnh sau đây 66
  • 67. CREATE PROCEDURE sp_Conghaiso(@a INT,@b INT, @c INT) AS SELECT @c=@a+@b Nếu sau khi đã tạo thủ tục với câu lệnh trên, ta thực thi một tập các câu lệnh như sau: DECLARE @tong INT SELECT @tong=0 EXECUTE sp_Conghaiso 100,200,@tong SELECT @tong Câu lệnh “SELECT @tong” cuối cùng trong loạt các câu lệnh trên sẽ cho kết quả là: 0 Trong trường hợp cần phải giữ lại giá trị của đối số sau khi kết thúc thủ tục, ta phải khai báo tham số của thủ tục theo cú pháp như sau: @tên_tham_số kiểu_dữ_liệu OUTPUT hoặc: @tên_tham_số kiểu_dữ_liệu OUT và trong lời gọi thủ tục, sau đối số được truyền cho thủ tục, ta cũng phải chỉ định thêm từ khoá OUTPUT (hoặc OUT) Ví dụ 5.5: Ta định nghĩa lại thủ tục ở ví dụ 5.4 như sau: CREATE PROCEDURE sp_Conghaiso( @a INT, @b INT, @c INT OUTPUT) AS SELECT @c=@a+@b và thực hiện lời gọi thủ tục trong một tập các câu lệnh như sau: DECLARE @tong INT SELECT @tong=0 EXECUTE sp_Conghaiso 100,200,@tong OUTPUT SELECT @tong thì câu lệnh “SELECT @tong” sẽ cho kết quả là: 300 Tham số với giá trị mặc định Các tham số được khai báo trong thủ tục có thể nhận các giá trị mặc định. Giá trị mặc định sẽ được gán cho tham số trong trường hợp không truyền đối số cho tham số khi có lời gọi đến thủ tục. Tham số với giá trị mặc định được khai báo theo cú pháp như sau: @tên_tham_số kiểu_dữ_liệu = giá_trị_mặc_định Ví dụ 5.6: Trong câu lệnh dưới đây: CREATE PROC sp_TestDefault( 67
  • 68. @tenlop NVARCHAR(30)=NULL, @noisinh NVARCHAR(100)='Huế') AS BEGIN IF @tenlop IS NULL SELECT hodem,ten FROM sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop WHERE noisinh=@noisinh ELSE SELECT hodem,ten FROM sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop WHERE noisinh=@noisinh AND tenlop=@tenlop END thủ tục sp_TestDefault được định nghĩa với tham số @tenlop có giá trị mặc định là NULL và tham số @noisinh có giá trị mặc định là Huế. Với thủ tục được định nghĩa như trên, ta có thể thực hiện các lời gọi với các mục đích khác nhau như sau: 1 • Cho biết họ tên của các sinh viên sinh tại Huế: sp_testdefault 1 • Cho biết họ tên của các sinh viên lớp Tin K24 sinh tại Huế: sp_testdefault @tenlop='Tin K24' 1 • Cho biết họ tên của các sinh viên sinh tại Nghệ An: sp_testDefault @noisinh=N'Nghệ An' 1 • Cho biết họ tên của các sinh viên lớp Tin K26 sinh tại Đà Nẵng: sp_testdefault @tenlop='Tin K26',@noisinh='Đà Nẵng' Bài tập cuối chương Câu 1: Trình bày khái niệm về thủ tục thường trú. Câu 2: Cú pháp đầy đủ của lệnh tạo, sửa đổi và xóa thủ tục thường trú. Giải thích ý nghĩa các tham số. Câu 3: Ý nghĩa của tùy chọn WITH ENCRYPTION trong cú pháp lệnh tạo thủ tục. Câu 4: Thực thi thủ tục như thế nào? Thủ tục trong SQL Server có thể được gọi từ các ngôn ngữ lập trình ngoài không? 68
  • 69. Chương 8. Tạo và quản lý hàm người dùng định nghĩa 8.1. Các kiểu hàm người dùng định nghĩa (User-defined functions) Hàm là đối tượng cơ sở dữ liệu tương tự như thủ tục. Điểm khác biệt giữa hàm và thủ tục là hàm trả về một giá trị thông qua tên hàm còn thủ tục thì không. Điều này cho phép ta sử dụng hàm như là một thành phần của một biêu thức (chẳng hạn trong danh sách chọn của câu lệnh SELECT). Ngoài những hàm do hệ quản trị cơ sở dữ liệu cung cấp sẵn, người sử dụng có thể định nghĩa thêm các hàm nhằm phục vụ cho mục đích riêng của mình. 8.2. Tạo hàm người dùng định nghĩa Hàm được định nghĩa thông qua câu lệnh CREATE FUNCTION với cú pháp như sau: CREATE FUNCTION tên_hàm ([danh_sách_tham_số]) RETURNS (kiểu_trả_về_của_hàm) AS BEGIN các_câu_lệnh_của_hàm END Ví dụ 5.7: Câu lệnh dưới đây định nghĩa hàm tính ngày trong tuần (thứ trong tuần) của một giá trị kiểu ngày CREATE FUNCTION thu(@ngay DATETIME) RETURNS NVARCHAR(10) AS BEGIN DECLARE @st NVARCHAR(10) SELECT @st=CASE DATEPART(DW,@ngay) WHEN 1 THEN 'Chu nhật' WHEN 2 THEN 'Thứ hai' WHEN 3 THEN 'Thứ ba' WHEN 4 THEN 'Thứ tư' WHEN 5 THEN 'Thứ năm' WHEN 6 THEN 'Thứ sáu' ELSE 'Thứ bảy' END 69
  • 70. RETURN (@st) /* Trị trả về của hàm */ END Một hàm khi đã được định nghĩa có thể được sử dụng như các hàm do hệ quản trị cơ sở dữ liệu cung cấp (thông thường trước tên hàm ta phải chỉ định thêm tên của người sở hữu hàm) Ví dụ 5.8: Câu lệnh SELECT dưới đây sử dụng hàm đã được định nghĩa ở ví dụ trước: SELECT masv,hodem,ten,dbo.thu(ngaysinh),ngaysinh FROM sinhvien WHERE malop=’C24102’ có kết quả là: 8.3. Quản lý hàm người dùng định nghĩa Thay đổi cấu trúc hàm, dùng lệnh ALTER FUNCTION ALTER FUNCTION tên_hàm ([danh_sách_tham_số]) RETURNS (kiểu_trả_về_của_hàm) AS BEGIN các_câu_lệnh_của_hàm END Bài tập Câu 1: Trình bày khái niệm về hàm người dùng. Câu 2: Cú pháp đầy đủ của lệnh tạo, sửa đổi và xóa hàm người dùng. Giải thích ý nghĩa các tham số. Câu 3: Ý nghĩa của tùy chọn WITH ENCRYPTION trong cú pháp lệnh tạo hàm người dùng. Câu 4: Gọi hàm người dùng như thế nào? Hàm người dùng trong SQL Server có thể được gọi từ các ngôn ngữ lập trình ngoài không? 70