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
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
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
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
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.
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ở
• 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:
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
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
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)
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ị
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.