Bai giang hệ quản trị cơ sở dữ liệu

122
0 TRƯỜNG ĐẠI HC M- ĐỊA CHT ĐẶNG HU NGHHOÀNG KIM BNG BÙI THVÂN ANH BÀI GING HQUN TRCƠ SDLIU HÀ NI - 2011

description

thietkelogoart.com

Transcript of Bai giang hệ quản trị cơ sở dữ liệu

Page 1: Bai giang hệ quản trị cơ sở dữ liệu

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

Page 2: Bai giang hệ quản trị cơ sở dữ liệu

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

Page 3: Bai giang hệ quản trị cơ sở dữ liệu

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

Page 4: Bai giang hệ quản trị cơ sở dữ liệu

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

Page 5: Bai giang hệ quản trị cơ sở dữ liệu

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.

Page 6: Bai giang hệ quản trị cơ sở dữ liệu

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.

Page 7: Bai giang hệ quản trị cơ sở dữ liệu

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

Page 8: Bai giang hệ quản trị cơ sở dữ liệu

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.

Page 9: Bai giang hệ quản trị cơ sở dữ liệu

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.

Page 10: Bai giang hệ quản trị cơ sở dữ liệu

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ì? .

Page 11: Bai giang hệ quản trị cơ sở dữ liệu

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

Page 12: Bai giang hệ quản trị cơ sở dữ liệu

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

Page 13: Bai giang hệ quản trị cơ sở dữ liệu

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.

Page 14: Bai giang hệ quản trị cơ sở dữ liệu

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ủ đề,

Page 15: Bai giang hệ quản trị cơ sở dữ liệu

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.

Page 16: Bai giang hệ quản trị cơ sở dữ liệu

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.

Page 17: Bai giang hệ quản trị cơ sở dữ liệu

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ệ.

Page 18: Bai giang hệ quản trị cơ sở dữ liệu

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

Page 19: Bai giang hệ quản trị cơ sở dữ liệu

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.

Page 20: Bai giang hệ quản trị cơ sở dữ liệu

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ừ -263 đến 263-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ừ -231 đến 231 - 1 4 bytes

money Dữ liệu kiểu tiền tệ từ -263 đến 263 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

Page 21: Bai giang hệ quản trị cơ sở dữ liệu

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.

Page 22: Bai giang hệ quản trị cơ sở dữ liệu

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.

Page 23: Bai giang hệ quản trị cơ sở dữ liệu

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:

Chọn cột hoặc các cột làm khóa chính

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:

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.

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.

Page 24: Bai giang hệ quản trị cơ sở dữ liệu

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.

Page 25: Bai giang hệ quản trị cơ sở dữ liệu

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:

Kích chuột vào nút Manage Check Constraints trên thanh công cụ.

Hộp thoại Check Constraints xuất hiện, tại đây ta kích nút Add để tạo contraint mới.

Page 26: Bai giang hệ quản trị cơ sở dữ liệu

25

Nhập tên và biểu thức ràng buộc.

Kích vào nút Close để thêm ràng buộc và đóng hộp thoại.

Sau khi thiết kế xong bảng ta vào kích vào biểu tượng Save trên thanh công cụ sẽ xuất hiện hộp thoại Choose Name cho phép ta nhập vào tên bảng sau đó kích OK.

3. Thay đổi cấu trúc của bảng

Để thay đổi cấu trúc bảng trong SQL Server Management Studio ta thực hiện các bước sau:

• Mở rộng các đối tượng trên thể hiện của SQL trong cửa sổ Object Explorer muốn thay đổi cấu trúc bảng.

• Mở rộng mục Database và chọn cơ sở dữ liệu và bảng cần thay đổi cấu trúc. Kích chuột phải lên bảng đó và chọn Modify xuất hiện cửa sổ thiết kế table và ta thực hiện các thay đổi đối với cấu trúc bảng như cách tạo bảng.

Page 27: Bai giang hệ quản trị cơ sở dữ liệu

26

4. Lược đồ CSDL

a) Thiết lập mối quan hệ giữa các bảng

Sau khi thêm các bảng vào CSDL bạn thiết lập mối quan hệ giữa các bảng. Để thiết lập mối quan hệ giữa các bảng bạn tạo một lược đồ CSDL (Database Diagram). Để tạo một lược đồ CSDL ta thực hiện các bước sau:

Mở rộng CSDL mà bạn muốn tạo lược đồ CSDL, ví dụ ở đây ta tạo lược đồ CSDL cho CSDL QLDH

Kích chuột phải vào Database Diagrams và chọn New Database Diagram.

Page 28: Bai giang hệ quản trị cơ sở dữ liệu

27

Xuất hiện hộp thoại sau:

Chọn Yes, xuất hiện hộp thoại Add Table cho phép ta chọn các bảng để đưa vào lược đồ

Chọn các bảng sau đó kích nút Add Kích nút Close để đóng hộp thoại, xuất hiện cửa sổ Diagram như sau:

Page 29: Bai giang hệ quản trị cơ sở dữ liệu

28

Ta thực hiện thiết kế mối quan hệ giữa các bảng trong cơ sở dữ liệu bằng việc kéo và giữ trường khóa chính của bảng này thả sang trường khóa ngoại tương ứng của bảng khác xuất hiện cửa sổ Table and Columns.

Ta thực hiện điều chỉnh các tham số cho mối quan hệ đó sau đó kích OK,

xuất hiện hộp thoại Foreign Key Relationship

Hộp thoại này cho phép ta thay đổi các thuộc tính của mối quan hệ sau đó kích OK để quay trở lại cửa sổ Diagram

Để kiểm soát sự thay đổi dữ liệu trong các bảng dữ liệu có quan hệ ràng buộc trong CSDL, bạn có thể sử dụng khái niệm cascade giữa hai bảng.

Để mỗi khi bản ghi trong bảng cha bị xóa thì những bản ghi trong bảng con có mã khóa ngoại bằng với khóa chính của bản ghi đang xóa sẽ bị xóa bạn cần khai báo Cascade cho trường hợp Delete.

Tương tự như vậy, mỗi khi giá trị trong cột khóa chính của bản ghi trong

Page 30: Bai giang hệ quản trị cơ sở dữ liệu

29

bảng cha bị thay đổi thì những bản ghi trong bản ghi có khóa ngoại bằng khóa chính của bản ghi đang thay đổi cũng thay đổi theo, bạn cần khai báo Cascaden cho trường hợp Update.

Để làm điều này tachọn hai thuộc tính Delete Rule và Update Rule ứng với trường hợp Delete và Update.

Khi bạn đóng cửa sổ Diagram, xuất hiện hộp thoại thông báo bạn có muốn

lưu lược đồ hay không

Ta chọn Yes, xuất hiện hộp thoại cho phép ta nhập tên của lược đồ sau đó kích OK.

Page 31: Bai giang hệ quản trị cơ sở dữ liệu

30

Xuất hiện hộp thoại Save, tại đây ta kích Yes.

b) Chỉnh sửa lược đồ

Kích đúp lên lược đồ muốn chỉnh sửa để mở cửa sổ Diagram. Ta thực hiện các thao tác chỉnh sửa lược đồ trên cửa sổ này:

Thêm bảng mới: Trong cửa sổ Diagram ta kích chuột phải và chọn Add table

Xóa bảng khỏi lược đồ: Kích chuột phải lên bảng cần xóa và chọn Remove from Diagram.

Xóa quan hệ: Kích chuột phải lên quan hệ muốn xóa và chọn Delete Relationship from Database.

Chỉnh sửa lại quan hệ: Kích chuột phải lên một bảng bất kì trong lược đồ sau đó chọn Relationship, xuất hiện hộp thoại Foreign Key Relationships. Lựa chọn mối quan hệ mà bạn muốn chỉnh sửa, thực hiện các chỉnh sửa sau đó kích Close.

Page 32: Bai giang hệ quản trị cơ sở dữ liệu

31

5. Nhập dữ liệu cho bảng

Để nhập dữ liệu cho bảng trong SQL Server Management Studio ta kích chuột phải vào tên bảng cần nhập dữ liệu và chọn Open Table sẽ xuất hiện cửa sổ nhập dữ liệu cho bảng.

6. Xóa bảng, xóa CSDL

Click chuột phải lên bảng hay CSDL muốn xóa -> Delete - >OK. Trong trường hợp xóa một CSDL, nên chọn dấu tích vào Close existing connections. Khi đó SQL Server 2005 sẽ ngắt tất cả các kết nối vào CSDL này và việc xóa sẽ không gây báo lỗi.

7. Mở một query editor để viết câu lệnh SQL

Một trong những công việc quan trọng nhất đối với các hệ quản trị CSDL là truy vấn (query) CSDL. Để soạn thảo các truy vấn ta có thể mở bộ soạn thảo theo một số cách sau (Ví dụ ta thực hiện truy vấn trên CSDL QLDH):

Kích chuột phải vào CSDL mà bạn muốn thực hiện các truy vấn sau đó chọn New Query.

Page 33: Bai giang hệ quản trị cơ sở dữ liệu

32

Xuất hiện hộp thoại sau:

Bạn cũng có thể mở bộ soạn thảo truy vấn bằng cách kích vào nút New

Query trên thanh công cụ sau đó chọn CSDL mà ta muốn thực hiện các truy vấn.

Để mở và kích hoạt CSDL bạn sử dụng lệnh USE, ví dụ trong cửa sổ soạn

thảo bạn gõ:

Use QLDH

Sau đó kích nút Execute trên thanh công cụ, đoạn thông báo sau sẽ xuất hiện trong phần Messages.

CSDL QLDH đã được mở

Soạn thỏa các truy vấn tại đây

Chọn CSDL tại đây

Page 34: Bai giang hệ quản trị cơ sở dữ liệu

33

Để lưu trữ truy vấn bạn vào File và chọn Save SQLQuery1.sql hoặc kích vào biểu tượng Save trên thanh công cụ. Xuất hiện hộp thoại cho phép bạn nhập tên của query và thư mục để lưu trữ query.

Page 35: Bai giang hệ quản trị cơ sở dữ liệu

34

Bài Tập

Bài 1: Tạo bảng Custemer để lưu trữ thông tin về khách hàng bao gồm các trường sau:

Trường CustomerID: Đây là trường khóa chính, thiết lập trường này là trường nhận dạng (Identity Columns)

Trường CompanyName: Kiểu dữ liệu là VarChar(40).và không chứa giá trị NULL

Trường Address: Kiểu dữ liệu là VarChar(200)

Trường State: Kiểu dữ liệu Char(2). Tạo ràng buộc để đảm bảo dữ liệu trong cột là CA, UT, AZ, WY, OR, hoặc WA. Ngầm định là CA

Trường IntroDate: Kiểu dữ liệu là DateTime, giá trị ngầm định là ngày hiện hành. Thêm ràng buộc để đảm bảo rằng ngày nhập vào là sau trước hiện hành

Trường CreditLimit: Kiểu dữ liệu tiền tệ, giá trị ngầm định là 500.000. Tạo ràng buộc để đảm bảo rằng dữ liệu nhập vào luôn nằm trong khoảng giữa 0 và 10.000.000

Lưu trữ và nhập dữ liệu để kiểm tra các ràng buộc và giá trị ngầm định

Page 36: Bai giang hệ quản trị cơ sở dữ liệu

35

Chương 4: Các câu lệnh SQL cơ bản

I. Giới thiệu sơ lược về Transact SQL (T-SQL).

Transact SQL hay còn gọi là T-SQL thực hiện ngôn ngữ truy vấn có cấu trúc (Structured Query Language -SQL) của Microsft. T-SQL được thiết kế để nhận, tương tác và thêm dữ liệu vào CSDL SQL Server.

T-SQL có thể được phân loại như sau :

• Ngôn ngữ định nghĩa dữ liệu (Data Definition Language - DDL): Các lệnh dùng để tạo, sửa, xóa các đối tượng trong CSDL như database, table, index, view, stored procedures và các đối tượng khác.

• Ngôn ngữ thao tác dữ liệu (Data Manipulation Language - DML): Chứa các lệnh thao tác với dữ liệu như truy xuất, thêm, sửa, xoá dữ liệu.

• Ngôn ngữ điều khiển dữ liệu (Data Control Language - DCL): Chứa các lệnh điều khiển, phân quyền truy xuất dữ liệu

II. Ngôn ngữ thao tác dữ liệu

SQL được xem như là công cụ hữu hiệu để thực hiện các yêu cầu truy vấn và thao tác trên dữ liệu. Nhóm các câu lệnh này được gọi chung là ngôn ngữ thao tác dữ liệu (DML Data Manipulation Language) bao gồm các câu lệnh sau:

SELECT: Sử dụng để truy xuất dữ liệu từ môt hoặc nhiều bảng.

INSERT: Thêm dữ liệu.

UPDATE: Cập nhật dữ liệu.

DELETE: Xoá dữ liệu.

1. Câu lệ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 [*|DISTINCT][TOP n] <Danh sách các cột [AS <Bí danh>]>

Page 37: Bai giang hệ quản trị cơ sở dữ liệu

36

FROM <danh sách bảng/khung nhìn> [WHERE <Biểu thức điều kiện>] [GROUP BY <danh sách cột>] [HAVING <điều kiện>] [ORDER BY <Tên cột/ Số thứ tự cột/Biểu thức> [ASC/DESC]] [COMPUTE <danh sách hàm gộp [BY <danh sách cột>]>]

Các thành phần nằm trong cặp dấu [ ] là tùy chọn tức là có thể có hoặc không. 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).

Trong phần này chúng tôi sử dụng cơ sở dữ liệu về quản lí đơn hàng (QLDH) để làm ví dụ.

a. 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.

Page 38: Bai giang hệ quản trị cơ sở dữ liệu

37

Ví dụ lệnh sau hiển thị họ đệm, tên và địa chỉ của các khách hàng được lưu trữ trong bảng KhachHang

select HoDem, Ten,DiaChi from KhachHang

Ta cũng có thể hiển thị tất cả các cột của bảng bằng cách sử dụng lệnh sau:

select * from KhachHang

Nếu tên bảng chứa khoảng trắng ta phải đặt tên bảng trong cặp [ ] hoặc “ “ như sau:

select * from [Khach Hang]

Hoặc select * from “Khach Hang“

Đổi tên các cột trong kết quả hiển thị

Khi kết quả được hiển thị, tiêu đề của các cột mặc định sẽ là tên của các cột khi bạn tạo bảng. Tuy nhiên, để các tiêu đề trở nên thân thiện hơn, ta có thể đổi tên các tiêu đề của các cột khi hiển thị. Để làm được việc này, ta có thể sử dụng một trong hai cách viết sau:

<tiêu đề cột> = <tên cột>

hoặc: <tên cột> <tiêu đề cột>

Ví dụ: Hai câu lệnh sau sẽ đặt tiêu đề Họ đệm thay cho tiêu đề cột Hodem,

Page 39: Bai giang hệ quản trị cơ sở dữ liệu

38

Tên cho tiêu đề cột Ten và Địa chỉ thay cho tiêu đề cột DiaChi khi kết quả đươc hiển thị:

select 'Họ đệm'= HoDem,'Tên'=Ten,'Địa chỉ'= DiaChi from KhachHang

Hoặc: select HoDem 'Họ đệm’,Ten 'Tên',DiaChi 'Địa chỉ' from KhachHang

Kết quả hiển thị như sau:

Sử dụng tên giản đồ

Trong SQL Server 2005 các tên bảng có thể có phần tiền tố là tên giản đồ, phân cách giữa tên giản đồ và tên bảng là dấu chấm. Mục đích của giản đồ là để nhóm các đối tượng theo loại và làm cho CSDL phức tạp và lớn trở lên dễ quản lí hơn. Nếu bạn là người quản trị thì dbo (database owner) là giản đồ ngầm định.

Ví dụ:

select * from dbo.KhachHang

Đặt bí danh cho cột

Trong mệnh đề FROM có thể sử dụng bí danh (alias) nhằm làm cho câu truy vấn dễ nhìn hơn. Ta có hai cách để đặt bí danh cho cột như sau:

<Tên cột> AS <Bí danh>

hoặc <Tên cột> <Bí danh>

Ví dụ:

Page 40: Bai giang hệ quản trị cơ sở dữ liệu

39

select * from khachhang k

where k.MaKhachHang = 2

Cấu trúc CASE

Trong câu lệnh SELECT, ta có thể sử dụng cấu trúc CASE để thay đổi cách hiển thị kết quả ra màn hình. Ví dụ các câu lệnh sau cho biết họ đệm, tên, địa chỉ và giới tính của khách hàng nhưng với giới tính thay vì hiển thị giá trị là 1 hoặc 0 sẽ hiển thị là “Nam” hoặc “Nữ”.

