14

Click here to load reader

ôn tập dbms

Embed Size (px)

Citation preview

Page 1: ôn tập dbms

Ô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)

Page 2: ôn tập dbms

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

– ….

Page 3: ôn tập dbms

• 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

(

Page 4: ôn tập dbms

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>

Page 5: ôn tập dbms

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

Page 6: ôn tập dbms

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

Page 7: ôn tập dbms

@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

Page 8: ôn tập dbms

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

Page 9: ôn tập dbms

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

Page 10: ôn tập dbms

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

Page 11: ôn tập dbms

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

Page 12: ôn tập dbms

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

Page 13: ôn tập dbms

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á)

Page 14: ôn tập dbms

Xem thêm trong Slide.

X. Chiến lược BackUp và Restore dữ liệu.