Nguyễn Thị Thúy Loan Trang 17 2/12/2011 Mô hình Client/Sever: là kiến trúc gồm 2 thành phần máy Client và máy Server, 2 thành phần này liên lạc với nhau thông qua hệ thống mạng Nguyễn T
Trang 1HỆ QUẢN TRỊ CSDL
ThS Nguyễn Thị Thúy Loan
Nguyễn Thị Thúy Loan Trang 2 2/12/2011
Cách đánh giá
Thực hành: 30%
Bài tập: 20%
Lý thuyết: 50%
Tài liệu tham khảo
[1] Bài giảng của Giảng viên khoa Công nghệ Thông tin.
[2] Giáo trình SQL Server 200, Nguyễn Thiên Bằng chủ biên, NXB
Lao động – xã hội.
[3] Lập trình SQL căn bản, Đoàn Thiện Ngân chủ biên, NXB Lao
động – xã hội.
[4] Lập trình ứng dụng chuyên nghiệp SQL – Server 2000, Phạm
Hữu Khang chủ biên, NXB Lao động – xã hội
Các đối tượng trong cơ sở dữ liệu
Lập trình với cơ sở dữ liệu
Store Procedure (thủ tục)
Trigger & Function
Backup anh restore
Trang 2TỔNG QUAN VỀ
SQL SERVER
Chương I
ThS Nguyễn Thị Thúy Loan
Nguyễn Thị Thúy Loan Trang 6 2/12/2011
Bảo đảm các RBTV trên CSDL
Bảo vệ an toàn dữ liệu
Truy vấn dữ liệu nhanh
Trang 3Nguyễn Thị Thúy Loan Trang 9 2/12/2011
SQL Server là gì?
Hệ quản trị CSDL theo mô hình Client/ Server
có thể dễ dàng phát triển trên mô hình phân
o Alerts: đưa ra các sự kiện xảy ra như: lỗi hay khi một CSDL đạt tới một giới hạn vì bộ nhớ trống sẵn không còn đủ nữa.
Nguyễn Thị Thúy Loan Trang 11 2/12/2011
Các dịch vụ của SQL Server
Microsoft Distributed Transaction
Coordinator: Điều phối các giao tác phân tán,
quản lý các giao tác, có trách nhiệm điều
phối các giao tác của CSDL trên nhiều
Trang 4Nguyễn Thị Thúy Loan Trang 13 2/12/2011
Lịch sử phát triển
1970 IBM đưa ra ngôn ngữ truy vấn SEQUEL
(Structured English Query Language)
1975 IBM và Microsoft hợp tác xây dựng
HĐH OS/2 dựa theo hệ điều hành MS DOS
của Microsoft Ngày 16/12/1987 HĐH OS/2
Microsoft hợp tác Sybase làm ra sản phẩm thuộc loại HQTCSDL Ashton-Tate vào năm
1988 phát triển trên môi trường OS/2
Lịch sử phát triển
Sau đó Sybase đã phát triển sản phẩm trên môi
trường UNIX và đổi tên riêng là DataServer mà
ngày nay có tên khác là Sybase Adaptive Server
Microsoft quyết định không phát triển HĐH OS/2
mà thay vào đó cho ra đời một HĐH mạng máy
tính có tên là NT Server và thế là SQL Server chỉ
hoạt động độc lập trên môi trường Windows NT
Trang 5Nguyễn Thị Thúy Loan Trang 17 2/12/2011
Mô hình Client/Sever: là kiến trúc gồm 2 thành
phần máy Client và máy Server, 2 thành phần
này liên lạc với nhau thông qua hệ thống mạng
Nguyễn Thị Thúy Loan Trang 18 2/12/2011
Mô hình Client/Server
Sử dụng giao tiếp lập trình ứng dụng để truy xuất dữ liệu (API- Application Programming Interfece)
Thư viện mạng client sử dụng 1 phương thức liên lạc bên trong mạng để giao tiếp với thư viện mạng của server
Thư viện mạng của server nhận gói dữ liệu
và trao chúng cho các dịch vụ mở dữ liệu
Nguyễn Thị Thúy Loan Trang 19 2/12/2011
Mô hình Client/Server
Nhánh máy trạm (client)
Đọc và hiển thị dữ liệu hiện có bên trong
CSDL, tính toán dữ liệu đang hiển thị trên màn
hình ứng dụng, in dữ liệu ra các kết xuất
Các ngôn ngữ sử dụng bên máy khách thường
là: C++, C#, VB, Delphi…
Các ứng dụng khi xây dựng bên nhánh máy
trạm nên tránh việc đọc tòan bộ dữ liệu của
bảng mà chỉ lấy đúng các thông tin cần thiết
Các xử lý sao lưu dữ liệu (backup data) tự động để đảm bảo các dữ liệu không bị mất trong trường hợp có các sự cố xấu nhất tình cờxảy ra
Trang 6Nguyễn Thị Thúy Loan Trang 21 2/12/2011
Nguyễn Thị Thúy Loan Trang 22 2/12/2011
Client network Utility:
công cụ dùng để thiết lập, tham khảo các cấu hình mạng: giao thức truyền cho client, các đường dẫn tham khảo đến thư viện
Các thành phần SQL Server
Enterprise Manager (EM): là màn hình dùng
để quản trị SQL Server EM cung cấp cho người
quản trị chức năng để quản lý SQL bằng giao
Import and Export Data: công cụ hỗ trợ cho
phép dễ dàng thực hiện việc chuyển dữ liệu từngoài vào SQL Server và SQL Server ra
Query Analyzer: là công cụ cung cấp bởi
SQL Server, là trình soạn thảo và thực thi câu lệnh SQL hay Stored Procedure
Các thành phần SQL Server
Trang 7Nguyễn Thị Thúy Loan Trang 25 2/12/2011
Các thành phần SQL Server
Server Network Utility: công cụ dùng để thiết
lập các cấu hình cho server và hiển thị các
thông tin đường dẫn tham chiếu thư viện làm
ThS Nguyễn Thị Thúy Loan
Nguyễn Thị Thúy Loan Trang 27 2/12/2011
NỘI DUNG
Cơ sở dữ liệu của SQL Server
Bảng (Table)
Bảng ảo (View)
Mô hình quan hệ dữ liệu
Kiểu dữ liệu do người dùng định nghĩa
Quy tắc kiểm tra miền giá trị dữ liệu (rule)
Giá trị mặc định
Nguyễn Thị Thúy Loan Trang 28 2/12/2011
Cơ sở dữ liệu của SQL
Server
Trang 8Nguyễn Thị Thúy Loan Trang 29 2/12/2011
Cơ sở dữ liệu của SQL Server
Nguyễn Thị Thúy Loan Trang 30 2/12/2011
Cơ sở dữ liệu của SQL Server
Khi cài SQL Server xong, hệ thống sẽ tự động tạo một vài CSDL mặc định:
Các tập tin vật lý lưu trữ DL
Hai tập tin vật lý để lưu trữ dữ liệu:
o Lưu trữ dữ liệu (data file)
o Lưu trữ các giao tác mà người dùng đã thực
hiện (transaction log file)
Các tập tin CSDL trong SQL Server được chia
thành 3 loại tập tin
Các tập tin vật lý lưu trữ DL
Trang 9Nguyễn Thị Thúy Loan Trang 33 2/12/2011
Các tập tin vật lý lưu trữ DL
Tập tin dữ liệu chính (Primary Data File) Phần
mở rộng của tập tin này là *.mdf
Tập tin thứ yếu (Secondary Data Files) (không
bắt buộc phải có khi tạo mới CSDL) Phần mở
rộng của tập tin này là *.ndf
Tập tin lưu trữ (Log Files) Phần mở rộng là
*.ldf
Nguyễn Thị Thúy Loan Trang 34 2/12/2011
Tạo mới cơ sở dữ liệu
Các thuộc tính CSDL trong SQL Server
Tên CSDL (Database name): dài tối đa 128
ký tự, duy nhất trong SQL Server
Vị trí tập tin (File location): Thông thường
tập tin này sẽ được lưu tại C:\Program Files\Microsoft SQL Server\MSSQL\ Data
Tên tập tin (File name): là tên luận lý của mỗi
loại tập tin dữ liệu tương ứng mà hệ thống SQL Server dùng để quản lý bên trong
Nguyễn Thị Thúy Loan Trang 35 2/12/2011
Tạo mới cơ sở dữ liệu
Kích thước ban đầu (Initial size): là kích
thước khởi tạo của tập tin dữ liệu khi CSDL
mới được tạo lập
Tăng kích thước tập tin dữ liệu (File
growth)
Kích thước tối đa tập tin dữ liệu (Maximun
file size)
Nguyễn Thị Thúy Loan Trang 36 2/12/2011
Tạo mới cơ sở dữ liệu
Ví dụ: tạo CSDL có tên QLBH với kích thước
ban đầu là 50 MB, tự động tăng kích thước lên 10% khi dữ liệu đầy, kích thước tăng trưởng tập tin tối đa không quá 200MB Và tập tin lưu vết với kích thước ban đầu lúc khởi tạo là 10MB, tự động tăng kích thước tập tin lên 5
MB khi dữ liệu bị đầy, kích thước tăng trưởng tập tin không giới hạn.
Trang 10Nguyễn Thị Thúy Loan Trang 37 2/12/2011
Tạo mới cơ sở dữ liệu
Cách 1: tạo trong Query Analyzer
LOG ON(NAME = QLBH_Log,
FILENAME= ‘C:\Program Files\Microsoft SQL
Server\MSSQL.3\MSSQL\Data\ QLBH_Log.ldf',
SIZE=10MB, MAXSIZE = UNLIMITED,
FILEGROWTH = 5MB)
Nguyễn Thị Thúy Loan Trang 38 2/12/2011
Tạo mới cơ sở dữ liệu
Cách 2: tạo trong Enterprise Manager
Tạo mới cơ sở dữ liệu
Mô hình quan hệ dữ liệu
Kiểu dữ liệu do người dùng định nghĩa
Quy tắc kiểm tra miền giá trị dữ liệu (rule)
Giá trị mặc định
Trang 11Nguyễn Thị Thúy Loan Trang 41 2/12/2011
Bảng (Tables)
Dùng để lưu trữ các thông tin dữ liệu của những
đối tượng, thực thể trong thế giới thực vào máy
tính
Tên bảng (table name): dài tối đa 128 ký tự
Tên cột (column name)
Kiểu dữ liệu (Data type): quy định kiểu dữ
liệu mà cột sẽ lưu trữ bên trong bảng
Nguyễn Thị Thúy Loan Trang 42 2/12/2011
Bảng (Kiểu dữ liệu)Kiểu dữ liệu Kích thước Miền giá trị dữ liệu lưu trữ
Số nguyên
Int 4 bytes Từ -2,147,483,648 đến +2,147,483,648 Smallint 2 bytes Từ -32,768 đến + 32,767
Tinyint 1 byte Từ 0 đến 255 Bit 1 byte 0,1 hoặc Null
Các kiểu dữ liệu dạng số thập phân
Decimal, Numeric
Kiểu dữ liệu Kích thước Miền giá trị dữ liệu lưu trữ
Các kiểu dữ liệu dạng chuỗi
Char N bytes Từ 1 đến 8,000 ký tự, độ dài cố định
Varchar N bytes Từ 1 đến 8,000 ký tự, độ dài biến đổi
Text N bytes Từ 1 đến 2,147,483,647 ký tự
Nchar 2* n bytes Unicode, từ 1 đến 4,000 ký tự, mỗi ký tự 2 bytes
Nvarchar 2* n bytes Từ -10^38 đến +10^38
Ntext 2* n bytes từ 1 đến 1,073,741,823 ký tự, mỗi ký tự 1 byte
Các kiểu dữ liệu dạng ngày giờ
datetime 8 bytes Từ 01/01/1753 đến 31/12/9999
smalldatetime 4 bytes Từ 01/01/1900 đến 06/06/2079
Các kiểu dữ liệu dạng chuỗi nhị phân
Image N byte Từ 1 đến 2,147,483,647 bytes
Tạo cấu trúc bảng dữ liệu
Tạo cấu trúc bảng đơn giản
CREATE TABLE <tên bảng> (
<tên cột 1>: <kiểu dữ liệu 1> [NOT NULL],
<tên cột 2>: <kiểu dữ liệu 2> [NOT NULL],
………
<tên cột n>: <kiểu dữ liệu n> [NOT NULL])
Trang 12Nguyễn Thị Thúy Loan Trang 45 2/12/2011
Tạo cấu trúc bảng dữ liệu
Ví dụ:
CREATE TABLE LOP(
Malop char(6) NOT NULL,
TenLop varchar(20) NOT NULL,
SiSo smallInt NOT NULL)
Nguyễn Thị Thúy Loan Trang 46 2/12/2011
Tạo cấu trúc bảng dữ liệu
Tạo cấu trúc bảng có giá trị mặc định
CREATE TABLE <tên bảng> (
<tên cột 1>: <kiểu dữ liệu 1> Defaultgia_trị|hàm,
<tên cột 2>: <kiểu dữ liệu 2> [NOT NULL],
………
<tên cột n>: <kiểu dữ liệu n> [NOT NULL])
Tạo cấu trúc bảng dữ liệu
Ví dụ:
CREATE TABLE LOP(
Malop char(6) NOT NULL,
TenLop varchar(20) NOT NULL,
SiSo smallInt Default 0)
Tạo cấu trúc bảng dữ liệu
Tạo cấu trúc bảng có cột định danh
CREATE TABLE <tên bảng> (
<tên cột 1>: <kiểu dữ liệu 1> Identity [(số_bắt_đầu,chỉ_số_tăng)],
<tên cột 2>: <kiểu dữ liệu 2> [NOT NULL],
………
<tên cột n>: <kiểu dữ liệu n> [NOT NULL])
Trang 13Nguyễn Thị Thúy Loan Trang 49 2/12/2011
Tạo cấu trúc bảng dữ liệu
Ví dụ:
CREATE TABLE LOP(
Malop int Identity(1000,5),
TenLop varchar(20) NOT NULL,
SiSo smallInt NOT NULL)
Nguyễn Thị Thúy Loan Trang 50 2/12/2011
Tạo cấu trúc bảng dữ liệu
Enterprise Manager
Right-click Tables/ chọn New Table…
Nguyễn Thị Thúy Loan Trang 51 2/12/2011
Tạo cấu trúc bảng dữ liệu
Tạo các cột
Nguyễn Thị Thúy Loan Trang 52 2/12/2011
Tạo cấu trúc bảng dữ liệu
Đặt tên bảng
Trang 14Nguyễn Thị Thúy Loan Trang 53 2/12/2011
Thay đổi cấu trúc bảng
Query Analyzer
Thêm một cột mới vào bảng
ALTER TABLE Tên_bảng
ADD Tên_cột kiểu_dữ_liệu
Ví dụ:
ALTER TABLE LOP
ADD Nien_khoa int
Nguyễn Thị Thúy Loan Trang 54 2/12/2011
Thay đổi cấu trúc bảng
Query Analyzer
Hủy bỏ cột hiện có bên trong bảng
ALTER TABLE Tên_bảng DROP COLUMN Tên_cột
Sửa đổi kiểu dữ liệu của cột
ALTER TABLE Tên_bảng
alter column Tên_cột <kiểu_dữ_liệu_mới>
Ví dụ:
ALTER TABLE LOP
ALTER COLUMN Nien_khoa char(9)
Thay đổi cấu trúc bảng
Đổi tên cột, tên bảng dữ liệu
EXEC sp_rename ‘Tên_bảng[.tên_cột]’,
Trang 15Nguyễn Thị Thúy Loan Trang 57 2/12/2011
Tính toàn vẹn trong cơ sở DL
Ràng buộc toàn vẹn (RBTV) dữ liệu thực sự là
việc đặc ra các quy tắc trong một cơ sở dữ liệu
nhằm kiểm tra các giá trị của dữ liệu trước khi
lưu trữ phải đảm bảo tính chính xác và hợp lý
bên trong một cơ sở dữ liệu
Nguyễn Thị Thúy Loan Trang 58 2/12/2011
Tính toàn vẹn trong cơ sở DL
Các Phương Pháp Ðảm Bảo Data Integrity
Primary Key Constraint
CREATE TABLE LOP
(MaLop INT PRIMARY KEY,
Primary Key Constraint
ALTER TABLE <tên bảng> ADD CONSTRAINT <tên RBTV> PRIMARY KEY(thuộc tính khóa chính)
Ví dụ:
ALTER TABLE HOCVIEN ADD CONSTRAINT MaHV_pk PRIMARY KEY(MaHV)
Chú ý: khi thêm khóa chính thì cột MaHV trong bảng HOCVIEN buộc phải khác NULL
Trang 16Nguyễn Thị Thúy Loan Trang 61 2/12/2011
Add Primary Key
Enterprise Manager
Right-click column of interest
Set Primary Key
Nguyễn Thị Thúy Loan Trang 62 2/12/2011
Cách tạo các ràng buộcUnique Constraint
Cách tạo ra Unique Constraint cũng tương tự như Primary Key Constraint chỉ việc thay chữPrimary Key thành Unique
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 table
Cách tạo các ràng buộc
Foreign Key Constraint
CREATE TABLE LOP
(MaLop INT PRIMARY KEY,
MaKh INT REFERENCES Khoa (MaKH))
Hay
CREATE TABLE LOP
(MaLop INT PRIMARY KEY,
MaKh INT,
CONSTRAINT MaKh_fk FOREIGN KEY
(MaKh) REFERENCES Khoa(MaKh))
Cách tạo các ràng buộc
Foreign Key Constraint
ALTER TABLE <tên bảng> ADD CONSTRAINT <tên RBTV> FOREIGN KEY(các cột khóa ngoại) REFERENCES <tên bảng> (các cột khóa chính)
Trang 17Nguyễn Thị Thúy Loan Trang 65 2/12/2011
Cách tạo các ràng buộc
Check Constraint (ràng buộc miền giá trị)
CREATE TABLE LOP
(MaLop INT PRIMARY KEY,
Check Constraint (ràng buộc miền giá trị)
CREATE TABLE LOP(MaLop INT PRIMARY KEY,TenLop VARCHAR(30), Siso INT,
CONSTRAINT Siso_Ck CHECK (Siso BETWEEN 1 AND 100))
Nguyễn Thị Thúy Loan Trang 67 2/12/2011
Cách tạo các ràng buộc
Check Constraint (ràng buộc miền giá trị)
Alter table <tenbang>
add constraint <tên constraint> check
Ví dụ:
Alter table Lop
add constraint Siso_Ck check (Siso between 1 and
100)
Nguyễn Thị Thúy Loan Trang 68 2/12/2011
Cách tạo các ràng buộc
Check Constraint (ràng buộc miền giá trị)
Alter table KhachHangAdd constraint DT_Ck check (DT like
‘[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’)
Alter table SanPhamAdd constraint GiaBan_Ck check (GiaBan >0)
Trang 18Nguyễn Thị Thúy Loan Trang 69 2/12/2011
NỘI DUNG
Cơ sở dữ liệu của SQL Server
Bảng (Table)
Bảng ảo (View)
Mô hình quan hệ dữ liệu
Kiểu dữ liệu do người dùng định nghĩa
Quy tắc kiểm tra miền giá trị dữ liệu (rule)
[WITH CHECK OPTION]// ngăn cản các thao
tác cập nhật dữ liệu (thêm, sửa) tác động trực
tiếp vào bảng ảo không thỏa điều kiện trong
SELECT INTO
Trang 19Nguyễn Thị Thúy Loan Trang 73 2/12/2011
where diem>7 and kq.masv=sv.masv
Xem kết quả của View
Select * from <Tenview>
Nguyễn Thị Thúy Loan Trang 74 2/12/2011
Trang 20Nguyễn Thị Thúy Loan Trang 77 2/12/2011
NỘI DUNG
Cơ sở dữ liệu của SQL Server
Bảng (Table)
Bảng ảo (View)
Mô hình quan hệ dữ liệu
Kiểu dữ liệu do người dùng định nghĩa
Quy tắc kiểm tra miền giá trị dữ liệu (rule)
Giá trị mặc định
Nguyễn Thị Thúy Loan Trang 78 2/12/2011
Mô hình dữ liệu quan hệ
Tạo các ràng buộc khóa ngoại một cách trực quan hơn
Tạo mô hình quan hệ
Trang 21Nguyễn Thị Thúy Loan Trang 81 2/12/2011
NỘI DUNG
Cơ sở dữ liệu của SQL Server
Bảng (Table)
Bảng ảo (View)
Mô hình quan hệ dữ liệu
Kiểu dữ liệu do người dùng định nghĩa
Quy tắc kiểm tra miền giá trị dữ liệu (rule)
EXEC sp_addtype Tên_kiểu_dl_mới,
‘kiểu_dữ_liệu_cơ_sở’ [,NULL| NOT NULL]
Nguyễn Thị Thúy Loan Trang 83 2/12/2011
KDL do người dùng định nghĩa
Ví dụ:
exec sp_addtype dn_sl, ‘float’, ‘not null’
exec sp_addtype slg, ‘int’
Khi tạo lập cấu trúc bảng KQ chúng ta có thể
Mô hình quan hệ dữ liệu
Kiểu dữ liệu do người dùng định nghĩa
Quy tắc kiểm tra miền giá trị dữ liệu (rule)
Giá trị mặc định
Trang 22Nguyễn Thị Thúy Loan Trang 85 2/12/2011
Rules
Kiểm tra các cột bên trong bảng phải thoả mãn
điều kiện nào đó khi dữ liệu bị sửa đổi hoặc
thêm vào Tính năng hoạt động của nó gần
giống như CHECK constraint
Tên_quy_tắc: kiểm tra miền giá trị dữ liệu
được tạo mới
Biểu thức: biểu thức luận lý hoặc so sánh Có
Ví dụ 1: Để tạo quy tắc kiểm tra miền giá trị
dữ liệu cột điểm phải từ 0 đến 10
CREATE RULE R_Diem
AS
@Diem between 0 and 10
Rules
Ví dụ 2: Để tạo quy tắc kiểm tra miền giá trị
dữ liệu cột đơn vị tính của vật tư chỉ thuộc trong các từ: cái, bộ, kg, m2, m3
CREATE RULE rule_Dvtinh_HopleAS
@Dvt IN (‘Cái’, ‘Bộ’, ‘Kg’, ‘m2’, ‘m3’)
Trang 23Nguyễn Thị Thúy Loan Trang 89 2/12/2011
Rules (áp dụng quy tắc KT)
Cú pháp:
EXEC sp_bindrule
Tên_qui_tắc, Tên_đối_tượng
Ví dụ 1: Áp dụng quy tắc kiểm tra có tên
R_Diem cho cột điểm trong bảng KQ
EXEC sp_bindrule R_Diem, ‘KQ.Diem’
Nguyễn Thị Thúy Loan Trang 90 2/12/2011
Rules (áp dụng quy tắc KT)
Ví dụ 2: Áp dụng quy tắc kiểm tra có tên là
R_Diem cho kiểu dữ liệu mới có tên là dn_slEXEC sp_bindrule R_Diem, ‘dn_sl’
Nguyễn Thị Thúy Loan Trang 91 2/12/2011
Trang 24Nguyễn Thị Thúy Loan Trang 93 2/12/2011
Rules
Xóa rule
DROP Rule Tên_rule
Ví dụ;
Drop Rule R_Diem
Drop Rule R_Siso
NỘI DUNG
Cơ sở dữ liệu của SQL Server
Bảng (Table)
Bảng ảo (View)
Mô hình quan hệ dữ liệu
Kiểu dữ liệu do người dùng định nghĩa
Quy tắc kiểm tra miền giá trị dữ liệu (rule)
Giá trị mặc định
Trang 25Nguyễn Thị Thúy Loan Trang 97 2/12/2011
Tên_giá_trị_mặc_định: tên giá trị mặc định
phải duy nhất trong CSDL
Biểu thức: là một giá trị cụ thể nào đó như số,
ngày, chuỗi hoặc một hàm, biểu thức tính
toán
Nguyễn Thị Thúy Loan Trang 98 2/12/2011
Giá trị mặc định (Default)
Ví dụ: tạo giá trị mặc định cho các cột điểm là 0.
CREATE DEFAULT D_Diem
Ví dụ: Để liên kết giá trị mặc định vừa tạo
D_Diem vào cột Diem có trong bảng KQ
EXEC sp_bindefault D_Diem,‘KQ.Diem’
Nguyễn Thị Thúy Loan Trang 100 2/12/2011
Giá trị mặc định (Default)
Không liên kết các giá trị mặc định vào cột
Cú pháp:
EXEC sp_unbindefault Tên_đối_tượng
Ví dụ: Để hủy bỏ giá trị mặc định đã liên kết
cho cột Diem trong bảng KQ trước đó
EXEC sp_unbindefault ‘KQ.Diem’
Trang 26Nguyễn Thị Thúy Loan Trang 101 2/12/2011
Ví dụ:
DROP DEFAULT D_Diem
Chỉ mục (Index)
Tạo chỉ mục để lưu thứ tự sắp xếp các bản ghi
theo giá trị tăng dần của các cột được cho trong
Trang 27Nguyễn Thị Thúy Loan Trang 105 2/12/2011
Chỉ mục (Index)
Chỉ nên tạo chỉ mục cho các bảng có số lượng
lớn các bản ghi và ít được cập nhật (vì nếu
bảng thường xuyên bổ sung dữ liệu thì phải
cập nhật lại index sẽ làm mất nhiều thời gian),
và chỉ nên tạo chỉ mục trên các cột mà thông
tin của nó thường xuyên được tham khảo tới
(vì sẽ làm gia tăng tốc độ tìm kiếm mà không
cần phải tìm kiếm hết các dòng trên bảng).
LẬP TRÌNH VỚI
Chương III
ThS Nguyễn Thị Thúy Loan
Nguyễn Thị Thúy Loan Trang 107 2/12/2011
NỘI DUNG
Biến cục bộ
Biến hệ thống
Các câu lệnh truy vấn dữ liệu
Cấu trúc điều khiển
Biến kiểu dữ liệu cursor
Các hàm thường dùng
Biến cục bộ
Trang 28Nguyễn Thị Thúy Loan Trang 109 2/12/2011
Gán giá trị cho biến:
SET hoặc SELECT cùng với phép gán (=)
Nguyễn Thị Thúy Loan Trang 110 2/12/2011
Biến cục bộ
Lệnh SET chỉ để gán giá trị cụ thể hoặc các
biểu thức tính toán hoặc giá trị tính toán từ
các biến khác, ngược lại lệnh SELECT dùng
để gán các giá trị được lấy ra hoặc tính toán
từ dữ liệu của các cột bên trong các bảng dữ liệu.
Biến cục bộ
Ví dụ 1: để gán giá trị ngày 25/1/1990 vào
biến ngày sinh.
DECLARE @ngaysinh DATETIME
SET @ngaysinh = ’01-25-1990’
Ví dụ 2:
SELECT @TongSSV = count(MaSV)
Trang 29Nguyễn Thị Thúy Loan Trang 113 2/12/2011
Biến cục bộ
Xem giá trị hiện hành của biến
Cú pháp:
PRINT @Tên_biến | Biểu_thức_chuỗi
Nguyễn Thị Thúy Loan Trang 114 2/12/2011
print 'Diem thap nhat la: 'print @MinDiem
print 'Diem cao nhat la: 'print @MaxDiem
Nguyễn Thị Thúy Loan Trang 115 2/12/2011
Biến cục bộ
Ví dụ: In ra tuổi nhỏ nhất của sinh viên
Nguyễn Thị Thúy Loan Trang 116 2/12/2011
Biến cục bộ
Phạm vi hoạt động của biến:
Trong Transaction-SQL phạm vi hoạt động của biến chỉ nằm trong một thủ tục nội tại (stored procedure) hoặc một lô (batch) chứa các câu lệnh mà biến đã được khai báo bên trong đó
Trang 30Nguyễn Thị Thúy Loan Trang 117 2/12/2011
Biến cục bộ
Lô được xem như một nhóm tập hợp của một
hoặc nhiều câu lệnh T-SQL sẽ được biên dịch
đồng thời cùng lúc tại SQL Server và sau đó hệ
thống sẽ thực thi các câu lệnh này ngay sau khi
Select * From Khoa
Order By TenKH desc
go
(thiếu từ khoá VALUES) thì các lệnh SELECT bên trong lô này không được thực hiện.
Biến cục bộ
Đối với các lỗi khi thực hiện (run-time) bên trong 1 lô nếu trường hợp các lỗi vi phạm ràng buộc toàn vẹn dữ liệu thì hệ thống SQL Server chỉ ngưng lại câu lệnh gây lỗi và thực hiện tiếp các lệnh bên trong lô đó
Trang 31Nguyễn Thị Thúy Loan Trang 121 2/12/2011
Select * From Khoa
Order By TenKH desc
go
( mặc dù vi phạm ràng buộc toàn vẹn trong INSERT (giả sử trùng khoá chính
ở cột MaSV) nhưng các lệnh SELECT bên trong lô này vẫn được thực hiện bình thường
Nguyễn Thị Thúy Loan Trang 122 2/12/2011
Biến cục bộ
Ví dụ:
Declare @NS datetimeSelect @NS = Max(NgSinh)From SV
goPrint 'SV nho tuoi nhat la: '+ convert (char(12),
@NS)go
HT sẽ báo lỗi vì có thêm từ khoá GO ở giữa 2 lệnh SELECT và PRINT Bởi vì khi đó các lệnh này được chia làm 2 lô và lô thứ hai sẽ không hiểu biến @NS đã được khai báo trong lô thứ 1
Nguyễn Thị Thúy Loan Trang 123 2/12/2011
NỘI DUNG
Biến cục bộ
Biến hệ thống
Các câu lệnh truy vấn dữ liệu
Cấu trúc điều khiển
Biến kiểu dữ liệu cursor
Trang 32Nguyễn Thị Thúy Loan Trang 125 2/12/2011
Biến hệ thống
Tên biến kiểu trả về Dùng để trả về
connections số nguyên Tổng số các kết nối vào SQL Server từ khi nó được khởi
động Error số nguyên số mã lỗi của câu lệnh thực hiện gần nhất Khi một lệnh
thực hiện thành công thì biến này có giá trị là 0 Language chuỗi Tên ngôn ngữ mà hệ thống SQL đang sử dụng Mặc định
là US_English RowCount số nguyên Tổng số mẫu tin được tác động vào câu lệnh truy vấn gần
nhất ServerName chuỗi Tên của máy tính cục bộ được cài đặt trong SQL Server
ServiceName chuỗi Tên dịch vụ kèm theo bên dưới SQL Server
Fetch_Status số nguyên Trạng thái của việc đọc dữ liệu trong bảng theo cơ chế
dòng mẫu tin (cursor) Khi dữ liệu đọc mẫu tin thành công thì biến này có giá trị là 0
Version chuỗi Phiên bản, ngày của phẩm SQL Server và loại CPU
Nguyễn Thị Thúy Loan Trang 126 2/12/2011
Biến hệ thống
Ví dụ:
Select * From SVSelect @@rowcount
(trả về tổng số mẫu tin đang hiện có trong bảng
SV )
Biến hệ thống
Ví dụ:
Update LOP
Set Siso = Siso + 12
Where TenLop like '08%'
Các câu lệnh truy vấn dữ liệu
Cấu trúc điều khiển
Biến kiểu dữ liệu cursor
Các hàm thường dùng
Trang 33Nguyễn Thị Thúy Loan Trang 129 2/12/2011
Các câu lệnh truy vấn dữ liệu
Truy vấn con: chỉ là một câu lệnh truy vấn lựa
chọn (SELECT) được lồng vào các câu lệnh
truy vấn khác nhằm thực hiện các truy vấn tính
toán phức tạp Khi sử dụng đến truy vấn con
chúng ta cần lưu tâm đến một vài yếu tố sau:
Nguyễn Thị Thúy Loan Trang 130 2/12/2011
Các câu lệnh truy vấn dữ liệu
o Cần mở và đóng ngoặc đơn cho câu lệnh truy vấn con
o Chúng ta chỉ được phép tham chiếu đến tên một cột hoặc một biểu thức sẽ trả về giá trị trong truy vấn con
o Kết quả truy vấn con có thể trả về là một giá trị đơn lẻ hoặc một danh sách các giá trị
o Cấp độ lồng nhau của các truy vấn con bên trong SQL Server là không giới hạn
Nguyễn Thị Thúy Loan Trang 131 2/12/2011
Các câu lệnh truy vấn dữ liệu
Truy vấn con trả về một giá trị đơn: là truy vấn
mà kết qủa trả về của nó luôn đảm bảo chỉ là
Nguyễn Thị Thúy Loan Trang 132 2/12/2011
Các câu lệnh truy vấn dữ liệu
Select * From SVWhere Ngsinh = '07-21-1990'
Kết hợp 2 câu truy vấn trên
FROM SVWHERE Ngsinh = (SELECT MAX(Ngsinh)
Trang 34Nguyễn Thị Thúy Loan Trang 133 2/12/2011
Các câu lệnh truy vấn dữ liệu
Truy vấn con trả về danh sách các giá trị: kết
quả trả về của nó là danh sách các giá trị hay
còn gọi là một tập hợp các phần tử Toán tử IN
sẽ được sử dụng để so sánh truy vấn con dạng
này
Nguyễn Thị Thúy Loan Trang 134 2/12/2011
Các câu lệnh truy vấn dữ liệu
Ví dụ 1: để biết nhà cung cấp nào mà công ty
đã đặt hàng trong tháng 01/2009
SELECT MaNCCFROM DONDHWHERE Convert(char(7), NgayDH, 21) =
“2009-01”
Kết quả trả vềMaNCCC03, C01
Các câu lệnh truy vấn dữ liệu
Hoặc:
SELECT TenNCC, DienThoai
FROM NHACC
WHERE MaNCC IN(‘C01’, ‘C03’)
Các câu lệnh truy vấn dữ liệu
Đâu đảm bảo rằng trong tháng 01/2009 công ty chỉ đặt hàng cho 2 nhà cung cấp C01 và C03
Do đó để luôn luôn có được danh sách họ tên các nhà cung cấp mà công ty đã đặt hàng trong tháng 01-2009 chúng ta thực hiện truy vấn con sau:
Trang 35Nguyễn Thị Thúy Loan Trang 137 2/12/2011
Các câu lệnh truy vấn dữ liệu
SELECT TenNCC, DienThoai
FROM NHACC
WHERE MaNCC IN (SELECT MaNCC
WHERE Convert(char(7), NgayDH, 21) = ‘2009-01’ )
Nguyễn Thị Thúy Loan Trang 138 2/12/2011
Các câu lệnh truy vấn dữ liệu
AND NHACC.MaNCC = DONDH.MaNCC)
Nguyễn Thị Thúy Loan Trang 139 2/12/2011
Các câu lệnh truy vấn dữ liệu
Ví dụ 2: Để biết danh sách các nhà cung cấp
nào mà công ty chưa bao giờ đặt hàng Chúng
ta có thể thực hiện câu truy vấn như sau:
SELECT TenNhaCC, DienThoai
(SELECT Distinct MaNCC
Nguyễn Thị Thúy Loan Trang 140 2/12/2011
Các câu lệnh truy vấn dữ liệu
Lưu ý: IN tương đương =ANY
NOT IN tương đương <>ALL
Trang 36Nguyễn Thị Thúy Loan Trang 141 2/12/2011
Lệnh INSERT
Cách 1: Thêm trực tiếp một bộ
INSERT INTO bảng[<cột 1>, <cột 2>,…, cột n]
VALUES(<giá trị 1>, <giá trị 2>,…, <giá trị n>)
Ví dụ: Thêm dữ liệu vào SV
SV (MaSV, TenSV, NgSinh, Malop)
Nguyễn Thị Thúy Loan Trang 142 2/12/2011
Lệnh INSERT
Insert into SV values('004', 'Tran Thi Ha', 26-1990', '08CDTH')
'05-Hay
Insert into SV(MaSV, TenSV, NgSinh, Malop)
values('004', 'Tran Thi Ha', '05-26-1990', '08CDTH')
Lệnh INSERT
Cách 2: Thêm nhiều bộ giá trị lấy từ các bộ
giá trị của các bảng của CSDL
FROM SV, LOPWHERE SV.MaLop=LOP.MaLopGROUP BY TenLop
Trang 37Nguyễn Thị Thúy Loan Trang 145 2/12/2011
[WHERE <điều kiện>]
Nguyễn Thị Thúy Loan Trang 146 2/12/2011
[WHERE <điều kiện>]
Ví dụ: Xóa tất cả các nhân viên có LCB < 700
Nguyễn Thị Thúy Loan Trang 148 2/12/2011
Trang 38Nguyễn Thị Thúy Loan Trang 149 2/12/2011
Biểu thức CASE
Ví dụ 1: Hiển thị danh sách sinh viên (Masv,
Ho, Ngsinh) có trong bảng SV theo từng họ
Họ là kí tự đầu tiên trong Tensv (L(Le),
N(Nguyen),T(Tran),còn lại là chưa phân biệt.
Nguyễn Thị Thúy Loan Trang 150 2/12/2011
from SV
Biểu thức CASE
Ví dụ 2: Hiển thị danh sách các vật tư (Mavt,
Tenvt, DVT) có trong bảng VATTU theo từng
loại hàng Nếu 2 kí tự đầu của Mavt là DD
(đầu DVD), VD (đầu VCD), TV (Tivi), TL (Tủ
lạnh), LO (Loa thùng), còn lại chưa phân biệt.
Biểu thức CASE
Ví dụ 3: Hiển thị danh sách (Malop, Tenlopmoi
và sĩ số) các lớp trong bảng LOP theo tên mới
Với tên mới là 1 kí tự bên phải của Tenlop (t (cao dang ky thuat), c(cao dang tin hoc), còn lại là cao dang bao chi.
Trang 39Nguyễn Thị Thúy Loan Trang 153 2/12/2011
Biểu thức CASE
Ví dụ 4: Hiển thị danh sách các vật tư trong
bảng VATTU (MaVT, TenVT, DVTinh,
PhanTram), thông tin bổ sung thêm chuỗi ghi
chú, tùy thuộc vào giá trị của cột phần trăm giá
bán (<20 lời ít, từ 20 đến 40 lời nhiều, >40 rất
lời)
Nguyễn Thị Thúy Loan Trang 154 2/12/2011
Biểu thức CASE
Ví dụ: cho lược đồ CSDL như sau:
MH (MaMH, TenMH, DVT, MaNCC) PXUAT (SoPX, NgayXuat, SoDH) CTPX (Ma_MH, SoPX, SLXuat, DGXuat) DDH (MaDH, NgayDat)
CTDH (MaDH, MaMH, SLDH, DonGia)
Nguyễn Thị Thúy Loan Trang 155 2/12/2011
Biểu thức CASE
Ví dụ 5: Giảm giá bán hàng trong tháng 2-2007
theo quy tắc sau: Nếu số lượng hàng <= 2 thì
không giảm giá, Nếu số lượng hàng từ 3 đến
10 thì giảm 10%, Nếu số lượng hàng > 10 thì
giảm 20% (Thay đổi trên ĐGXuất)
Nguyễn Thị Thúy Loan Trang 156 2/12/2011
Biểu thức CASE
Ví dụ 6: Cập nhật Trợ cấp cho sinh viên sinh
vào tháng 5/1990 Với điều kiện sau: lớp có sĩ
số < 40 thì không trợ cấp, lớp có sĩ số từ 40 đến 70 thì 100000, lớp có sĩ số lớn hơn 70 thì500000
Trang 40Nguyễn Thị Thúy Loan Trang 157 2/12/2011
NỘI DUNG
Biến cục bộ
Biến hệ thống
Các câu lệnh truy vấn dữ liệu
Cấu trúc điều khiển
Biến kiểu dữ liệu cursor
Các hàm thường dùng
Nguyễn Thị Thúy Loan Trang 158 2/12/2011
Cấu trúc điều khiển
Cú pháp:
Cấu trúc rẽ nhánh IF…ELSE
IF Biểu_thức_luận_lýCâu_lệnh 1| khối_lệnh 1ELSE
Câu_lệnh 2| khối_lệnh 2
Cấu trúc điều khiển
Ví dụ 1: Cho biết kết quả học tập của lớp
08CDTH như thế nào? Ví dụ điểm >=8 thì lớp
giỏi, >= 7 thì lớp khá, >= 5 thì lớp TB, còn lại
lớp yếu
Cấu trúc điều khiển
Ví dụ: Cho biết kết quả học tập của Sinh viên 10CDTH001, khi biết đtb