0
TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT
ĐẶNG HỮU NGHỊ
HOÀNG KIM BẢNG
BÙI THỊ VÂN ANH
BÀI GIẢNG
HỆ QUẢN TRỊ
CƠ SỞ DỮ LIỆU
HÀ NỘI - 2011
1
MỤC LỤC
MỤC LỤC 0
Chương I : Những khái niệm cơ bản về cơ sở dữ liệu 4
I. Cơ sở dữ liệu là gì? 4
1. Hệ quản trị cơ sở dữ liệu 4
2. Bản ghi và trường 4
II. Thiết kế cơ sở dữ liệu. 4
1. Các mối quan hệ 6
2. Sử dụng tính toàn vẹn tham chiếu để duy trì tính nhất quán 6
3. Chuẩn hoá 7
Chương 2 : Giới thiệu về SQL Server 2005 10
I. SQL Server 2005 10
II. Bắt đầu với SQL Server Management Studio Express 11
Chương 3: Một số thao tác cơ bản trên SQL Server 2005 Express Edition 17
1. Tạo một CSDL mới 17
2. Tạo bảng mới 18
3. Thay đổi cấu trúc của bảng 25
4. Lược đồ CSDL 26
5. Nhập dữ liệu cho bảng 31
6. Xóa bảng, xóa CSDL 31
7. Mở một query editor để viết câu lệnh SQL 31
Chương 4: Các câu lệnh SQL cơ bản 35
I. Giới thiệu sơ lược về Transact SQL (T-SQL). 35
II. Ngôn ngữ thao tác dữ liệu 35
1. Câu lệnh Select 35
2. Truy vấn dữ liệu từ nhiều bảng 45
3. Thêm dữ liệu vào bảng 48
4. Cập nhật dữ liệu 50
5. Xóa dữ liệu 50
III. Ngôn ngữ định nghĩa dữ liệu 51
1. Tạo bảng 51
2. Sửa đổi định nghĩa bảng 53
3. Xóa bảng 54
4. Khung nhìn - VIEW 54
Chương 5: Một số hàm trong SQL Server 58
I. Các hàm trên dữ liệu kiểu số 58
1. Hàm ABS 58
2. Hàm CEILING 58
3. Hàm FLOOR 58
2
4. Hàm ROUND 58
5. Hàm SQUARE 58
6. Hàm SQRT 58
7. Hàm isNumeric: 58
II. Nhóm hàm thống kê 58
1. Hàm COUNT: 58
2. Hàm MAX: 58
3. Hàm MIN: 58
4. Hàm SUM: 58
5. Hàm AVG: 58
II. Nhóm hàm xử lý chuỗi kí tự 59
1. Hàm LEFT 59
2. Hàm RIGHT 59
3. Hàm LEN 59
4. Hàm LTRIM 59
5. Hàm RTRIM 59
6. Hàm LOWER 59
7. Hàm UPPER 59
8. Hàm SUBSTRING 59
9. Hàm Replace 59
10. Hàm STR 59
III. Nhóm hàm ngày tháng. 60
1. Hàm GETDATE: 60
2. Hàm DATEPART 60
3. Hàm DAY( ): 60
4. Hàm MONTH( ): 60
5. Hàm YEAR( ): 60
6. DATEADD 61
7. DATEDIFF 61
IV. Hàm CAST và CONVERT 61
Chương 6: Thủ tục lưu trữ, hàm và trigger 63
I. Thủ tục lưu trữ (Stored Procedure) 63
1. Tạo thủ tục lưu trữ bằng Lệnh CREATE 63
2. Biến trong thủ tục lưu trữ 64
3. Giá trị trả về trong thủ tục lưu trữ 65
4. Các lệnh điều khiển 66
5. Thay đổi thủ tục lưu trữ 69
6. Xóa thủ tục lưu trữ 69
II. Hàm do người dùng định nghĩa (User Defined Function-UDF) 69
1. Hàm Scalar 69
3
2. Hàm Inline Table-Valued 70
3. Hàm Multi-Statement Table-Valued 70
III. Trigger 71
1. Tạo các Trigger 73
2. Trigger cho hành động thêm bản ghi 74
3. Trigger cho hành động cập nhật bản ghi 76
4. Trigger cho hành động xóa bản ghi 76
Chương 7: SQL Server và lập trình ứng dụng 78
I. Mô hình kết nối ứng dụng đến SQL server 78
1. Mô hình ADO 78
2. Mô hình ADO.NET 79
3. Khác biệt giữa ADO và ADO.NET 80
II. Truy cập dữ liệu với VB 6 và ADO 81
1. ADO 81
2. VÍ DỤ 86
III. Truy cập dữ liệu với VB.NET và ADO.NET 92
1. ADO.NET 92
PHỤ LỤC 106
4
Chương I : Những khái niệm cơ bản về cơ sở dữ liệu
I. Cơ sở dữ liệu là gì?
Cơ sở dữ liệu là một kho chứa thông tin. Có nhiều loại cơ sở dữ liệu, nhưng
ta chỉ đề cập đến cơ sở dữ liệu quan hệ, là kiểu cơ sở dữ liệu phổ biến nhất hiện nay.
Một cơ sở dữ liệu quan hệ:
Chứa dữ liệu trong các bảng, được cấu tạo bởi các dòng còn gọi là các bản
ghi, và cột gọi là các trường.
Cho phép lấy về (hay truy vấn) các tập hợp dữ liệu con từ các bảng.
Cho phép liên kết các bảng với nhau cho mục đích truy cập các bản ghi
liên quan với nhau chứa trong các bảng khác nhau.
1. Hệ quản trị cơ sở dữ liệu.
Hệ quản trị cơ sở dữ liệu (Database Management System - DBMS): Là một
hệ thống phần mềm cho phép tạo lập cơ sở dữ liệu và điều khiển mọi truy nhập đối
với cơ sở dữ liệu đó.
Trên thị trường phần mềm hiện nay ở Việt Nam đã xuất hiện khá nhiều phần
mềm hệ quản trị cơ sở dữ liệu như: Microsoft Access, Foxpro, DB2, SQL Server,
Oracle,.v.v…
- Hệ quản trị cơ sở dữ liệu quan hệ (Relation Database Management System
- RDBMS) là một hệ quản trị cơ sở dữ liệu theo mô hình quan hệ.
2. Bản ghi và trường
Các cơ sở dữ liệu được cấu tạo từ các bảng dùng thể hiện các phân nhóm dữ
liệu. Ví dụ, nếu ta tạo một cơ sở dữ liệu để quản lý tài khoản trong công việc kinh
doanh ta phải tạo một bảng cho khách hàng, một bảng cho Hoá đơn và một bảng
cho nhân viên. Bảng có cấu trúc định nghĩa sẵn và chứa dữ liệu phù hợp với cấu
trúc này.
Bảng: Chứa các bản ghi tin là các mẩu riêng rẽ bên trong phân nhóm dữ liệu.
Bản ghi: Chứa các trường. Mỗi trường thể hiện một bộ phận dữ liệu trong
một bản ghi. Ví dụ như mỗi bản ghi thể hiện một mục trong danh bạ địa chỉ chứa
trong trường Họ và tên, địa chỉ, và số điện thoại.
II. Thiết kế cơ sở dữ liệu.
Để tạo một cơ sở dữ liệu, trước hết ta phải xác định thông tin gì cần theo dõi.
5
Sau đó, ta thiết kế cơ sở dữ liệu, tạo bảng chứa các trường định nghĩa kiểu dữ liệu
sẽ có. Sau khi tạo ra cấu trúc cơ sở dữ liệu, tạo bảng chứa các trường định nghĩa
kiểu dữ liệu sẽ có. Sau khi tạo ra cấu trúc cơ sở dữ liệu, cơ sở dữ liệu có thể chứa dữ
liệu dưới dạng bản ghi. Ta không thể đưa dữ liệu vào mà không có bảng hay định
nghĩa trường vì dữ liệu sẽ không có chỗ để chứa.Do đó, thiết kế cơ sở dữ liệu cực
kỳ quan trọng, nhất là rất khó thay đổi thiết kế một khi ta đã tạo xong nó.
Ví dụ ta tạo một bảng sau:
Bảng khách hàng Bảng tblRegion
tblCustomer TblRegion
CustomerID State
FirstName RegionName
LastName
Company
Address
City
State
Zip
Phone
Fax
Email
Có quan hệ giữa 2 bảng thông qua trường State . Đây là mối quan hệ một -
nhiều, đối với một bản ghi trong tblRegion, có thể không có, hoặc có nhiều bản ghi
tương ứng trong bảng tblCustomer.
Cụm từ “tbl” thể hiện tên bảng, tên trường hiển thị đầy đủ, không chứa
khoảng trắng hay những ký tự đặc biệt khác như dấu gạch dưới.
Bảng hoá đơn:
TblOrder
ID
CustomerID
OrderDate
ItemID
Amount
Khóa chính: là kiểu chỉ mục đặc biệt. Một trường được chỉ ra như là khóa
chính của một bảng phục vụ cho việc xác định duy nhất bản ghi. Vì vậy không như
các kiểu chỉ mục khác, sẽ không có hai bản ghi trong cùng một bảng mà có cùng giá
trị cho trường khóa chính. Khi thiết kế một trường làm khóa chính, không có bản
ghi nào chứa giá trị rỗng (giá trị NULL) ở trường này. Khi chỉ ra một trường là
khóa chính của bảng ta có thể tạo mối quan hệ giữa bảng này với một bảng khác
trong CSDL.
6
1. Các mối quan hệ
Mối quan hệ là một cách đinh nghĩa chính thức hai bảng liên hệ với nhau
như thế nào . Khi ta định nghĩa một mối quan hệ, ta đã thông báo với bộ máy cơ sở
dữ liệu rằng hai trường trong hai bảng liên quan được nối với nhau.
Hai trường liên quan với nhau trong một mối quan hệ là khoá chính và khoá
ngoại. Khoá ngoại là khoá trong bảng liên quan chứa bản sao của khoá chính của
bảng chính.
Sau đó mối quan hệ báo cho bộ máy cơ sở dữ liệu hai bảng liên quan với
nhau trong mối quan hệ và khoá ngoại nào liên quan với khoá chính nào.
Ngoài việc ghép các bản ghi liên quan trong các bảng riêng biết, ta còn định
nghĩa mối quan hệ để tận dụng thế mạnh của tính toàn vẹn tham chiếu, một thuộc
tính của bộ máy cơ sở dữ liệu duy trì các dữ liệu trong một cơ sở dữ liệu nhiều bảng
luôn luôn nhất quán. Khi tính toàn vẹn tham chiếu tồn tại trong một cơ sở dữ liệu,
bộ máy cơ sở dữ liệu sẽ ngăn cản ta xoá một bản ghi khi có các bản ghi khác tham
chiếu đến nó trong cơ sở dữ liệu.
Sau khi đã định nghĩa một mối quan hệ trong cơ sở dữ liệu, việc định nghĩa
mối quan hệ này sẽ được lưu trữ cho đến khi ta xóa nó.
2. Sử dụng tính toàn vẹn tham chiếu để duy trì tính nhất quán
Khi các bảng nối kết với nhau thông qua mối quan hệ, dữ liệu trong mỗi
bảng phải duy trì sự nhất quán trong các bảng liên kết. Tính toàn vẹn tham chiếu
quản lý công việc này bằng cách theo dõi mối liên hệ giữa các bảng và ngăn cấm
các kiểu thao tác nào đó trên các bản ghi.
Ví dụ, giả định rằng ta có một bảng gọi là tblCustomer và một bảng khác là
tblOrder. Hai bảng này quan hệ với nhau qua trường chung là CustomerID.
Giả thiết ở đây là ta tạo các khách hàng chứa trong tblCustomer rồi tạo các
hoá đơn trong tblOrder. Nhưng điều gì sẽ xảy ra nếu ta tiến hành xoá một khách
hàng có hoá đơn chưa xử lý chứa trong bàng hoá đơn? Hoặc là nếu ta tạo một hoá
đơn mà không có một CustomerID hợp lệ gắn liền với nó? Mục hoá đơn không có
CustomerID thì không thể gửi đi, bởi vì địa chỉ gửi là một trường của mẩu tin trong
tblCustomer. Khi dữ liệu trong các bảng quan hệ gặp phải rắc rối này, ta nói nó ở
trọng thái không nhất quán.
Một điểu rất quan trọng là cơ sở dữ liệu không được trở nên không nhất
quán, bộ máy cơ sở dữ liệu cung cấp một cách để ta định nghĩa mối quan hệ trong
các bảng. Khi ta định nghĩa một mối quan hệ chính thức giữa hai bảng bộ máy cơ sở
dữ liệu sẽ giám sát mối quan hệ này và ngăn cấm bất kỳ thao tác nào vi phạm tính
toàn vẹn tham chiếu. Hoạt động của cơ chế toàn vẹn tham chiếu là phát sinh ra lỗi
7
mỗi khi ta thi hành một hành động nào đó làm cho dữ liệu rơi vào trạng thái không
nhất quán. Ví dụ, trong cơ sở dữ liệu có tính toàn vẹn tham chiếu đang hoạt động,
nếu ta cố tạo một hoá đơn chứa một CustomerID của khách hàng đối với một khách
hàng không tồn tại, ta sẽ nhận một thông báo lỗi và hoá đơn sẽ không thể tạo ra.
3. Chuẩn hoá
Chuẩn hoá là một khái niệm liên quan đến mối quan hệ. Về cơ bản, nguyên
tắc của chuẩn hoá phát biểu rằng các bảng cơ sở dữ liệu sẽ loại trừ tính không nhất
quán và giảm thiểu sự kém hiệu quả.
Các cơ sở dữ liệu được mô tả là không nhất quán khi dữ liệu trong một bảng
không tương ứng với dữ liệu nhập vào trong bảng khác. Ví dụ, Nếu phân nửa số
người nghĩ rằng Arkansr ở miền Trung Tây và một nửa nghĩ rằng nó nằm ở phía
Nam và nếu cả hai nhóm nhân viên nhập liệu theo ý kiến riêng của họ, khi ấy báo
cáo cơ sở dữ liệu trình bày những việc xảy ra ở miền Trung Tây là vô nghĩa.
Một cơ sở dữ liệu kém hiệu quả không cho phép ta trích ra các dữ liệu chính
xác mà ta muốn. Một cơ sở dữ liệu chứa toàn bộ dữ liệu trong một bảng có thể buộc
ta phải vất vả duyệt qua một lượng lớn tên các khách hàng, địa chỉ và lịch sử liên hệ
chỉ để lấy về 1 số điện thoại của một khách hàng nào đó. Mặt khác, một cơ sở dữ
liệu được chuẩn hoá đầy đủ chứa từng mẩu thông tin của cơ sở dữ liệu trong bảng
riêng và xa hơn, các định từng mẩu thông tin duy nhất thông qua khoá chính của nó.
Các cơ sở dữ liệu chuẩn hoá cho phép ta tham chiếu đến một mẩu thông tin
trong một bảng bất kỳ chỉ bằng khoá chính của thông tin đó.
Ta quyết định cách thức chuẩn hoá của một cơ sở dữ liệu khi ta thết kế và
khởi tạo một cơ sở dữ liệu. Thông thường, mọi thứ về ứng dụng cơ sở dữ liệu - từ
thiết kế bảng cho đến thiết kế truy vấn, từ giao diện người sử dụng đến cách hoạt
động của báo cáo - đều xuất phát từ cách chuẩn hoá cơ sở dữ liệu.
Là một lập trình viên cơ sở dữ liệu, thỉnh thoảng bạn sẽ chợt nảy ra ý nghĩ
về cơ sở dữ liệu vẫn chưa được chuẩn hoá vì lý do này hay lý do khác. Sự thiếu
chuẩn hoá có thể do chủ ý, hoặc có thể là do kết quả của sự thiếu kinh nghiệm hoặc
sự khộng thận trọng trong việc thiết kế cơ sở dữ liệu ban đầu. Dù ở mức độ nào, nếu
đã chọn chuẩn hoá một cơ sở dữ liệu đã tồn tại, ta nên thực hiện sớm (bởi vì mọi
thứ khác thực hiện trong cơ sở dữ liệu đều phụ thuộc vào cấu trúc bảng của cơ sở
dữ liệu). Hơn nữa, ta sẽ thấy những câu truy vấn hành động là công cụ rất hữu ích
trong việc sắp xếp lại một cơ sở dữ liệu thiết kế thiếu sót. Truy vẫn là hành động
cho phép ta đi chuyển các trường từ bảng này sang bảng khác như là thêm, cập nhật
và xoá bản ghi từ các bảng dựa trên các tiêu chỉ nêu ra.
8
a. Quan hệ Một - Một
Là loại quan hệ dễ hiểu và dễ thực hiện nhất, bởi vì trong những mối quan hệ
như vậy, một bảng sẽ lấy vị trí của một trường trong một bảng khác, trường liên
quan cũng dễ nhận dạng. Tuy nhiên, quan hệ một - một không phải là mối quan hệ
thông dụng nhất trong ứng dụng cơ sở dữ liệu. Do 2 nguyên nhân:
1. Hầu như ta không cần biểu diễn mối quan hệ một một với hai bảng. Ta có thể
dùng nó để cải tiến khả năng hoạt động, ví dụ ta mất tính linh hoạt khi chứa
các dữ liệu liên hệ trong một bảng tách biệt. Trong ví dụ trước, thay vì có các
bảng nhân viên và công việc chứa trong bảng nhân viên.
2. Thể hiện quan hệ một - nhiều thì cũng khá dễ (nhưng linh hoạt hơn nhiều)
quan hệ một - một.
b. Quan hệ một - nhiều
Phổ biến hơn quan hệ một - một, trong đó, mối bản ghi trong một bàng này
không có, hoặc có một, hoặc nhiều bản ghi trong một bảng liên hệ.
Ví dụ, ta gán từng khách hàng cho một người bán hàng. Để thực hiện điều
này, ta cần một bảng cho người bán hàng :
Bởi vì một người bán hàng có trách nhiệm với nhiều khách hàng, ta có thể
nói đã có mối quan hệ một - nhiều giữa người bán hàng và khách hàng.
Để thực hiện mối quan hệ này trong thiết kế cơ sở dữ liệu, ta phải copy khoá
chính của phía một đến bảng chứa phía nhiều trong quan hệ.
c. Quan hệ nhiều nhiều
Quan hệ nhiều - nhiều là bước phát triển của quan hệ một - nhiều ví dụ cổ
điển của quan hệ nhiều nhiều là học sinh và lớp. Mỗi học sinh có nhiều lớp, mỗi lớp
có nhiều học sinh.
Để thiết lập quan hệ nhiều nhiều, ta có thể sửa lại ví dụ trước sao cho cơ sở
dữ liệu có thể chứa nhiều người bán cho một người mua. Mỗi người bán có nhiều
khách hàng, và mỗi khách hàng có nhiều người bán.
9
Bài Tập
1. Nêu các đặc trưng chính của Khóa chính (primary key)
2. Khóa ngoại (foreign key) là gì
3. Mục đích của việc thiết kế CSDL quan hệ là gì?
.
10
Chương 2 : Giới thiệu về SQL Server 2005
I. SQL Server 2005
SQL Server 2005 là một hệ thống quản l. cơ sở dữ liệu (Relational Database
Management System (RDBMS)) sử dụng Transact-SQL để trao đổi dữ liệu giữa
Client computer và SQL Server computer. Một RDBMS bao gồm databases,
database engine và các ứng dụng dùng để quản trị dữ liệu và các bộ phận khác nhau
trong RDBMS.
SQL Server 2005 được tối ưu để có thể chạy trên môi trường cơ sở dữ liệu
rất lớn (Very Large Database Environment) lên đến Tera-Byte và có thể phục vụ
cùng lúc cho hàng ngàn user. SQL Server 2005 có thể kết hợp "ăn ." với các server
khác như Microsoft Internet Information Server (IIS), E-Commerce Server, Proxy
Server Các phiên bản của SQL Server 2005:
• SQL Server 2005 Express Edition
• SQL Server 2005 Enterprise Edition
• SQL Server 2005 Standard Edition
• SQL Server 2005 Workgroup Edition
• SQL Server 2005 Developer Edition
• SQL Server 2005 Mobile Edition
Enterprise: Hỗ trợ không giới hạn số lượng CPU và kích thước Database. Hỗ
trợ không
giới hạn RAM (nhưng tùy thuộc vào kích thước RAM tối đa mà HĐH hỗ trợ)
và các hệ thống 64bit.
Standard: Tương tự như bản Enterprise nhưng chỉ hỗ trợ 4 CPU. Ngoài ra
phiên bản này cũng không được trang bị một số tính năng cao cấp khác.
Workgroup: Tương tự bản Standard nhưng chỉ hỗ trợ 2 CPU và tối đa 3GB
RAM
Express: Bản miễn phí, hỗ trợ tối đa 1CPU, 1GB RAM và kích thước
Database giới hạn trong 4GB.
SQL Server 2005 Express Edition
SQL Server 2005 Express cung cấp một phương tiện tuyệt vời cho những
người bắt đầu làm việc với SQL Server. Nó cung cấp một môi trường mạnh mẽ,
đáng tin cậy ổn định và đó là môi trường miễn phí và dễ sử dụng. Nó cung cấp các
chức năng bảo mật và quản lý thông tin tương tự như các phiên bản tinh vi hơn của
11
SQL Server. Một số lợi thế khác của SQL Server Express bao gồm dễ dàng cài đặt,
dễ dàng quản lí
Trong giáo trình này chúng ta sẽ tập trung nghiên cứu về SQL Server 2005
Express
II. Bắt đầu với SQL Server Management Studio Express
SQL Server Management Studio Express là công cụ mà bạn sử dụng để quản
lý SQL Server và các đối tượng của nó. Sử dụng công cụ này, bạn có thể tạo và làm
việc với cơ sở dữ liệu, bảng biểu, các thủ tục lưu trữ, các chỉ mục, và nhiều hơn
nữa.
Để khởi động SQL Server Management Studio Express bạn thực hiện theo
các bước sau:
Vào Start/Programs/Microsoft SQL Server 2005/ SQL Server Management
Studio Express, xuất hiện hộp thoại Connect to Server.
Trong đó:
• Server type: Chọn Database Engine để kết nối đến cỗ máy cơ sở dữ liệu.
• Server name: Chọn hoặc nhập tên server, bạn nhập tên server ở dạng
Tenmay\TenTheHien. Ví dụ để kết nối tới thể hiện có tên SQLEXPRESS
trên máy MDC-FCE bạn nhập: MDC-FCE\ SQLEXPRESS
• Authentication: Chọn chế độ xác thực là Windows Authentication hoặc
SQL Server Authentication, nếu chọn SQL Server Authentication thì ta
phải cung cấp thông tin cho các mục User name và Password.
• User name: Nhập tên đăng nhập
12
• Password: Mật khẩu của tên đăng nhập
• Remember password: Tùy chọn được chọn để là đăng nhập sau không
phải đánh mật khẩu.
Sau khi nhập xong các thông tin ta nhấn nút Connect, giao diện sau khi đăng
nhập thành công như sau:
Các đối tượng trong một CSDL
Các đối tượng hệ thống và đối tượng của người sử dụng
CSDL hệ thống (System databases) bao gồm Master, Model, MSDB,
Resource, TempDB, và Distribution. SQL tạo ra các CSDL này trong quá trình cài
đặt. Như tên gọi của chúng, chúng là một phần của hệ thống, và hầu hết trong số
chúng được sử dụng để cho phép máy chủ hoạt động.
13
Bên cạnh các đối tượng hệ thống là một phần của hệ thống SQL Server bạn
có thể tạo các đối tượng của người sử dụng. Các đối tượng của người sử dụng bao
gồm các CSDL, các thủ tục lưu trữ, các hàm, và các dối tượng CSDL khác. Bạn có
thể thêm hoặc xóa các đối tượng này khi cần thiết.
Bảng (Table)
Bảng nói chung là đối tượng đầu tiên mà bạn đưa vào CSDL SQL Server,
bảng chứa các dữ liệu trong CSDL của bạn. Mỗi bảng chứa thông tin về một chủ đề,
14
ví dụ một bảng chứa thông tin về khách hàng, một bảng khác chứa thông tin về đơn
đặt hàng. Mỗi bảng trong CSDL phải có tên duy nhất.
Lược đồ CSDL (Database Diagram)
Lược đồ CSDL thể hiện cấu trúc của CSDL dưới dạng đồ họa, nó biểu diễn
mối quan hệ giữa các bảng trong CSDL. Sử dụng lược đồ CSDL bạn có thể chỉnh
sửa bảng, các cột, mối quan hệ, khóa, và các chỉ mục v.v
Khung nhìn (View):
Khung nhìn là một bảng tạm thời, có cấu trúc như một bảng. Nội dung của
khung nhìn dựa trên một truy vấn (query), nó chỉ tồn tại trong bộ nhớ. Dữ liệu
trong một khung nhìn có thể đến từ một hoặc nhiều bảng trong CSDL. Nó cũng có
thể đến từ các khung nhìn khác thậm chí đến từ dữ liệu trong các CSDL khác.
15
Thủ tục lưu trữ (Stored Procedure)
Thủ tục lưu trữ là một đối tượng trong CSDL, bao gồm nhiều câu lệnh T-
SQL được tập hợp lại với nhau thành một nhóm, và tất cả các lệnh này sẽ được thực
thi khi thủ tục lưu trữ được thực thi.
16
Hàm do người dùng định nghĩa (Function):
Hàm do người dùng tự định nghĩa (ở đây ta gọi tắt là hàm) là một thủ tục cho
phép chấp nhận các tham số đầu vào, thực hiện một số các thao tác và trả về kết quả
của các thao tác như một giá trị. Kết quả trả về có thể là một giá trị hoặc một tập các
giá trị. Hàm có rất nhiều lọi ích, cũng giống như các thủ tục lưu trữ chúng cho phép
ta modul hóa chương trình nghĩa là ta có thể gọi nó ở bất cứ điểm nào trong chương
trình.
Trigger
Trigger là một dạng đặc biệt của thủ tục lưu trữ, nó được thực hiện khi một
sự kiện ngôn ngữ thực thi. Có 2 loại trigger: DML triggers and DDL triggers. DDL
trigger được Microsoft giới thiệu trong SQL server 2005. Chúng được thực hiện khi
có sự thay đổi cấu trúc của CSDL. Ví dụ khi ai đó cố gắng xóa một trường của một
bảng, bạn có thể viết một DDL trigger để ngăn chặn việc xóa một trường nếu
trường đó có chứa dữ liệu. Bạn cũng có thể sử dụng DDL trigger để thống kê các
thay đổi về cấu trúc của CSDL.
DML trigger được gọi khi một sự kiện DML (Data Manipulation Language)
diễn ra trong CSDL. Các sự kiện DML bao gồm các lệnh INSERT, UPDATE, and
DELETE v.v xảy ra khi dữ liệu trong một bảng hoặc một khung nhìn bị thay đổi.
DDM trigger có một số tác dụng như chúng có thể bảo vệ dữ liệu của bạn từ các
lệnh INSERT, UPDATE, and DELETE không hợp lệ.
17
Chương 3: Một số thao tác cơ bản trên SQL Server 2005 Express
Edition
Microsoft SQL Server Management Studio Express cung cấp một giao diện
thân thiện giúp cho người dùng thực hiện các thao tác một cách dễ dàng. Một số các
thao tác cơ bản bao gồm: tạo CSDL mới, xóa CSDL, tạo bảng, xóa bảng…Cũng cần
lưu ý rằng các thao tác thực hiện thông qua giao diện thì đều có thể được thực hiện
được bằng các câu lệnh SQL.
1. Tạo một CSDL mới.
Để tạo CSDL mới ta kích chuột phải vào mục Database trong cửa sổ Object
Explorer và chọn New Database
Gõ tên của CSDL vào mục Database name (ví dụ ở đây ta tạo CSDL QLDH)
sau đó kích OK
18
2. Tạo bảng mới.
Bảng được tạo thành từ các hàng và các cột. Mỗi cột hay còn gọi là trường
(field) gồm tên cột (Column Name), kiểu dữ liệu (Data Type) và một giá trị cho biết
cột đó có thể chứa giá trị NULL hay không.
Để tạo bảng ta thực hiện theo các bước sau:
• Kích chuột phải vào mục Table trong CSDL mà bạn muốn thêm bảng
mới sau đó chọn New Table
• Cửa sổ thiết kế bảng xuất hiện.
19
• Nhập tên cột, kiểu dữ liệu và độ dài của mỗi trường trong trong bảng
• Chỉ định cột có cho phép chứa giá trị NULL hay không
• Thiết lập các thuộc tính cho cột trong phần Column Properties
Một trong những thuộc tính quan trọng nhất của cột là kiểu dữ liệu của cột.
Có các kiểu dữ liệu sau:
Kiểu dữ liệu Phạm vi lưu trữ Kích thước
bigint Các số nguyên từ -2
63
đến 2
63
-1 8 bytes
binary(n) Dữ liệu nhị phân với độ dài cố định n byte (1
≤ n ≤ 8000)
n+ 4 bytes
bit Kiểu bit (có giá trị 0 hoặc 1) 1 byte
char(n) Kiểu chuỗi có chiều dài n kí tự cố định (1 ≤ n
≤ 8000). Không hỗ trợ Unicode
n bytes
datetime Dữ liệu ngày giờ, nhận giá trị từ 1/1/1753 đến
31/12/9999
4 bytes
decimal(p,s) Dữ liệu số thập phân. p là tổng số ký tự số có
thể được lưu, s là số chữ số thập phân
Phụ thuộc vào độ
chính xác
float Dữ liệu số số thực dấu phẩy động có phạm vi
từ -1.79E+308 đến 1.79E+308
8 bytes
image Dữ liệu nhị phân. Có thể lưu trữ tối đa
2,147,483,647 bytes dữ liệu nhị phân
Phụ thuộc dữ liệu
int Số nguyên có giá trị từ -2
31
đến 2
31
- 1 4 bytes
money Dữ liệu kiểu tiền tệ từ -2
63
đến 2
63
8 bytes
nchar(n) Dữ liệu chuỗi, có chiều dài cố định n (1 ≤ n ≤
4000) ký tự Unicode
2n bytes
ntext Dữ liệu kiếu chuỗi, có thể lưu trữ tối đa
1,073,741,823 kí tự Unicode
Mỗi kí tự chiếm
2 bytes
numeric(p,s) Tương tự kiểu decimal
nvarchar(n)
nvarchar(MAX)
Dữ liệu kiếu chuỗi, có thể lưu trữ n (1 ≤ n ≤
4000) kí tự Unicode
2n bytes
real Dữ liệu số thực dấu phẩy động, phạm vi từ -
3.4E+38 đến 3.4E+38.
4 bytes
smalldatetime Dữ liệu ngày giờ có thể lưu trữ từ 1/1/1900
đến 6/6/2079
4 bytes
20
smallint Số nguyên từ -215 đến 215 -1 2 bytes
smallmoney Dữ liệu kiểu tiền tệ từ - 214,748.3648 đến
214,748.3647
4 bytes
sql_variant Cho phép giữ các giá trị của các kiểu dữ liệu
khác nhau (tất cả các kiểu dữ liệu hệ thống
khác).
text Dữ liệu kiểu chuỗi, có thể lưu trữ tối đa
2,147,483,647 kí tự. Không hỗ trợ Unicode
Mỗi kí tự chiếm
1 bytes
timestamp Cột timestamp được cập nhật tự động mỗi khi
dòng đượcthêm hoặc được cập nhật. Mỗi
bảng chỉ có thể có 1 cột timestamp
8 bytes
tinyint Số nguyên có giá trị từ 0 đến 255 1 byte
unique-dentifier Là số định danh duy nhất toàn cục (GUID).
Nó được tự động sinh ra mỗi khi hàm
NEWID( ) được sử dụng
16 bytes
varbinary(n) Dữ liệu nhị phân có chiều dài thay đổi (1 ≤ n
≤ 8000)
n bytes
varchar(n) Dữ liệu ký tự có chiều dài thay đổi với n (1 ≤
n ≤ 8000) ký tự. Không hỗ trợ Unicode
n bytes
Sự khác biệt giữa char(10), nchar(10) varchar(10), nvarchar(10): Loại dữ liệu
Char là một loại chuỗi kí tự có kích thước cố định, nghĩa là trong ví dụ trên nếu dữ
liệu đưa vào "This is a really long character string" (lớn hơn 10 ký tự) thì SQL
Server sẽ tự động cắt phần đuôi và ta chỉ còn "This is a". Tương tự nếu chuỗi kí tự
đưa vào nhỏ hơn 10 thì SQL sẽ thêm khoảng trống vào phía sau cho đủ 10 ký tự.
Ngược lại loại varchar sẽ không thêm các khoảng trống phía sau khi chuỗi kí tự đưa
vào ít hơn 10. Còn kiểu dữ liệu bắt đầu bằng chữ n chứa dữ liệu dạng Unicode.
Cột nhận dạng (Identity Columns)
Cột nhận dạng trong một bảng là cột mà SQL tự động cung cấp dữ liệu. Cột
nhận dạng có dữ liệu kiểu số, giá trị của nó được tăng tự động khi một hàng mới
được thêm vào. Mặc định giá trị đầu tiên là 1, mỗi giá trị tiếp theo tăng lên 1. Người
thiết kế CSDL có thể chỉ ra giá trị bắt đầu và giá trị bước tăng. Cột nhận dạng
thường có kiểu dữ liệu int. Ta có thiết lập cột này là khóa chính. Để thiết lập một là
cột nhận dạng và giá trị bước tăng ta thay đổi các giá trị trong phần Indenty
Specification của cửa sổ Column Properties.
21
Cột được tính toán (Computed Column)
Với cột được tính toán, bạn có thể tạo ra một cột mà dữ liệu của nó được tính
toán từ các cột khác. SQL tự động cập nhật giá trị của cột được tính toán khi giá trị
của các cột phụ thuộc thay đổi.Ví dụ giá trị của cột ThanhTien được trả về bởi tích
của cột DonGia và cột SoLuong. Để tạo cột bạn nhập công thức vào thuộc tính
(Formula) trong của cột.
22
Các ràng buộc(Constraints)
Constraints là những thuộc tính (properties) mà ta áp đặt lên một table hay
một cột để tránh việc lưu dữ liệu không chính xác vào database (invalid data). Các
ràng buộc có tác dụng hạn chế hoặc điều khiển kiểu dữ liệu mà người sử dụng có
thể nhập vào trong bảng. Có một số ràng buộc chính như sau:
Primary Key Constraint:
Một table thường có một hay nhiều cột có giá trị mang tính duy nhất để xác
định một hàng bất kỳ trong table. Ta thường gọi là Primary Key (Khóa chính) và
được tạo ra khi ta tạo hay thay đổi một bảng với Primary Key Constraint.
Một bảng chỉ có thể có một Primary Key constraint. Có thể có nhiều cột
tham gia vào việc tạo nên một Primary Key, các cột này không thể chứa giá trị Null
và giá trị trong các cột thành viên có thể trùng nhau nhưng giá trị của tất cả các cột
tạo nên Primary Key phải mang tính duy nhất. Mỗi bảng trong CSDL nên có một
khóa chính, để xác định các cột trong bảng làm khóa chính ta thực hiện như sau:
9 Chọn cột hoặc các cột làm khóa chính
9 Kích chuột vào nút Set Primary Key trên thanh công cụ.
Cột làm khóa chính sẽ có biểu tượng chìa khóa trước tên cột.
Unique Constraint
Bạn có thể tạo Unique Constraint để đảm bảo giá trị của một cột nào đó
không bị trùng lập. Tuy Unique Constraint và Primary Key Constraint đều đảm bảo
tính duy nhất nhưng bạn nên dùng Unique Constraint trong những trường hợp sau:
9 Nếu một cột (hay một sự kết hợp giữa nhiều cột) không phải là Primary
key. Nên nhớ chỉ có một Primary Key Constraint trong một table trong
khi ta có thể có nhiều Unique Constraint trên một bảng.
9 Nếu một cột cho phép chứa giá trị Null. Unique constraint có thể ápđặt
lên một cột chứa giá trị Null trong khi Primary key constraint thì không.
23
Bạn tạo một Unique Constraint bằng cách tạo một unique index.
Foreign Key Constraint
Foreign Key (Khóa ngoại) là một cột hay một sự kết hợp của nhiều cột được
sử dụng để áp đặt mối liên kết dữ liệu giữa hai bảng. Foreign key của một bảng sẽ
giữ giá trị của Primary key của một bảng khác và chúng ta có thể tạo ra nhiều
Foreign key trong một bảng. Foreign key có thể reference (tham chiếu) vào Primary
Key hay cột có Unique Constraints. Foreign key có thể chứa giá trị Null. Mặc dù
mục đích chính của Foreign Key Constraint là để kiểm soát dữ liệu chứa trong bảng
có Foreign key (tức bảng con) nhưng thực chất nó cũng kiểm soát luôn cả dữ liệu
trong bảng chứa Primarykey (tức bảng cha). Ví dụ nếu ta xóa dữ liệu trong bảng cha
thì dữ liệu trong bảng con trở nên "mồ côi" (orphan) vì không thể reference ngược
về bảng cha. Do đó Foreign Key constraint sẽ đảm bảo điều đó không xảy ra. Nếu
bạn muốn xóa dữ liệu trong bảng cha thì trước hết bạn phải xóa Foreign key trong
bảng con trước.
Default Constraints
Default Constraints (Giá trị ngầm định) là giá trị mà SQL server tự động gán
cho một cột nào đó trong bảng. Giá trị ngầm định có thể là một hằng, NULL hoặc
một hàm, trong trường hợp người sử dụng không nhập dữ liệu cho cột thì cột sẽ
nhận giá trị ngầm định Bạn có thể nhập nhập giá trị ngầm định cho một cột tại thuộc
tính Default Value or Binding trong cửa sổ Column Properties.
24
Ví dụ các giá trị ngầm định như:
Biểu thức Kết quả
getdate( ) Thiết lập giá trị ngầm định là ngày tháng hiện hành
NULL Thiết lập giá trị ngầm định là NULL
7 Thiết lập giá trị ngầm định là 7
‘Hello’ Thiết lập giá trị ngầm định là chuỗi “Hello”
Check Constraint
Check Constraint dùng để giới hạn hay kiểm soát giá trị được phép nhập vào
một cột. Check Constraint giống Foreign Key Constraint ở chỗ nó kiểm soát giá trị
đưa vào một cột nhưng khác ở chỗ Foreign Key Constraint dựa trên giá trị ở bảng
cha để cho phép một giá trị được chấp nhận hay không trong khi Check Constraint
dựa trên một biểu thức logic để kiểm tra xem một giá trị có hợp lệ không. Ví dụ ta
có thể áp đặt một Check Constraint lên cột NgayDatHang chỉ chứa các giá trị là
ngày trước ngày hiện hành. Để nhập một Check Constraint ta thực hiện như sau:
9 Kích chuột vào nút Manage Check Constraints trên thanh công cụ.
9 Hộp thoại Check Constraints xuất hiện, tại đây ta kích nút Add để tạo
contraint mới.