select 'Họ đệm' = HoDem,'Tên'=Ten,'Địa chỉ'= DiaChi, 'Giới tính' = case when GioiTinh = 1 then N'Nam' when GioiTinh = 0 then N'Nữ' else N'Không có dữ liệu' end from KhachHang

Kí tự N trước một chuỗi chỉ ra chuỗi này có định dạng Unicode

Danh sách chọn trong câu lệnh SELECT có thể có các biểu thức số học. Khi đó kết quả của biểu thức sẽ là một cột trong kết quả truy vấn. Ví dụ:

select 'Họ và tên' = HoDem + ' ' + Ten,'Địa chỉ' = DiaChi from KhachHang

Từ khóa Top

Từ khoá TOP được sử dụng trong câu lệnh SELECT để chỉ định tập hợp các dòng đầu tiên được trả về trong truy vấn. Tập hợp các dòng đó có thể là một con số hoặc theo tỷ lên phần trăm các dòng dữ liệu.

Ví dụ bạn muốn nhận được 10 dòng đầu tiên từ bảng KhachHang bạn thực hiện câu lệnh truy vấn sau:

select Top 10 * from KhachHang

Nếu bạn muốn số dòng kết quả nhận được bằng 5% tổng số dòng của bảng bạn thực hiện như sau:

select Top 5 percent * from KhachHang

Từ khoá DISTINCT

Từ khoá DISTINCT được sử dụng trong câu lệnh SELECT nhằm loại bỏ ra khỏi kết quả truy vấn những dòng dữ liệu có giá trị giống nhau.

Ví dụ nếu bạn sử dụng câu lệnh: select MaNhomHang from DanhMucHang

Ta sẽ có kết quả như sau:

Page 41: Bai giang hệ quản trị cơ sở dữ liệu

40

MaNhomHang ----------- 1 3 4 4 2 2 7 7 7 1 1 3 2 5 5 6 6 5 6

(19 row(s) affected)

Nhưng nếu bạn sử dụng câu lệnh:

select distinct MaNhomHang from DanhMucHang

Kết quả như sau:

MaNhomHang ----------- 1 2 3 4 5 6 7 (7 row(s) affected)

b. Mệnh đề WHERE

Mệnh đề Where cho phép ta lọc dữ liệu được trả về bởi lệnh Select. 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 sau lọc ra các khách hàng là nữ select * from khachhang where gioitinh = 0

Mệnh đề Where cho phép ta sử dụng rất nhiều các toán tử so sánh, các toán tử logic và các từ khóa khác để lọc dữ liệu trong một phạm vi nào đó.

Sử dụng các toán tử so sánh

Page 42: Bai giang hệ quản trị cơ sở dữ liệu

41

Toán tử Ý nghĩa

= So sánh bằng

> So sánh lớn hơn

>= So sánh lớn hơn hoặc bằng

!> So sánh không lớn hơn

< So sánh nhỏ hơn

<= So sánh nhỏ hơn hoặc bằng

!< So sánh không nhỏ hơn

<> So sánh khác

Ví dụ sau hiển thị họ tên và địa chỉ của những khách hàng có mã khách hàng lớn hơn 4

select 'Họ và tên' = HoDem + ' ' + Ten,'Địa chỉ' = DiaChi from KhachHang where MaKhachHang > 4

Các toán tử logic And, Or và Not

Ta có thể kết hợp các toán tử so sánh với các toán tử logic. Ví dụ các lệnh sau lọc ra những mặt hàng có giá lớn hơn 10000 và nhỏ hơn 50000

select * from DanhMucHang

where DonGia > 10000 and DonGia < 50000

Kiểm tra giới hạn của dữ liệu

Từ khoá BETWEEN và NOT BETWEEN kiểm tra dữ liệu trong một cột có nằm trong hoặc không nằm trong khoảng giá trị nào đó hay không. Câu lệnh sau lọc ra những mặt hàng có giá nằm trong khoảng từ 10000 đến 50000

select * from DanhMucHang where DonGia between 10000 and 50000

Ví dụ để lọc ra các đơn đặt hàng trong khoảng ngày 25/1/2010 và 31/1/2010 ta thực hiện như sau:

select * from donhang where ngaydathang between '1/25/2010' and '1/31/2010'

Từ khóa IN và NOT IN

Toán tử này dùng để xác định giá trị của một cột với một giá trị trong danh sách. Ví dụ để hiển thị thông tin của các khách hàng có mã khách hàng là 2, 4, 5, 7 hoặc 8 ta thực hiện câu lệnh sau:

select * from KhachHang

Page 43: Bai giang hệ quản trị cơ sở dữ liệu

42

where MaKhachHang IN (2,4,5,7,8)

Toán tử LIKE và NOT LIKE

Dùng để so khớp các giá trị chuỗi theo mẫu, mẫu ở đây là các kí tự đại diện.

Kí tự đại diện Ý nghĩa % Chuỗi ký tự bất kỳ gồm không hoặc nhiều ký tự - Một kí tự bất kì

[ ] Một ý tự bất kỳ nằm trong giới hạn được chỉ định [^] Một ý tự bất kỳ không nằm trong giới hạn được chỉ định

Ví dụ để hiển thị thông tin của những khách hàng có tên bắt đầu bởi kí tự “H” ta thực hiện như sau:

select * from KhachHang where Ten Like 'H%'

Để hiển thị thông tin của những khách hàng có tên bắt đầu bởi kí tự “H” hoặc “L” ta thực hiện như sau:

select * from KhachHang where Ten Like '[HL]%'

Để hiển thị thông tin của những khách hàng có tên không bắt đầu bởi kí tự “H” hoặc “L” ta thực hiện như sau:

select * from KhachHang where Ten Like '[^HL]%'

Giá trị NULL

Để tìm giá trị NULL trong bảng ta sử dụng từ khóa Is Null hoặc Is Not Null. Ví dụ để hiển thị thông tin của những khách hàng không có số điện thoại bạn thực hiện như sau:

select * from KhachHang where SoDienThoai is NULL

Ngược lại để hiển thị thông tin của những khách hàng có số điện thoại bạn thực hiện như sau:

select * from KhachHang where SoDienThoai is NOT NULL

c. Mệnh để ORDER BY

Nếu không chỉ ra yêu cầu sắp xếp dữ liệu thì các dòng kết quả trả về sẽ tuân theo thứ tự của chúng trong bảng dữ liệu. Để sắp xếp thứ tự các dòng kết quả ta sử dụng mệnh đề ORDER BY theo sau là tên các cột muốn sắp xếp. Dữ liệu được sắp

Page 44: Bai giang hệ quản trị cơ sở dữ liệu

43

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. 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ụ đưới đây sắp xếp thông tin các khách hàng theo tên select * from KhachHang order by Ten

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:

select * from KhachHang order by 3

Câu lệnh sau sẽ sắp xếp các khách hàng theo thứ tự tăng dần của tên nếu trùng tên thì sắp xếp theo thứ tự giảm dần của ngày sinh

select * from KhachHang order by Ten, NgaySinh Desc

d. Mệnh để GROUP BY

Mệnh đề Group By được sử dụng để 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,...

Ví dụ sau cho biết tổng số tiền của từng đơn hàng select madonhang, SUM(thanhtien) as [Tong so tien] from chitietdonhang group by madonhang

Bạn có thể thêm cột đếm số dòng chi tiết cho mỗi đơn hàng bằng cách sử dụng thêm hàm Count() như sau:

select madonhang, SUM(thanhtien) as [Tong so tien],count(madonhang) as [So mat hang] from chitietdonhang group by madonhang

Page 45: Bai giang hệ quản trị cơ sở dữ liệu

44

e. Mệnh để HAVING

Mệnh đề HAVING dùng để đặt điều kiện lọc cho các phân nhóm con. Having đi sau Group By để đặt điều kiện chọn lọc ra những phân nhóm thoả mãn điều kiện sau Having. Ví dụ bạn chỉ muốn lấy ra những dòng kết quả có tổng số tiền >= 1,000,000

select madonhang, SUM(thanhtien) as [Tong so tien], count(madonhang)as [So mat hang] from chitietdonhang group by madonhang having SUM(thanhtien) >= 1000000

f. Mệnh để COMPUTE

Mệnh đề COMPUTE dùng để xem dữ liệu với tổng hoặc tổng con

Ví dụ sau cho biết tổng số tiền của tất cả các đơn hàng

select madonhang, dongia,soluong,thanhtien from chitietdonhang order by madonhang compute sum(thanhtien)

Hình : Xem tổng thành tiền bằng COMPUTE

Page 46: Bai giang hệ quản trị cơ sở dữ liệu

45

Nếu bạn muốn biết kết quả có tổng con theo một cột nào đó, ví dụ như cột madonhang, thì bạn dùng COMPUTE BY như sau:

select madonhang, dongia,soluong,thanhtien from chitietdonhang order by madonhang compute sum(thanhtien) by madonhang

2. Truy vấn dữ liệu từ nhiều bảng

Khi thiết kế CSDL ta phải chuẩn hóa các bảng lưu dữ liệu. Như vậy thông tin thường được chia nhỏ và lưu vào nhiều bảng. Các bảng này có mối quan hệ với nhau. Khi dữ liệu được truy vấn, các hoạt động liên kết được dùng để sử dụng những quan hệ này và lắp ghép lại thông tin gốc. Có 3 cách chính để liên kết các dòng dữ liệu từ hai bảng khác nhau.

a. Liên kết bảng trong mệnh đề Where

Giả sử bạn có 2 bảng là bảng KhachHang có cột khóa là MaKhachHang và bảng DonHang có cột MaKhachHang là khóa ngoại.

Tổng con của madonhang =2

Tổng con của madonhang =3

Hình : Xem tổng con bằng COMPUTE BY

Page 47: Bai giang hệ quản trị cơ sở dữ liệu

46

Bạn có thể truy vấn dữ liệu từ 2 bảng này thông qua khóa MaKhachHang, hoạt động liên kết được thực hiện trong mệnh đề Where như sau:

select donhang.madonhang, donhang.ngaydathang,khachhang.hodem + ' ' + khachhang.ten as [ho va ten] from donhang,khachhang where donhang.makhachhang = khachhang.makhachhang

Câu lệnh trên lấy dữ liệu trên cột Madonhang, Ngaydathang từ bảng DonHang và trên cột Hodem, Ten từ bảng KhachHang. Dấu bằng (=) trong mệnh đề Where cho biết chỉ lấy những dòng mà giá trị Makhachhang trong bảng DonHang bằng với Makhachhang trong bảng KhachHang.

b. Liên kết bảng trong mệnh đề From

Trong mệnh đề From hai bảng được liên kết thông qua phát biểu JOIN theo sau là từ khóa ON cùng cột tham chiếu. Thực hiện truy vấn sau bạn sẽ nhận được cùng kết quả như ví dụ trước.

select donhang.madonhang, donhang.ngaydathang,khachhang.hodem + ' ' + khachhang.ten as [ho va ten] from donhang inner join khachhang on donhang.makhachhang = khachhang.makhachhang

Page 48: Bai giang hệ quản trị cơ sở dữ liệu

47

Mục đích của Inner Join là so khớp các dòng trong một bảng với các dòng tương ứng trong bảng khác mà ở đó các cột liên kết chứa cùng giá trị. Nếu một trong các cột của những bảng này có giá trị khác hoặc không có giá trị thì những dòng này không được trả về trong kết quả truy vấn.

c. Cách dùng OUTER JOIN

Công việc của Outer Join là trả về tất cả các dòng từ một bảng, sau đó so khớp những dòng này với các dòng trong những bảng tương ứng mà các cột liên kết có cùng giá trị. Các cột còn lại của bảng kia trong cột kết quả trả về sẽ có giá trị NULL. Sự khác nhau giữa Outer Join và Inner Join là các dòng khác nhau trong bảng đầu tiên vẫn được trả về bởi truy vấn.

Giả sử bạn được yêu cầu như sau: hãy cho xem tất cả các danh sách khách hàng và với những khách hàng đang có đơn hàng thì cho xem thông tin về đơn hàng đó. Bạn hãy cho xem tên của mỗi khách hàng và nếu khách hàng có đơn hàng thì cho xem ngày đặt hàng. Nghĩa là, nếu khách hàng không có đơn hàng nào thì cho xem tên của khách hàng mà thôi.

Để thực hiện yêu cầu trên bạn thực hiện OUTER JOIN như sau: select khachhang.hodem + ' ' + khachhang.ten as [ho va ten], donhang.ngaydathang from khachhang left outer join donhang on khachhang.makhachhang = donhang.makhachhang

Outer join luôn chiếu lên một bảng, đó là bảng mà bạn chọn nên tất cả các dòng. Trong trường hợp này bảng đó nằm bên trái phát biểu JOIN chính là bảng KhachHang.

Giá trị NULL của cột ngaydathang cho biết đó là những dòng tồn tại trong bảng KhachHang nhưng không tìm thấy makhachhang trong bảng donhang.

Page 49: Bai giang hệ quản trị cơ sở dữ liệu

48

Nếu bạn muốn chỉ trả về những khách hàng nào không có đơn hàng thì bạn thêm điều kiện trong mệnh đề WHERE như sau:

select khachhang.hodem + ' ' + khachhang.ten as [ho va ten], donhang.ngaydathang from khachhang left outer join donhang on khachhang.makhachhang = donhang.makhachhang where donhang.ngaydathang is null

Thế còn Right Outer Join dùng cho mục đích gì? Dùng RIGHT ở vị trí của LEFT trong biểu thức này sẽ có cùng tác dụng nhưng ngược lại thứ tự của bảng và cột. Nghĩa là, bảng bên phải phát biểu JOIN sẽ là bảng mà bạn chọn tất cả các dòng. Nó sẽ so khớp các dòng này với dòng dữ liệu trong bảng bên trái, nếu không tìm thấy thì trả về giá trị NULL.

Như vậy hai phát biểu sau sẽ cho cùng kết quả. select khachhang.hodem + ' ' + khachhang.ten as [ho va ten], donhang.ngaydathang from khachhang left outer join donhang on khachhang.makhachhang = donhang.makhachhang

Truy vấn này sẽ cho cùng kết quả với truy vấn sau dùng Right Outer Join:

select khachhang.hodem + ' ' + khachhang.ten as [ho va ten], donhang.ngaydathang from donhang right outer join khachhang on khachhang.makhachhang = donhang.makhachhang

3. Thêm dữ liệu vào bảng

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. Trước khi thêm dữ liệu vào bảng, điều quan trong bạn cần biết là:

Cột nào đòi hỏi phải có giá trị

Cột nào có ràng buộc toàn vẹn dữ liệu

Cột nào được quản lý bởi CSDL thông qua hàm

Cột nào có giá trị mặc định và chấp nhận giá trị NULL

Kiểu dữ liệu của cột

Câu lệnh INSERT INTO ....VALUES

Page 50: Bai giang hệ quản trị cơ sở dữ liệu

49

Để 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ị)

Các cột không được phép NULL phải được cung cấp giá trị, các cột được phép NULL có thể không cần liệt kê ra. Giả sử bạn thêm dữ liệu vào bảng.

insert into khachhang(hodem,ten,sodienthoai)

values (N'Đặng Minh',N'Hằng','091987546')

Vì các cột Diachi, Email, GioiTinh, Ngaysinh cho phép NULL cho nên dù bạn không cung cấp giá trị cho chúng thì câu lệnh trên vẫn thực thi thành công.

Lưu ý: Trường Makhachhang được thiết lập identity là “YES” nên ta không cần thêm giá trị trường này mà SQL sẽ tự động tạo ra một giá trị cho trường này.

Nếu bạn cung cấp đầy đủ giá trị cho tất cả các cột trong bảng thì bạn không cần liệt kê tên cột của bảng, khi đó các giá trị liệt kê sau Values phải được đặt theo thứ tự cột của bảng. Ví dụ bạn thêm dòng dữ liệu vào bảng KhachHang mà không liệt kê tên cột.

insert into khachhang values (N'Đặng Minh',N'Hằng',N'Ba Đình', '091987546', '[email protected]', 0, '13/3/1989')

Câu lệnh INSERT INTO .... SELECT

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. Với 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ụ sau lấy dữ liệu từ bảng KhachHang và thêm vào bảng KhachHang_Backup

insert into khachhang_backup select * from khachhang where makhachhang between 1 and 10

Câu lệnh SELECT INTO

