Tải bản đầy đủ (.pdf) (124 trang)

Giáo trình hệ quản trị cơ sở dữ liệu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.53 MB, 124 trang )

TRƢỜNG ĐẠI HỌC QUẢNG BÌNH
KHOA KỸ THUẬT – CÔNG NGHỆ THÔNG TIN

GIÁO TRÌNH
(Lƣu hành nội bộ)

“HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU”
(Dành cho Đại học, Cao đẳng Công nghệ thông tin)

Tác giả: ThS. Nguyễn Nƣơng Quỳnh

Năm 2015


MỤC LỤC

LỜI NÓI ĐẦU .................................................................... Error! Bookmark not defined.
Chƣơng 1 TỔNG QUAN VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU ....................................... 3
1.1. Giới thiệu ................................................................................................................... 3
1.2. Mục tiêu của hệ quản trị cơ sở dữ liệu ....................................................................... 3
1.3. Quá trình phát triển của hệ quản trị cơ sở dữ ............................................................ 4
1.4. Kiến trúc và thành phần của hệ quản trị cơ sở dữ liệu .............................................. 4
1.5. Tổng quan hệ quản trị sơ sở dữ liệu SQL Server 2000 ............................................. 5
1.6. Cài đặt và các thành phần của hệ QTCSDL .............................................................. 7
Chƣơng 2 XÂY DỰNG, QUẢN LÝ VÀ KHAI THÁC CƠ SỞ DỮ LIỆU ...................... 13
2.1. Khái niệm cơ sở dữ liệu ........................................................................................... 13
2.2. Sơ lƣợc về SQL ........................................................................................................ 13
2.5. Truy xuất dữ liệu ...................................................................................................... 30
2.7. Bổ sung, cập nhật và xoá dữ liệu ............................................................................. 60
Chƣơng 3 LẬP TRÌNH CSDL BẰNG T-SQL .................................................................. 70
3.1 Khai báo và sử dụng biến ......................................................................................... 70


3.2 Cấu trúc điều khiển ................................................................................................... 71
3.3. Thủ tục lƣu trữ (Stored procedure) .......................................................................... 73
3.4 Kiểu dữ liệu cursor.................................................................................................... 79
3.5 Hàm ngƣời dùng (User Defined Functions) ............................................................. 83
3.6 Triggers ..................................................................................................................... 88
Chƣơng 4 BẢO MẬT VÀ AN TOÀN DỮ LIỆU ........................................................... 101
4.1. Khái niệm ............................................................................................................... 101
4.2. Quản trị ngƣời dùng ............................................................................................... 101
4.3. Bảo mật trong hệ quản trị cơ sở dữ liệu ................................................................. 107
4.4. Giao tác SQL ......................................................................................................... 108
CHƢƠNG 5 LẬP TRÌNH CƠ SỞ DỮ LIỆU .................................................................. 115
5.1. Các mô hình truy cập dữ liệu ................................................................................. 115
5.2. Các Kỹ thuật lập trình cơ sở dữ liệu ...................................................................... 119
5.3. Xây dựng ứng dụng CSDL .................................................................................... 121
TÀI LIỆU THAM KHẢO ................................................................................................ 124

2


Chƣơng I
TỔNG QUAN VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
1.1. Giới thiệu
- Một cơ sở dữ liệu (DataBase) là một tập các tập tin có liên quan với nhau, đƣợc
thiết kế nhằm làm giảm thiểu sự lặp lại dữ liệu.
- Một hệ quản trị cơ sở dữ liệu (DBMS - DataBase Management System) là một hệ
thống gồm một CSDL và các thao tác trên CSDL đó, đƣợc thiết kế trên một nền tảng phần
cứng, phần mềm và với một kiến trúc nhất định.
Mục đích đầu tiên của hệ quản trị CSDL là cung cấp một môi trƣờng để tìm lại
thông tin và lƣu thông tin trong CSDL.
Ngƣời sử dụng cơ sở dữ liệu đƣợc phân thành bốn nhóm tuỳ theo cách thức họ trao

đổi với hệ thống.
• Ngƣời lập trình ứng dụng: Là nhà chuyên môn máy tính, ngƣời trao đổi với hệ
thống thông qua các lời gọi DML đƣợc nhúng trong một chƣơng trình đƣợc viết trong
một ngôn ngữ chủ - host language (Pascal, C, Cobol ...).
• Ngƣời sử dụng thành thạo: Trao đổi với hệ thống không qua viết chƣơng trình.
Thay vào đó họ đặt ra các yêu cầu của họ trong ngôn ngữ truy vấn CSDL. Mỗi câu vấn tin
nhƣ vậy đƣợc đệ trình cho bộ xử lý vấn tin, chức năng của bộ xử lý vấn tin là "dịch" các
lệnh DML thành các chỉ thị mà bộ quản trị lƣu trữ hiểu.
• Ngƣời sử dụng chuyên biệt: Là các ngƣời sử dụng thành thạo, họ viết các ứng
dụng CSDL chuyên biệt không nằm trong khung xử lý dữ liệu truyền thống.
• Ngƣời sử dụng ngây thơ: là các ngƣời sử dụng không thành thạo, họ trao đổi với
hệ thống bởi cầu dẫn một trong các chƣơng trình ứng dụng thƣờng trực đã đƣợc viết sẵn.
1.2. Mục tiêu của hệ quản trị cơ sở dữ liệu
Hệ quản trị cơ sở dữ liệu phải đảm bảo các mục tiêu sau:
- Dữ liệu sẵn dùng: dữ liệu đƣợc tổ chức sao cho mọi ngƣời dùng có thể truy cập dễ
dàng theo chức năng và nhiệm vụ của họ.
- Tính toàn vẹn dữ liệu: dữ liệu lƣu trữ trong cơ sở dữ liệu là đúng đắn và tin cậy.
- An toàn dữ liệu: chỉ những ngƣời dùng đƣợc phép mới có quyền truy cập dữ liệu.
Nếu nhiều ngƣời dùng truy cập một mục dữ liệu cùng lúc thì hệ quản trị cơ sở dữ liệu
không cho phép họ thực hiện những thay đổi gây mâu thuẫn dữ liệu.

3


- Độc lập dữ liệu: hệ quản trị cơ sở dữ liệu phải cho phép tất cả mọi ngƣời dùng
đƣợc phép lƣu trữ, cập nhật và rút trích dữ liệu hiệu quả mà không cần nắm chi tiết về cấu
trúc của cơ sở dữ liệu đƣợc biểu diễn và cài đặt.
1.3. Quá trình phát triển của hệ quản trị cơ sở dữ
Quá trình phát triển của hệ quản trị cơ sở dữ liệu nhƣ sau:
- Flat files: 1960s – 1980s

