Bài Giảng môn học Hệ Quản trị cơ sở dữ liệu 2008 Trường Đại học MỏĐịa Chất. Tác giả: Thầy Đặng Xuân Nghị. Năm học 20182019.........................................................................................
Trang 1TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT
ĐẶNG HỮU NGHỊ BÙI THỊ VÂN ANH
BÀI GIẢNG
HỆ QUẢN TRỊ
CƠ SỞ DỮ LIỆU
Trang 2MỤC LỤC
Chương 1 : Những khái niệm cơ bản về cơ sở dữ liệu 3
I Cơ sở dữ liệu là gì? 3
1 Hệ quản trị cơ sở dữ liệu 3
2 Bản ghi và trường 3
II Thiết kế cơ sở dữ liệu 3
1 Các mối quan hệ 5
2 Sử dụng tính toàn vẹn tham chiếu để duy trì tính nhất quán 5
3 Chuẩn hoá 6
Chương 2 : Giới thiệu về SQL Server 2008 9
I SQL Server 2008 9
II Bắt đầu với SQL Server Management Studio 10
Chương 3: Một số thao tác cơ bản trên SQL Server 2008 16
1 Tạo một CSDL mới 16
2 Tạo bảng mới 17
3 Thay đổi cấu trúc của bảng 24
4 Lược đồ CSDL 25
5 Nhập dữ liệu cho bảng 30
6 Xóa bảng, xóa CSDL 30
7 Mở một query editor để viết câu lệnh SQL 30
Chương 4: Các câu lệnh SQL cơ bản 34
I Giới thiệu sơ lược về Transact SQL (T-SQL) 34
II Ngôn ngữ thao tác dữ liệu 34
1 Câu lệnh Select 34
2 Truy vấn dữ liệu từ nhiều bảng 44
3 Truy vấn con (Subquery) 47
4 Thêm dữ liệu vào bảng 48
5 Cập nhật dữ liệu 49
6 Xóa dữ liệu 50
III Ngôn ngữ định nghĩa dữ liệu 50
1 Tạo bảng 50
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 57
I Các hàm trên dữ liệu kiểu số 57
1 Hàm ABS 57
2 Hàm CEILING 57
3 Hàm FLOOR 57
4 Hàm ROUND 57
5 Hàm SQUARE 57
6 Hàm SQRT 57
7 Hàm isNumeric: 57
II Nhóm hàm thống kê 57
1 Hàm COUNT: 57
2 Hàm MAX: 57
3 Hàm MIN: 57
4 Hàm SUM: 57
5 Hàm AVG: 58
III Nhóm hàm xử lý chuỗi kí tự 58
1 Hàm LEFT 58
Trang 32 Hàm RIGHT 58
3 Hàm LEN 58
4 Hàm LTRIM 58
5 Hàm RTRIM 58
6 Hàm LOWER 58
7 Hàm UPPER 58
8 Hàm SUBSTRING 58
9 Hàm Replace 58
10 Hàm STR 58
IV Nhóm hàm ngày tháng 59
1 Hàm GETDATE: 59
2 Hàm DATEPART 59
3 Hàm DAY( ): 59
4 Hàm MONTH( ): 59
5 Hàm YEAR( ): 60
6 DATEADD 60
7 DATEDIFF 60
V Hàm CAST và CONVERT 60
Chương 6: Thủ tục lưu trữ, hàm và trigger 62
I Thủ tục lưu trữ (Stored Procedure) 62
1 Tạo thủ tục lưu trữ bằng Lệnh CREATE 62
2 Biến trong thủ tục lưu trữ 63
3 Giá trị trả về trong thủ tục lưu trữ 64
4 Các lệnh điều khiển 65
5 Thay đổi thủ tục lưu trữ 68
6 Xóa thủ tục lưu trữ 68
II Hàm do người dùng định nghĩa (User Defined Function-UDF) 68
1 Hàm Scalar 68
2 Hàm Inline Table-Valued 69
3 Hàm Multi-Statement Table-Valued 69
III Trigger 70
1 Tạo các Trigger 72
2 Trigger cho hành động thêm bản ghi 73
3 Trigger cho hành động cập nhật bản ghi 75
4 Trigger cho hành động xóa bản ghi 75
Chương 7: SQL Server và lập trình ứng dụng 77
I Mô hình kết nối ứng dụng đến SQL server 77
1 Mô hình ADO 77
2 Mô hình ADO.NET 78
3 Khác biệt giữa ADO và ADO.NET 79
II Truy cập dữ liệu với VB 6 và ADO 80
1 ADO 80
2 Ví dụ 85
III Truy cập dữ liệu với VB.NET và ADO.NET 91
1 ADO.NET 91
2 Các ví dụ 96
VI Truy cập dữ liệu với C# và ADO.NET 104
1 ADO.NET 104
2 Các ví dụ 106
PHỤ LỤC 110
Trang 4Chương 1 : 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
Trang 5Sau đó, 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, 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ó
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
Trang 61 Các mối quan hệ
Mối quan hệ là một cách định 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
Trang 7mỗ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, xá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 di 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
Trang 8a 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
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
Trang 9Bà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ì?
Trang 10Chương 2 : Giới thiệu về SQL Server 2008
I SQL Server 2008
SQL Server 2008 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 2008 đượ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 2008 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 2008:
SQL Server 2008 Express Edition
SQL Server 2008 Enterprise Edition
SQL Server 2008 Standard Edition
SQL Server 2008 Workgroup Edition
SQL Server 2008 Developer Edition
SQL Server 2008 Compact Edition
SQL Server 2008 Web Edition
SQL Server 2008 Datacenter 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 tối đa của Database là 10GB
Compact: Nhúng miễn phí vào các môi trường phát triển ứng dụng web Kích thước tối đa của cơ sở dữ liệu là 4GB
Datacenter: Thay đổi lớn trên SQL Server 2008 R2 chính là bản Datacenter
Trang 11Edition Không giới hạn bộ nhớ và hỗ trợ hơn 25 bản cài
SQL Server 2008 Express Edition
SQL Server 2008 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, đó 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 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 2008
II Bắt đầu với SQL Server Management Studio
SQL Server Management Studio 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 bạn thực hiện theo các bước sau:
Vào Start/Microsoft SQL Server 2008 R2/ SQL Server Management Studio,
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
Trang 12cho tên máy: \ 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 login và Password
Login: sa
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
Trang 13Bê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 đố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ủ đề,
Trang 14Lượ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
Trang 15Thủ 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 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
T-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
Trang 16Trigger
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 200 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ệ
Trang 17Chương 3: Một số thao tác cơ bản trên SQL Server 2008
Microsoft SQL Server Management Studio 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
Trang 182 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
Trang 19 Nhập tên cột, kiểu dữ liệu và độ dài của mỗi trường 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:
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
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 ≤
Trang 20smallmoney 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 được thê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
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 cột là 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
Trang 21Cộ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 trong thuộc tính (Formula) của cột
Trang 22Cá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
Trang 23lên một cột chứa giá trị Null trong khi Primary key constraint thì không 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 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
Trang 24có 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
Trang 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 Design 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
Trang 264 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 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 đồ
Trang 27Chọ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:
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
Trang 28Ta 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 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 Cascade cho trường hợp Update
Trang 29Để làm điều này ta chọ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
Xuất hiện hộp thoại Save, tại đây ta kích Yes
Trang 30Xó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
Trang 315 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 Edit Top 200 Rows 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 2008 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
Trang 32Xuấ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õ:
Trang 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
Trang 34 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
Trang 35Chươ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 :
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
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
Trang 36FROM <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ụ
Trang 37Ta 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:
Trang 38Hoặc:
Kết quả hiển thị như sau:
Sử dụng tên giản đồ
Trong SQL Server 2008 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
Trang 39hiể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:
MaNhomHang -
1
3
Trang 40select distinct MaNhomHang from DanhMucHang
Kết quả như sau:
MaNhomHang -
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 đó