Bạn có thể tạo một bảng mới có cấu trúc giống với một bảng đang tồn tại và dữ liệu được lấy từ bảng đó sang bằng câu lệnh SELECT INTO. Ví dụ bạn có thể tạo bảng KhachHang_Backup có cấu trúc và dữ liệu y hệt như bảng KhachHang bằng cách sử dụng câu lệnh sau:

Page 51: Bai giang hệ quản trị cơ sở dữ liệu

50

select * into KhachHang_Backup from KhachHang

Nếu bạn muốn giới hạn dữ liệu thêm vào bảng mới bạn có thể dùng mệnh đề Where như sau:

select * into KhachHang_Backup from KhachHang where Email like '%gmail.com'

4. Cập nhật dữ liệu

Để cập nhật dữ liệu ta sử dụng câu lệnh UPDATE, câu lệnh UPDATE có thể ảnh hưởng một hoặc nhiều dòng dữ liệu trong bảng tùy điều kiện lọc. Câu lệnh này có cú pháp như sau:

UPDATE <Tên bảng> SET <tên cột> = <giá trị> [, <tên cột 2> = <giá trị 2>......] [FROM <danh sách bảng>] [WHERE <điều kiện>]

Giả sử bạn muốn cập nhật lại giá trị trong cột đơn giá lên 10% cho tất cả các mặt hàng có manhomhang = 1 trong bảng DanhMucHang, bạn thực hiện câu lệnh sau:

update DanhMucHang set DonGia = DonGia *1.1 where MaNhomHang =1

Nếu muốn cập nhật cùng lúc nhiều cột thì bạn liệt kê các cột cập nhật sau từ khóa SET, các cột này phân cách nhau bằng dấu phẩy.

Ví dụ bạn muốn cập nhật giá trị cho cột TenHang và DonGia cho mặt hàng có MaHang = 2 bạn thực hiện như sau:

update DanhMucHang set TenHang = N'Bia lon Hà Nội', DonGia = 5500 where MaHang = 2

5. Xóa dữ liệu

Để 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> [WHERE <điều kiện>]

Page 52: Bai giang hệ quản trị cơ sở dữ liệu

51

Để xóa toàn bộ dữ liệu trong một bảng bạn chỉ cần chỉ ra tên bảng sau lệnh DELETE. Ví dụ muón xóa hết dữ liệu trong bảng KhachHang_Backup bạn thực hiện câu lệnh sau:

delete from KhachHang_Backup

Nếu muốn xóa dòng xác định thì bạn thêm mệnh đề WHERE. Ví dụ bạn muón xóa khách hàng có MaKhachHang = 18 trong bảng KhachHang bạn thực hiện như sau:

delete from KhachHang where MaKhachHang = 18

III. Ngôn ngữ định nghĩa dữ liệu

1. Tạo bảng

Câu lệnh CREATE TABLE được sử dụng để định nghĩa một bảng dữ liệu mới trong CSDL. Câu lệnh CREATE TABLE có cú pháp như sau: CREATE TABLE table_name