- Hierarchical: 1970s – 1990s
- Network: 1970s – 1990s
- Relational: 1980s - đến nay
- Object-oriented: 1990s - đến nay
- Object-relational: 1990s - đến nay
- Data warehousing: 1980s - đến nay
- Web-enabled: 1990s - đến nay
1.4. Kiến trúc và thành phần của hệ quản trị cơ sở dữ liệu
Kiến trúc của HQTCSDL gồm 2 thành phần chức năng:
- Bộ quản lý lƣu trữ (Storage manager)
- Bộ xử lý truy vấn (Query processor)
* Bộ quản lý lƣu trữ
Bộ quản lý lƣu trữ có nhiệm vụ lƣu trữ, rút trích và cập nhật dữ liệu vào cơ sở dữ
liệu. Bộ quản lý lƣu trữ gồm những đơn vị sau:
- Kiểm tra chứng thực và toàn vẹn: Kiểm tra ràng buộc toàn vẹn và quyền truy cập
dữ liệu của ngƣời dùng cơ sở dữ liệu.
- Quản lý giao dịch: Thành phần này đảm bảo rằng cơ sở dữ liệu luôn ở trạng thái
nhất quán. Nó quản lý việc thực thi các yêu cầu thao tác dữ liệu và đảm bảo các truy cập
dữ liệu đồng thời không dẫn đến mâu thuẫn,
- Quản lý file: quản lý việc cấp phát không gian trên đĩa. Thành phần quản lý file có
thể: tạo file, xoá file, cập nhật bản ghi trong file, lấy một bản ghi từ file.
- Quản lý vùng đệm: Có trách nhiệm chuyển dữ liệu từ đĩa lƣu trữ vào bộ nhớ chính
theo yêu cầu của chƣơng trình.
* Bộ xử lý truy vấn
Thực hiện câu truy vấn nhận đƣợc từ ngƣời dùng qua các giai đoạn: phân tích, tối ƣu
hoá câu hỏi, lập kế hoạch thực hiện và thực hiện tính toán.
SQL là gì?

4



SQL, viết tắt của Structured Query Language (ngôn ngữ truy vấn 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ệ.
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:
 Đị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.
 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.
 Đ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
 Đả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.
1.5. Tổng quan hệ quản trị sơ sở dữ liệu SQL Server 2000
SQL server là một hệ thống quản trị CSDLQH (RDBMS) nhiều ngƣời dùng kiểu
Client/Server. Đây là hệ thống cơ bản dùng lƣu trữ dữ liệu cho hầu hết các ứng dụng lớn
hiện nay.
* Ứng dụng kiểu Client/Server:
Một ứng dụng kiểu Client/Server bao gồm 2 phần: Một phần chạy trên Server(máy
chủ) và phần khác chạy trên các workstations (máy trạm).

5



- Phần Server: chứa các CSDL, cung cấp các chức năng phục vụ cho việc tổ chức và
quản lý CSDL, cho phép nhiều ngƣời sử dụng cùng truy cập dữ liệu. Điều này không chỉ
tiết kiệm mà còn thể hiện tính nhất quán về mặt dữ liệu. Tất cả dữ liệu đều đƣợc truy xuất
thông qua server, không đƣợc truy xuất trực tiếp. Do đó, có độ bảo mật cao, tính năng
chịu lỗi, chạy đồng thời, sao lƣu dự phòng…
- Phần Client (Ứng dụng khách): Là các phần mềm chạy trên máy trạm cho phép
ngƣới sử dụng giao tiếp CSDL trên Server.
SQL Server sử dụng ngôn ngữ lập trình và truy vấn CSDL Transact-SQL, một
version của Structured Query Language. Với Transact-SQL, ta có thể truy xuất dữ liệu,
cập nhật và quản lý hệ thống CSDL quan hệ.
Với mỗi Máy chủ ta chỉ có một hệ thống QTCSDL SQL Server. Nếu muốn có nhiều
hệ thống QTCSDL ta cần có nhiều máy chủ tƣơng ứng.
SQL Server có một số đặc tính sau:
- Cho phép quản trị một hệ CSDL lớn (lên đến vài tega byte), có tốc độ xử lý dữ liệu
nhanh đáp ứng yêu cầu về thời gian.
- Cho phép nhiều ngƣời cùng khai thác trong một thời điểm đối với một CSDL và
toàn bộ quản trị CSDL (lên đến vài chục ngàn user).
- Có hệ thống phân quyền bảo mật tƣơng thích với hệ thống bảo mật của công nghệ
NT (Network Technology), tích hợp với hệ thống bảo mật của Windows NT hoặc sử dụng
hệ thống bảo vệ độc lập của SQL Server.
- Hỗ trợ trong việc triển khai CSDL phân tán và phát triển ứng dụng trên Internet
- Cho phép lập trình kết nối với nhiều ngôn ngữ lập trình khác dùng xây dựng các
ứng dụng đặc thù (Visual Basic, C, C++, ASP, ASP.NET, XML,...).
- Sử dụng câu lệnh truy vấn dữ liệu Transaction-SQL (Access là SQL, Oracle là
PL/SQL).
Các phiên bản của SQL Server.
6



- Phiên bản chuẩn (Standard Edition): là phiên bản cung cấp toàn bộ chức năng và
đƣợc thiết kế nhằm chạy trên máy tính với HĐH Windows NT hoặc Windows 2000
Server.
- Phiên bản Personal Engine: Chạy trên máy đơn với HĐH Windows NT; Windows
2000 Server và cả Windows 9x. Nó hổ trợ hầu hết các tính năng của SQL Server. Do đó,
ta có thể xây dựng CSDL với phiên bản này, sau đó triển khai trên các phiên bản khác.
Ngoài ra còn các phiên bản khác chạy trên Window NT hoặc 2000 Server nhƣ :
- Enterprise Edition: dùng cho xí nghiệp
- Developer Edition : dùng cho các doanh nghiệp nhỏ
- Desktop Engine
Các phiên bản này đƣợc cài đặt phụ thuộc vào bộ cài đặt mà ta chọn hoặc lựa chọn
khi cài đặt (ví dụ phiên bản Enterprise, Standard, Personal,… phiên bản SQL Client,
Connectivity,… chọn trong các hộp thoại trong quá trình cài đặt).
1.6. Cài đặt và các thành phần của hệ QTCSDL
Mỗi CSDL có các đối tƣợng sau:
1- Tables:
Table là đối tƣợng chính của CSDL dùng lƣu trữ dữ liệu cần quản lý. Mỗi table có
một hay nhiều Field (trƣờng). Mỗi Field ứng với một loại dữ liệu cần lƣu trữ.
Table còn có các thành phần liên quan nhƣ :
a) Constraint – Ràng buộc: Constraint là các chỉ định ràng buộc dữ liệu trong bảng
hoặc các bảng khác nhau theo một quy tắc nào đó.
b) Triggers – Bẫy Lỗi: Trigger thƣờng chứa các mã lệnh kiểm tra dữ liệu, có tính
năng tự động thực hiện khi có hành động nào đó xảy ra đối với dữ liệu trong Table nhƣ
Insert, Update, Delete.
c) Indexs – Chỉ mục: Hổ trợ cho việc sắp xếp và tìm kiếm nhanh thông tin trên
table.
2- Diagram – Sơ đồ quan hệ: Thể hiện mối quan hệ dữ liệu giữa các table.
3- Views – Khung nhìn hay table ảo: Là đối tƣợng dùng hiển thị dữ liệu đƣợc rút
trích, tính toán từ các Table theo nhu cầu của ngƣời dùng.

