Click here to load reader
Upload
bec-ten-van
View
1.749
Download
4
Embed Size (px)
Citation preview
Ôn Tập Môn Hệ Quản Trị Cơ Sở Dữ Liệu
Edit by Edward_Thien
Nội dung:
I. Giới thiệu Hệ quản trị CSDL.
II. Giới thiệu ngôn ngữ T-SQL.
III. Tạo CSDL.
IV. Tạo Bảng dữ liệu.
V. Thao tác trên dữ liệu: truy vấn, thêm, xóa sửa.
VI. Khung nhìn –VIEW.
VII. Store Procedure.
VIII. Transaction.
IX. Trigger.
X. Chiến lược BackUp và Restore dữ liệu.
XI. Các vấn đề khác.
I. Chương 1: tổng quan:
Hệ quản trị cơ sở dữ liệu (tiếng Anh: Database Management System -
DBMS), là phần mềm hay hệ thống được thiết kế để quản trị một cơ sở dữ
liệu.
Ưu điểm của HQTCSDL:
Quản lý được dữ liệu dư thừa.
Đảm báo tính nhất quán cho dữ liệu.
Tạo khả năng chia sẻ dữ liệu nhiều hơn.
Cải tiến tính toàn vẹn cho sữ liệu.
Nhược điểm:
HQTCSDL tốt thì khá phức tạp.
HQTCSDL tốt thường rất lớn chiếm nhiều dung lượng bộ nhớ.
Giá cả khác nhau tùy theo môi trường và chức năng.
HQTCSDL được viết tổng quát cho nhiều người dùng thì thường
chậm.
Mục tiêu: Hệ quản trị cơ sở dữ liệu phải đảm bảo các mục tiêu sau:
Dữ liệu sẵn dùng (data availability)
Tính toàn vẹn dữ liệu (data integrity),
An toàn dữ liệu (data secutity)
Độc lập dữ liệu (data independency).
Thành phần của hệ quản trị cơ sở dữ liệu:
SQL Commands.
Database.
Kiến trúc của hệ quản trị cơ sở dữ liệu gồm 2 thành phần chức năng:
Bộ quản lý lưu trữ (Storage manager).
Bộ Xử lý truy vấn (Query Processor)
II. Ngôn ngữ SQL chứa các cấu trúc lệnh được chia làm 2 nhóm đó là DDL-
Data Definition Language(Ngôn ngữ định nghĩa dự liệu) và DML-Data
Manipulation Language (Ngôn ngữ tương tác dữ liệu).
Transact-SQL là ngôn ngữ SQL mở rộng dựa trên SQL chuẩn của ISO
(International Organization for Standardization) và ANSI (American
National Standards Institute) được sử dụng trong SQL Server khác với P-
SQL (Procedural-SQL) dùng trong Oracle.
III. Xây dựng, quản lý và khai thác cơ sở dữ liệu:
Khái niệm cơ sở dữ liệu:
• Ở mức logic một CSDL SQL Server bao gồm:
– Các bảng (tables) chứa dữ liệu có cấu trúc và các ràng buộc
(constraints) được định nghĩa trên các bảng.
– Các khung nhìn (view).
– Các thủ tục/ hàm.
– Các role và người dùng (user).
– ….
• Mức vật lý CSDL SQL Server tối thiểu có 2 tập tin:
– Tập tin dữ liệu (data file) gồm có:
• Một tập tin dữ liệu chính (.mdf): chứa các dữ liệu khởi đầu của
CSDL
• Một hoặc nhiều tập tin dữ liệu thức cấp (.ndf): chứa các dữ liệu
không lưu trữ hết trong tập tin chính.
– Tập tin nhật ký giao tác (.ldf) gồm có một hoặc nhiều tập tin: chứa
thông tin về nhật ký giao tác, dùng để phục hồi CSDL khi xảy
ra sự cố.
Tạo cơ sở dữ liệu: Create Database QLSinhVien
On
( Name = QLSinhVien,
Filename = 'c:\QLSinhVien.mdf',
Size = 2,
Maxsize = 10,
Filegrowth = 10%
)
Xóa 1 CSDL: Drop Database QLSinhVien
Kiểu dữ liệu:
Nhớ 1 vài KDL thường dùng:
Int, float, nchar, nvarchar, nên hiểu ý nghĩa của nchar và nvarchar.
IV. Bảng dữ liệu: Tạo bảng dữ liệu.
Create Table HOSOSINHVIEN
(
MaSV char(6) not null,
MaLop char(6) not null default ‘CNTT07’ ,
HoTen nvarchar(30) not null,
NgaySinh datetime not null,
DiaChi nvarchar(100),
constraint pk_SV primary key (MaSV)
)
Các ràng buộc hay dùng:
constraint pk_SV primary key (MaSV) – ràng buộc khóa chính.
constraint fk_SV_MaLop foreign key (MaLop), references LOP(MaLop) – rang
buộc khóa ngoại.
constraint u_CMND unique (CMND) – ràng buộc duy nhất.
constraint chk_Nam check (Nam > 0 and Nam <= 4) – ràng buộc miền giá
trị của dữ liệu.
Thêm xóa sửa dữ liệu trên bảng dữ liệu:
Thêm – Insert:
Rõ ràng:
INSERT INTO Class (Id, Name) VALUES (1, '11TH
02');
Ngầm định:
INSERT INTO Class VALUES (1, '11TH
02');
Xóa – Delete: DELETE FROM Class WHERE Id=1;
Sửa – Update: Update Class Set Name = ‘10
TH01’ Where Id=1;
Truy vấn dữ liệu:
Cú pháp câu truy vấn tổng quát: SELECT [tính chất] <danh sách các thuộc tính_1>
FROM <danh sách các table hoặc query/view [as alias] >
[WHERE <dieu kien_1>]
[GROUP BY <danh sách các thuộc tính_2>]
[HAVING <dieu kien_2>]
[ORDER BY <danh sách các thuộc tính_3> [ASC | DESC]]
Tùy vào yêu cầu mà câu Select có thể biến hóa khác nhau, chúc may mắn. :D.
Các hàm thường dùng:
Các hàm gộp (Aggregate functions): max, min, sum, avg, count
Các hàm thời gian.
Các hàm toán học.
Các hàm xử lý chuỗi.
….
V. Khung nhìn – VIEW: Khái niệm khung nhìn:
Khung nhìn (View) là một bảng ảo, có cấu trúc như một bảng
Khung nhìn không lưu trữ dữ liệu mà dữ liệu của nó đuợc tạo ra khi
sử dụng
Khung nhìn là đối tượng thuộc CSDL.
Khung nhìn đựợc tạo ra từ câu lệnh truy vấn dữ liệu (lệnh Select), dữ
liệu được truy vấn từ một hoặc nhiều bảng.
Các khung nhìn được tạo từ nhiều bảng hoặc trong khung nhìn có
chứa từ khóa DISTINCT, hàm gộp, mệnh đề Group by đều không cho
phép cập nhật dữ liệu từ khung nhìn vào các bảng gốc trong cơ sở dữ
liệu.
Cú pháp tạo khung nhìn: Create View view_name
As Select_statement
Ví dụ:
Create View vw_SinhVien
As Select * From SinhVien
Mẹo khi tạo khung nhìn:
Viết sẵn câu Select, và Build thử xem có ra kết quả như ý muốn không, nếu đã ra
được kết quả thì thêm câu Select đó vào lệnh tạo VIEW.
VI. Lập trình CSDL. Khai báo sử dụng biến:
Cú pháp: Declare @Tên_Biến KDL = Giá_Trị_Mặc_Định (nếu có).
Ví dụ:
Declare @Id Nchar(10)
Declare @Ten Nvarchar(30) = ‘Lê Xuân Hoàng’
Gán giá trị cho biến: Set @ Tên_Biến = Giá_Trị.
Ví dụ:
Set @Id = ‘08050217’
Set @SoSV = (select count (*) from SinhVien)
Gán kết quả của câu truy vấn vào biến: SV(MaSV: int; HoTen: nvarchar(30), Tuoi: int)
Select @Name = Student.Name, @Age = Student.Age
where Student.Id = ‘08050217’
Biến toàn cục: có 2 dấu @@
1 số biến toàn cục thường dùng:
@@error: thông báo mã lỗi, nếu @@error = 0 thì thao tác thực hiện thành
công
@@rowcount: cho biết số dòng bị ảnh hưởng bởi lệnh insert, update, delete
@@trancount: cho biết số giao dịch đang hoạt động trên kết nối hiện tại
@fetch_status: cho biết thao tác lấy dữ liệu từ cursor có thành công không
1 số hàm thường dùng: tự mò trong Slide. :D
Cấu trúc điều khiển:
If..Else: Declare @SiSo int
select @SiSo = SiSo from HocPhan where MaHP= ‘HP01’
if @SiSo < 50
Begin
insert into DANG_KY(MaSV, MaHP)
values(‘001’, ’HP01’)
print N’Đăng ký thành công’
End
Else
print N’Học phần đã đủ sinh viên
While: Declare @STT int
Set @STT = 1
While exists(select * from SV where MaSV = @STT)
set @STT = @STT+1
Insert into SV(MaSV, HoTen)
values(@STT, ‘Nguyen Van A’)
Case: select * from NHAN_VIEN
where datediff(yy, NgaySinh, getdate()) > = Case Phai
when ‘Nam’ then 60
when ‘Nu’ then 55
End
Select MaNV, HoTen, ‘Loai’ = Case
when CapBac<=3 then ‘Binh Thuong’
when CapBac is null then ‘Chua xep loai’
else ‘Cap Cao’ End
From NhanVien
VII. Store Procedure – Thủ tục nội tại (cực kỳ quan trọng): Khái niệm: Stored Procedure là một nhóm câu lệnh Transact-SQL đã
được compiled (biên dịch) và chứa trong SQL Server được xử lý như một
đơn vị độc lập .
Ưu nhược điểm:
Những ưu điểm của Stored Procudure
Stored procedure làm tăng khả năng thực thi của ứng dụng. Sau khi được tạo,
stored procedure sẽ được biên dịch (compile) và lưu trữ ngay trong database. Lẽ dĩ
nhiên, nó sẽ chạy nhanh hơn là một lệnh sql chưa compile được gởi trực tiếp từ
ứng dụng.
Stored procedure làm giảm lưu lượng thông tin giao tiếp giữa ứng dụng và
database server, thay vì gởi những câu lệnh sql chưa complile dài lằng ngoằn, ứng
dụng chỉ việc gởi tên của stored procedure và lấy lại kết quả
Stored procedure có thể được tái sử dụng và chuyển sang bất cứ ứng dụng nào
muốn sử dụng chúng. Stored procedure có thể “trưng ra” giao diện database cho tất
cả các ứng dụng, vì vậy lập trình viên không cần viết lại các chức năng đã hỗ trợ
sẵn trong stored procedure trong tất cả các chương trình.
Stored procedure cũng rất an toàn. Quản trị viên cơ sở dữ liệu có thể gán quyền
cho ứng dụng truy xuất vào các stored procedures được chỉ định mà không cho
phép truy cập đến các bảng (table) ở phía dưới.
Những nhược điểm của Stored Procudure: (đọc thêm nếu cần).
Stored procedure làm cho database server phải tốn nhiều tài nguyên về cả bộ nhớ
lẫn xử lý. Thay vì tập trung vào tính năng lưu trữ và nhận dữ liệu, bạn còn phải yêu
cầu database server thực hiện 1 loạt các tính toán logic hay các thao tác xử lý phức
tạp vốn không thuộc “sở trường” của database server.
Stored procedure chỉ chứa đựng các khai báo sql, vì vậy rất khó có thể viết 1
procedure nhằm thực hiện các thao tác xử lý phức tạp như các ngôn ngữ khác làm
được ở tần ứng dụng như C#, Java, C++…
Bạn cũng không thể debug stored procedure trong hầu hết các RDMBS và trong cả
MySQL. Có 1 vài cách để khắc phục nhược điểm này, tuy nhiên vẫn chưa hoàn
hảo lắm.
Việc viết và bảo trì (maintain) stored procedure thường yêu cầu 1 loạt các kỹ năng
chuyên biệt nhiều khi không phải là kỹ năng của lập trình viên. Điều này dẫn đến
các vấn đề trong cả khía cạnh phát triển ứng dụng và bảo trì sản phẩm.
Túm lại:
Stored Procedure có những thuận tiện cũng như bất lợi như đã đề cập ở trên. Khi
phát triển ứng dụng, bạn nên đánh giá giữa những ưu và nhược điểm để quyết định
có nên sử dụng stored procude hay không.
Cú pháp:
CREATE PROCEDURE tên_Thủ_tục
(danh_sách_tham_số)
[WITH RECOMPILE|ENCRYPTION]
AS
các câu lệnh của thủ tục
• Ví dụ:
– Xây dựng một SP cho biết danh sách sinh viên của một lớp biết trước
mã lớp
Create proc spu_DanhSachLop @MaLop varchar(10)
As
Select MaSV, HoVaTen, NgaySinh
From SinhVien where MaLop = @MaLop
Go
Gọi thủ tục nội tại bằng Script: EXEC[UTE] Tên_Thủ_Tục [Tham_số]
EXEC proc spu_DanhSachLop ‘11TH02’
VIII. Transaction:
Khái niệm: Là một loạt các thao tác được xem như là một khối đơn công
việc
Khối công việc này phải thỏa 4 tính chất được gọi là ACID
(Atomicity (Tính nguyên tử), Consistency (Tính nhất quán), Isolation
(Tính độc lập), Durability (Tính lâu dài))
Một Transaction bao gồm các thao tác sau trong một khối Transaction:
BEGIN TRANSACTION: Chỉ ra vị trí bắt đầu của một Transaction.
ROLLBACK TRANSACTION: phục hồi (xóa bỏ) tất cả những thay
đổi được thực hiện kể từ lúc bắt đầu Transaction
COMMIT TRANSACTION: tất cả thay đổi dữ liệu kể từ khi bắt đầu
Transaction sẽ được thực thi
Begin Transaction
INSERT INTO VATTU VALUES('0001',N'Đầu DVD Hitachi1 1 đĩa 11',N'Bộ', 40)
INSERT INTO VATTU VALUES('0002',N'Đầu DVD Hitachi1 1 đĩa 12',N'Bộ', 40)
Save Transaction CongViec1
Delete From VatTu Where mavtu = '0002'
INSERT INTO VATTU VALUES('0003',N'Đầu DVD Hitachi1 1 đĩa 13',N'Bộ', 40)
Save Transaction CongViec2
INSERT INTO VATTU VALUES('100010',N'Đầu DVD Hitachi1 1 đĩa 15',N'Bộ', 40)
Save Transaction CongViec3
RollBack Transaction CongViec2
Commit Transaction
Go
Giải thích: Ở đây, chúng ta có 3 công việc, CongViec1, CongViec2 và
CongViec3.
Làm xong, chúng ta RollBack đến CongViec2, nghĩa là từ công việc tính từ dòng
RollBack trở lên đến CongViec2 sẽ không được làm.
IX. Trigger: Khái niệm: là một thủ tục nội tại được gắn kết với một hành động cập nhật
dữ liệu như : INSERT, UPDATE, hoặc DELETE trong một bảng dữ liệu.
Khi một trong các hành động cập nhật trên thì thủ tục trigger sẽ tự động thực
hiện.
Đặc điểm:
Không có tham số đầu vào và đầu ra
Phải được liên kết với một bảng/ bảng ảo trong CSDL
Không thể gọi mà được thực hiện tự động. Sử dụng trong việc:
• Tính toán, cập nhật giá trị tự động
• Kiểm tra dữ liệu nhập
Phân loại:
Thường có hai loại trigger
o Trigger thông thường: AFTER (FOR) trigger
Chạy sau các hành động kiểm tra dữ liệu của các Constraint
Dữ liệu đã bị tạm thời thay đổi trong bảng
o INSTEAD OF trigger
Chạy trước các hành động kiểm tra dữ liệu của các Constraint
Dữ liệu chưa hề bị thay đổi
Các bảng trung gian Inserted và Deleted
Inserted
o Chứa các dòng dữ liệu vừa được thêm mới trong hành động
INSERT/UPDATE vào bảng
o Có ở cả hai loại trigger
o Cấu trúc bảng giống với bảng mà trigger định nghĩa trên đó
o Chỉ tồn tại trong thời gian trigger đang xử lý
Deleted
• Chứa các dòng dữ liệu bị xoá khỏi bảng trong hành động
DELETE/UPDATE
• Có ở cả hai loại trigger
• Cấu trúc bảng giống với bảng mà trigger định nghĩa trên đó
• Chỉ tồn tại trong thời gian trigger đang xử lý
Cú pháp: Create trigger tên_trigger
On {tên_bảng|tên_view}
{For| After| Instead of } { [delete] [,] [insert] [,] [update] }
As
{ các lệnh T-sql }
Go
Ví dụ:
– Ví dụ về Ràng buộc liên thuộc tính – liên quan hệ của CSDL:
DatHang(MaPDH, NgayDH,…)
GiaoHang(MaPGH, MaPDH, NgayGH,…)
• Ngày giao hàng không trước ngày đặt hàng
Trigger cập nhật giá trị:
• Cho hai lược đồ quan hệ:
CT_HOA_DON(SoHD, MaS, SoLuong, DonGia, ThanhTien)
HOA_DON(SoHD, MaKH, NgayLap, TenNV, ThanhTienHD)
. Viết trigger tự động cập nhật giá tri thành tiền trong CT_HOA_DON (thành tiền
= số lượng * đơn giá)
Xem thêm trong Slide.
X. Chiến lược BackUp và Restore dữ liệu.