( { < column_definition > | < table_constraint > } [ ,...n ] ) < column_definition > ::= { column_name data_type } [ { DEFAULT constant_expression | [ IDENTITY [ ( seed , increment ) ] ] } ] [ < column_constraint > [ ...n ] ] < column_constraint > ::= [ CONSTRAINT constraint_name ] { [ NULL | NOT NULL ] | [ PRIMARY KEY | UNIQUE ] | REFERENCES ref_table [ ( ref_column ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] } < table_constraint > ::= [ CONSTRAINT constraint_name ] { [ { PRIMARY KEY | UNIQUE } { ( column [ ,...n ] ) } ] | FOREIGN KEY ( column [ ,...n ] ) REFERENCES ref_table [ ( ref_column [ ,...n ] ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] }

Page 53: Bai giang hệ quản trị cơ sở dữ liệu

52

Trong đó:

table_name: Là tên của bảng mới

column_name: Tên cột trong bảng

data_type: Kiểu dữ liệu của cột

DEFAULT: Xác định giá trị ngầm định cho cột

IDENTITY: Xác định cột là cột nhận dạng, 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.

seed: giá trị đầu tiên

increment: Bước nhảy

CONSTRAINT: Một từ khóa tùy chọn chỉ ra sự khởi đầu của một định nghĩa ràng buộc dữ liệu PRIMARY KEY, UNIQUE, hoặc FOREIGN KEY

constraint_name: Tên của ràng buộc

NULL | NOT NULL: Cho phép cột có chứa giá trị NULL hay không

PRIMARY KEY: Xác định một hoặc nhiều cột làm khóa chính.

UNIQUE: Unique Constraint để đảm bảo giá trị của một cột nào đó không bị trùng lặp.

FOREIGN KEY...REFERENCES: Ràng buộc cung cấp toàn vẹn tham chiếu cho các dữ liệu trong cột.

ref_table: Tên của bảng tham chiếu bởi ràng buộc Foreign Key.

( ref_column [ ,...n ] ): Cột hoặc danh sách các cột trong bảng tham chiếu bởi ràng buộc Foreign Key

Ví dụ 1: Ví dụ dưới đây tạo một bảng có tên KhachHang. create table KhachHang ( Makhachhang int identity (1,1) primary key, Tenkhachhang nvarchar(50) not null, Diachi nvarchar(100 ) null , Ngaysinh datetime null, Gioitinh bit default('true') not null )

Cột Makhachhang có kiểu dữ liệu int, được chỉ định thuộc tính identity(1,1) nghĩa là dữ liệu cột này được thêm tự động bắt đầu từ 1 và mỗi lần có dòng mới

Page 54: Bai giang hệ quản trị cơ sở dữ liệu

53

thêm vào, giá trị cột này được tăng lên 1. Cột này cũng được chỉ định làm khóa chính của bảng thông qua thuộc tính primary key.

Ví dụ 2: Ví dụ sau tạo bảng sự kiện Events, các cột EventYear, EventMonth áp dụng ràng buộc CHECK

CREATE TABLE Events( EventID int IDENTITY PRIMARY KEY, EventTitle varchar(50), EventYear int CONSTRAINT ck_Year CHECK (EventYear BETWEEN 2000 AND 2050), EventMonth int CONSTRAINT ck_Month CHECK (EventMonth BETWEEN 1 AND 12), EventDay int )

2. Sửa đổi định nghĩa bảng

Một bảng sau khi đã được định nghĩa bằng câu lệnh CREATE TABLE có thể được sửa đổi thông qua câu lệnh ALTER TABLE, cú pháp câu lệnh sau: ALTER TABLE table_name { [ ALTER COLUMN column_name {DROP DEFAULT | SET DEFAULT constant_expression | IDENTITY [ ( seed , increment ) ] } | ADD { < column_definition > | < table_constraint > } [ ,...n ] | DROP { [ CONSTRAINT ] constraint_name | COLUMN column } ] } < column_definition > ::= { column_name data_type } [ [ DEFAULT constant_expression ] | IDENTITY [ ( seed , increment ) ] ] [ROWGUIDCOL] [ < column_constraint > ] [ ...n ] ] < column_constraint > ::= [ NULL | NOT NULL ] [ CONSTRAINT constraint_name ] { | { PRIMARY KEY | UNIQUE } | REFERENCES ref_table [ (ref_column) ]

Page 55: Bai giang hệ quản trị cơ sở dữ liệu

54

[ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] } < table_constraint > ::= [ CONSTRAINT constraint_name ] { [ { PRIMARY KEY | UNIQUE } { ( column [ ,...n ] ) } | FOREIGN KEY ( column [ ,...n ] ) REFERENCES ref_table [ (ref_column [ ,...n ] ) ] [ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] }

Ví dụ 1: Thêm một cột mới Mota vào bảng DonDatHang alter table DonDatHang add Mota nvarchar(100) not null

Ví dụ 2: Thay đổi định nghĩa cột Mota alter table DonDatHang alter column Mota nvarchar(200) null

3. Xóa bảng

Ta có thể xoá một bảng ra khỏi cơ sở dữ liệu bằng câu lệnh DROP TABLE. Câu lệnh có cú pháp như sau:

DROP TABLE tên_bảng

Ví dụ: Để xóa bảng DonDatHang ta thực hiện như sau: DROP TABLE DonDatHang

4. Khung nhìn - VIEW

Khung nhìn (View) 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. Sử dụng khung nhìn có những thuận lợi nhất định, nó cho phép ta:

Liên kết dữ liệu để người sử dụng có thể làm việc dễ dàng.

Gộp dữ liệu để người sử dụng có thể làm việc dễ dàng.

Tùy chỉnh sử liệu theo nhu cầu của người sử dụng.

Page 56: Bai giang hệ quản trị cơ sở dữ liệu

55

Dấu tên cột đối với người sử dụng

Giới hạn số lương cột và hàng mà người sử dụng sẽ làm việc

Dễ dàng bảo mật dữ liệu

Theo quan điểm của người lập trình thì CSDL chuẩn hóa sẽ dễ dàng làm việc và bảo tri, nhưng nó không dễ dàng để người sử dụng làm việc. Nếu người sử dụng nhìn vào bảng DonHang họ chỉ thấy cột MaKhachHang. Nếu họ muốn xem tên khách hàng họ phải họ phải liên kết với bảng KhachHang. Đây là một tác vụ không dễ đối với người sử dụng. Sử dụng khung nhìn ta có thể liên kết hai bảng này lại và cung cấp khung nhìn cho người sử dụng Người sử dụng dùng khung nhìn để nhận thông tin cần thiết mà không cần biết cách liên kết bên dưới giữa các bảng.

Khung nhìn có thể tính gộp dữ liệu, ví dụ bạn có thể dễ dàng tạo khung nhìn chứa tổng giá trị đơn hàng cho từng khách hàng.

Một thuận lợi khác của khung nhìn là khả năng tùy chỉnh dữ liệu theo nhu cầu của người sử dụng. Ví dụ một cột trong khung nhìn có thể được kết hợp bởi 2 cột HoDem và cột Ten.

Người phát triển thường dùng tên cột không rõ ý nghĩa, khung nhìn sẽ giúp bạn giải quyết vấn đề này. Bạn có thể dễ dàng tạo khung nhìn có tên hiệu cho các cột.

Số cột trong bảng là nhiều, bạn có thể tạo ra khung nhìn chỉ chứa các cột cần thiết.

Bạn có thể cấp quyền truy cập trên khung nhìn thay vì cấp quyền truy cập trên bảng.

Để tạo khung nhìn bạn sử dụng lệnh CREATE VIEW theo cú pháp sau:

CREATE VIEW <tên khung nhìn> AS SELECT <câu lệnh select>

Ví dụ: create view khdonhang as select donhang.madonhang, donhang.ngaydathang,khachhang.hodem + ' ' + khachhang.ten as hoten from donhang,khachhang where donhang.makhachhang = khachhang.makhachhang

Thực hiện câu truy vấn trên khung nhìn vừa tạo ra: select * from khdonhang

Page 57: Bai giang hệ quản trị cơ sở dữ liệu

56

Nếu trong câu lệnh CREATE VIEW, ta không chỉ định danh sách các tên cột cho khung nhìn, tên các cột trong khung nhìn sẽ chính là tiêu đề các cột trong kết quả của câu lệnh SELECT. Trong trường hợp tên các cột của khung nhìn đươc chỉ định, chúng phải có cùng số lượng với số lượng cột trong kết quả của câu truy vấn.

create view khdonhang(Madonhang,NgayDatHang,HovaTen) as select donhang.madonhang, donhang.ngaydathang,khachhang.hodem + ' ' + khachhang.ten from donhang,khachhang where donhang.makhachhang = khachhang.makhachhang

Page 58: Bai giang hệ quản trị cơ sở dữ liệu

57

Bài Tập

Bài 1: Tạo CSDL LUONG để lưu trữ lương, trong đó có bảng tblLuong có cấu trúc như sau:

Tên trường Kiểu dữ liệu Ghi chú

HoDem nvarchar(50)

Ten nvarchar(20)

DonVi nvarchar(20)

Luong smallmoney

PhuCap smallmoney Allow Nulls

Thuong smallmoney Allow Nulls

TamUng smallmoney Allow Nulls

Yêu cầu:

1. Nhập dữ liệu cho bảng

2. Xem danh sách tất cả các cán bộ ở phòng Tài vụ

3. Đưa ra danh sách những người ở phòng kế hoạch đã tạm ứng tiền

4. Đưa ra danh sách những người ở phòng Kế hoạch và phòng Tài vụ có mức thưởng lớn hơn 500.000 đ

5. Bổ xung thêm cột ConLai để tính số tiền còn được nhận của mỗi cán bộ

Bài 2: Tạo cơ sở dữ liệu SinhVien sau đó sử dụng các lệnh để tạo các bảng sau:

tblSinhvien(Masv, Hoten, DiaChi, Malop)

tblLop(Malop, Tenlop, MaNghanh)

tblNganhHoc(MaNganh, TenNganh, MaKhoa)

tblKhoa(MaKhoa, TenKhoa)

Bài 3: Tạo một View hiển thị thông tin chi tiết của sinh viên (trong CSDL SinhVien đã tạo ở bài trên) dựa trên 4 bảng trên. Thông tin hiển thị bao gồm Masv, HoTen, Diachi, Tenlop, Tenkhoa, Tennganhhoc. Danh sách sinh viên được hiển thị theo lớp, trong 1 lớp thì sắp xếp theo tên.

Page 59: Bai giang hệ quản trị cơ sở dữ liệu

58

Chương 5: Một số hàm trong SQL Server

I. Các hàm trên dữ liệu kiểu số

1. Hàm ABS(<số>): Trả về trị tuyệt đối của 1 số

2. Hàm CEILING(<số>): Trả về số nguyên nhỏ nhất lớn hơn hoặc bằng <số>.

3. Hàm FLOOR(<số>): Trả về số nguyên lớn nhất nhỏ hơn hoặc bằng <số>.

4. Hàm ROUND(<số>, p): Hàm làm tròn số với p chữ số sau dấu thập phân.

5. Hàm SQUARE(<số>): Hàm trả về giá trị bình phương của <số>.

6. Hàm SQRT(number): Hàm trả về giá trị căn bậc hai của <số>.

7. Hàm isNumeric: Kiểm tra một giá trị có phải thuộc kiểu dữ liệu số hay không.

II. Nhóm hàm thống kê

1. Hàm COUNT: Dùng để đếm số bản ghi

Ví dụ 1: Để biết số bản ghi trong bảng KhachHang ta sử dụng lệnh sau:

select count(*) from KhachHang

Ví dụ 2: Muốn biết khách hàng có mã khách hàng đã đặt bao nhiêu đơn hàng ta sử dụng lệnh sau:

select count(MaKhachHang) as Sodonhang from DonHang where MaKhachHang = 3

2. Hàm MAX: Trả về giá trị lớn nhất của một tập hợp các giá trị.

Ví dụ: Hãy cho biết giá của mặt hàng có giá cao nhất

select max(DonGia) from DanhMucHang

3. Hàm MIN: Trả về giá trị nhỏ nhất của một tập hợp các giá trị.

Ví dụ: Hãy cho biết giá của mặt hàng có giá thấp nhất

select min(DonGia) from DanhMucHang

4. Hàm SUM: Trả về tổng giá trị của một tập hợp các giá trị.

5. Hàm AVG:Trả về giá trị trung bình của một tập hợp các giá trị

Page 60: Bai giang hệ quản trị cơ sở dữ liệu

59

II. Nhóm hàm xử lý chuỗi kí tự

1. Hàm LEFT(<chuỗi>, n): Hàm Left trả về n kí tự phía bên trái của <Chuỗi>

Ví dụ: select left(N'Trường ĐH Mỏ Địa Chất',6)

Sẽ cho kết quả là ‘Trường’

2. Hàm RIGHT(<chuỗi>, n): Hàm Right trả về n kí tự phía bên phải của <Chuỗi>

Ví dụ:

select right(N'Trường ĐH Mỏ Địa Chất',11)

Sẽ cho kết quả là ‘Mỏ Địa Chất’

3. Hàm LEN(<chuỗi>): Hàm trả về độ dài của một <Chuỗi>

Ví dụ:

select len(N'Trường ĐH Mỏ Địa Chất')

Sẽ cho kết quả là 21

4. Hàm LTRIM(<chuỗi>): Hàm xóa bỏ các ký tự trắng bên trái của <chuỗi>.

5. Hàm RTRIM(<chuỗi>): Hàm xóa bỏ các ký tự trắng bên phải của <chuỗi>.

6. Hàm LOWER(<chuỗi>): Hàm trả về <chuỗi> thành chữ thường.

7. Hàm UPPER(<chuỗi>): Hàm trả về <chuỗi> thành chữ hoa

8. Hàm SUBSTRING (<chuỗi>, p, n): Hàm trả về một chuỗi con được lấy từ <chuỗi> bắt đầu từ vị trí p và gồm n ký tự.

Ví dụ select substring(N'Trường ĐH Mỏ Địa Chất',8,5)

Sẽ cho kết quả là ‘ĐH Mỏ’

9. Hàm Replace(<chuỗi>, <chuỗi cần tìm>, <chuỗi thay thế): Hàm trả về một chuỗi trong đó <chuỗi cần tìm> đã được thay thế bởi <chuỗi thay thế>.

Ví dụ:

select replace('Ha Noi Viet Nam','a','x')

Sẽ cho kết quả là chuỗi ‘Hx Noi Viet Nxm’

10. Hàm STR ( <số> [ , length [ , decimal ] ] ): Hàm đổi <số> thành <chuỗi>

Trong đó length là tổng độ dài bao gồm phần nguyên, phần thập phân và dấu chấm thập phân. Ngần định độ dài là 10

Page 61: Bai giang hệ quản trị cơ sở dữ liệu

60

decimal: số chữ số sau dấu chấm thập phân Ví dụ:

SELECT STR(123.45, 8, 1)

Kết quả trả về là ‘̺ ̺ ̺123.5’

III. Nhóm hàm ngày tháng.

1. Hàm GETDATE: Hàm trả về ngày giờ hiện hành của hệ thống..

Ví dụ: select getdate()

2. Hàm DATEPART (datepart, date ): Hàm trả về một phần nào đó của dữ liệu ngày tháng date

Datepart Chữ viết tắt year yy, yyyy

quarter qq, q

month mm, m

dayofyear dy, y

day dd, d

week wk, ww

weekday dw

hour hh

minute mi, n

second ss, s

millisecond ms

Ví dụ : SELECT DATEPART(m, GETDATE())

Trả vễ tháng hiện tại là 8

SELECT DATEPART(q, GETDATE())

Trả vễ quí là 3

3. Hàm DAY( ): Hàm trả về ngày Ví dụ:

SELECT DAY(getdate())

4. Hàm MONTH( ): Hàm trả về tháng Ví dụ:

SELECT MONTH(getdate())

5. Hàm YEAR( ): Hàm trả về năm

Page 62: Bai giang hệ quản trị cơ sở dữ liệu

61

Ví dụ: SELECT YEAR(GETDATE())

6. DATEADD (datepart, amount, date): Cộng thêm một số amount thời gian vào thành phần datepart của date.

Ví dụ: SELECT DATEADD(d, 15, GETDATE())

Hàm sẽ trả về ngày hiện tại cộng thêm 15 ngày

7. DATEDIFF (datepart, date1, date2): So sánh điểm khác nhau giữa hai ngày bằng việc sử dụng tham số datepart.

Ví dụ: SELECT DATEDIFF(day,ngaydathang,getdate()) as songay from donhang where MaDonHang = 1

Trả về số ngày kể từ ngày đặt hàng đến thời gian hiện tại của đơn hàng có mã bằng 1

IV. Hàm CAST và CONVERT

Chuyển đổi một giá trị thuộc kiểu dữ liệu này sang một kiểu dữ liệu khác. Hàm CAST và CONVERTER cung cấp cùng một chức năng. Một điểm thuận lợi khi dùng CONVERTER là khi chuyển đổi, hàm này cũng cho phép người dùng sẽ định dạng lại giá tri kết quả theo ý muốn.

Cấu trúc hàm CAST: CAST (<biểu thức>/<giá trị> AS <kiểu dữ liệu> [<độ dài kiểu dữ liệu>])

Cấu trúc hàm CONVERTER: CONVERT (<kiểu dữ liệu> [<độ dài>], <biểu thức>/<giá trị> [, <kiểu định dạng>])

Without century (yy)

With century (yyyy) Standard Input/Output

- 0 or 100 Default mon dd yyyy hh:miAM (or PM) 1 101 United States mm/dd/yyyy 2 102 ANSI yy.mm.dd 3 103 British/French dd/mm/yy 4 104 German dd.mm.yy 5 105 Italian dd-mm-yy 6 106 - dd mon yy 7 107 - Mon dd, yy

Page 63: Bai giang hệ quản trị cơ sở dữ liệu

62

8 108 - hh:mm:ss

- 9 or 109 Default + milliseconds mon dd yyyy hh:mi:ss:mmmAM (or PM)

10 110 United States mm-dd-yy 11 111 JAPAN yy/mm/dd 12 112 ISO yymmdd

- 13 or 113 Europe default + milliseconds

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

14 114 - hh:mi:ss:mmm(24h) - 20 or 120 ODBC canonical yyyy-mm-dd hh:mi:ss(24h)

- 21 or 121 ODBC canonical (with milliseconds) yyyy-mm-dd hh:mi:ss.mmm(24h)

- 126 ISO8601 yyyy-mm-ddThh:mm:ss.mmm(no spaces)

- 130 Hijri dd mon yyyy hh:mi:ss:mmmAM - 131 Hijri dd/mm/yy hh:mi:ss:mmmAM

SELECT NgayDatHang, CONVERT(nvarchar(10), NgayDatHang, 103) FROM DonHang

SELECT CONVERT(int, '012345')

Kết quả trả về: 12345 select CONVERT(int, '012') + CONVERT(int, '045')

Kết quả trả về: 57

Page 64: Bai giang hệ quản trị cơ sở dữ liệu

63

Chương 6: Thủ tục lưu trữ, hàm và trigger

I. Thủ tục lưu trữ (Stored Procedure)

Thủ tục lưu trữ là một trong những đối tượng của cơ sở dữ liệu, nó được xây dựng bởi những phát biểu của SQL Server, và được lưu trữ trong CSDL với 1 tên phân biệt. Thủ tục lưu trữ cũng tương tự như những thủ tục trong các ngôn ngữ lập trình..

Lợi ích của việc sử dụng thủ tục lưu trữ:

Thủ tục lưu trữ giúp bạn tách biệt các ứng dụng client với cấu trúc của cơ sở dữ liệu.

Thủ tục lưu trữ giúp bạn đơn giản việc viết mã.

Thủ tục lưu trữ được xử lý ở phía server nên làm giảm thiểu sự lưu thông trên mạng

Thủ tục lưu trữ cho phép ta thực hiện kiểm soát lỗi trên server

Thủ tục lưu trữ tạo thuận lợi cho sự an toàn của dữ liệu, và giúp tăng khả năng bảo mật đối với hệ thống.

Bởi vì thủ tục lưu trữ được biên dịch sẵn nên nó thực hiện nhanh hơn.

Thủ tục lưu trữ cải thiện sự ổn định của ứng dụng.

1. Tạo thủ tục lưu trữ bằng Lệnh CREATE

CREATE PROC[EDURE] <Tên thủ tục> [<Danh Sách tham số>] AS [Begin]

[<Danh Sách biến cục bộ>] <Các câu lệnh T-SQL>

[End]

Trong đó các câu lệnh T-SQL có thể nằm trong cặp BEGIN ... END hoặc không.

Ví dụ: Ta tạo thủ tục lưu trữ sau create procedure dskhachhang @makh varchar(20) as select * from KhachHang where MaKhachHang = @makh

Để gọi thực hiện một thủ tục ta sử dụng cú pháp sau: <Tên thủ tục> [<Danh sách các tham số>]

Page 65: Bai giang hệ quản trị cơ sở dữ liệu

64

Ví dụ để hiển thị các thông tin của khách hàng có mã khách hàng là 3. Ta gọi thực hiện thủ tục trên như sau:

dskhachhang 3

Nếu thủ tục được gọi từ một thủ tục khác, thực hiện bên trong một trigger hay phối hợp với câu lệnh SELECT, cấu trúc như sau

Exec <Tên thủ tục> [<Danh sách các tham số>]

2. Biến trong thủ tục lưu trữ

a. Khai báo biến

Trong thủ tục lưu trũ có thể có các biến nhằm lưu các kết quả tính toán hay truy xuất từ CSDL. Biến chứa phải được khai báo trước khi sử dụng theo cú pháp sau:

DECLARE @<Tên biến> <Kiểu dữ liệu của biến> [(<Kích thước>)]

Các biến cục bộ phải bắt đầu bằng ký hiệu @ trước tên biến.

Ví dụ: Declare @soluong int Declare @hoten nvarchar(100), @ngaysinh datetime

b. Gán giá trị cho biến

Có 2 cách để gán giá trị cho một biến

Cách 1: Sử dụng lệnh SET theo cú pháp SET @<Tên biến> = <Biểu thức>

Ví dụ: Set @ngaysinh = ‘8/5/1989’ Set @soluong = 10 print @soluong Set @soluong = @soluong + 1 print @soluong

Cách 2: Sử dụng lệnh SELECT SELECT @<Tên biến> = <Biểu thức> [FROM …]

Ví dụ: Select @soluong = 10

hoặc select @hoten = Hodem + ' ' + Ten from KhachHang

where MaKhachHang = 3 print @hoten

Page 66: Bai giang hệ quản trị cơ sở dữ liệu

65

Nếu SELECT trả về nhiều dòng, thì biến sẽ nhận giá trị tại dòng cuối cùng trả về bởi Select.

3. Giá trị trả về trong thủ tục lưu trữ

Cú pháp để khai báo một tham số như sau:

@<Tên tham số> <kiểu dữ liệu> [= <giá trị ngầm định>][OUTPUT]

Khi các tham số truyền cho thủ tục lưu trữ là các biến, những thay dổi về giá trị của các biến bên trong thủ tục sẽ không được giữ lại khi thủ tục kết thúc

Ví dụ ta có thủ tục như sau: create proc thamso @x int, @y int, @t int as

set @t = @x + @y

Khi thực hiện thủ tục: declare @a int, @b int,@tong int set @a = 10 set @b = 5 set @tong = 0 exec thamso @a,@b,@tong print @tong

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

Ví dụ trên được viết lại như sau: create proc thamso @x int, @y int, @t int output as

set @t = @x + @y

Khi thực hiện thủ tục: declare @a int, @b int,@tong int set @a = 10 set @b = 5 set @tong = 0 exec thamso @a,@b,@tong output print @tong

Kết quả là 15

Câu lệnh RETURN

Câu lệnh Return dùng kết thúc thủ tục và trả về nơi gọi một số nguyên nào

Page 67: Bai giang hệ quản trị cơ sở dữ liệu

66

đó (mặc định là 0). Để nhận giá trị trả về đầu tiên bạn phải khai báo một biến và sau gán giá trị trả về cho biến đó:

Ví dụ: Ta xây dựng thủ tục sau CREATE PROC spCong @A int = 3, @B int = 2 AS begin declare @T int set @T = @A + @B return @T end

Khi thực hiện thủ tục: Declare @KQ int EXEC @KQ = spCong 10 Select 'Ket qua la : ', @KQ

Kết quả là:

4. Các lệnh điều khiển

a. Câu lệnh IF ... ELSE

Cú pháp :

IF <Điều kiện> Begin

<Nhóm lệnh T-SQL> End

hoặc IF <Điều kiện>

Begin

<Nhóm lệnh T-SQL 1> End

ELSE Begin

<Nhóm lệnh T-SQL 2> End

Ví dụ:

Page 68: Bai giang hệ quản trị cơ sở dữ liệu

67

CREATE PROC Chia @sobichia real,@sochia real, @kqua real OUTPUT AS IF (@sochia =0)

Print 'Division by zero' ELSE

SELECT @kqua = @sobichia / @sochia

b. Câu lệnh CASE

Câu lệnh CASE có 2 dạng:

Dạng 1: CASE <Biểu thức>

When <giá tri 1> Then <Khối lệnh T-SQL 1> When <giá tri 2> Then < Khối lệnh T-SQL 2> ..................... ..................... When <giá tri n> Then < Khối lệnh T-SQL n> [ELSE < Khối lệnh T-SQL n+1>]

END

Hoạt động: Câu lệnh CASE so sánh giá trị của <Biểu thức> với các giá trị. Nếu giá trị của <Biểu thức> bằng với giá trị thứ i thì thực hiện khối lệnh thứ i tương ứng (i = 1....n). Trong trường hợp ngược lại sẽ thực hiện câu lệnh thứ n+ 1 (nếu có)

Ví dụ: Xây dựng thủ tục trả về thứ trong tuần Create Proc ThuTrongTuan (@D As SmallDateTime, @Thu VarChar(10) OUTPUT) As Set @Thu = Case Datepart(w, @D) When 1 Then 'Chu Nhat' When 2 Then 'Thu Hai' When 3 Then 'Thu Ba' When 4 Then 'Thu Tu' When 5 Then 'Thu Nam' When 6 Then 'Thu Sau' Else 'Thu Bay' End

Dạng 2:

CASE WHEN < Biểu thức điều kiện 1> THEN <Biểu thức kết quả 1>

Page 69: Bai giang hệ quản trị cơ sở dữ liệu

68

WHEN < Biểu thức điều kiện 2> THEN <Biểu thức kết quả 2> .............................................. ............................................. WHEN < Biểu thức điều kiện n> THEN <Biểu thức kết quả n>

[ELSE <Biểu thức kết quả n+1>] END

Hoạt động: Câu lệnh CASE tìm kiếm kiểm tra các biểu thức điều kiện để xác định biểu thức kết quả.trả về

Ví dụ: Xây dựng thủ tục trả về số ngày của một tháng khi biết tháng và năm Create Proc SoNgay (@Thang Int, @Nam Int) As Declare @SN Int Set @SN = Case When @Thang In (1,3,5,7,8,10,12) Then 31 When @Thang In (4,6,9,11) Then 30 When @Nam % 4 = 0 Then 29 Else 28 End Return @SN

c. Câu lệnh WHILE

WHILE <Biểu thức điều kiện> [BEGIN]

<Các lệnh T-SQL> [CONTINUE] [BREAK] <Các lệnh T-SQL>

[END]

Câu lệnh While thực hiện lặp đi lặp lại khối lệnh cho khi biểu thức điều kiện có giá trị đúng

Lệnh Break dùng để thoát khỏi vòng lặp

Lênh Continue bỏ qua không thực hiện các lệnh tiếp theo

Ví dụ: Xây dựng thủ tục tìm ƯSCLN của 2 số nguyên a và b

Create proc USCLN @a int, @b int as While @a <> @b If @a > @b set @a = @a - @b Else set @b = @b - @a Return @a

Page 70: Bai giang hệ quản trị cơ sở dữ liệu

69

5. Thay đổi thủ tục lưu 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 PROC[EDURE] <Tên thủ tục> [<Danh Sách tham số>] AS [Begin]

[<Danh Sách biến cục bộ>] <Các câu lệnh T-SQL>

[End]

6. Xóa thủ tục lưu trữ

Để xóa một thủ tục lưu trữ đã có ta sử dụng lệnh DROP với cú pháp như sau: DROP PROC[EDURE] <Tên thủ tục>

II. Hàm do người dùng định nghĩa (User Defined Function-UDF)

Tất cả các ngôn ngữ lập trình, bao gồm cả T-SQL, việc có các hàm tạo cho các ứng dụng trở lên mạnh mẽ. Ngoài ra, người sử dụng có thể tự định nghĩa một hàm riêng cho mình làm cho hệ thống dễ được mở rộng. Hàm do người dùng định nghĩa được chia làm 3 loại: scalar, inline table-valued và multi-statement table-valued.

1. Hàm Scalar

Hàm scaler trả về một giá trị vô hướng có kiểu được định nghĩa bởi từ khóa RETURNS. Thân hàm nằm giữa từ khóa BEGIN và END. Cú pháp của hàm như sau:

CREATE FUNCTION [ <Tên lược đồ>. ] <Tên hàm> ([<Danh sách các tham số>]) RETURNS <kiểu dữ liệu trả về của hàm> AS BEGIN <Thân hàm> RETURN <Biểu thức vô hướng> END

Ví dụ ta xây dựng hàm kết hợp 2 trường HoDem và Ten để được họ và tên như sau:

CREATE FUNCTION FullName (@FirstName nVarChar(10), @LastName nVarChar(20)) RETURNS nVarChar(35)

Page 71: Bai giang hệ quản trị cơ sở dữ liệu

70

BEGIN RETURN (@FirstName + ' ' + @LastName) END

Sau đó ta có thể áp dụng hàm như sau: select dbo.FullName(HoDem,Ten) as N'Họ và tên', DiaChi,SoDienThoai from KhachHang

2. Hàm Inline Table-Valued

Hàm Inline Table-Valued không có thân hàm và nó trả về một bảng, Hàm Inline Table-Valued trả về kết quả truy vấn của một câu lệnh Select đơn giản. Cú pháp của hàm như sau:

CREATE FUNCTION [ <Tên lược đồ>. ] <Tên hàm> ([<Danh sách các tham sô>]) RETURNS TABLE AS RETURN [(] <Câu lệnh select> [)]

Ví dụ sau lấy ra thông tin của các mặt hàng có mã hàng được truyền vào cho tham số.

CREATE FUNCTION dbo.MatHangTheoNhom(@NhomHang int) RETURNS Table AS RETURN SELECT TenHang, DonViTinh, DonGia FROM DanhMucHang WHERE MaNhomHang = @NhomHang

Việc gọi các hàm Inline Table-Valued cũng tương tự như việc gọi các hàm Scalar. Ví dụ:

SELECT * FROM dbo.MatHangTheoNhom(3)

3. Hàm Multi-Statement Table-Valued

Hàm Multi-Statement Table-Valued cũng tương tự như hàm Inline Table-Valued nhưng khác ở chỗ nó có thân hàm được định nghĩa trong cặp từ khóa BEGIN và END. Cú pháp của hàm như sau:

CREATE FUNCTION [<Tên lược đồ>. ] <Tên hàm> ([<Danh sách các tham số>]) RETURNS @<Biến bảng trả về> TABLE < Định nghĩa bảng> AS BEGIN <Thân hàm> RETURN END

Page 72: Bai giang hệ quản trị cơ sở dữ liệu

71

Ví dụ:

CREATE FUNCTION BangDonHang(@KhachHang int) RETURNS @TableName TABLE ( MaKhachHang int, TenKH NVARCHAR(50), MaDonHang int, NgayDatHang nvarchar(100) ) AS BEGIN INSERT INTO @TableName

select kh.MaKhachHang, kh.HoDem + ' ' + kh.Ten,dh.MaDonHang,dh.NgayDatHang

from khachhang kh inner join donhang dh on dh.MaKhachHang = kh.MaKhachHang WHERE kh.MaKhachHang = @KhachHang RETURN END

Việc gọi hàm Multi-Statement Table-Valued cũng tương tự các loại hàm khác

select * from BangDonHang(6)

Kết quả như sau:

III. Trigger

Để tạo cơ chế nhằm ràng buộc toàn vẹn dữ liệu, SQL Server cung cấp hai quy tắc là Constraint và Trigger. Trigger là thủ tục nội tại đặc biệt mà nó sẽ được gọi một cách tự động khi có biến cố được thực thi trong CSDL.

Mircrosoft SQL Server 2005 giới thiệu hai loại Trigger, loại thứ nhất dùng để kiểm soát việc thay đổi dữ liệu được gọi là DML (Data Modification Language) Trigger, loại thứ hai được dùng để kiểm soát sự thay đổi các trúc CSDL được gọi là DDL (Data Definition Language) Trigger.

Trigger chia thành 2 loại Instead of và After: Instead of là loại trigger mà hoạt động của sự kiện gọi nó sẽ bỏ qua và thay vào nó là các lệnh thực hiện trong trigger. After (tương đương với từ khóa For) đây là loại ngầm định, khác với loại

Page 73: Bai giang hệ quản trị cơ sở dữ liệu

72

Instead of thì loại trigger này sẽ thực hiện các lệnh trong nó sau khi đã thực hiện xong sự kiện gọi nó.

Chúng ta sẽ tập trung vào tìm hiểu Trigger loại After. Đại diệm cho loại này là DML bao gồm Trigger dùng cho 3 sự kiện ứng với 3 câu lệnh Insert, Update, Delete hay nhóm DDL bao gồm Trigger dùng cho sự kiện tạo, thay đổi hay xóa đối tượng CSDL ứng với 3 câu lệnh Create, Alter, Drop.

Để kiểm soát sự thay đổi dữ liệu trong các bảng dữ liệu có quan hệ ràng buộc trong CSDL, bạn có thể sử dụng khái niệm cascade giữa hai bảng. Bạn có thể tìm thấy Delete Rule và Update Rule khi tạo ràng buộc giữa hai bảng.

Để mỗi khi bản ghi trong bảng cha bị xóa thì những bản ghi trong bảng con có mã khóa ngoại bằng với khóa chính của bản ghi đang xóa sẽ bị xóa bạn cần khai báo Cascade cho trường hợp Delete.

Tương tự như vậy, mỗi khi giá trị trong cột khóa chính của bản ghi trong bảng cha bị thay đổi thì những bản ghi trong bản ghi có khóa ngoại bằng khóa chính của bản ghi đang thay đổi cũng thay đổi theo, bạn cần khai báo Cascaden cho trường hợp Update.

Để làm điều này, trong khi tạo quan hệ giữa hai bảng hay sau khi tạo bạn có thể kích hoạt cửa sổ thuộc tính, rồi sau đó sau đó chọn hai thuộc tính Delete Rule và Update Rule ứng với trường hợp Delete và Update.

Page 74: Bai giang hệ quản trị cơ sở dữ liệu

73

Không giống như Cascade, Trigger loại DML có thể tham chiếu đến các cột khác thay vì cột khóa chính và khóa ngoại trong những bảng dữ liệu mà nó không có quan hệ.

1. Tạo các Trigger

Để khai báo tạo đối tượng Trigger loại DML ta sử dụng cú pháp như sau:

CREATE TRIGGER [<Tên lược đồ>. ]<Tên trigger> ON { table | view } { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } AS <Các câu lệnh của Trigger>

Trong đó:

Từ khóa ON chỉ định Trigger này sử dụng cho bảng hay đối tượng View nào trong CSDL.

Để chỉ định sự kiện khiến cho Trigger được thực thi ta khai báo từ khóa Insert, Update, Delete.

Các câu lệnh của Trigger là điều kiện và hành động của Trigger, ta có thể sử dụng các câu lệnh SQL, câu lệnh điều khiển.

SQL định nghĩa hai bảng logic INSERTED và DELETED để sử dụng trong các trigger. Cấu trúc của hai bảng này tương tự như cấu trúc của bảng mà trigger tác động. Dữ liệu trong hai bảng này tuỳ thuộc vào câu lệnh tác động lên bảng làm kích hoạt trigger

Khi câu lệnh DELETE được thực thi trên bảng, các dòng dữ liệu bị xoá sẽ được sao chép vào trong bảng DELETED. Bảng INSERTED trong trường hợp này không có dữ liệu.

Page 75: Bai giang hệ quản trị cơ sở dữ liệu

74

Dữ liệu trong bảng INSERTED sẽ là dòng dữ liệu được bổ sung vào bảng gây nên sự kích hoạt đối với trigger bằng câu lệnh INSERT. Bảng DELETED trong trường hợp này không có dữ liệu.

Khi câu lệnh UPDATE được thực thi trên bảng, các dòng dữ liệu cũ chịu sự tác động của câu lệnh sẽ được sao chép vào bảng DELETED, còn trong bảng INSERTED sẽ là các dòng sau khi đã được cập nhật.

Nếu khai báo ROLLBACK TRAN ngay trong đoạn mã của Trigger bạn thực sự hủy bỏ sự hoạt động của Trigger cũng như hoạt động của giao tác đến nơi mà Trigger trực thuộc.

2. Trigger cho hành động thêm bản ghi

Để kiểm soát việc thêm bản ghi vào tệp tin ta có thể khai báo Trigger cho hành động Insert.

Ví dụ 1: Chúng ta muốn người sử dụng nhập vào tên của khách phải lớn hơn một kí tự ta có thể tạo một Trigger như sau:

create trigger trg_KiemTraTenKhachHang on KhachHang for insert as declare @lengthOfName int select @lengthOfName = len(inserted.Ten) from inserted if @lengthOfName <=1 print N'Tên không hợp lệ' rollback tran

Sau khi thực thi đoạn lệnh trên bạn có thể tìm thấy tên Trigger này trong ngăn Triggers của bảng tương ứng

Page 76: Bai giang hệ quản trị cơ sở dữ liệu

75

Để kiểm tra việc thi hành của Trigger này bạn thực hiện thêm một bản ghi vào bảng KhachHang như sau:

insert into KhachHang(HoDem,Ten,Diachi,SoDienThoai) values(N'Nguyễn Văn',N'A',N'Đông Ngạc-Từ Liêm','09897654321')

Bạn sẽ nhận được thông báo là ‘Tên không hợp lệ’

Page 77: Bai giang hệ quản trị cơ sở dữ liệu

76

3. Trigger cho hành động cập nhật bản ghi

Để kiểm soát việc cập nhật bản ghi vào tệp tin ta có thể khai báo Trigger cho hành động Update.

Ví dụ: Nếu chúng ta muốn sau khi cập nhật dữ liệu cho bảng KhachHang, SQL Server sẽ hiển thị nội dung của bảng để xem thì ta tạo một trigger như sau:

CREATE TRIGGER trg_check ON KhachHang FOR INSERT, UPDATE AS print '*** Ket qua sau khi cap nhat ***' SELECT * FROM KhachHang

4. Trigger cho hành động xóa bản ghi

Để kiểm soát việc xóa các bản ghi ra khỏi tệp tin ta có thể khai báo Trigger cho hành động Delete.

Ví dụ để lưu các bản ghi bị xóa ra khỏi bảng ChiTietDonHang vào bảng Deleted ChiTietDonHang mỗi khi người sử dụng thực thi thủ tục nội tại hay câu lệnh SQL để xóa bản ghi đó ta sử dụng Trigger như sau:

CREATE TRIGGER trg_DeleteChiTietDonHang ON ChiTietDonHang FOR DELETE AS Insert into DeletedChiTietDonHang Select * from Deleted

Page 78: Bai giang hệ quản trị cơ sở dữ liệu

77

Bài tập:

Bài 1: Trong CSDL SinhVien đã tạo ở bài 2 chương 4 thực hiện tạo các Store Procedure sau:

STT Tên thủ tục Chức năng

1 sp_Select_SinhVien (@Masv) Thực hiện các thủ tục tương tự đối với các bảng còn lại

Hiển thị thông tin dựa vào mã truyền vào

2 sp_Insert_Sinhvien(@Masv, @Hoten, @Diachi, @Malop) Thực hiện các thủ tục tương tự đối với các bảng còn lại

Thêm mới thông tin vào một bảng, Yêu cầu masv bắt buộc phải có, nếu không hiển thị thông báo lỗi

3 sp_Update_Sinhvien(@Masv, @Hoten, @Diachi, @Malop) Thực hiện các thủ tục tương tự đối với các bảng còn lại

Sửa thông tin dựa vào masv. Kiểm tra nếu biến nào khác NULL thì mới cập nhật

4 sp_Delete_SinhVien (@Masv) Thực hiện các thủ tục tương tự đối với các bảng còn lại

Xóa thông tin dựa vào mã truyền vào

Page 79: Bai giang hệ quản trị cơ sở dữ liệu

78

Chương 7: SQL Server và lập trình ứng dụng

I. Mô hình kết nối ứng dụng đến SQL server

1. Mô hình ADO

ADO viết tắt của cụm từ ActiveX Data Object là công cụ giao tiếp với dữ liệu của nhiều hệ quản trị CSDL khác nhau, SQL Server là một ví dụ cho việc giao tiếp.

ADO là kỹ thuật để truy cập cơ sở dữ liệu từ Web server. Bởi vì ADO được cung cấp dưới dạng thư viện ActivateX Server, ta có thể dùng ADO trong các ứng dụng Visual basic, ASP, C++.

ADO là giao diện dựa trên đối tượng cho công nghệ dữ liệu mới nổi gọi là OLE DB. OLE DB được thiết kế để thay thế ODBC như một phương thức truy cập dữ liệu. ODBC hiện thời là tiêu chuẩn phía Client sử dụng Windows rất phổ biến để truy cập dữ liệu quan hệ bởi vì nó thiết lập các Server cơ sở dữ liệu quan hệ càng tổng quát càng tốt đến các ứng dụng Client. OLE DB đi sâu hơn một bước, bằng cách làm cho tất cả nguồn dữ liệu trở thành tổng quát đối với ứng dụng Client.

Phần lớn các nhà lập trình không thao tác trực tiếp với OLE DB. Thay vào đó, họ lập trình với ADO, mô hình đối tượng cung cấp giao diện với OLE DB.

Page 80: Bai giang hệ quản trị cơ sở dữ liệu

79

Client Workstation

Client Application

Remote Data ObjectActiveX Data

Object

ODBC Driver

ODBC DriverManager

OLE DB DattaProvider

OLE DB

Relational Database

DocumentServer

EmailServer

Hình: Sử dụng ADO và OLE DB để tăng cường truy cập thông tin trong một cơ sở dữ liệu

2. Mô hình ADO.NET

Môi trường giới thiệu một mô hình mới sử dụng truy cập CSDL gọi là ADO.NET, mô hình làm việc mới này có những cải tiến rất nhiều so với ADO. Mô hình ADO.NET giới thiệu đối tượng DataSet thay thế RecordSet mà lập trình viên thường sử dụng trước đây khi làm việc với ADO.

Thành phần của ADO.NET được thiết kế nhằm tăng tốc độ truy xuất và thao tác dữ liệu trong môi trường đa lớp (n-tier). Hai thành phần chính của ADO.NET là đối tượng DataSet và .NET Provider.

.Net Provider là một tập các đối tượng trong thành phần .NET bao gồm Connection (Kết nối CSDL), Command (Lệnh thi hành), DataReader (Bộ đọc dữ liệu) và DataAdapter (Kết nối dữ liệu). Khi sử dụng DataSet ta có thể kết nối nguồn dữ liệu bước tiếp theo là thực hiện các truy vấn trên một hoặc nhiều bảng sau đó yêu cầu hệ thống đóng kết nối.

Page 81: Bai giang hệ quản trị cơ sở dữ liệu

80

Ngoài ra dữ liệu và giao diện người dùng hoàn toàn tách biệt nhau, một tầng dữ liệu Data Tier, tầng Business Tier và tầng Presentation Tier, các tầng này đều tách biệt. Kiến trúc này cho phép hàng ngàn người dùng truy cập và xử lý trên từng tầng của ứng dụng

3. Khác biệt giữa ADO và ADO.NET

Để hiểu về sự khác nhau giữa hai đối tượng này chúng ta so sánh đặc điểm của chúng. Một số nét trong bảng phân tích dưới đây s ẽ cho ta thấy rõ cải tiến của ADO.NET so với ADO.

Đặc điểm ADO ADO.NET

Dữ liệu thường trú trong bộ nhớ

Sử dụng đối tượng Recordset giống như một bảng dữ liệu

Sử dụng đối tượng Dataset có thể bao hàm một hay nhiều bảng hiện thực bởi đối tượng DataTable

Quan hệ (Relationship) giữa hai hay nhiều bảng.

Kết nối dữ liệu giữa các bảng bằng phát biểu Join và kết quả trả về một bảng dữ liệu

Hỗ trợ đối tượng DataRelation để kết nối nhiều bản ghi trong đối tượng DataTable này với đối tượng DataTable khác

Truy cập dữ liệu Duyệt mẩu tin tuần tự trên Recordset.

Cho phép duyệt không tuần tự nhiều mẩu tin trên bảng dữ liệu, cho phép định hướng một số mẩu tin trên bảng này và một số mẩu tin trên bảng khác.

Ngắt kết nối. Đối tượng Recordset hỗ trợ bởi đối tượng Connection gọi OLE DB Provider để kết nối với cơ sở dữ liệu.

Để kết nối cơ sở dữ liệu Visual Basic.Net sử dụng đối tượng Connection, DataSetCommand.

Lập trình Sử dụng đối tượng Connection để thực hiện chuyển giao câu lệnh.

Sử dụng đặc tính của XML, tự mô tả dữ liệu, đọc và gi dữ liệu dễ dàng.

Chia sẻ dữ liệu giữa các tầng hay thành phần sau khi ngắt kết nối.

Dùng COM để sắp xếp và chuyển giao dữ liệu (COM chuẩn).

Chuyển giao DataSet với tập tin XML.

Chuyển giao dữ liệu qua Firewall.

Firewall là cấu hình ngăn ngừa yêu cầu của người dùng ở mức hệ thống như đối tượng COM hay Banary

Không có vấn đề trở ngại, vì đối tượng DataSet của ADO.NET sử dụng tập tin dạng văn bản XML có thể truyền qua Firewall.

Hiệu lực. Cơ sở dữ liệu khóa, cơ sở dữ liệu hiệu lực kết nối trong thời gian dài.

Ngắt kết nối cơ sở dữ liệu.

Page 82: Bai giang hệ quản trị cơ sở dữ liệu

81

II. Truy cập dữ liệu với VB 6 và ADO

1. ADO

ADO sử dụng với CSDL quan hệ hoặc sử dụng với CSDL đa chiều, khi đó gọi là ADO MD (ADO Multi Dimention). ADO sử dụng kết nối kiểu OLE DB hoặc các thư viện kết nối COM (Component Object Model).

OLE DB sử dụng 2 phương thức Microsoft OLE DB Provider for SQL Server (SQLOLEDB) và Microsoft OLE DB Provider for ODBC (MSDASQL).

Khi thực hiện lập trình ứng dụng với SQL Server sử dụng ADO, người lập trình phải thực hiện các thao tác sau:

+ Kết nối đến nguồn dữ liệu (data source).

+ Gửi câu lệnh SQL đến nguồn dữ liệu.

+ Xử lý kết quả nhận được từ câu lệnh đã gửi.

+ Xử lý các lỗi và thông báo.

+ Ngắt kết nối đến nguồn dữ liệu.

a. Dùng đối tượng connection của ADO để kết nối với nguồn dữ liệu

Vị trí của đối tượng Connection trong mô hình của ADO như hình sau:

Property Methods EventsArttributes BeginTrans BeginTransCompleteCommandTimeOut Cancel CommittranCopmleteConnectionString Close ConnectionCompleteConnectionTimeOut CommitTrans DisconnectCursorLocation Execute ExexuteCompleteDefaultDataBase Open InfoMessageErrors collection OpenSchema RollBackTransCompleteIsolation Level RollbackTrans WillConnectMode WillExecuteProperties collectionProviderStateVersion

Property object

Errors collection

Error Object

Properties collection

Connection Object

Command object

Recordset object

Page 83: Bai giang hệ quản trị cơ sở dữ liệu

82

Dùng phương thức Open của đối tượng Connection để thiết lập kết nối với nguồn dữ liệu.

Kết nối đến SQL Server: Để kết nối đến SQL Server, các công việc cơ bản cần thực hiện như sau:

+ Cấu hình kết nối.

+ Thiết lập hoặc ngắt kết nối đến nguồn dữ liệu.

+ Xác định OLE DB provider.

+ Thực hiện truy vấn.

+ Quản lý các phiên làm việc trên kết nối.

Để kết nối với một CSDL SQL Server ta dùng trình cung cấp SQLOLEDB.1. Khi sử dụng SQLOLEDB.1 ta phải thực hiện đặt các thuộc tính sau cho kết nối:

+ Initial Catalog: Xác định CSDL.

+ Data Source: Xác định tên Server.

+ Integrated Security: Xác định chế độ xác thực, nếu là SSPI chế độ xác thực là Windows Authentication, hoặc xác định User ID, Password của chế độ xác thực SQL Server Authentication..

Ví dụ kết nối đến SQL Server sử dụng chuỗi kết nối:

Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;” & _ User ID=sa;Password=123456;Initial Catalog=QLDH;” & _ Data Source=MDC-FCE11146FF5\SQLEXPRESS"

Ví dụ thực hiện kết nối đến SQL Server đặt từng thuộc tính tiêng biệt từ Visual Basic:

' Initialize variables. Dim cn As New ADODB.Connection . . . Dim ServerName As String, DatabaseName As String, _ UserName As String, Password As String ' Put text box values into connection variables. ServerName = txtServerName.Text DatabaseName = txtDatabaseName.Text UserName = txtUserName.Text Password = txtPassword.Text ' Specify the OLE DB provider. cn.Provider = "sqloledb.1"

Page 84: Bai giang hệ quản trị cơ sở dữ liệu

83

' Set SQLOLEDB connection properties. cn.Properties("Data Source").Value = ServerName cn.Properties("Initial Catalog").Value = DatabaseName ' Decision code for login authorization type: ' Windows NT or SQL Server authentication. If optWinNTAuth.Value = True Then cn.Properties("Integrated Security").Value = "SSPI" Else cn.Properties("User ID").Value = UserName cn.Properties("Password").Value = Password End If ' Open the database. cn.Open

b. Sử dụng đối tượng Field để thao tác với các trường

Đối tượng Field thể hiện một trường trong một cấu trúc dữ liệu. Các đối tượng TableDef, Recordset, Relation và Index đều chứa các tập hợp trường.

Ta có thể lấy giá trị của một trường bằng cách kiểm tra giá trị của thuộc tính Value của một đối tượng Field .(Bởi vì thuộc tính Value là thuộc tính mặc định của đối tượng Field, ta chỉ cần tham chiếu đến đối tượng Field; ta không nhất thiết phải tham chiếu tường minh đến thuộc tính Value).

c. Sử dụng đối tượng Recordset của ADO để thao tác với dữ liệu

Đối tượng Recordset của ADO là phương pháp truy cập thông tin được trả về từ trình cung cấp dữ liệu.Vị trí của Recordset của ADO trong mô hình đối tượng ADO như sau:

Page 85: Bai giang hệ quản trị cơ sở dữ liệu

84

Ví dụ: Sử dụng đối tượng Recordset lưu trữ kết quả của lệnh Select.

Dim cn As New ADODB.Connection Dim rs As ADODB.Recordset . . . Set rs = New ADODB.Recordset rs.Open "select * from KhachHang", cn rs.MoveFirst . . . ' Code to loop through result set(s)

d. Sử dụng các phương thức duyệt với đối tượng Recorset

Sau khi tạo xong một đối tượng Recordset, ta có thể dùng các phương thức duyệt để di chuyển qua từng mẩu tin trong recordset. Ta chủ yếu thực hiện điều này trong trường hợp cần lấy về dữ liệu từ mọi mẩu tin trong một recordset, mặc dù ta còn có thể sử dụng chúng để cho phép người sử dụng chỉ duyệt qua các mẩu tin.

Các phương thức duyệt của một đối tượng Recrdset gồm có:

• MoveFirst: di chuyển đến mẩu tin đầu tiên trong recordset.

• MoveNext: di chuyển đến mẩu tin kế tiếp trong recordset.

• MovePrevious: di chuyển về mẩu tin trước đó trong recordset.

• MoveLast: di chuyển đến mẩu tin cuối cùng trong recordset.

• Move: di chuyển một số mẩu tin đã được chỉ định trước.

Page 86: Bai giang hệ quản trị cơ sở dữ liệu

85

Sử dụng BOF và EOF để duyệt qua Recordset

Ngoài các phương thức trên, đối tượng Recordset cung cấp 2 thuộc tính cho ta biết khi ta di chuyển về đầu hoặc về cuối recordset.

• Thuộc tính EOF(end of file) là True khi ta di chuyển quá mẩu tin cuối cùng của recordset.

• Thuộc tính BOF(begin of file) là True khi ta di chuyển đến một vị trí trước mẩu tin thứ nhất trong recordset.

BOF

MÈu tin 1

MÈu tin 2...

EOF

Hình BOF và EOF trong một Recordset.

Do until EOF ‘perform action on the data or read values from fields rs.MoveNext Loop

Dùng BOF và EOF để xác định một Recordset có rỗng hay không

Thuộc tính BOF và EOF luôn có sẵn, thậm chí trong một recordset không có mẩu tin. Trên thực tế, cách tốt nhất để xem recordset có chứa mẩu tin hay không là kiểm tra giá trị của cả hai thuộc tính EOF và BOF. Nếu cả BOF và EOF đều là True, recordset không chứa mẩu tin.

Dùng thuộc tính RecordCout để xác định số mẩu tin trong một recordset

Ta dùng thuộc tính RecordCount để xác định số mẩu tin trong một recordset. Nhưng lưu ý rằng giá trị của RecordCount sẽ không hợp lệ nếu ta chưa chuyển đến mẩu tin cuối cùng trong Recordset.

e. Dùng phương thức Edit để sửa đổi giá trị trong một mẩu tin

Ta có thể sửa đổi mâu tin hiện hành trong một đối tượng Recordset cập nhật được bằng cách dùng phương thức Edit và Update của recordset. muống sửa đổi giá trị của một trường trong một Recordset, theo các bước sau :

1. Dùng các phương thức duyệt của đối tượng Recordset để di chuyển đến mẩu tin cần sửa đổi.

Page 87: Bai giang hệ quản trị cơ sở dữ liệu

86

2. Thi hành phương thức Edit của recordset.

3. Dùng tập hợp Fields của đối tượng Recordset để gán giá trị cho trường trong mẩu tin :

rs.Fields(“LastName”) = “Smith”

hoặc

rs!LastName = “Smith”

4. Lưu mẩu tin vào cơ sở dữ liệu bằng cách dùng phương thức Update của Recordset.

f. Sử dụng phương thức AddNew và Update để tạo mẩu tin mới

Ta có thể tạo một mẩu tin mới trong đối tượng Recordset cập nhật được bất kỳ bằng cách dùng phương thức AddNew và Update. Tạo một mẩu tin mới trong một recordset là quá trình 3 bước:

1. Thi hành phương thức AddNew của RecordSet. Nó thêm một mẩu tin mới, trắng vào cuối của recordset.

2. Gán giá trị cho mẩu tin mới bằng cách sử dụng câu lệnh gán mà ta thường dùng với các trường cơ sở dữ liệu.

3. Dùng phương thức Update để ghi mẩu tin vào cơ sở dữ liệu.

2. VÍ DỤ

Xây dựng Form cho phép xem và nhập thông tin về các khách hàng như sau:

TT Đối tượng Thuộc tính Giá trị 1 Form Name

Caption Form1 Customers

Page 88: Bai giang hệ quản trị cơ sở dữ liệu

87

2 Label Name Caption

Lable1 Thông tin khách hàng

3 Label Name Caption

LblMaKhachHang Mã khách hàng

4 Label Name Caption

LblHoDem Họ Đệm

5 Label Name Caption

LblTen Tên

6 Label Name Caption

LblGioiTinh Giới tính

7 Label Name Caption

LblDiachi Địa chỉ

8 Label Name Caption

LblSoDienThoai Số điện thoại

9 Label Name Caption

LblEmail Email

10 Label Name Caption

LblStatus “”

11 TextBox Name txtMaKhachHang 12 TextBox Name txtHoDem 13 TextBox Name txtTen 14 TextBox Name txtGioiTinh 15 TextBox Name txtDiaChi 16 TextBox Name txtSoDienThoai 17 TextBox Name txtEmail 18 Button Name

Text cmdAdd Add

19 Button Name Text

cmdEdit Edit

20 Button Name Text

cmdDelete Delete

21 Button Name Text

cmdRefresh Refresh

22 Button Name Text

cmdClose Close

23 Button Name Text

cmdUpdate Update

24 Button Name Text

cmdCancel Cancel

25 Button Name Text

cmdFirst <<

26 Button Name Text

cmdPrevious <

27 Button Name Text

cmdNext >

28 Button Name Text

cmdLast >>

Page 89: Bai giang hệ quản trị cơ sở dữ liệu

88

Dim WithEvents adoPrimaryRS As Recordset Dim mbChangedByCode As Boolean Dim mvBookMark As Variant Dim mbEditFlag As Boolean Dim mbAddNewFlag As Boolean Dim mbDataChanged As Boolean Private Sub Form_Load() Dim db As ADODB.Connection Set db = New ADODB.Connection db.CursorLocation = adUseClient db.Open "Provider=SQLOLEDB.1;Persist Security Info=False; _

User ID=sa;Password=123456;Initial Catalog=QLDH; _ Data Source=MDC-FCE11146FF5\SQLEXPRESS"

Set adoPrimaryRS = New ADODB.Recordset

adoPrimaryRS.Open "select * from KhachHang", db, adOpenStatic, adLockOptimistic

‘Liên kết các điều khiển với ADO Set txtMaKhachHang.DataSource = adoPrimaryRS txtMaKhachHang.DataField = "MaKhachHang" Set txtHoDem.DataSource = adoPrimaryRS txtHoDem.DataField = "HoDem" Set txtTen.DataSource = adoPrimaryRS txtTen.DataField = "Ten" Set txtGioiTinh.DataSource = adoPrimaryRS txtGioiTinh.DataField = "GioiTinh" Set txtDiaChi.DataSource = adoPrimaryRS txtDiaChi.DataField = "DiaChi" Set txtSoDienThoai.DataSource = adoPrimaryRS txtSoDienThoai.DataField = "SoDienThoai" Set txtEmail.DataSource = adoPrimaryRS txtEmail.DataField = "Email" mbDataChanged = False End Sub Private Sub adoPrimaryRS_MoveComplete(ByVal adReason _ As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, _ adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

‘Hiển thị vị trí của bản ghi hiện hành lblStatus.Caption = "Record: " & _ CStr(adoPrimaryRS.AbsolutePosition)

End Sub ‘Thực hiện thêm bản ghi mới Private Sub cmdAdd_Click() On Error GoTo AddErr

Page 90: Bai giang hệ quản trị cơ sở dữ liệu

89

With adoPrimaryRS If Not (.BOF And .EOF) Then mvBookMark = .Bookmark End If .AddNew lblStatus.Caption = "Add record" mbAddNewFlag = True SetButtons False End With Exit Sub

AddErr: MsgBox Err.Description End Sub ‘Thực hiện xóa bản ghi hiện hành Private Sub cmdDelete_Click() On Error GoTo DeleteErr With adoPrimaryRS .Delete .MoveNext If .EOF Then .MoveLast End With Exit Sub

DeleteErr: MsgBox Err.Description End Sub Private Sub cmdRefresh_Click() 'This is only needed for multi user apps On Error GoTo RefreshErr adoPrimaryRS.Requery Exit Sub

RefreshErr: MsgBox Err.Description End Sub ‘Thực hiện chỉnh sửa các bản ghi Private Sub cmdEdit_Click() On Error GoTo EditErr lblStatus.Caption = "Edit record" mbEditFlag = True SetButtons False Exit Sub EditErr:

MsgBox Err.Description End Sub

Page 91: Bai giang hệ quản trị cơ sở dữ liệu

90

Private Sub cmdCancel_Click() On Error Resume Next SetButtons True

mbEditFlag = False mbAddNewFlag = False adoPrimaryRS.CancelUpdate If mvBookMark > 0 Then adoPrimaryRS.Bookmark = mvBookMark Else adoPrimaryRS.MoveFirst End If mbDataChanged = False End Sub ’Thực hiện cập nhật các bản ghi Private Sub cmdUpdate_Click()

On Error GoTo UpdateErr adoPrimaryRS.UpdateBatch adAffectAll If mbAddNewFlag Then

adoPrimaryRS.MoveLast ‘Di chuyển về bản ghi cuối cùng End If

mbEditFlag = False mbAddNewFlag = False SetButtons True mbDataChanged = False Exit Sub

UpdateErr: MsgBox Err.Description

End Sub Private Sub cmdClose_Click() Unload Me End Sub ’Thực hiện di chuyển đến bản ghi đầu tiên Private Sub cmdFirst_Click() On Error GoTo GoFirstError

adoPrimaryRS.MoveFirst ’di chuyển đến bản ghi đầu tiên mbDataChanged = False Exit Sub

GoFirstError: MsgBox Err.Description End Sub ’Thực hiện di chuyển đến bản ghi cuối cùng Private Sub cmdLast_Click() On Error GoTo GoLastError

Page 92: Bai giang hệ quản trị cơ sở dữ liệu

91

adoPrimaryRS.MoveLast mbDataChanged = False Exit Sub

GoLastError: MsgBox Err.Description End Sub ’Thực hiện di chuyển đến bản ghi tiếp theo Private Sub cmdNext_Click() On Error GoTo GoNextError If Not adoPrimaryRS.EOF Then adoPrimaryRS.MoveNext If adoPrimaryRS.EOF And adoPrimaryRS.RecordCount > 0 Then Beep adoPrimaryRS.MoveLast End If mbDataChanged = False Exit Sub

GoNextError: MsgBox Err.Description End Sub ’Thực hiện di chuyển đến bản ghi trước đó Private Sub cmdPrevious_Click() On Error GoTo GoPrevError If Not adoPrimaryRS.BOF Then adoPrimaryRS.MovePrevious If adoPrimaryRS.BOF And adoPrimaryRS.RecordCount > 0 Then Beep adoPrimaryRS.MoveFirst End If ’Hiển thị bản ghi hiện hành mbDataChanged = False Exit Sub

GoPrevError: MsgBox Err.Description End Sub ’Cho phép hiển thị (ẩn) và kích hoạt (không kích hoạt) các nút lệnh Private Sub SetButtons(bVal As Boolean) cmdAdd.Visible = bVal cmdEdit.Visible = bVal cmdUpdate.Visible = Not bVal

Page 93: Bai giang hệ quản trị cơ sở dữ liệu

92

cmdCancel.Visible = Not bVal cmdDelete.Visible = bVal cmdClose.Visible = bVal cmdRefresh.Visible = bVal cmdNext.Enabled = bVal cmdFirst.Enabled = bVal cmdLast.Enabled = bVal cmdPrevious.Enabled = bVal End Sub

III. Truy cập dữ liệu với VB.NET và ADO.NET

1. ADO.NET

a. Các PROVIDER trong ADO.NET

Khi lấy dữ liệu từ nguồn dữ liệu (dữ liệu quan hệ, tập tin văn bản, thông tin trong email, …), bạn cần phải quản lý và sử dụng Provider. Để quản lý các Provider cho nhiều loại dữ liệu, bạn phải bao gồm tập hợp của lớp cho phép truy cập nhiều loại dữ liệu.

Provider được xem như một cầu nối giữa ứng dụng với cơ sở dữ liệu, chúng dùng để kết nối nguồn dữ liệu, thực hiện câu lệnh và nhận dưc liệu trả về. Những dữ liệu này có thể được xử lý trực tiếp, hay lữu trữ trên đối tượng DataSet của ADO.NET.

Nếu dữ liệu lưu trữ trên DataSet, chúng có thể trình bày cho người dùng với nhiều thể loại, như kết hợp dữ liệu từ nhiều bảng hay dữ liệu truy xuất từ nhiều tầng. Provider cũng kết hợp sự thay đổi của dữ liệu trở lại nguồn dữ liệu. ADO.NET bao gồm hai Provider như sau:

- SQL Server.NET data provider: Sử dụng cho SQL Server 7.0 và các phiên bản sau.

- OLE DB.NET data provider: Sử dụng cho dữ liệu kết xuất thông qua OLE DB.

Trong khi lập trình, sử dụng hai Provider ở trên về cơ bản giống như nhau, cả hai đối tượng này thuộc không gian tên System.Data, nhưng khác nhau bởi hai từ Sql và OleDb. Hai Provider này cung cấp các chức năng tương tự nhau như trong bảng sau.

.NET Data Provider của ADO.NET

SqlCommand OleDbCommand SqlConnection OleDbConnection

Page 94: Bai giang hệ quản trị cơ sở dữ liệu

93

SqlDataAdapter OleDbDataAdapter SqlDataReader OleDbDataReader SqlParameter OleDbParameter

Các đối tượng Provider trình bày ở trên, chứa đựng đối tượng hiện thực cho các nguyên tố .NET Provider bao gồm: Connection, Command, DataReader, DataAdapter như trong bảng sau:

Connection Thiết lập kết nối cơ sở dữ liệu với nguồn dữ liệu. Command Thực hiện lên trên nguồn dữ liệu, đặt vào các tham số và thu nhận

các chuyển tác từ kết nối Connection. DataReader Đọc luồng dữ liệu từ nguồn dữ liệu theo thuộc tính Forward-only

(một chiều). DataAdapter Cư trú một DataSet và giải quyết vấn đề cập nhật dữ liệu với nguồn

dữ liệu.

Cũng như đã giới thiệu ở trên, .NET Framework bao gồm hai đối tượng, SQL Server.NET Data Provider sử dụng để làm việc với cơ sở dữ liệu SQL Server và OLE DB.NET Data Provider sử dụng để làm việc với cơ sở dữ liệu SQL Server và Access.

b. Đối tượng Connection

Khi làm việc với cơ sở dữ liệu SQL, bạn sử dụng không gian tên System.Data.SqlClient. Trong trường hợp làm việc với cơ sở dữ liệu Access, bạn khai báo và sử dụng không gian tên System.Data.OleDb.

Như giới thiệu ở trên, để sử dụng các đối tượng ADO.NET đối với cơ sở dữ liệu SQLServer, chúng ta sử dụng đối tượng SqlConnection. Để làm việc với đối tượng này, chúng ta tìm hiểu chúng qua từng công đoạn thực hiện của chúng được trình bày dưới đây.

Để khai báo và sử dụng đối tượng SqlConnection, trước tiên bạn phải khai báo đầu mỗi Class phát biểu Imports để Import không gian tên System.Data và System.Data.SqlClient như sau:

Imports System.Data Imports System.Data.SqlClient

Để khai báo đối tượng SqlConnection, bạn sử dụng cú pháp: Dim myconn As Sqlconnection

Sau khi khai báo biến đối tượng SqlConnection, bạn có thể khởi tạo đối tượng này với chuỗi kết nối (bao gồm các thông tin IP hay tên Server, UID và PWD

Page 95: Bai giang hệ quản trị cơ sở dữ liệu

94

là tài khoản và mật khẩu để đăng nhập ứng dụng cơ sở dữ liệu SQL Server, Database là tên cở sở dữ liệu).

c. Làm việc với đối tượng Connection

Sau khi khai báo và khởi tạo đối tượng SqlConnection hay OleDbConnection bạn có thể mở kết nối cơ sở dữ liệu SQL Server hoặc Access bằng phương thức Open() có cú pháp:

MyConn.Open()

Sau khi thực thi một số công việc như thực thi phát biểu SQL hay khai báo và sử dụng các đối tượng khác, nếu bạn không sử dụng đối tượng Connnection, bạn khai báo đóng kết nối này bằng khai báo phương thức Close() như sau:

MyConn.Close()

Nếu như sau khi đóng đối tượng Connection bạn tiếp tục mở cới cơ sở dữ liệu khác, bạn không cần giải phóng biến này. Tuy nhiên, trong trường hợp không tiếp tục sử dụng, bạn nên giải phóng bộ nhớ biến này bằng cách sử dụng phương thức Dispose như khai báo sau:

MyConn.Dispose()

d. Sử dụng đối tượng Command.

Sau khi đã làm quen cách kết nối cơ sở dữ liệu SQL Server bằng đối tượng SqlConnection hay đối tượng OleDbConnection, bạn có thể thấy các khai báo tương tự nhau, trong phần này chúng ta tìm hiểu cách sử dụng đối tượng SqlConnection và cơ sở dữ liệu SQL Server.

Nếu như bạn muốn thực thi phát biểu SQL dạng hành động (Delete, Insert, Update, Create, Drop, Alter) hay các thủ tục (Stored procedure) hành động, bạn có thể sử dụng phương thức ExecuteNonQuery của đối tượng SqlCommand.

Tương tự như vậy, trong trường hợp điền dữ liệu vào đối tượng DataReader (sqlDataReader, OleDbDataReader, …), bạn có thể sử dụng phương thức ExecuteReader của đối tượng SqlCommand.

Để khai báo và sử dụng đối tượng Command, bạn thực hiện tương tự như khai báo và khởi tạo đối tượng Connection. Trong trường hợp bạn sử dụng đối tượng SqlConnection, bạn khai báo đối tượng SqlCommand như sau:

Dim MyCom As SqlCommand

Nếu bạn làm việc với cơ sở dữ liệu Access, tức trước đó bạn khai báo và khởi tạo đối tượng OleDbConnection thì bạn khai báo đối tượng OleDbCommand như sau:

Page 96: Bai giang hệ quản trị cơ sở dữ liệu

95

Dim MyCom As OleDbCommand

Sau khi khai báo đối tượng Command, tuỳ vào đối tượng Connection mà bạn sử dụng đối tượng SqlCommand hay OleDbCommand. Đối với SqlConnection, để khởi tạo và sử dụng đối tượng Command, bạn có thể sử dụng cú pháp sau:

myCom=New SqlCommand (strSQL, MySqlConnection)

Chẳng hạn, trong trường hợp chúng ta kết nối cơ sở dữ liệu SQL Server có tên Northwind, bạn có thể khai báo như sau:

Dim Conn As String Conn=”Database=Northwind;UID=sa;” Conn+=”Server=localhost” Dim myConn As New SqlConnection(Conn) Dim strSQL as string strSQL=”Delete from customers where country= ’A’” Dim myCom As New SqlCommand (strSQL, myConn)

e. Thực thi phát biểu SQL dạng hành động.

Nếu như bạn thêm dữ liệu, cập nhật dữ liệu, xoá mẩu tin hay thực thi một hành động nào đó đối cới các đối tượng cơ sở dữ liệu, bạn có thể sử dụng đối tượng Command với Connection.

Chẳng hạn, trong trường hợp bạn xoá mẩu tin của bảng Customers có Country bằng Vietnam trong cơ sở dữ liệu SQL Server, bạn có thể sử dụng phương thức ExecuteNonQuery của đối tượng Command bằng khai báo như ví dụ sau:

Xoá mẩu tin trong bảng Customers Private Sub cmdSQL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSQL.Click

’Khai báo và khởi tạo đối tượng SqlConnection Dim myConn As New SqlConnection (Conn) ’Khai báo phát biểu SQL dạng Delete Dim strSQL As String strSQL=”Delete from Customers where” strSQL+=”Country=’China’” ’Khai báo và khởi tạo đối tượng SqlCommand Dim myCom As New SqlCommand (strSQL, myConn) ’Sử dụng cấu trúc quản lý lỗi Try

’Mở kết nối có sở dữ liệu myConn.Open() ’Thực thi câu lệnh SQL dạng hành động myCom. ExcuteNonQuery () ’Đóng kết nối cơ sở dữ liệu myConn.Close()

Page 97: Bai giang hệ quản trị cơ sở dữ liệu

96

Catch myException As Exception ’Nếu lỗi phát sinh, chúng ta thông báo lỗi ra màn hình MessageBox.Show(myException.ToString())

End Try End Sub

f. Khai báo và sử dụng đối tượng DataReader

Khi bạn muốn truy cập dữ liệu với số lượng nhỏ và không cần xử lý hay điều hướng trên mẩu tin, bạn có thể sử dụng đối tượng SqlDataReader hay OleDbDataReader. Lưu ý rằng chúng ta không tìm hiểu chi tiết lý thuyết mà chỉ tập trung vào các ví dụ cụ thể.

Trong trường hợp bạn muốn viết đoạn chương trình dùng để kiểm tra người sử dụng đó tồn tại trong bảng của có sở dữ liệu SQL Server hay không, bạn chỉ cần sử dụng đối tượng DataReader.

Để điền dữ liệu từ dữ liệu nguồn vào đối tượng DataReader, bạn sử dụng phương thức ExecuteReader của đối tượng Command.

g. Đối tượng DataAdapter

Đối tượng DataAdapter dùng để kết nối vào cơ sở dữ liệu và thực hiện quá trình điền dữ liệu vào bộ nhớ thường trú DataSet, kế đến DataAdapter kết nối trở lại cơ sở dữ liệu và cập nhật dữ liệu dựa trên tập dữ liệu thay đổi trong DataSet.

Ngoài ra, đối tượng DataAdapter được dùng như một liên kết giữa đối tượng DataSet và nguồn dữ liệu. DataAdapter được dùng để truy vấn hay cập nhật, cùng với sự có mặt của kỹ thuật xử lý bằng ngôn ngữ SQL trên dữ liệu nguồn.

Để khai báo đối tượng DataAdapter cũng tương tự như khai báo các đối tượng khác của ADO.NET, bạn sử dụng cú pháp như sau:

Dim myAdapter As SqlDataAdapter myAdapter = New SqlDataAdapter (strSQL, myConn)

Trong đó, strSQL là phát biểu SQL dạng Select và myConn là biến đối tượng SqlConnection. Trong trường hợp bạn sử dụng cơ sở dữ liệu Access, bạn có thể khai báo như sau:

Dim myAdapter As OleDbDataAdapter myAdapter = New OleDbDataAdapter (strSQL, myConn)

Khi làm việc với đối DataAdapter, bạn có thể sử dụng đối tượng này để thực thi các phát biểu SQL dạng hành động và kết hợp với đối tượng DataSet để trình bày dữ liệu trên Form.

Chẳng hạn, trong trường hợp bạn muốn điền dữ liệu từ dữ liệu nguồn vào đối

Page 98: Bai giang hệ quản trị cơ sở dữ liệu

97

tượng DataSet, bạn có thể sử dụng phương thức Fill của DataAdapter như sau: myAdapter.Fill(myDataSet, strSQL)

Tương tự như vậy, trong trường hợp cập nhật dữ liệu từ đối tượng DataSet vào dữ liệu nguồn, bạn có thể sử dụng phương thức Update của DataAdapter.

Private Sub cmdUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdUpdate.Click

dgView.Update() myAdapter.Update(myDataSet)

End Sub

DataSet có thể dùng làm một ảnh cơ sở đữ liệu của bất kỳ nguồn dữ liệu nào. Chính vì tính năng này .NET framework mới có khả năng lập trình theo mô hình disconnected. Sau khi kết nối và lấy về dữ liệu lưu trữ trong dataset, lập trình viên hoàn toàn có thể xử lý bảng, row, constraint, relation mà không cần kết nối với database thực thụ. Tất cả các định nghĩa của database như View, Table, Relation, Constraint .. đều có thể lưu trong dataset ở dạng các đối tượng DataView, DataTable, Constraint, Relation, … Nếu không hiểu rõ về dataset và mô hình disconnect của ADO.NET thì rất khó viết ứng dụg CSDL.

Không chỉ sử dụng đối tượng DataSet để truy vấn dữ liệu mà bạn còn có thể di chuyển dữ liệu bất kỳ và gửi dữ liệu thông qua định dạng XML.

Như đã trình bày ở trên lớp System.Data.SQLClient thiết kế để sử dụng cho SQL Server 7.0 và các phiên bản mới hơn. Khi làm việc với đối tượng DataSet, chúng ta có hai cách sử dụng đối tượng này để trình bày dữ liệu. Cách thứ nhất bạn sử dụng đối tượng trên Form, cách thứ hai viết bằng mã Visual Basic.NET.

2. Các ví dụ:

Ví dụ 1: Trong VB.NET ta xây dựng Form cho phép hiển thị dữ liệu của bảng KhachHang lên điều khiển lưới

Page 99: Bai giang hệ quản trị cơ sở dữ liệu

98

TT Đối tượng Thuộc tính Giá trị 1 Form Name

Caption Form1 Customers

2 DataGidView Name dgView 3 Button btnGetData GetData 4 Button btnUpdate Update

Imports System.Data Imports System.Data.SqlClient Public Class frmCustemers

#Region "Các khai báo chung" Dim myConnString As String = "server=MDC\SQLEXPRESS;” & _

“Database=QLDH;User ID=sa;password=123456" Dim Conn As New SqlConnection(myConnString) Dim myAdapter As New SqlDataAdapter Dim dsQLDH As DataSet Dim mySelectCommand As New SqlCommand #End Region Private Sub btnGetData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetData.Click mySelectCommand.CommandText = "SELECT * FROM KhachHang" mySelectCommand.Connection = Conn myAdapter.SelectCommand = mySelectCommand dsQLDH = New DataSet ’Điền dữ liệu vào Dataset myAdapter.Fill(dsQLDH, "KhachHang") ’Điền dữ liệu từ Dataset vào DataGridView With dgView .DataSource = dsQLDH .DataMember = dsQLDH.Tables("KhachHang").ToString End With End Sub ’Cập nhật những thay đổi của dữ liệu trên lưới vào CSDL Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click dgView.Update() myAdapter.Update(dsQLDH, "KhachHang") End Sub

End Class

Page 100: Bai giang hệ quản trị cơ sở dữ liệu

99

Ví dụ 2: Xây dựng chương trình có chức năng tương tự như ví dụ 1 nhưng sử dụng thủ tục lưu trữ.

Bước 1:

Trong CSDL QLDH ta xây dựng thủ tục lưu trữ như sau:

Create proc sp_SelectKhachHang as select * from KhachHang

Bước 2:

Trong VB.NET ta xây dựng Form tương tự như ví dụ 1, nhưng đưa vào đoạn lệnh sau:

Imports System.Data Imports System.Data.SqlClient Public Class frmCustemers #Region "Các khai báo chung" Dim myConnString As String = server=MDC\SQLEXPRESS;” & _

“Database=QLDH;User ID=sa;password=123456" Dim Conn As New SqlConnection(myConnString) Dim myAdapter As New SqlDataAdapter Dim dsQLDH As DataSet Dim mySelectCommand As New SqlCommand("sp_SelectKhachHang",_ Conn) Dim myBuilder As New SqlCommandBuilder(myAdapter) #End Region

Private Sub btnGetData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetData.Click

mySelectCommand.CommandType = CommandType.StoredProcedure mySelectCommand.Connection = Conn myAdapter.SelectCommand = mySelectCommand dsQLDH = New DataSet myAdapter.Fill(dsQLDH, "KhachHang") With dgView .DataSource = dsQLDH .DataMember = dsQLDH.Tables("KhachHang").ToString End With End Sub

Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click

dgView.Update() myAdapter.Update(dsQLDH, "KhachHang") End Sub End Class

Page 101: Bai giang hệ quản trị cơ sở dữ liệu

100

Ví dụ 3: Xây dựng Form cho phép xem và nhập thông tin về các khách hàng như sau:

TT Đối tượng Thuộc tính Giá trị 1 Form Name

Caption Form1 Khách hàng

2 Label Name Caption

Lable1 Thông tin khách hàng

3 Label Name Caption

LblMaKhachHang Mã khách hàng

4 Label Name Caption

LblHoDem Họ Đệm

5 Label Name Caption

LblTen Tên

6 Label Name Caption

LblNgaysinh Ngày sinh

7 Label Name Caption

LblGioiTinh Giới tính

8 Label Name Caption

LblDiachi Địa chỉ

9 Label Name Caption

LblSoDienThoai Số điện thoại

10 Label Name Caption

LblEmail Email

11 TextBox Name txtRecordPosition 12 TextBox Name txtMaKhachHang

Page 102: Bai giang hệ quản trị cơ sở dữ liệu

101

13 TextBox Name txtHoDem 14 TextBox Name txtTen 15 TextBox Name txtGioiTinh 16 TextBox Name txtDiaChi 17 TextBox Name txtSoDienThoai 18 TextBox Name txtEmail 19 Button Name

Text btnAdd Add

20 Button Name Text

btnEdit Edit

21 Button Name Text

btnDelete Delete

22 Button Name Text

btnClose Close

23 Button Name Text

btnUpdate Update

24 Button Name Text

btnCancel Cancel

25 Button Name Text

btnMoveFirst <<

26 Button Name Text

btnMovePrevious <

27 Button Name Text

btnMoveNext >

28 Button Name Text

btnMoveLast >>

Imports System.Data Imports System.Data.SqlClient

Public Class frmKhachhang #Region "Các khai báo chung" Dim myConnString As String = "server=MDC\SQLEXPRESS;” & _

Database=QLDH;User ID=sa;password=123456" Dim Conn As New SqlConnection(myConnString) Dim myAdapter As New SqlDataAdapter Dim dsQLDH As DataSet Dim mySelectCommand As New SqlCommand Dim myBindingManagerBase As BindingManagerBase Dim myBuilder As New SqlCommandBuilder(myAdapter) #End Region Private Sub UnhandledExceptionHandler() 'Thủ tục thông báo lỗi MsgBox("Một lỗi xảy ra." & vbCrLf & "Mã lỗi: " &_ Err.Number & _

vbCrLf & "Mô tả: " & Err.Description & vbCrLf & "Nguồn: " &_ Err.Source)

End Sub

Page 103: Bai giang hệ quản trị cơ sở dữ liệu

102

Private Sub frmKhachhang_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

mySelectCommand.CommandText = "SELECT * FROM KhachHang" mySelectCommand.Connection = Conn myAdapter.SelectCommand = mySelectCommand dsQLDH = New DataSet myAdapter.Fill(dsQLDH, "KhachHang") Binding() ShowPosition() End Sub

Private Sub Binding() 'Gán kết tới DataSet các điều khiên

txtMakhachhang.DataBindings.Add(New Binding("Text", dsQLDH, _ "KhachHang.MaKhachHang")) txtHodem.DataBindings.Add(New Binding("Text", dsQLDH, _ "KhachHang.HoDem")) txtTen.DataBindings.Add(New Binding("Text", dsQLDH, _ "KhachHang.Ten")) txtNgaysinh.DataBindings.Add(New Binding("Text", dsQLDH, _ "KhachHang.Ngaysinh")) txtDiachi.DataBindings.Add(New Binding("Text", dsQLDH, _ "KhachHang.Diachi")) txtSodienthoai.DataBindings.Add(New Binding("Text", dsQLDH, _ "KhachHang.Sodienthoai")) txtGioitinh.DataBindings.Add(New Binding("Text", dsQLDH, _ "KhachHang.Gioitinh")) myBindingManagerBase = Me.BindingContext(dsQLDH,_ "KhachHang")

End Sub

Private Sub btnMoveFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMoveFirst.Click

Try ’Di chuyển đến bản ghi đầu tiên myBindingManagerBase.Position = 0 ShowPosition() Catch UnhandledExceptionHandler() End Try End Sub

Private Sub btnMovePrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMovePrevious.Click

Try myBindingManagerBase.Position -= 1 ShowPosition()

Page 104: Bai giang hệ quản trị cơ sở dữ liệu

103

Catch UnhandledExceptionHandler() End Try End Sub

Private Sub btnMoveLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMoveLast.Click

Try ’Di chuyển đến bản ghi cuối cùng

myBindingManagerBase.Position = _ myBindingManagerBase.Count - 1

ShowPosition() Catch UnhandledExceptionHandler() End Try End Sub

Private Sub btnMoveNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMoveNext.Click

Try ’Di chuyển đến bản ghi tiếp theo myBindingManagerBase.Position += 1 ShowPosition() Catch UnhandledExceptionHandler() End Try End Sub Private Sub ShowPosition() ' Hiển thị bản ghi hiện hành và số bản ghi

txtRecordPosition.Text = "Bản ghi " & _ myBindingManagerBase.Position + 1 & " / " & _ myBindingManagerBase.Count()

End Sub

Private Sub SetButtons(ByVal bVal As Boolean) ’Cho ẩn (hiện), kích hoạt (không kích hoạt) các nút lệnh btnAdd.Visible = bVal btnEdit.Visible = bVal btnUpdate.Visible = Not bVal btnCancel.Visible = Not bVal btnDelete.Visible = bVal btnClose.Visible = bVal btnMoveNext.Enabled = bVal btnMoveFirst.Enabled = bVal btnMoveLast.Enabled = bVal btnMovePrevious.Enabled = bVal End Sub

Page 105: Bai giang hệ quản trị cơ sở dữ liệu

104

Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click

Try ’Thêm bản ghi mới Dim myRow As DataRow

SetButtons(False) myRow = dsQLDH.Tables("KhachHang").NewRow() dsQLDH.Tables("KhachHang").Rows.Add(myRow)

myBindingManagerBase.Position = _ myBindingManagerBase.Count - 1

ShowPosition() txtMakhachhang.ReadOnly = True txtHodem.Focus() Catch UnhandledExceptionHandler() End Try End Sub

Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click

Try ’Cập nhật các thay đổi từ Dataset và CSDL

myRow = dsQLDH.Tables("KhachHang")._ Rows(myBindingManagerBase.Position)

myAdapter.Update(dsQLDH, "KhachHang") dsQLDH.AcceptChanges() SetButtons(True) Catch UnhandledExceptionHandler() End Try End Sub

Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click

Try SetButtons(True) dsQLDH.RejectChanges() myBindingManagerBase.Position = 0 ShowPosition() Catch UnhandledExceptionHandler() End Try End Sub

Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click

End End Sub

Page 106: Bai giang hệ quản trị cơ sở dữ liệu

105

Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click

Try 'Xóa bản ghi hiện hành Dim oRow As DataRow Dim oTable As DataTable Dim intResponse As Integer SetButtons(False)

intResponse = MsgBox("Bạn có muốn xóa bản ghi hiện hành hay không?", MsgBoxStyle.YesNo, "Confirm Delete")

If intResponse = vbYes Then oTable = dsQLDH.Tables("KhachHang") oRow = oTable.Rows(myBindingManagerBase.Position)

If Not oRow.RowState = DataRowState.Deleted Then _ oRow.Delete()

myBindingManagerBase.Position -= 1 End If ShowPosition() Catch UnhandledExceptionHandler() End Try End Sub

Private Sub btnEdit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEdit.Click

’Sửa đổi nội dung bản ghi hiện hành SetButtons(False) End Sub End Class

Page 107: Bai giang hệ quản trị cơ sở dữ liệu

106

PHỤ LỤC

HƯỚNG DẪN CÀI ĐẶT SQL SERVER 2005 EXPRESS

Phần này hướng dẫn nhanh cách cài đặt SQL Server 2005 Express, giúp các bạn biết cần phải chuẩn bị gì, trình tự cài đặt ra sao trước khi bắt đầu thao tác với CSDL SQL Server theo hướng dẫn.

1. Yêu cầu hệ điều hành.

Bạn có thể cài đặt SQL Server 2005 Express trên máy sử dụng một trong số phiên bản hệ điều hành Windows sau. Tốt nhất bạn nên sử dụng Windows XP Service Pack 2.

- Windows 2000 Service Pack 4 hoặc hơn.

- Windows XP Service Pack 2 (SP2).

- Windows Server 2003 Service Pack 1.

2. Trình tự cài đặt

Để cài được SQL Server 2005 Express, bạn phải theo trình tự cài đặt sau:

1. Cài .Net Framework 2.0 Nếu không bạn sẽ nhận được thông báo: ”The Microsoft .Net

framework 2.0 is not installed. Please install before running setup” Gói cài đặt .Net Framework 2.0 có thể tải về từ:

http://www.microsoft.com/downloads hoặc dotnetfx.exe

2. Cài Microsoft Windows Installer 3.1 hoặc phiên bản mới hơn. Nếu bạn nhận được thông báo: ”SQL Server Setup has detected

that the following required component is not installed: Microsoft Windows Installer 3.1. To proceed, download and install the Windows Installer 3.1 Redistributable from http://go.microsoft.com/fwlink/?LinkId=50380 and then run SQL Server Setup again” thì bạn tải gói cài đặt này về theo địa chỉ trong thông báo hoặc tìm kiếm với tên tập tin là:

WindownInstaller-KB893803-v2-x86.exe 3. Cài đặt SQL Server 2005 Express Edition with Advanced Service SP1.

Tên tập tin gói cài đặt là: SQLEXPR_ADV.EXE

Tải về từ địa chỉ: http://go.microsoft.com/fwlink/?LinkId=65109 4. Cài đặt Microsoft SQL Server 2005 Express Edition Toolkit SP1. Tên tập

tin gói cài đặt là:

Page 108: Bai giang hệ quản trị cơ sở dữ liệu

107

SQLEXPR_TOOLKIT.EXE

Tải về từ địa chỉ: http://go.microsoft.com/fwlink/?LinkId=65111

3. Hướng dẫn nhanh các bước cài đặt.

Để cài đặt, bạn nhấn đôi chuột lên tên tập tin gói cài đặt và thực hiện theo trình tự các bước. Hầu hết bạn chỉ việc nhấn nút Next cho đến khi kết thúc (nhấn Finish hoặc OK).

3.1. Cài .Net Framework 2.0

1. Nhấn đôi chuột lên tập tin dotnetfx.exe. Màn hình chào xuất hiện như hình sau:

2. Nhấn Next. Màn hình thỏa thuận bản quyền sử dụng. Nhấn chọn hộp kiểm “I accept the terms of the License Agreement”

Page 109: Bai giang hệ quản trị cơ sở dữ liệu

108

3. Nhấn Install. Quá trình cài đặt diễn ra. Chờ cho đến khi bạn thấy màn hình “Setup Complete”, nhấn nút Finish để kết thúc.

3.2. Cài Microsoft Windows Installer 3.1

1. Nhấn đôi chuột lên tên tập tin gói cài đặt WindowsInstaller-KB893803-v2-x86.exe. Màn hình bắt đầu cài đặt xuất hiện như hình sau:

2. Nhấn Next. Màn hình thỏa thuận bản quyền sử dụng xuất hiện. Chọn tùy chọn “I Agree”.

Page 110: Bai giang hệ quản trị cơ sở dữ liệu

109

3. Nhấn Next. Quá trình cài đặt diễn ra. Chờ cho đến khi bạn thấy màn hình “Completing Windows Installer ...”, nhấn Finish để kết thúc. Windown sẽ tự động được khởi động lại.

3.3. Cài SQL Server 2005 Express.

Cài SQL Server 2005 Express Advance

Cài đặt gói này ngoài những tính năng của SQL Server Express, bạn sẽ có được những tính năng khác như sau:

- SQL Server Management Studio Express.

- Reporting Services.

Page 111: Bai giang hệ quản trị cơ sở dữ liệu

110

- Full-Text search.

Các bước thực hiện như sau:

1. Nhấn đôi chuột lên tên tập tin gói cài đặt SQLEXPR_ADV.EXE. Màn hình thỏa thuận bản quyền sử dụng xuất hiện như hình sau. Nhấn chọn hộp kiểm “I accept the licensing terms and conditions”.

2. Nhấn Next. Màn hình thông báo cài đặt các thành phần liên quan xuất hiện. Xem hình sau:

Page 112: Bai giang hệ quản trị cơ sở dữ liệu

111

3. Nhấn Install. Quá trình cài đặt các thành phần liên quan diễn ra một thời gian cho đến khi bạn thấy xuất hiện nút Next.

4. Nhấn Next. Chờ vài giây, màn hình chào cài đặt SQL Server xuất hiện. Xem hình sau:

Page 113: Bai giang hệ quản trị cơ sở dữ liệu

112

5. Nhấn Next. Màn hình thông báo kết quả kiểm tra cấu hình hệ thống xuất hiện.

6. Nhấn Next. Màn hình đăng ký thông tin người dùng xuất hiện. Để như mặc định.

Page 114: Bai giang hệ quản trị cơ sở dữ liệu

113

7. Nhấn Next. Màn hình chọn tính năng cài đặt xuất hiện. Nhấn chọn nút Client Components và chọn mục Entire feature will be installed on local hard drive từ trình đơn thả xuống. Xem hình sau:

8. Nhấn Next. Màn hình chọn chế độ xác thực người dùng. Chọn tùy chọn Mixed mode. Đặt mật khẩu cho đăng nhập sa (bạn đặt tùy ý). Bạn phải ghi nhớ mật khẩu này. Giả sử mật khẩu là: express. Nhập lại xác nhận mật khẩu.

Page 115: Bai giang hệ quản trị cơ sở dữ liệu

114

9. Nhấn Next. Màn hình thiết lập báo cáo lỗi và sử dụng xuất hiện. Để như mặc định.

10. Nhấn Next. Màn hình sẵn sàng cài đặt xuất hiện.

Page 116: Bai giang hệ quản trị cơ sở dữ liệu

115

11. Nhấn Install. Chờ một thời gian cho quá trình cài đặt thực thi. Nhấn Next.

12. Màn hình thông báo quá trình cài đặt hoàn tất. Nhấn Finish để két thúc.

Page 117: Bai giang hệ quản trị cơ sở dữ liệu

116

Cài đặt SQL Server 2005 Express Toolkit

Cài đặt gói này bạn sẽ có được thêm các công cụ và tài nguyên sau:

- Connectivity Components.

- Business Intelligence Development Studio.

- Software Development Kit.

Các bước tiến hành như sau:

1. Nhấn đôi chuột lên tên tập tin gói cài đặt SQLEXPR_TOOLKIT.EXE. Chờ một thời gian, màn hình thỏa thuận bản quyền sử dụng xuất hiện. Nhấn chọn hộp kiểm “I accept the licensing terms and conditions”.

2. Nhấn Next. Màn hình cài đặt các thành phần liên quan diễn ra.

Page 118: Bai giang hệ quản trị cơ sở dữ liệu

117

3. Nhấn Next để tiếp tục.

Màn hình chào cài đặt SQL Server xuất hiện.

Page 119: Bai giang hệ quản trị cơ sở dữ liệu

118

4. Nhấn Next. Màn hình thông báo kết quả kiểm tra cấu hình hệ thống xuất hiện.

5. Nhấn Next. Màn hình đăng ký thông tin người sử dụng xuất hiện.

Page 120: Bai giang hệ quản trị cơ sở dữ liệu

119

6. Nhấn Next. Màn hình chọn tính năng cài đặt xuất hiện. Chọn nút Client Components và chọn mục “Business Intelligence Development Studio”. Xem hình sau:

7. Nhấn Next. Màn hình thông báo các thành phần đang tồn tại xuất hiện. Nhấn chọn hộp kiểm.

Page 121: Bai giang hệ quản trị cơ sở dữ liệu

120

8. Nhấn Next. Màn hình thiết lập báo cáo lỗi và sử dụng xuất hiện. Để như mặc định.

9. Nhấn Next. Màn hình sẵn sàng cài đặt xuất hiện.

10. Nhấn Install. Chờ một thời gian cho quá trình cài đặt thực thi. Nhấn Next.

11. Màn hình thông báo quá trình cài đặt hoàn tất. Nhấn Finish để kết thúc.

Page 122: Bai giang hệ quản trị cơ sở dữ liệu

121