4- Stored Procedure – Thủ tục nội: Chứa các lệnh T-SQL dùng thực hiện một số
tác vụ nào đó. Stored Proc có thể nhận và truyền tham số. Stored Proc đƣợc biên dịch
trƣớc, do đó thời gian thực hiện nhanh khi đƣợc gọi. Có nhiều Stored Proc hệ thống đƣợc
định nghĩa với tiền tố “sp_” có nhiệm vụ thu thập thông tin từ các bảng hệ thống và rất có
ích cho việc quản trị.
7


5- User Defined Function: Hàm do ngƣời dùng định nghĩa
6- Users: Chứa danh sách User sử dụng CSDL. Ngƣời quản trị hệ thống cao nhất có
User Name là dbo, tên đăng nhập (Login Name) hệ thống mặc định là sa. Tài khoản sa
luôn tồn tại và không thể bỏ đi. Để thay đổi mật khẩu của sa, cách nhanh nhất là:
Mở trình Query Analyzer
Thực hiện thủ tục hệ thống : EXEC SP_PASSWORD NULL, <NewPass>
7- Roles: Các qui định vai trò và chức năng của User trong hệ thống SQL Server
8- Rules: Các qui tắc ràng buộc dữ liệu đƣợc lƣu trữ trên Table
9- Defaults: Các khai báo giá trị mặc định
10- User Defined Data Type: Kiểu dữ liệu do ngƣời dùng tự định nghĩa
11- Full Text Catalogs: Tập phân loại dữ liệu Text.
Các CSDL hệ thống của SQL server
Sau khi cài đặt, SQL Server có 4 CSDL hệ thống và 2 CSDL ví dụ sau:
1. Master: là CSDL kiểm soát tất cả các hoạt động trên SQL Server, chứa thông tin
về hệ thống SQL Server: Các tài khoản đăng nhập, cấu hình hệ thống, thông tin về các
CSDL đã tạo, các thủ tục hệ thống thực hiện các tác vụ quản trị hệ thống, các thủ tục của
ngƣời dùng tạo thêm…
Ví dụ: khi User tạo CSDL mới, thêm hay xóa Stored Procedure, các thông tin này
đều đƣợc lƣu trữ trong CSDL master.
Chú ý: Cần Backup CSDL Master mỗi khi ta sửa đổi hệ thống.
2. Model : Chứa các template dùng làm mẫu để tạo CSDL mới. Khi ta tạo CSDL thì
SQL Server lấy tất cả các mẫu (bao gồm Tables, Views,…) từ CSDL này.

3. MSDB: dùng hổ trợ dịch vụ SQL Server Agent, bao gồm sắp xếp thông tin về các
công việc theo lịch biểu, các cảnh báo lỗi, các sự kiện, nhân bản. Lịch sử về các hoạt động
Backup đều đƣợc lƣu trong CSDL này.
Ví dụ: Khi ta tạo một lịch trình cho việc backup dữ liệu hay lịch trình để thực hiện
Stored Procedure, tất cả các tác vụ này đều lƣu trong CSDL này.
Nếu xóa CSDL này, ta phải cài đặt lại nó khi cần dùng hoặc khi hệ thống yêu cầu.
4. Tempdb: là nơi lƣu trữ các thông tin tạm thời của các hoạt động trên SQL, ví dụ
nhƣ các table tạm phục vụ cho việc sắp xếp dữ liệu. CSDL tempdb tự khởi tạo lại mỗi khi
SQL Server đƣợc khởi động lại.
5. Pubs: là CSDL mẫu về một nhà xuất bản, bao gồm các tác giả, các cuốn sách, và
thông tin về việc bán sách. Hấu hết các tính năng CSDL đều đƣợc thể hiện trong CSDL
này.
8


6. NorthWind: Là CSDL hổ
trợ cho việc học tập SQL Server
đối với những ngƣời sử dụng MS
Access.
Các công cụ của SQL
server
1. Service Manager: Các
dịch vụ của SQL Server:
Đây là trình quản lý các dịch
vụ trên SQL Server nhƣ:
- MSSQL Server: là
RDBMS, xử lý các phát biểu Transact-SQL và quản lý các file lƣu trữ các CSDL
- SQL Server Agent: dùng lập lịch thực hiện tự động các công việc nhƣ Backup dữ
liệu, Replication, …
- Microsoft Distributed Transaction Coordinator (MSDTC): Hổ trợ cho các ứng

dụng Client làm việc với các dữ liệu đƣợc phân bổ trên nhiều máy chủ.
- Combo Server: Chứa danh sách các SQL
Server có khả năng truy xuất từ máy của ta. Tuy nhiên,
ta có thể gỏ tên máy chủ cần kết nối không có trong
danh sách và click nút mũi tên trên hộp Services, Tiện
ích Services Manager sẽ cố gắng kết nối tới máy chủ ở
xa.
Combo Services: Chứa tên các dịch vụ đƣợc
cung cấp bởi SQL Server đã chọn.
Mỗi dịch vụ sẽ ở 1 trong 3 trạng thái. Một số dịch vụ không cung cấp chức năng tạm
dừng.
Ví dụ: MSSQLServer vẫn tiếp tục hoạt động khi nó tạm dừng, nhƣng các kết nối
mới thì không đƣợc phép.
2. Trình Enterprise Manager
Enterprise Manager cung cấp các chức năng phát triển và quản trị SS bằng giao diện
đồ họa. Các tính năng của EM:
Tạo, xóa, cập nhật CSDL và các đối tƣợng của nó.
Quản lý lịch trình Backup dữ liệu
Quản lý ngƣời dùng đang truy cập CSDL trên SS.
9


Tạo, xóa cập nhật quyền Login User
Định cấu hình cho Server
Tạo và quản lý tìm kiếm.

Databases: chứa các CSDL đƣợc cài đặt trên máy chủ.
Data Transform Service (DTS): Cung cấp phƣơng tiện chuyển đổi dữ liệu từ nhiều
nguồn khác nhau vào SQL Server hoặc từ SQL Server sang các nguồn khác. Nó cũng có
giao diện cho phép lập trình xây dựng những gói dịch vụ chuyển đổi dữ liệu.

Management: Cho phép ta thực hiện các tác vụ quản trị CSDL, xem nhật ký hoạt
động của Server, quản lý SQL Server Agent.
Replication: cho phép phân bổ dữ liệu và các đối tƣợng Database từ một CSDL đến
một database đến một database khác. Typically, replication is used between physically
distributed servers.
Security : chứa các chức năng điều khiển tất cả các hoạt động liên quan đến việc
bảo mật của SQL Server.
Support Services: cho phép điều khiển các dịch vụ khác có quan hệ với SQL Server
nhƣ: Distributed Transaction Coordinator, Full Text Search và SQL Mail cho phép nhận
e-mail từ SQL Server.
Metadata Services enables you to manage metadata, or data about data.
3. Công Cụ Lập Trình - Query Analyzer
(ISQLW)
Là giao diện chính để chạy các truy vấn
Transact-SQL hoặc thủ tục lƣu trữ.

10


Khi khởi động Query Analyzer sẽ xuất hiện hộp thoại Connection to SQL Server:
- Combo SQL Server: chọn tên máy chủ chứa SQL Server hoặc ta có thể nhập
“(local)” hay dấu “.” để kết nối với bản SQL Server cục bộ. Ta cũng có thể để trống tên
máy chủ, Query Analyzer sẽ hiểu và kết nối với SQL Server của ta.
- Check Box “Start SQL Server if stopped” để yêu cầu SQL Server tự khởi động,
nếu SQL Server chƣa đƣợc khởi động.
Ta cần cung cấp thông tin kết nối:
Nếu đang làm việc trên máy Windows 9x, ta chỉ có thể dùng tùy chọn “Use
SQLServer authentication” với Login Name là sa.
- Nếu đang làm việc trên máy Windows NT hay đang kết nối với SQL Server chạy
trên Windows NT, ta có thể chọn Option “Use Windows NT authentication” hay “Use

SQL Server authentication” để kết nối tùy thuộc vào cách cài đặt chế độc bảo mật của
ngƣời quản trị SQL Server.
Nếu kết nối SS thành công, sẽ hiển thị màn hình làm việc của QA.

QA cho phép thực hiện 32 kết nối riêng rẽ cùng một lúc. Mỗi kết nối có một thanh
tiêu đề nhận dạng các yếu tố sau:


Máy tính đƣợc đăng nhập



CSDL đang sử dụng



Thông tin đăng nhập



Tên File truy vấn đang mở



Số của cửa sổ đƣợc hiển thị

Query Analyzer Icons
11



Use this To do this
Mở cửa sổ truy vấn mới
Mở một file truy vấn (.sql)
Lƣu các lệnh vào file.
Mở một file truy vấn mẫu
Xóa nội dung cửa sổ
Cách hiển thị kết quả truy vấn: Result to text, result to grid, result to
file.
Kiểm tra cú pháp.
Thực hiện truy vấn.
Kết thúc truy vấn.
Hiển thị sơ đồ đánh giá tốc độ thực hiện truy vấn.
Hiện ẩn khung liệt kê các đối tƣợng CSDL (Objects Browser)
Mở hộp thoại khai báo thuộc tính kết nối.
Hiện ẩn khung chứa kết quả truy vấn
Ta có thể chọn CSDL cần truy cập từ DB Conmbo box trên thanh công cụ hoặc có
thể sử dụng lệnh: Use <database name> .
Transact-SQL Script là tập hợp các lệnh đƣợc lƣu trữ và thi hành cùng lúc. Lệnh
File\Open và File\Save cho phép mở và lƣu một truy vấn (hoặc tập hợp các truy vấn).
Theo mặc định, các Sript có phần mở rộng là “.SQL”.
- HighLight từ khóa bằng chuột và ấn Shift-F1 để mở phần trợ giúp liên quan.
- Ta có thể chạy một lệnh trong cửa sổ Query bằng cách Highlight câu lệnh bằng
chuột và sau đó cho thi hành.
4. Tiện ích mạng Client / Server Network
Cung cấp các thƣ viện nghi thức kết nối mạng (Netword-Libraries) cho phép các
máy trạm có thể truy cập CSDL trên máy Server: Named Pipes; TCP/IP; Multiprotocol;
NW Link IPX/SPX

12



Chƣơng 2
XÂY DỰNG, QUẢN LÝ VÀ KHAI THÁC CƠ SỞ DỮ LIỆU
2.1. Khái niệm cơ sở dữ liệu
Ở mức logic, một cơ sở dữ liệu gồm:
- Các bảng chứa dữ liệu có cấu trúc và các rang buộc định nghĩa trên các bảng
- Các khung nhìn
- Các thử tục/hàm
- Các vai trò (role) và ngƣời dùng
Ở mức vật lý, một cơ sở dữ liệu của SQL Server đƣợc lƣu trữ bởi 3 loại tập tin:
- Tập tin dữ liệu, gồm:
+ Một tập tin dữ liệu chính, có phần mở rộng là “.mdf”: chứa các dữ liệu khởi đầu
của cơ sở dữ liệu.
+ 0-n tập tin dữ liệu thứ cấp, có phần mở rộng là “.ndf”: chứa các dữ liệu không
lƣu trữ hết trong tập tin dữ liệu chính.
- Tập tin nhật ký giao tác gồm có 1-n tập tin nhật ký, có phần mở rộng là “.ldf”:
chứa các thong tin về nhật ký giao tác, dung để phục hồi cơ sở dữ liệu sau khi xảy ra sự
cố.
2.2. Sơ lƣợc về SQL
SQL chuẩn bao gồm khoảng 40 câu lệnh. Trong các hệ quản trị cơ sở dữ liệu khác
nhau, mặc dù các câu lệnh đều có cùng dạng và cùng mục đích sử dụng song mỗi một hệ
quản trị cơ sở dữ liệu có thể có một số thay đổi nào đó. Điều này đôi khi dẫn đến cú pháp
chi tiết của các câu lệnh có thể sẽ khác nhau trong các hệ quản trị cơ cơ sở dữ liệu khác
nhau.
Câu lệnh
Thao tác dữ liệu
SELECT
INSERT
UPDATE
DELETE

TRUNCATE
Định nghĩa dữ liệu
CREATE TABLE
DROP TABLE

Chức năng
Truy xuất dữ liệu
Bổ sung dữ liệu
Cập nhật dữ liệu
Xoá dữ liệu
Xoá toàn bộ dữ liệu trong bảng
Tạo bảng
Xoa bảng
13


ALTER TABLE

Sửa đổi bảng

CREATE VIEW
ALTER VIEW

Tạo khung nhìn
Sửa đổi khung nhìn

DROP VIEW

Xoá khung nhìn


CREATE INDEX
DROP INDEX

Tạo chỉ mục
Xoá chỉ mục

CREATE SCHEMA
DROP SCHEMA

Tạo lƣợc đồ cơ sở dữ liệu
Xoá lƣợc đồ cơ sở dữ liệu

CREATE
PROCEDURE

Tạo thủ tục lƣu trữ

ALTER
PROCEDURE
DROP
PROCEDURE
CREATE
FUNCTION
ALTER
FUNCTION
DROP FUNCTION
CREATE
TRIGGER

Sửa đổi thủ tục lƣƣ trữ

Xoá thủ tục lƣu trữ
Tạo hàm (do ngƣời sử dụng định
nghĩa)
Sửa đổi hàm
Xoá hàm
Tạo trigger
Sửa đổi trigger
Xoá trigger

ALTER TRIGGER
DROP TRIGGER
Điều khiển truy cập
GRANT
REVOKE

Cấp phát quyền cho ngƣời sử dụng
Thu hồi quyền từ ngƣời sử dụng

Quản lý giao tác
COMMIT

Uỷ thác (kết thúc thành công) giao
tác

ROLLBACK
SAVE
TRANSACTION
Lập trình
DECLARE


Quay lui giao tác
Đánh dấu một điểm trong giao tác

Khai báo biến hoặc định nghĩa con
14


trỏ
OPEN
FETCH
CLOSE

Mở một con trỏ để truy xuất kết
quả truy vấn
Đọc một dòng trong kết quả truy
vấn (sử dụng con trỏ)
Đóng một con trỏ

EXECUTE
Thực thi một câu lệnh SQL
Một số câu lệnh thông dụng trong SQL
Các câu lệnh của SQL đều đƣợc bắt đầu bởi các từ lệnh, là một từ khoá cho biết
chức năng của câu lệnh (chẳng hạn SELECT, DELETE, COMMIT). Sau từ lệnh là các
mệnh đề của câu lệnh. Mỗi một mệnh đề trong câu lệnh cũng đƣợc bắt đầu bởi một từ
khoá (chẳng hạn FROM, WHERE,...).
Ví dụ : Câu lệnh:
SELECT masv,hodem,ten
FROM sinhvien
WHERE malop=‟C24102‟
dùng để truy xuất dữ liệu trong bảng SINHVIEN đƣợc bắt đầu bởi từ lệnh SELECT,

trong câu lệnh bao gồm hai mệnh đề: mệnh đề FROM chỉ định tên của bảng cần truy xuất
dữ liệu và mệnh đề WHERE chỉ định điều kiện truy vấn dữ liệu.
2.2.1. Qui tắc sử dụng tên trong SQL
Các đối tƣợng trong cơ sở dữ liệu dựa trên SQL đƣợc xác định thông qua tên của đối
tƣợng. Tên của các đối tƣợng là duy nhất trong mỗi cơ sở dữ liệu. Tên đƣợc sử dụng
nhiều nhất trong các truy vấn SQL và đƣợc xem là nền tảng trong cơ sở dữ liệu quan hệ là
tên bảng và tên cột.
Trong các cơ sở dữ liệu lớn với nhiều ngƣời sử dụng, khi ta chỉ định tên của một
bảng nào đó trong câu lệnh SQL, hệ quản trị cơ sở dữ liệu hiểu đó là tên của bảng do ta
tạo ra. Thông thƣờng, trong các hệ quản trị cơ sở dữ liệu này cho phép những ngƣời dùng
khác nhau tạo ra những bảng trùng tên với nhau mà không gây ra xung đột về tên. Nếu
trong một câu lệnh SQL ta cần chỉ đến một bảng do một ngƣời dùng khác sở hữu thì tên
của bảng phải đƣợc viết sau tên của ngƣời sở hữu và phân cách với tên ngƣời sở hữu bởi
dấu chấm:
tên_ngƣời_sở_hữu.tên_bảng
Một số đối tƣợng cơ sở dữ liệu khác (nhƣ khung nhìn, thủ tục, hàm), việc sử dụng
tên cũng tƣơng tự nhƣ đối với bảng.
15


Ta có thể sử dụng tên cột một cách bình thƣờng trong các câu lệnh SQL bằng cảch
chỉ cần chỉ định tên của cột trong bảng. Tuy nhiên, nếu trong câu lệnh có liên quan đến
hai cột trở lên có cùng tên trong các bảng khác nhau thì bắt buộc phải chỉ định thêm tên
bảng trƣớc tên cột; tên bảng và tên cột đƣợc phân cách nhau bởi dấu chấm.
Ví dụ: Ví dụ dƣới đây minh hoạ cho ta thấy việc sử dụng tên bảng và tên cột trong
câu lệnh SQL
SELECT masv,hodem,ten,sinhvien.malop,tenlop
FROM dbo.sinhvien,dbo.lop
WHERE sinhvien.malop = lop.malop
2.2.2. Kiểu dữ liệu

Chuẩn ANSI/ISO SQL cung cấp các kiểu dữ liệu khác nhau để sử dụng trong các cơ
sở dữ liệu dựa trên SQL và trong ngôn ngữ SQL. Dựa trên cơ sở các kiểu dữ liệu do
chuẩn ANSI/ISO SQL cung cấp, các hệ quản trị cơ sở dữ liệu thƣơng mại hiện nay có thể
sử dụng các dạng dữ liệu khác nhau trong sản phẩm của mình. Bảng 1.2 dƣới đây liệt kê
một số kiểu dữ liệu thông dụng đƣợc sử dụng trong SQL.
Tên kiểu
CHAR (n)
NCHAR (n)
VARCHAR (n)
NVARCHAR (n)
INTEGER

Mô tả
Kiểu chuỗi với độ dài cố định
Kiếu chuỗi với độ dài cố định hỗ trợ UNICODE
Kiểu chuỗi với độ dài chính xác
Kiểu chuỗi với độ dài chính xác hỗ trợ UNICODE
Số nguyên có giá trị từ -231 đến 231 - 1

INT
TINYTINT
SMALLINT
BIGINT
NUMERIC (p,s)
DECIMAL (p,s)

Nhƣ kiểu Integer
Số nguyên có giá trị từ 0 đến 255.
Số nguyên có giá trị từ -215 đến 215 – 1
Số nguyên có giá trị từ -263 đến 263-1

Kiểu số với độ chính xác cố định.
Tƣơng tự kiểu Numeric

FLOAT
REAL
MONEY
BIT
DATETIME
SMALLDATETIME
TIMESTAMP

Số thực có giá trị từ -1.79E+308 đến 1.79E+308
Số thực có giá trị từ -3.40E + 38 đến 3.40E + 38
Kiểu tiền tệ
Kiểu bit (có giá trị 0 hoặc 1)
Kiểu ngày giờ (chính xác đến phần trăm của giây)
Kiểu ngày giờ (chính xác đến phút)

16


BINARY

Dữ liệu nhị phân với độ dài cố định (tối đa 8000 bytes)

VARBINARY
IMAGE

Dữ liệu nhị phân với độ dài chính xác (tối đa 8000 bytes)
Dữ liệu nhị phân với độ dài chính xác (tối đa 2,147,483,647

bytes)
Dữ liệu kiếu chuỗi với độ dài lớn (tối đa 2,147,483,647 ký tự)
Dữ liệu kiếu chuỗi với độ dài lớn và hỗ trợ UNICODE (tối đa

TEXT
NTEXT

1,073,741,823 ký tự)
Một số kiểu dữ liệu thông dụng trong SQL
Ví dụ: Câu lệnh dƣới đây định nghĩa bảng với kiểu dữ liệu đƣợc qui định cho các
cột trong bảng
CREATE TABLE NHANVIEN
(
MANV
NVARCHAR(10) NOT NULL,
HOTEN
NVARCHAR(30) NOT NULL,
GIOITINH
BIT,
NGAYSINH SMALLDATETIME,
NOISINH
NCHAR(50),
HSLUONG DECIMAL(4,2),
MADV
INT )
Giá trị NULL
Một cơ sở dữ liệu là sự phản ánh của một hệ thống trong thế giới thực, do đó các giá
trị dữ liệu tồn tại trong cơ sở dữ liệu có thể không xác định đƣợc. Một giá trị không xác
định đƣợc xuất hiện trong cơ sở dữ liệu có thể do một số nguyên nhân sau:



Giá trị đó có tồn tại nhƣng không biết.



Không xác định đƣợc giá trị đó có tồn tại hay không.



Tại một thời điểm nào đó giá trị chƣa có nhƣng rồi có thể sẽ có.


Giá trị bị lỗi do tính toán (tràn số, chia cho không,...)
Những giá trị không xác định đƣợc biểu diễn trong cơ sở dữ liệu quan hệ bởi các giá
trị NULL. Đây là giá trị đặc biệt và không nên nhầm lẫn với chuỗi rỗng (đối với dữ liệu
kiểu chuỗi) hay giá trị không (đối với giá trị kiểu số). Giá trị NULL đóng một vai trò quan
trọng trong các cơ sở dữ liệu và hầu hết các hệ quản trị cơ sở dữ liệu quan hệ hiện nay đều
hỗ trợ việc sử dụng giá trị này.
2.2.3.Một số hàm thường dùng
Mặc dù trong SQL chuẩn không cung cấp cụ thể các nhƣng trong các hệ quản trị cơ
sở dữ liệu luôn cung cấp cho ngƣời sử dụng các hàm cài sẵn. Trong phần này, tôi cung
17


cấp một số hàm thƣờng đƣợc sử dụng trong SQL Server để tiện cho việc tra cứu và sử
dụng trong thực hành
1. Các hàm trên dữ liệu kiểu chuỗi
Hàm ASCII: Hàm trả về mã ASCII của ký tự đầu tiên bên trái của chuỗi đối số
ASCII(string)
Hàm CHAR: Hàm trả về ký tự có mã ASCII tƣơng ứng với đối số

CHAR(ascii_code)
Hàm CHARINDEX: Hàm trả về vị trí đầu tiên tính từ vị trí start tại đó chuỗi
string1 xuất hiện trong chuỗi string2.
CHARINDEX(string1,string2[,start])
Hàm LEFT: Hàm trích ra number ký tự từ chuỗi string tính từ phía bên trái
LEFT(string,number)
Hàm LEN: Hàm trả về độ dài của chuỗi string.
LEN(string)
Hàm LOWER: Hàm có chức năng chuyển chuỗi string thành chữ thƣờng, kết quả
đƣợc trả về cho hàm
LOWER(string)
Hàm LTRIM: Cắt bỏ các khoảng trắng thừa bên trái chuỗi string
LTRIM(string)
Hàm NCHAR: Hàm trả về ký tự UNICODE có mã đƣợc chỉ định
NCHAR(code_number)
Hàm REPLACE: Hàm trả về một chuỗi có đƣợc bằng cách thay thế các chuỗi
string2 trong chuỗi string1 bởi chuỗi string3.
REPLACE(string1,string2,string3)
Hàm REVERSE: Hàm trả về chuỗi đảo ngƣợc của chuỗi string.
REVERSE(string)
Hàm RIGHT: Hàm trích ra number ký tự từ chuỗi string tính từ phía bên phải.
RIGHT(string, number)
Hàm RTRIM
RTRIM(string)
Cắt bỏ các khoảng trắng thừa bên phải của chuỗi string.
Hàm SPACE: Hàm trả về một chuỗi với number khoảng trắng.
SPACE(number)
Hàm STR: Chuyển giá trị kiểu số number thành chuỗi
18



STR(number [,length [,decimal]])
Hàm SUBSTRING
SUBSTRING(string, m, n)
Trích ra từ n ký tự từ chuỗi string bắt đầu từ ký tự thứ m.
Hàm UNICODE: Hàm trả về mã UNICODE của ký tự đầu tiên bên trái của chuỗi
UnicodeString.
UNICODE(UnicodeString)
Hàm UPPER: Chuyển chuỗi string thành chữ hoa
UPPER(string)
2. Các hàm trên dữ liệu kiểu ngày giờ
Hàm DATEADD: Hàm trả về một giá trị kiểu DateTime bằng cách cộng thêm một
khoảng giá trị là number vào ngày date đƣợc chỉ định.
DATEADD(datepart, number, date)
Trong đó, datepart là tham số chỉ định thành phần sẽ đƣợc cộng đối với giá trị date
bao gồm:
Datepart
year
quarter
month
dayofyear
day

Viết tắt
yy, yyyy
qq, q
mm, m
dy, y
dd, d


week
wk, ww
hour
hh
minute
mi, n
second
ss, s
millisecond
ms
Hàm DATEDIFF: Hàm trả về khoảng thời gian giữa hai giá trị kiểu này đƣợc chỉ
định tuỳ thuộc vào tham số datepart
DATEDIFF(datepart, startdate, enddate)
Hàm DATEPART: Hàm trả về một số nguyên đƣợc trích ra từ thành phần (đƣợc
chỉ định bởi tham số partdate) trong giá trị kiểu ngày đƣợc chỉ định.
DATEPART(datepart, date)
Hàm GETDATE: Hàm trả về ngày hiện tại
GETDATE()
19


Hàm DAY, MONTH, YEAR: Hàm trả về giá trị ngày (tháng hoặc năm) của giá trị
kiểu ngày đƣợc chỉ định.
DAY(date), MONTH(date), YEAR(date)
3. Hàm chuyển đổi kiểu
Hàm CAST: Chuyển đổi giá trị của biểu thức sang kiểu đƣợc chỉ định
CAST (biểu_thức AS kiểu_dữ_liệu)
Hàm CONVERT: Hàm có chức năng chuyển đổi giá trị của biểu thức sang kiểu dữ
liệu đƣợc chỉ định.
CONVERT(kiểu_dữ_liệu, biểu_thức [,kiểu_chuyển_đổi])

Tham số kiểu_chuyển_đổi là một giá trị số thƣờng đƣợc sử dụng khi chuyển đổi
giá trị kiểu ngày sang kiểu chuỗi nhằm qui định khuôn dạng dữ liệu đƣợc hiển thị và đƣợc
qui định nhƣ sau:
Năm 2 chữ số Năm 4 chữ số

Khuôn dạng dữ liệu

0 hoặc 100

mon dd yyyy hh:mi AM (PM)

1

101

mm/dd/yy

2

102

yy.mm.dd

3

103

dd/mm/yy

4


104

dd.mm.yy

5

105

dd-mm-yy

6

106

dd mon yy

7

107

Mon dd, yy

8

108

hh:mm:ss

9 hoặc 109


mon dd yyyy hh:mi:ss:mmmAM (PM)

10

110

mm-dd-yy

11

111

yy/mm/dd

12

112

Yymmdd

13 hoặc 113

dd mon yyyy hh:mm:ss:mmm(24h)

114

hh:mi:ss:mmm(24h)

14


Ví dụ: Câu lệnh dƣới đây định nghĩa bảng NHANVIEN với các trƣờng MANV (mã
nhân viên), HOTEN (họ và tên), NGAYSINH (ngày sinh), DIENTHOAI (điện thoại) và
HSLUONG (hệ số lƣơng)
20


CREATE TABLE nhanvien
(
manv

NVARCHAR(10)

NOT NULL,

hoten

NVARCHAR(50)

NOT NULL,

ngaysinh
dienthoai

DATETIME
NVARCHAR(10)

NULL,
NULL,


hsluong
)

DECIMAL(3,2)

DEFAULT (1.92)

Trong câu lệnh trên, trƣờng MANV và HOTEN của bảng NHANVIEN không đƣợc
NULL (tức là bắt buộc phải có dữ liệu), trƣờng NGAYSINH và DIENTHOAI sẽ nhận giá
trị NULL nếu ta không nhập dữ liệu cho chúng còn trƣờng HSLUONG sẽ nhận giá trị
mặc định là 1.92 nếu không đƣợc nhập dữ liệu.
Nếu ta thực hiện các câu lệnh dƣới đây sau khi thực hiện câu lệnh trên để bổ sung dữ
liệu cho bảng NHANVIEN
INSERT INTO nhanvien VALUES('NV01','Le Van A','2/4/75','886963',2.14)
INSERT INTO nhanvien(manv,hoten,hsluong) VALUES('NV02','Mai Thi B',‟1.92‟)
INSERT INTO nhanvien(manv,hoten,dienthoai,hsluong)
VALUES('NV03', 'Tran Thi C', '849290', „1.92‟)

Ta sẽ có đƣợc dữ liệu trong bảng NHANVIEN nhƣ sau:
2.4.1. Các ràng buộc
a. Ràng buộc CHECK
Ràng buộc CHECK đƣợc sử dụng nhằm chỉ định điều kiện hợp lệ đối với dữ liệu.
Mỗi khi có sự thay đổi dữ liệu trên bảng, những ràng buộc này sẽ đƣợc sử dụng nhằm
kiểm tra xem dữ liệu mới có hợp lệ hay không.
Ràng buộc CHECK đƣợc khai báo theo cú pháp nhƣ sau:
[CONSTRAINT tên_ràng_buộc]
CHECK (điều_kiện)
Trong đó, điều_kiện là một biểu thức logic tác động lên cột nhằm qui định giá trị
hoặc khuôn dạng dữ liệu đƣợc cho phép. Trên mỗi một bảng cũng nhƣ trên mỗi một cột
có thể có nhiều ràng buộc CHECK.


21


Ví dụ: Câu lệnh dƣới đây tạo bảng DIEMTOTNGHIEP trong đó qui định giá trị của
cột DIEMVAN và DIEMTOAN phải lớn hơn hoặc bằng 0 và nhỏ hơn hoặc bằng 10.
CREATE TABLE diemtotnghiep
(hoten NVARCHAR(30) NOT NULL,
ngaysinh
diemvan

DATETIME,
DECIMAL(4,2)

CONSTRAINT chk_diemvan CHECK(diemvan>=0 AND diemvan<=10),
diemtoan
DECIMAL(4,2)
CONSTRAINT chk_diemtoan CHECK(diemtoan>=0 AND diemtoan<=10),)
Nhƣ vậy, với định nghĩa nhƣ trên của bảng DIEMTOTNGHIEP, các câu lệnh dƣới
đây là hợp lệ:
INSERT INTO diemtotnghiep(hoten,diemvan,diemtoan)
VALUES('Le Thanh Hoang',9.5,2.5)
INSERT INTO diemtotnghiep(hoten,diemvan)
VALUES('Hoang Thi Mai',2.5)
còn câu lệnh dƣới đây là không hợp lệ:
INSERT INTO diemtotnghiep(hoten,diemvan,diemtoan)
VALUES('Tran Van Hanh',6,10.5)
do cột DIEMTOAN nhận giá trị 10.5 không thoả mãn điều kiện của ràng buộc
Trong ví dụ trên, các ràng buôc đƣợc chỉ định ở phần khai báo của mỗi cột. Thay vì
chỉ định ràng buộc trên mỗi cột, ta có thể chỉ định các ràng buộc ở mức bảng bằng cách

khai báo các ràng buộc sau khi đã khai báo xong các cột trong bảng.
Ví dụ: Câu lệnh
CREATE TABLE lop
(malop NVARCHAR(10) NOT NULL ,
tenlop NVARCHAR(30) NOT NULL ,
khoa
SMALLINT
NULL ,
hedaotao
NVARCHAR(25) NULL
CONSTRAINT chk_lop_hedaotao CHECK (hedaotao IN ('CQ','TC')),
namnhaphoc INT
NULL
CONSTRAINT chk_lop_namnhaphoc
CHECK (namnhaphoc<=YEAR(GETDATE())),
makhoa
NVARCHAR(5) )
có thể đƣợc viết lại nhƣ sau:
22


CREATE TABLE lop
(malop
tenlop

NVARCHAR(10) NOT NULL ,
NVARCHAR(30) NOT NULL ,

khoa


SMALLINT

NULL ,

hedaotao
NVARCHAR(25) NULL,
namnhaphoc INT
NULL ,
makhoa
NVARCHAR(5),
CONSTRAINT chk_lop CHECK

(namnhaphoc<=YEAR(GETDATE())

AND hedaotao IN ('chính quy','tại chức')))
b. Ràng buộc PRIMARY KEY
Ràng buộc PRIMARY KEY đƣợc sử dụng để định nghĩa khoá chính của bảng. Khoá
chính của một bảng là một hoặc một tập nhiều cột mà giá trị của chúng là duy nhất trong
bảng. Hay nói cách khác, giá trị của khoá chính sẽ giúp cho ta xác định đƣợc duy nhất
một dòng (bản ghi) trong bảng dữ liệu. Mỗi một bảng chỉ có thể có duy nhất một khoá
chính và bản thân khoá chính không chấp nhận giá trị NULL. Ràng buộc PRIMARY
KEY là cơ sở cho việc đảm bảo tính toàn vẹn thực thể cũng nhƣ toàn vẹn tham chiếu.
Để khai báo một ràng buộc PRIMARY KEY, ta sử dụng cú pháp nhƣ sau:
[CONSTRAINT tên_ràng_buộc]
PRIMARY KEY [(danh_sách_cột)]
Nếu khoá chính của bảng chỉ bao gồm đúng một cột và ràng buộc PRIMARY KEY
đƣợc chỉ định ở mức cột, ta không cần thiết phải chỉ định danh sách cột sau từ khoá
PRIMARY KEY. Tuy nhiên, nếu việc khai báo khoá chính đƣợc tiến hành ở mức bảng
(sử dụng khi số lƣợng các cột tham gia vào khoá là từ hai trở lên) thì bắt buộc phải chỉ
định danh sách cột ngay sau từ khóa PRIMARY KEY và tên các cột đƣợc phân cách nhau

bởi dấu phẩy. Một khoá chính có thể bao gồm nhiều cột nhƣng không vƣợt quá 16 cột.
Ví dụ: Câu lệnh dƣới đây định nghĩa bảng SINHVIEN với khoá chính là MASV
CREATE TABLE sinhvien
(masv NVARCHAR(10)
CONSTRAINT pk_sinhvien_masv PRIMARY KEY,
hodem NVARCHAR(25) NOT NULL ,
ten
NVARCHAR(10) NOT NULL ,
ngaysinh
DATETIME,
gioitinh
BIT,
noisinh NVARCHAR(255),
23


malop NVARCHAR(10) )
Với bảng vừa đƣợc tạo bởi câu lệnh ở trên, nếu ta thực hiện câu lệnh:
INSERT INTO sinhvien(masv,hodem,ten,gioitinh,malop)
VALUES('0261010001','Lê Hoàng Phƣơng','Anh',0,'C26101')
một bản ghi mới sẽ đƣợc bổ sung vào bảng này. Nhƣng nếu ta thực hiện tiếp câu
lệnh:
INSERT INTO sinhvien(masv,hodem,ten,gioitinh,malop)
VALUES('0261010001','Lê Huy','Đan',1,'C26101')
thì câu lệnh này sẽ bị lỗi do trùng giá trị khoá với bản ghi đã có.
Ví dụ: Câu lệnh dƣới đây tạo bảng DIEMTHI với khoá chính là tập bao gồm hai cột
MAMONHOC và MASV
CREATE TABLE diemthi
(mamonhoc NVARCHAR(10) NOT NULL ,
masv NVARCHAR(10) NOT NULL ,

diemlan1
NUMERIC(4, 2),
diemlan2
NUMERIC(4, 2),
CONSTRAINT pk_diemthi PRIMARY KEY(mamonhoc,masv))
c. Ràng buộc UNIQUE
Trên một bảng chỉ có thể có nhiều nhất một khóa chính nhƣng có thể có nhiều cột
hoặc tập các cột có tính chất nhƣ khoá chính, tức là giá trị của chúng là duy nhất trong
bảng. Tập một hoặc nhiều cột có giá trị duy nhất và không đƣợc chọn làm khoá chính
đƣợc gọi là khoá phụ (khoá dự tuyển) của bảng. Nhƣ vậy, một bảng chỉ có nhiều nhất một
khoá chính nhƣng có thể có nhiều khoá phụ.
Ràng buộc UNIQUE đƣợc sử dụng trong câu lệnh CREATE TABLE để định nghĩa
khoá phụ cho bảng và đƣợc khai báo theo cú pháp sau đây:
[CONSTRAINT tên_ràng_buộc]
UNIQUE [(danh_sách_cột)]
Ví dụ: Giả sử ta cần định nghĩa bảng LOP với khoá chính là cột MALOP nhƣng
đồng thời lại không cho phép các lớp khác nhau đƣợc trùng tên lớp với nhau, ta sử dụng
câu lệnh nhƣ sau:
CREATE TABLE lop
(malop NVARCHAR(10) NOT NULL,
tenlop NVARCHAR(30) NOT NULL,
khoa
SMALLINT
NULL,
24


hedaotao

NVARCHAR(25) NULL,


namnhaphoc INT
NULL,
makhoa
NVARCHAR(5),
CONSTRAINT pk_lop PRIMARY KEY (malop),
CONSTRAINT unique_lop_tenlop UNIQUE(tenlop))
d. Ràng buộc FOREIGN KEY
Các bảng trong một cơ sở dữ liệu có mối quan hệ với nhau. Những mối quan hệ này
biểu diễn cho sự quan hệ giữa các đối tƣợng trong thế giới thực. Về mặt dữ liệu, những
mối quan hệ đƣợc đảm bảo thông qua việc đòi hỏi sự có mặt của một giá trị dữ liệu trong
bảng này phải phụ thuộc vào sự tồn tại của giá trị dữ liệu đó ở trong một bảng khác.
Ràng buộc FOREIGN KEY đƣợc sử dụng trong định nghĩa bảng dữ liệu nhằm tạo
nên mối quan hệ giữa các bảng trong một cơ sở dữ liệu. Một hay một tập các cột trong
một bảng đƣợc gọi là khoá ngoại, tức là có ràng buộc FOREIGN KEY, nếu giá trị của nó
đƣợc xác định từ khoá chính (PRIMARY KEY) hoặc khoá phụ (UNIQUE) của một bảng
dữ liệu khác.
Hình dƣới đây cho ta thấy đƣợc mối quan hệ giữa 3 bảng DIEMTHI, SINHVIEN và
MONHOC. Trong bảng DIEMTHI, MASV là khoá ngoài tham chiếu đến cột MASV của
bảng SINHVIEN và MAMONHOC là khoá ngoài tham chiếu đến cột MAMONHOC của
bảng MONHOC.
Với mối quan hệ đƣợc tạo ra nhƣ hình trên, hệ quản trị cơ sở dữ liệu sẽ kiểm tra tính
hợp lệ của mỗi bản ghi trong bảng DIEMTHI mỗi khi đƣợc bổ sung hay cập nhật. Một
bản ghi bất kỳ trong bảng DIEMTHI chỉ hợp lệ (đảm bảo ràng buộc FOREIGN KEY) nếu
giá trị của cột MASV phải tồn tại trong một bản ghi nào đó của bảng SINHVIEN và giá
trị của cột MAMONHOC phải tồn tại trong một bản ghi nào đó của bảng MONHOC.
Ràng buộc FOREIGN KEY đƣợc định nghĩa theo cú pháp dƣới đây:
[CONSTRAINT tên_ràng_buộc]
FOREIGN KEY [(danh_sách_cột)]
REFERENCES tên_bảng_tham_chiếu(danh_sách_cột_tham_chiếu)

[ON DELETE CASCADE | NO ACTION | SET NULL | SET DEFAULT]
[ON UPDATE CASCADE | NO ACTION | SET NULL | SET DEFAULT]
Việc định nghĩa một ràng buộc FOREIGN KEY bao gồm các yếu tố sau:
 Tên cột hoặc danh sách cột của bảng đƣợc định nghĩa tham gia vào khoá ngoài.
 Tên của bảng đƣợc tham chiếu bởi khoá ngoài và danh sách các cột đƣợc tham
chiếu đến trong bảng tham chiếu.
25


×