You are on page 1of 261

QUẢN TRỊ CƠ SỞ DỮ LIỆU

Bộ môn: Tin học


Giáo viên: Trần Lê Kim Danh
Email: danhtlk@gmail.com
SĐT: 0945.976.769
Giới thiệu môn học
• Tên học phần: Quản trị cơ sở dữ liệu
• Mã học phần: ECIT2521
• Số tín chỉ: 03 tín chỉ
– Số tiết lý thuyết: 36 tiết
– Thảo luận/Thực hành: 09 tiết
• Đánh giá kết quả:
– Điểm chuyên cần: 10%
– Điểm thảo luận/kiểm tra: 30%
– Điểm thi cuối kỳ: 60%
Mục đích của môn học
• Cung cấp cho sinh viên kiến thức cơ bản, các
kỹ năng cần thiết về tổ chức, khai thác cơ sở
dữ liệu (CSDL) trên máy tính.
• Cung cấp các phương pháp để quản trị CSDL
Yêu cầu môn học
• Nắm vững các kiến thức cơ bản về quản
trị cơ sở dữ liệu
• Có kiến thức về các hoạt động quản trị cơ
sở dữ liệu bằng SQL Server
• Sử dụng và thực hiện được việc quản trị
cơ sở dữ liệu bằng SQL Server cho dữ
liệu thực tế
Tài liệu tham khảo
• [1]. Nguyễn Thị Thu Thủy, Cơ sở dữ liệu 1, NXB Thống
kê, 2015
• [2]. Craig S. Mullins, Database Administration: The
Complete Guide to DBA Practices and Procedures,
Wesley publication, 2013
• [3]. Nguyễn Kim Anh, Nguyên lý của các hệ cơ sở dữ
liệu, NXB Đại học Quốc gia Hà Nội, 2009
• [4]. Database System Concepts. website:
http://codex.cs.yale.edu/avi/db-book/db6/slide-dir/
• [5]. Fundamental of Database system, website:
http://iips.icci.edu.iq/images/exam/databases-
ramaz.pdf
Nội dung học phần
Chương 1: Tổng quan về quản trị cơ sở dữ
liệu
Chương 2: Cơ sở dữ liệu quan hệ
Chương 3: Các hoạt động quản trị cơ sở dữ
liệu
Chương 4: Ngôn ngữ khai thác và quản trị
CSDL quan hệ
Chương 1: Tổng quan về quản
trị cơ sở dữ liệu
• 1.1. Các khái niệm cơ bản về CSDL
– 1.1.1. Khái niệm về CSDL và vai trò của cơ sở dữ
liệu trong các hệ thống thông tin
– 1.1.2. Đặc điểm và tính chất của CSDL
– 1.1.3. Khái niệm về hệ CSDL
• 1.2. Mô hình dữ liệu
– 1.2.1. Khái niệm và ý nghĩa của mô hình dữ liệu
– 1.2.2. Một số mô hình thông dụng
Chương 1: Tổng quan về quản trị
cơ sở dữ liệu (tiếp)
• 1.3. Kiến trúc cơ sở dữ liệu
– 1.3.1. Mức khung nhìn
– 1.3.2. Mức khái niệm
– 1.3.3. Mức vật lý
• 1.4. Ngôn ngữ quản trị cơ sở dữ liệu
– 1.4.1. Ngôn ngữ định nghĩa dữ liệu
– 1.4.2. Ngôn ngữ khai thác dữ liệu
Chương 1: Tổng quan về quản trị
cơ sở dữ liệu (tiếp)
• 1.5. Nhiệm vụ và vai trò của quản trị CSDL
– 1.5.1. Nhiệm vụ của quản trị CSDL
– 1.5.2. Vai trò của nhà quản trị CSDL
• 1.6. Thiết lập môi trường quản trị CSDL
– 1.6.1. Các yêu cầu cài đặt hệ CSDL
– 1.6.2. Các quy định và chuẩn của hệ CSDL
1.1. Các khái niệm cơ bản về CSDL
• Khái niệm CSDL:
– Là một tập hợp dữ liệu có cấu trúc được lưu
trên các thiết bị lưu trữ như băng từ, đĩa từ
nhằm thỏa mãn nhu cầu khai thác đồng thời
của nhiều người sử dụng, nhiều chương trình
ứng dụng tại cùng thời điểm
– CSDL là một bộ sưu tập các dữ liệu tác
nghiệp được lưu trữ lại và được các hệ ứng
dụng của một đơn vị, tổ chức nào đó sử dụng
Vai trò của quản trị CSDL trong HTTT

• Có vai trò quan trọng do:


– Dữ liệu là một loại tài sản đặc biệt của các tổ
chức, đơn vị kinh doanh
– Nếu tổ chức, đơn vị kinh doanh có hoạt động
quản trị CSDL tốt thì năng suất HTTT sẽ hiệu
quả và giảm thiểu rủi ro cho hệ thống
1.1.2. Đặc điểm và tính chất của CSDL

• Các kiểu dữ liệu phổ biến


• Ưu điểm của CSDL
– Giảm sự trùng lặp thông tin -> đảm bảo tính
nhất quán và toàn vẹn dữ liệu
– Dữ liệu có thể truy xuất theo nhiều cách khác
nhau mà không mất mát thông tin
– Có khả năng chia sẻ thông tin
1.1.3. Khái niệm về hệ CSDL
• 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 đó
Các hệ quản trị CSDL phổ biến
1.2. Mô hình dữ liệu
• Khái niệm: mô hình dữ liệu xác định những
dữ liệu, thuộc tính, các mối quan hệ hoặc
liên kết với các dữ liệu khác. Hiểu một
cách đơn giản, mô hình dữ liệu cung cấp
cho người dùng cái nhìn tổng quan nhất
về dữ liệu đại diện cho kịch bản và dữ liệu
nghiệp vụ.
1.2.2. Một số mô hình thông dụng
• Mô hình dữ liệu được phân chia thành 3 loại sau:
• Mô hình dữ liệu khái niệm: còn được gọi là mô hình miền, thiết lập
các khái niệm và ngữ nghĩa cơ bản của một miền nhất định cho
nhiều đối tượng của các bên có liên quan. Các mô hình dữ liệu khái
niệm được xây dựng dựa trên kiến trúc tổng thể, thông qua việc sử
dụng mô hình mối quan hệ thực tế hoặc lớp UML.
• Mô hình dữ liệu logic: là phương pháp mô hình hóa cơ sở dữ liệu
trừu tượng và khái niệm. Mô hình tạo ra một lược đồ hoặc mô hình
dữ liệu ngữ nghĩa và các yêu cầu của nó. Thông qua chuyển đổi
ngôn ngữ định nghĩa dữ liệu DDL, người dùng có thể dễ dàng
chuyển mô hình dữ liệu logic sang mô hình dữ liệu vật lý.
• Mô hình dữ liệu vật lý: giúp người dùng dễ dàng hình dung cấu
trúc cơ sở dữ liệu, tự động lấy ra được lược đồ cơ sở dữ liệu tương
ứng. Theo đó, mô hình này cho pháp sử dụng cấu hình UML để mô
hình hóa dữ liệu cụ thể.
Giao diện người dùng
Chuỗi công việc
• Mục tiêu của mô hình dữ liệu đó là hỗ trợ
cho các chuỗi công việc, bằng cách cung
cấp quy trình nghiệp vụ từ khi bắt đầu cho
tới khi kết thúc, dựa trên vai trò của người
dùng. Yếu tố quan trọng nhất trong chuỗi
công việc đó là bạn phải kiểm tra nguyên
mẫu của các quy trình nghiệp vụ điển
hình, kiểm tra xem việc thiết kế mô hình
dữ liệu có làm hạn chế khả năng sử dụng
quy trình công việc gốc hay không?
Thiết lập công cụ tìm kiếm
• Nguyên tắc khi thiết kế mô hình dữ liệu đó
là phải tạo điều kiện tối đa cho người dùng
tìm kiếm. Để làm được điều này, trước
tiên bạn cần phải hiểu cách người dùng
tìm kiếm dữ liệu như thế nào thì mới thiết
kế được chứng năng tìm kiếm có tính ứng
dụng cao. Nguyên tắc chung khi thiết lập
công cụ tìm kiếm đó là mô hình yêu cầu ít
tùy chỉnh giao diện người dùng UI.
• Tất cả các thuộc tính của một mục đều được lưu trữ
dưới dạng tuần tự trong cơ sở dữ liệu dưới dạng blob
và không thể tìm kiếm trực tiếp được. Do đó, các
thuộc tính duy nhất khi được đánh dấu lập chỉ mục lưu
trữ trong bảng quan hệ sẽ cho phép người dùng tìm
kiếm nhanh chóng và dễ dàng hơn.
• Vì thế, để thiết kế mô hình dữ liệu khoa học bạn cần
phải đánh dấu các thuộc tính đó, lập chỉ mục cần
được tìm kiếm thường xuyên. Tuy nhiên, không nên
lập chỉ mục tất cả các thuộc tính bởi chúng sẽ làm gia
tăng không gian đĩa phía cơ sở dữ liệu, ảnh hưởng
nhiều đến hiệu suất dữ liệu được truy cập.
1.3. Kiến trúc cơ sở dữ liệu
Mô hình kiến trúc ANSI/SPARC
1.3.1. Mức khung nhìn (View Level)
• xác định các giao diện như những ứng dụng,
tương tác và hiển thị cho người sử dụng.
• Tương ứng với khuông nhìn đơn lẻ của từng
người dùng. Người dùng gồm lập trình viên,
người dùng thông thường và DBA
• Mức ngoài thường gắn với ngôn ngữ lập trình,
ngôn ngữ định nghĩa dữ liệu (Data Definition
Language – DDL), ngôn ngữ điều khiển dữ liệu
(Data Manipulation Language – DML).
1.3.2. Mức khái niệm (Conceptual
Level)
• Hoặc mức logic: còn gọi là mô hình quan
niệm của dữ liệu (MQD) hoặc mô
hình logic của dữ liệu (MLD). Nó xác định
cách sắp xếp thông tin bên trong CSDL
• Là một biểu diễn dữ liệu mang tính toàn diện
của CSDL
• Tương ứng với mức này người ta thường định
nghĩa lược đồ mức khái niệm (Conceptual
Schema)
1.3.3. Mức vật lý (Physical Level)
• Xác định cách thức lưu trữ dữ liệu và các
phương pháp truy cập vào đó
• Để nâng cao tính hiệu dụng, DBA và các lập
trình viên ứng dụng có kinh nghiệm sẽ quan
tâm hơn tới mức này: định nghĩa chỉ mục, các
phương pháp lập chỉ mục..
1.4. Ngôn ngữ quản trị cơ sở dữ liệu

• Một hệ quản trị cơ sở dữ liệu thường cung


cấp hai kiểu ngôn ngữ khác nhau đó là:
ngôn ngữ mô tả sơ đồ cơ sở dữ liệu và
ngôn ngữ biểu diễn các truy vấn và các
cập nhật cơ sở dữ liệu:
– Ngôn ngữ định nghĩa dữ liệu
– Ngôn ngữ khai thác dữ liệu
1.4.1. Ngôn ngữ định nghĩa dữ liệu
(Data Definition Language - DDL)
• Một sơ đồ CSDL đặc tả bởi một tập các định nghĩa
được biểu diễn bởi một ngôn ngữ đặc biệt được gọi là
ngôn ngữ định nghĩa dữ liệu. Kết quả của việc dịch
các ngôn ngữ này là một tập các bảng được lưu trữ
trong một tệp đặc biệt được gọi là từ điển dữ liệu hay
thư mục dữ liệu.
• Một từ điển dữ liệu là một tệp chứa các siêu dữ liệu có
nghĩa là các dữ liệu về dữ liệu. Tệp này được tra cứu
trước khi dữ liệu thực sự được đọc hay được sửa đổi
trong hệ CSDL.
• Cấu trúc và các phương pháp truy nhập được sử
dụng bởi hệ CSDL được đặc tả bởi một tập các định
nghĩa trong một kiểu đặc biệt của DDL là ngôn ngữ
định nghĩa và lưu trữ dữ liệu.
1.4.2. Ngôn ngữ khai thác dữ liệu
(Data Manipulation Language - DML)
• Các yêu cầu về thao tác dữ liệu bao gồm:
– Tìm kiếm thông tin được lưu trữ trong CSDL.
– Thêm thông tin mới vào CSDL.
– Xoá thông tin từ CSDL.
– Thay đổi thông tin được lưu trữ trong CSDL.
• Một ngôn ngữ thao tác dữ liệu (DML) là một ngôn ngữ cho
phép người sử dụng truy nhập hay thao tác dữ liệu được tổ
chức bởi mô hình dữ liệu thích hợp. Có hai kiểu ngôn ngữ
thao tác dữ liệu cơ bản:
– Các DML thủ tục đòi hỏi người sử dụng phải đặc tả dữ liệu nào
cần tìm kiếm và tìm kiếm những dữ liệu này như thế nào.
– Các DML phi thủ tục đòi hỏi người sử dụng đặc tả dữ liệu nào
cần tìm kiếm mà không phải đặc tả tìm kiếm những dữ liệu này
như thế nào.
1.5. Nhiệm vụ và vai trò của quản trị
CSDL
• Quản lý dữ liệu tồn tại lâu dài: đặc điểm
này chỉ ra rằng có một cơ sở dữ liệu tồn
tại trong một thời gian dài, nội dung của
cơ sở dữ liệu này là các dữ liệu mà hệ
quản trị CSDL truy nhập và quản lý.
• Cho phép truy nhập các khối lượng dữ liệu
lớn một cách hiệu quả.
• Ngoài hai nhiệm vụ cơ bản trên, hệ quản trị CSDL còn
có các khả năng khác mà có thể thấy trong hầu hết
các hệ quản trị CSDL đó là:
– Hỗ trợ ít nhất một mô hình dữ liệu hay một sự trừu tượng
toán học mà qua đó người sử dụng có thể quan sát dữ
liệu.
– Ðảm bảo tính độc lập dữ liệu hay sự bất biến của chương
trình ứng dụng đối với các thay đổi về cấu trúc trong mô
hình dữ liệu.
– Hỗ trợ các ngôn ngữ cao cấp nhất định cho phép người sử
dụng định nghĩa cấu trúc dữ liệu, truy nhập dữ liệu và
thao tác dữ liệu.
– Quản lý giao dịch, có nghĩa là khả năng cung cấp các truy
nhập đồng thời, đúng đắn đối với CSDL từ nhiều người sử
dụng tại cùng một thời điểm.
1.5.2. Vai trò của nhà quản trị CSDL
• Tìm hiểu thông tin và nhu cầu của khách hàng trong việc
quản trị cơ sở dữ liệu
• Thiết kế cơ sở dữ liệu một cách phù hợp với yêu cầu của
khách hàng. Tạo mô hình dữ liệu có thể sắp xếp chúng một
cách hợp lý hướng tới mục đích cuối cùng là phục vụ cho
công việc cài đặt cơ sở dữ liệu.
• Đảm bảo chho quá trình thực hiện công tác quản trị cơ sở dữ
liệu được hoạt động một cách hiệu quả và đạt hiệu suất cao.
• Xem xét và điều chỉnh cơ sở dữ liệu một cách hợp lý và thay
đổi khi có yêu cầu
• Thực hiện các công việc liên quan đến cơ sở dữ liệu máy chủ
như thiết kế, nâng cấp, cài đặt các cơ sở dữ liệu
• Quản trị thông tin liên quan đến vấn đề quyền
truy cập người dùng hệ thống cơ sở dữ liệu
đó và đảm bảo được tính bảo mật một cách
tuyệt đối với hệ thống cơ sở dữ liệu
• Giám sát hệ thống đảm bỏa hoạt động liên
tục để thông tin nhanh chóng tới người dùng
và dễ sử dụng.
• Khôi phục lại các dữ liệu hỏng, cài đặt nâng
cao và khắc phục sự cố.
1.6. Thiết lập môi trường quản trị CSDL
• Hệ quản trị cơ sở dữ liệu có thể hiểu là một hệ
thống được thiết kế để quản lý một lượng lớn
thông tin. Cũng có thể là quản lý dữ liệu một cách
khoa học có trật tự hệ thống và tự động. Các thao
tác quản lý bao gồm thêm, lưu trữ thông tin, sửa,
xóa và tìm kiếm trong một nhóm dữ liệu nhất định.
• Cụ thể, chức năng của hệ quản trị cơ sở dữ liệu
gồm có cung cấp môi trường tạo lập cơ sở dữ
liệu, cung cấp môi trường cập nhật và khai thác
dữ liệu, và cung cấp công cụ điều khiển truy cập
vào CSDL.
1.6.1. Các yêu cầu cài đặt hệ CSDL

• Yêu cầu về phần cứng


• Hệ điều hành sử dụng
• Bộ cài đặt
VD: SQL Server 2005
• Hệ điều hành tối thiểu:
Windows 2000 Service Pack 4; Windows
Server 2003 Service Pack 1; Windows XP
Service Pack 2
• Phần cứng:
– Máy tính chip Pentium III 600 MHz trở lên (Cấu
hình đề nghị: Chip 1 GHz hoặc cao hơn.)
– Tối thiểu 192 MB RAM (Cấu hình đề nghị: 512
MB RAM.)
– Ổ cứng còn trống tối thiểu 525 MB
Bộ cài đặt
• 1. Để cài đặt SQL Server 2005 Express, máy bạn phải có bộ
Windows Installer 3.1 trở lên, download về tại địa chỉ:
http://go.microsoft.com/fwlink/?LinkId=46459
• 2. Microsoft .Net Framework 2.0
– Hệ điều hành 32bit: http://go.microsoft.com/fwlink/?LinkId=55731
– Hệ điều hành 64bit: http://go.microsoft.com/fwlink/?LinkId=55734
• 3. Bạn phải có file cài đặt SQL Server 2005 Express, có thể
download miễn phí từ Website của Microsoft tại địa
chỉ: http://www.microsoft.com/downloads/details.aspx?familyid
=220549b5-0b07-4448-8848-dcc397514b41&displaylang=en
• 4. SQL Server Management Studio Express:
http://www.microsoft.com/downloads/details.aspx?familyid=C2
43A5AE-4BD1-4E3D-94B8-5A0F62BF7796&displaylang=en
VD: MySQL
• Hệ điều hành tối thiểu:
Windows 2000 Service Pack 4; Windows
Server 2003 Service Pack 1; Windows XP
Service Pack 2
• Phần cứng:
– Máy tính chip Pentium III 600 MHz trở lên (Cấu
hình đề nghị: Chip 1 GHz hoặc cao hơn.)
– Tối thiểu 192 MB RAM (Cấu hình đề nghị: 512
MB RAM.)
– Ổ cứng còn trống tối thiểu 525 MB
Bộ cài đặt
• Có 2 phiên bản MySQL:
– MySQL Community: Phiên bản miễn phí. (Chúng ta
sẽ cài đặt phiên bản này).
– MySQL Enterprise Edition: Phiên bản thương mại.
• Trong MySQL Community có 2 phần quan trọng
nhất đó là MySQL Server và MySQL Workbench
(Công cụ trực quan để học và làm việc với
MySQL). Các bạn sử dụng Windows 7 trở
xuống phải download 2 thư viện mở rộng về và
cài đặt trước khi bắt đầu cài SQL Community:
• Microsoft .NET Framework 4 Client Profile
• Visual C++ Redistributable for Visual Studio 2013
1.6.2. Các quy định và chuẩn của hệ CSDL

• Mục tiêu của chuẩn hóa: Loại bỏ dư thừa


dữ liệu Loại bỏ update anomaly Loại bỏ
insertion anomaly Loại bỏ deletion
anomaly
Các dạng chuẩn hóa dữ liệu
• Chuẩn hoá là quá trình tách bảng (phân rã)
thành các bảng nhỏ hơn dựa vào các phụ
thuộc hàm. Các dạng chuẩn là các chỉ dẫn
để thiết kế các bảng trong CSDL.
• Mục đích của chuẩn hoá là loại bỏ các dư
thừa dữ liệu và các lỗi khi thao tác dư thừa
và các lỗi khi thao tác dữ liệu (Insert, Delete,
Update).
• Nhưng chuẩn hoá làm tăng thời gian truy
vấn.
Các dạng chuẩn hoá (Normal Form)
1NF (First Normal Form)
• Định nghĩa: Một bảng (quan hệ) được gọi
là ở dạng chuẩn 1NF nếu và chỉ nếu toàn
bộ các miền giá trị của các cột có mặt
trong bảng (quan hệ) đều chỉ chứa các giá
trị nguyên tử (nguyên tố)
Ví dụ
Dạng chuẩn 2 – 2NF

• Định nghĩa Một quan hệ ở dạng chuẩn 2NF nếu quan hệ


đó:
– Là 1NF
– Các thuộc tính không khoá phải phụ thuộc hàm đầy đủ vào khoá
chính
• Ví dụ 1: Cho quan hệ R = (ABCD) , khoá là AB và tập
phụ thuộc hàm F = {AB -> C, AB -> D} là quan hệ đạt
chuẩn 2NF.
Bảng R 4 cột , khóa AB
-> cột C, D phụ thuộc hoàn toàn vào AB
Ví dụ
• Cho quan hệ R = (ABCD) , khoá là AB và tập
phụ thuộc hàm
• F = {AB -> C, AB -> D, B -> DC} là quan hệ
không đạt chuẩn 2NF vì có phụ thuộc hàm
• B -> DC là phụ thuộc hàm bộ phận (phụ
thuộc hàm không đầy đủ) vào khoá. Khi đó ta
đưa về dạng chuẩn 2NF như sau:
Dạng chuẩn 3 – 3NF
• Định nghĩa: Một quan hệ ở dạng chuẩn
3NF nếu quan hệ đó:
• Là 2NF
• Các thuộc tính không khoá phải phụ
thuộc trực tiếp vào khoá chính
• Ví dụ 1: Cho quan hệ R = (ABCDGH, khoá
là AB và tập phụ thuộc hàm F = {AB -> C,
AB -> D, AB -> GH} là quan hệ đạt chuẩn
3NF.
Ví dụ 2
• Cho quan hệ R = (ABCDGH) , khoá là AB và
tập phụ thuộc hàm
• F = {AB -> C, AB -> D, AB -> GH, G -> DH} là
quan hệ không đạt chuẩn 3NF vì có phụ
thuộc hàm G -> DH là phụ thuộc hàm gián
tiếp vào khoá. Khi đó ta đưa về dạng chuẩn
3NF như sau:
Dạng chuẩn BCNF (Boyce Codd
Normal Form)
• Định nghĩa Một quan hệ ở dạng chuẩn
BCNF nếu quan hệ đó:
• Là 3NF
• Không có thuộc tính khoá mà phụ thuộc
hàm vào thuộc tính không khoá.
• Ví dụ 1: Cho quan hệ R = (ABCDGH, khoá
là AB và tập phụ thuộc hàm F = {AB -> C,
AB -> D, AB -> GH} là quan hệ đạt chuẩn
BCNF.
Ví dụ 2
• Cho quan hệ R = (ABCDGH) , khoá là AB và
tập phụ thuộc hàm
• F = {AB -> C, AB -> D, AB -> GH, H -> B} là
quan hệ không đạt chuẩn BCNF vì có thuộc
tính khoá B phụ thuộc hàm vào thuộc tính
không khoá H. Khi đó ta đưa về dạng chuẩn
BCNF như sau:
Chương 2: Cơ sở dữ liệu quan hệ
• 2.1 Các khái niệm cơ bản
– 2.1.1 Miền, Thực thể, Thuộc tính
– 2.1.2 Quan hệ
– 2.1.3 Lược đồ quan hệ
– 2.1.4 Khóa
• 2.2. Ràng buộc toàn vẹn
– 2.2.1. Ràng buộc về miền
– 2.2.2. Ràng buộc toàn vẹn liên thuộc tính
– 2.2.3. Ràng buộc về khóa
• 2.3. Phụ thuộc hàm.
• 2.4. Chuẩn hoá các lược đồ quan hệ
– 2.4.1. Các dạng chuẩn của lược đồ quan hệ
– 2.4.2. Phương pháp xác định dạng chuẩn cao
nhất.
• 2.5. Tách các lược đồ quan hệ
– 2.5.1. Phép tách lược đồ quan hệ
– 2.5.2. Phép tách - kết nối bảo toàn thông tin
– 2.5.3. Thuật toán kiểm tra phép tách - kết nối bảo
toàn thông tin.
• 2.6. Thiết kế cơ sở dữ liệu quan hệ
– 2.6.1. Quy trình thiết kế CSDL
– 2.6.2. Thiết kế mô hình ER
– 2.6.3. Chuyển đổi từ mô hình ER sang mô hình
quan hệ
2.1 Các khái niệm cơ bản
• Miền (domain): là một tập các giá trị hoặc
các đối tượng.
• Thực thể: Thực thể là một đối tượng cụ
thể hay trừu tượng trong thế giới thực mà
nó tồn tại và có thể phân biệt được với
các đối tượng khác.
• Ví dụ: Bạn Nguyễn Văn A là một thực thể
cụ thể. Hay Sinh viên cũng là một thực
thể, thực thể trừu tượng.
2.1.1 Thuộc tính (Attribute)
• Khái niệm: Là tính chất của thực thể.
– Các thực thể có các đặc tính, được gọi là các
thuộc tính. Nó kết hợp với một thực thể trong tập
thực thể từ miền giá trị của thuộc tính. Thông
thường, miền giá trị của một thuộc tính là một tập
các số nguyên, các số thực, hay các xâu ký tự.
– Một thuộc tính hay một tập thuộc tính mà giá trị
của nó xác định duy nhất mỗi thực thể trong tập
các thực thể được gọi là khoá đối với tập thực
thể này.
– Mỗi một thuộc tính nhận tập số các giá trị nhất
định được gọi là domain của thuộc tính đó.
2.1.2. Quan hệ
• Một quan hệ (Relation): Định nghĩa một
cách đơn giản, một quan hệ là một bảng
dữ liệu có các cột là các thuộc tính và các
hàng là các bộ dữ liệu cụ thể của quan hệ
• Các liên kết: Một liên kết là một sự kết
hợp giữa một số thực thể (hay quan hệ).
Ví dụ
• Mối liên kết giữa phòng ban và nhân viên thể hiện:
Một nhân viên A sẽ thuộc một phòng ban B nào
đó.
– Các liên kết một – một: đây là dạng liên kết đơn giản,
liên kết trên hai thực thể là một – một.
– Các liên kết một – nhiều: Trong một liên kết một –
nhiều, một thực thể trong tập thực thể A được kết hợp
với không hay nhiều thực thể trong tập thực thể B.
Nhưng mỗi thực thể trong tập thực thể B được kết
hợp với nhiều nhất một thực thể trong tập thực thể A.
– Các liên kết nhiều – nhiều: Ðây là dạng liên kết mà
mỗi thực thể trong tập thực thể này có thể liên kết với
không hay nhiều thực thể trong tập thực thể kia và
ngược lại.
Ví dụ 1.1.
• Các mối liên kết giữa các thực thể:
– LOP(MaLop, TenLop, Khoa),
– SINHVIEN(MaSV, Hoten, NgSinh, MaLop),
– MONHOC(MaMon, TenM, SDVHT)
– KETQUA (MaSV, MaMon, Diem)
2.1.3 Lược đồ quan hệ
• Lược đồ quan hệ: Một lược đồ quan hệ R
là một cặp có thứ tự R= (Ω, F) trong đó Ω là
tập hữu hạn các thuộc tính của quan hệ, F
là tập các điều kiện giữa các thuộc tính (F
còn gọi là tập các ràng buộc toàn vẹn).
• Một ràng buộc trên tập các thuộc tính là một
tính chất trên tập tất cả các quan hệ xác định
trên tập thuộc tính này:
– Một lược đồ quan hệ được sử dụng để mô tả về
cấu trúc và các ràng buộc toàn vẹn của một quan
hệ;
– Với một lược đồ quan hệ R, theo thời gian, nhiều
quan hệ có cấu trúc và ràng buộc toàn vẹn được
mô tả bởi lược đồ này. Mỗi quan hệ như vậy
được gọi là một thể hiện của lược đồ R.
2.1.4 Khóa
• Siêu khóa: Của một lược đồ quan hệ R là một tập hợp gồm
một hay nhiều thuộc tính của lược đồ R có tính chất xác định
duy nhất một bộ trong mỗi thể hiện của R.
• Khóa: Của một lược đồ quan hệ là một siêu khóa của lược
đồ này sao cho mọi tập con thực sự của nó không là siêu
khóa.
• Một lược đồ quan hệ có thể có nhiều hơn một khóa, khi đó
mỗi khóa được gọi là một khóa dự tuyển.
• Thông thường có một khóa dự tuyển được chỉ định làm khóa
chính.
• Ví dụ: Quan hệ Sinhvien(Masv, Hoten, Makhoa, Ngaysinh,
Diachi). Tập chỉ một thuộc tính {Masv} là khóa vì không thể có
hai sinh viên khác nhau có cùng mã số sinh viên.
• Khóa ngoài: Của một lược đồ quan hệ là
một tập hợp gồm một hay nhiều thuộc tính
là khóa của một lược đồ quan hệ khác.
• Ví dụ:
– Sinhvien(MaSV, TenSV, QueQuan, Tuoi,
MaLop);
– Lop(MaLop, TenLop, Gvchunhiem);
– Khóa ngoài: MaLop vì MaLop là khóa của
lược đồ quan hệ Lop.
2.2. Ràng buộc toàn vẹn
• RBTV (Integrity Constraints) xuất phát từ những
qui định hay điều kiện:
– Trong thực tế
– Trong mô hình dữ liệu: Các thao tác làm thay đổi dữ
liệu không nên được thực hiện một cách tùy iện vì có
thể đưa CSDL đến một tình trạng ‘xấu’
• RBTV là một điều kiện được định nghĩa trên một
hay nhiều quan hệ khác nhau
• Các RBTV là những điều kiện bất biến mà mọi thể
hiện của quan hệ đều phải thỏa ở bất kỳ thời điểm
nào.
• Ví dụ:
– Mức lương của một người nhân viên không được
vượt quá trưởng phòng (R1)
– Người quản lý trực tiếp (của một nhân viên) phải
là một nhân viên trong công ty (R2)
2.2.1. Ràng buộc về miền
• Là loại ràng buộc về giá trị của một thuộc
tính xác định nào đó trong một quan hệ cụ
thể. Ràng buộc này có thể áp dụng lên
một thuộc tính hoặc một nhóm các thuộc
tính tự ràng buộc lẫn nhau về giá trị.
• Ví dụ: 0 <= điểm <= 10 hoặc 1 <= tháng
<= 12
Ví dụ

• Xét lược đồ quan hệ


NHANVIEN (MANV, HONV, TENLOT, TENNV, NGSINH, PHAI, DCHI,
MA_NQL, PHONG, MLUONG)
VD1: Phái của nhân viên chỉ có thể là ‘Nam’ hoặc ‘Nữ’
2.2.2. Ràng buộc toàn vẹn liên thuộc tính

• Ràng buộc giữa các thuộc tính trong cùng


một quan hệ.
• Xét lược đồ quan hệ:
DEAN (MADA, TENDA, DDIEM_DA,
PHONG, NGBD_DK, NGKT_DK)
• Với mọi đề án, ngày bắt đầu dự kiến
(NGBD_DK) hải nhỏ hơn ngày kết thúc dự
kiến (NGKT_DK)
Cho lược đồ quan hệ:
NHANVIEN(MaNV, HoTen, HESO, MucLuong)

• Các nhân viên có cùng hệ số lương thì đó


cùng mức lương.
2.2.3. Ràng buộc về khóa
• Thường được biểu diễn bằng các phụ
thuộc hàm, là một loại ràng buộc liên bộ
phổ biến xác lập sự tồn tại duy nhất của
các bộ trong một quan hệ.
• Ví dụ: Hai bộ phân biệt của cùng quan hệ
không thể có thuộc tính khoá trùng
nhau. Mỗi sinh viên có mã số duy nhất, …
2.3. Phụ thuộc hàm
• Cho quan hệ Q(A, B, C). Phụ thuộc hàm A
xác định B. Ký hiệu A -> B nếu:

Lưu ý: Ràng buộc khoá cũng là một phụ thuộc


hàm MaPH -> TenPH, TRPH, NGNC
Ví dụ
• NHANVIEN(MaNV, HoTen, Hocvi, HESO,
MucLuong)
R4: Các nhân viên có cùng học vị, cùng
hệ số lương thì mức lương sẽ bằng nhau.
• Ràng buộc này có thể biểu diễn bằng phụ
thuộc hàm như sau:
Hocvi,Heso -> Mucluong
2.4. Chuẩn hoá các lược đồ quan hệ
2.4.1. Các dạng chuẩn của lược đồ quan hệ
2.4.2. Phương pháp xác định dạng
chuẩn cao nhất.
• Nguyên lí cơ bản trong chuẩn hóa CSDL
là triệt tiêu dư thừa dữ liệu bằng cách
phân rã các quan hệ nhưng không được
làm mất thông tin.
– Dùng phương pháp làm phẳng để chuẩn hóa
1NF
– Dùng phương pháp tách nhóm lặp để chuẩn
hóa 1NF
Ví dụ
• Yêu cầu: thiết kế CSDL quản lí cửa hàng thuốc cần các thông
tin sau:
• DB(Mã hóa đơn, Ngày bán, Tổng tiền Hóa đơn, Mã khách
hàng, Tên Khách hàng, Số ĐT Khách hàng, Mã Nhân viên,
Số CMT của NV, Tên NV, Địa chỉ NV, Số ĐT Nhân viên
(Mã thuốc, Tên thuốc, Công dụng, Ngày SX, Hạn SD, Số lượng,
Thành tiền)).
• Các phụ thuộc hàm:
– Mã hóa đơn, Mã khách hàng, Mã nhân viên, Mã thuốc, xác định
duy nhất 1 hóa đơn, 1 khách hàng, 1 NV, 1 loại thuốc.
– Một hóa đơn có thể có nhiều thuốc nhưng chỉ do một người mua
và một nhân viên bán.
– Số CMT của NV-> Tên NV, Địa chỉ NV
• Bảng KH : Ma KH,Ten KH, SDT KH
• Bảng Nhân viên : Ma NV, CMT Nv,Ten Nv,Đc NV, Sdt Nv
• Bảng Hóa đơn : mã hd, ngày bán , mã kh, mã nv
• Bảng thuốc : Ma thuoc, Ten thuoc,Công dụng,Ngày sd, Hạn sd, Số lượng ,
giá bán
2.5. Tách các lược đồ quan hệ
• 2.5.1. Phép tách lược đồ quan hệ
• Mục đích – Thay thế một sơ đồ quan hệ
R(A1, A2, …,An ) bằng một tập các sơ đồ
con {R1, R2,…, Rk} trong đó Ri R và R
= R1U R2U …U Rk
• Yêu cầu của phép tách
– Bảo toàn thuộc tính, ràng buộc
– Bảo toàn dữ liệu
2.5.2. Phép tách - kết nối bảo toàn
thông tin
Định lý tách đôi
2.5.3 Kiểm tra tính không mất mát
thông tin của 1 phép tách
Ví dụ
Ví dụ (tiếp)
Ví dụ (tiếp)
2.6. Thiết kế cơ sở dữ liệu quan hệ
• 2.6.1. Quy trình thiết kế CSDL
• 2.6.2. Thiết kế mô hình ER
• 2.6.3. Chuyển đổi từ mô hình ER sang mô
hình quan hệ
2.6.1. Quy trình thiết kế CSDL
• Nguyên tắc:
– Chính xác
– Tránh trùng lặp
– Dễ hiểu
– Chọn đúng thuộc tính và kiểu thuộc tính
– Chọn đúng mối quan hệ
Các bước thiết kế CSDL

Xác định yêu cầu, nghiệp vụ: Luôn đặt ra câu hỏi
- CSDL sẽ được sử dụng như thế nào?
- Những thông tin gì cần được lưu vào CSDL?
Xây dựng lược đồ thực thể - liên kết (ER)
- Thuộc tính (Attributes)
- Mối quan hệ/ liên kết (Relationship)
- Khóa
Ví Dụ
• CSDL quản lý theo dõi nhân viên, dự án,
phòng ban; Công ty có nhiều phòng ban,
mỗi phòng ban có một tên và mã đơn vị
duy nhất, đia điểm. Mỗi dự án có một tên
và mã dự án duy nhất, do một phòng ban
quản lý. Mỗi dự án có nhiều nhân viên
tham gia. Nhân viên có mã số NV, tên, địa
chỉ, mỗi nhân viên làm việc ở một phòng
ban, tham gia dự án với số giờ khác nhau.
Lược đồ ER
Chương 3: Các hoạt động quản trị cơ
sở dữ liệu
• 3.1. Kiểm soát dữ liệu
– 3.1.1. Đánh giá khả năng sử dụng của dữ liệu (Data
availability)
– 3.1.2. Toàn vẹn dữ liệu (Data integrity)
• 3.2. Quản lý thay đổi CSDL
– 3.2.1. Sao lưu và phục hồi CSDL
– 3.2.2. An toàn và bảo mật CSDL
• 3.3. Tối ưu hóa hiệu suất và kế hoạch phòng ngừa
rủi ro cho CSDL
– 3.3.1. Tối ưu hóa hiệu suất
– 3.3.2. Đánh giá và lập kế hoạch phòng ngừa rủi ro.
3.1. Kiểm soát dữ liệu
• 3.1.1. Đánh giá khả năng sử dụng của dữ liệu (Data
availability)
• Khái niệm: Data Availability hay tính khả
dụng của dữ liệu là quá trình đảm bảo
rằng dữ liệu có sẵn cho người dùng cuối
và ứng dụng, ở bất cứ thời điểm nào và ở
đâu khi họ cần
Data Availability là quá trình đảm bảo
rằng dữ liệu có sẵn cho người dùng cuối
Những thách thức khi đảm bảo tính
sẵn sàng của dữ liệu tốt
• Máy chủ lưu trữ hoặc lỗi lưu trữ
• Lỗi mạng hoặc sự cố
• Chất lượng dữ liệu kém
• Những vấn đề tương thích
• Cảnh báo an ninh
• Truy xuất hoặc trao đổi dữ liệu chậm
Để đạt được tính khả dụng của dữ
liệu
• Có một kế hoạch
• Sử dụng dự phòng
• Loại bỏ các điểm thất bại duy nhất
• Viện chuyển đổi dự phòng tự động
• Tận dụng lợi thế của ảo hóa
• Sử dụng đúng công cụ
3.1.2. Toàn vẹn dữ liệu (Data integrity)

• KN: Toàn vẹn dữ liệu (Data Integrity) của


một CSDL là cách xây dựng CSDL làm
sao để dữ liệu chứa trong CSDL này phải
chính xác và đáng tin cậy.
• Nếu dữ liệu chứa trong CSDL không chính
xác ta nói CSSL đó mất tính toàn vẹn (lost
data integrity).
Tính toàn vẹn của dữ liệu phụ thuộc
• Types of Constraints (Các loại ràng buộc)
• Defining Constraints (Xác định ràng buộc)
• Disabling Constraints (Vô hiệu hóa các
ràng buộc)
• Using Defaults and Rules (Sử dụng Mặc
định và Quy tắc)
• Deciding enforcement method to use
(Quyết định phương pháp thực thi để sử
dụng)
Data Integrity Tính toàn vẹn dữ liệu
• Tập các ràng buộc nhằm đảm bảo chất
lượng dữ liệu trong các CSDL: dữ liệu là
đúng đắn, tin cậy, nhất quán.
• Các kiểu toàn vẹn:
– Toàn vẹn miền giá trị (columns)
– Toàn vẹn thực thể (rows)
– Toàn vẹn định nghĩa
– Toàn vẹn bởi người sử dụng
– Toàn vẹn liên kết (between tables)
3.2. Quản lý thay đổi CSDL
• 3.2.1. Sao lưu và phục hồi CSDL.
• Các dạng biến cố hay tai họa có thể xảy ra
là:
– Ðĩa chứa file dữ liệu hoặc file Transaction Log
hay file hệ thống bị mất
– Server bị hư hỏng
– Những thảm họa tự nhiên như bão lụt, động
đất, hỏa hoạn
– Toàn bộ server bị đánh cắp hoặc phá hủy
– Các thiết bị dùng để backup – restore bị đánh
cắp hay hư hỏng
– Những lỗi do vô ý của người sử dụng như lỡ
tay xoá dữ liệu chẳng hạn
– Những hành vi mang tính phá hoại của nhân
viên như cố ý đưa vào những thông tin sai
lạc.
– Bị hack (nếu server có kết nối với internet).
3.2.2. An toàn và bảo mật CSDL
• KN: an toàn và bảo mật dữ liệu là thuật ngữ
dùng để mô tả quy trình, chính sách và công
nghệ đảm bảo dữ liệu của doanh nghiệp được
bảo mật khỏi sự truy cập bên trong và bên
ngoài hoặc hư hỏng, thất thoát dữ liệu, bao
gồm các cuộc tấn công độc hại và các mối đe
dọa nội bộ.
Bảo mật CSDL
• Phải giải quyết và bảo vệ những điểm sau:
– Dữ liệu trong CSDL
– Hệ thống quản lý CSDL (DBMS)
– Mọi ứng dụng liên quan
– Máy chủ (vật lý hoặc máy chủ ảo)
– Cơ sở hạ tầng máy tính
Các phương pháp bảo mật CSDL
• Bảo mật vật lý
• Sử dụng tường lửa
• Kiểm soát số lượng và quyền hạn truy cập
• Bảo vệ tài khoản/thiết bị của người dùng cuối
• Mã hóa dữ liệu
• Sử dụng các phần mềm CSDL mới nhất
• Lưu trữ thông tin đăng nhập
3.3. Tối ưu hóa hiệu suất và kế hoạch
phòng ngừa rủi ro cho CSDL
• 3.3.1. Tối ưu hóa hiệu suất
– Nâng cấp phần cứng máy tính: CPU, disk,
memory, network
– Tối ưu hóa cơ sở dữ liệu
• Tối ưu hóa bảng
• Tối ưu hóa câu truy vấn
– VD: SELECT * FROM TABLE1 WHERE
UPPER(COL1)='ABC'
3.3.2. Đánh giá và lập kế hoạch phòng
ngừa rủi ro.
• Để xây dựng và triển khai phương pháp
quản lý rủi ro cho tổ chức cần triển khai
áp dụng quản lý rủi ro trên cả ba yếu tố:
– Quy trình
– Công cụ
– Con người.
Quy trình quản lý rủi ro
Chương 4: Ngôn ngữ khai thác và
quản trị CSDL quan hệ
• 4.1. Các phép toán quan hệ
– 4.1.1. Các phép toán tập hợp
– 4.1.2. Các phép toán trên quan hệ
• 4.2. Ngôn ngữ SQL
– 4.2.1. Tổng quan về ngôn ngữ SQL
– 4.2.2. Các kiểu dữ liệu
– 4.2.3. Các hàm thư viện
– 4.2.4. Các lệnh định nghĩa cơ sở dữ liệu
– 4.2.5. Các lệnh cập nhật cơ sở dữ liệu
– 4.2.6. Lệnh truy vấn cơ sở dữ liệu
• 4.3. Một số chức năng quản trị CSDL
– 4.3.1. Toàn vẹn dữ liệu với Trigger và Store procedure
– 4.3.2. Phân quyền
– 4.3.3. Cải thiện hiệu suất CSDL
4.1. Các phép toán quan hệ
• 4.1.1. Các phép toán tập hợp
– Phép hợp
– Phép giao
– Phép trừ
– Phép tích Đề các
Phép hợp
• Phép hợp: Hợp của hai quan hệ R và S,
được ký hiệu là R U S, cho kết quả là một
quan hệ chứa tất cả các bộ có trong R
hoặc ở trong S hoặc ở trong cả hai. Các
bộ trùng lặp bị loại bỏ.
Ví dụ
Phép giao
• Phép giao: Giao của hai quan hệ R và S ,
được ký hiệu là R S , cho kết quả là một
quan hệ chứa tất các các bộ có trong cả
hai quan hệ R và S.
Ví dụ
Phép trừ
• Phép trừ quan hệ: Phép trừ quan hệ R và
S , được ký hiệu là R \ S, cho kết quả là
một quan hệ chứa tất cả các bộ có trong R
nhưng không có trong S.
Phép tích Đề các
• Phép tích Descartes của quan hệ R và S,
ký hiệu RxS, là một quan hệ có |R|.|S| bộ
có dạng (u,v), mỗi bộ có n + m thuộc tính,
u ꞓ R và v ꞓ S. Với n, m lần lượt là bậc của
R(U) và S(V).
• Ví dụ: có hai tập hợp A và B. Tích đề các của
AxB là:
Ví dụ
• A = {1,2}
• B = {p,q,r}
• Thì:
• A×B = {(1,p),(1,q),(1,r),(2,p),(2,q),(2,r)}
• Và:
• B×A = {(p,1),(q,1),(r,1),(p,2),(q,2),(r,2)}
4.1.2. Các phép toán trên quan hệ

• Phép chọn
• Phép chiếu
• Phép nối
• Một số các phép toán khác
Phép chọn (SELECT)
• Phép chọn được sử dụng để chọn một tập hợp
các bộ thoả mãn điều kiện chọn từ một quan hệ.
Ta có thể xem phép chọn như một bộ lọc, nó chỉ
giữ lại các bộ thoả mãn điều kiện đặt ra.
• Phép chọn được ký hiệu là:

• Trong đó ký hiệu σ được dùng để ký hiệu phép


chọn, còn điều kiện chọn là một biểu thức lôgic
được chỉ ra trên các thuộc tính của R.
Ví dụ
• Để chọn các bộ NHÂNVIÊN thuộc về đơn
vị có mã số là 4 hoặc các bộ NHÂNVIÊN
có lương lớn hơn 3000 ta có thể viết một
cách riêng rẽ như sau:
Ví dụ (tiếp)
• Để chọn ra các nhân viên làm việc ở đơn
vị có mã số là 4 và có lương lớn hơn 3000
hoặc các nhân viên làm việc ở đơn vị có
mã số là 5 và có lương lớn hơn 4000 ta có
thể viết phép chọn như thế nào?
• Kết quả phép chọn
Phép chiếu (PROJECT)
• Phép chiếu là phép toán chọn một số cột
của bảng. Nếu chúng ta chỉ quan tâm đến
một số thuộc tính của quan hệ, chúng ta
dùng phép chiếu để chiếu lên các thuộc
tính đó.
• Phép chiếu được ký hiệu là:
Ví dụ
• π < MãsốNV, Họđệm,Tên, địa chỉ,Lương>(NHÂNVIÊN)
• Kết quả phép chiếu
Phép nối (JOIN)
• Phép nối được ký hiệu là và được dùng để
kết hợp các bộ có liên hệ với nhau từ hai
quan hệ thành một bộ. Phép toán này rất
quan trọng đối với cơ sở dữ liệu quan hệ có
nhiều bảng bởi vì nó cho phép ta xử lý các
mối liên kết giữa các quan hệ.
• Dạng tổng quát của phép nối trên hai quan
hệ R(A1, A2,…,An) và S(B1,B2,…, Bm) là:
• R S < Điều kiện nối>
• Kết quả của phép nối là một quan hệ
Q(A1,A2,…,An, B1,B2,…,Bm) có n+m thuộc tính
Ví dụ: Kết quả của phép nối R và S với
điều kiện A3 = B1 sẽ cho kết quả là:
Một số các phép toán khác
• Phép chia
• Đệ quy
• …
Bài tập
• Cho lược đồ cơ sở dữ liệu Thưviện:
– SACH(Mãsách, Tênsách, TênNXB)
– SACH_TACGIA(Masach, TênTG)
– NHAXUATBAN(TênNXB, Địachỉ, Điệnthoại)
– SACH_BANSAO(Mãsách, Mãnhánh,
Sốlượngbảnsao)
– NHANH_THUVIEN(Mãnhanh, Tênnhánh, Địachỉ)
– SACH_MUON(Mãsách, Mãnhánh, Sốthẻ,
Ngàymượn, Ngàytrả)
– NGUOIMUON(Sốthẻ, Tên, Địachỉ, Điệnthoại)
Hãy viết các biểu thức quan hệ cho các truy vấn
sau đây trên cơ sở dữ liệu Thưviện:

• 1. Có bao nhiêu bản sao của cuốn sách


“The Lost Tribe” có trong nhánh thư viện
có tên là “Shapstown”
• 2. Có bao nhiêu bản sao của cuốn sách
“The Lost Tribe” có trong mỗi nhánh thư
viện.
• 3. Đưa ra tên của tất cả người mượn chưa
mượn cuốn sách nào.
• 4. Với mỗi cuốn sách được mượn ra từ nhánh
thư viện “Shapstown” có ngày trả là ngày
hôm nay, hãy đưa ra Tên sách, Tên người
mượn và địa chỉ người mượn.
• 5. Với mỗi thư viện nhánh, hãy đưa ra tên
nhánh thư viện và tổng số sách được mượn
ra từ nhánh này.
• 6. Đưa ra tên, địa chỉ và số các sách do
người này mượn với những người mượn
nhiều hơn 5 cuốn sách.
• 7. Với mỗi cuốn sách có tác giả (hoặc
đồng tác giả) là “Stephen King”, hãy đưa
ra tên sách và số lượng các bản sao có tại
nhánh thư viện có tên là “Central”.
4.2. Ngôn ngữ SQL
• 4.2.1. Tổng quan về ngôn ngữ SQL
• 4.2.2. Các kiểu dữ liệu
• 4.2.3. Các hàm thư viện
• 4.2.4. Các lệnh định nghĩa cơ sở dữ liệu
• 4.2.5. Các lệnh cập nhật cơ sở dữ liệu
• 4.2.6. Lệnh truy vấn cơ sở dữ liệu
4.2.1. Tổng quan về ngôn ngữ SQL
• SQL (Structured Query Language): là
ngôn ngữ truy vấn có cấu trúc. Cho phép
bạn truy cập và và thực hiện các thao tác:
– Lấy các hàng hoặc sửa đổi các hàng
– Trích xuất, tạo, sửa, xóa dữ liệu
–…
SQL cung cấp cho ta rất nhiều lợi ích

• Tạo ra cơ sở dữ liệu mới khi thiết kế


website hoặc lập trình phần mềm.
• Tạo bảng và view mới trong CSDL
• Dễ dàng tạo, chèn, xóa các bản ghi trong
một CSDL
• Lấy dữ liệu từ một cơ sở dữ liệu
Các chức năng của SQL
• Cho phép chúng ta truy cập Database theo nhiều cách
khác nhau, nhờ sử dụng các lệnh
• Người dùng có thể truy cập dữ liệu từ cơ sở dữ liệu
quan hệ
• SQL còn cho phép người sử dụng miêu tả dữ liệu
• Cho phép người dùng định nghĩa dữ liệu thao tác nó
khi cần thiết trong một Database
• Bạn có thể tạo , xóa Database và bảng
• Cho phép người dùng tạo view, hàm, procedure trong
một Database
• Người dùng được quyền truy cập vào bảng, thủ tục và
view
Đặc điểm và đối tượng của SQL
• Đặc điểm
• SQL là ngôn ngữ như tiếng Anh nên các lập trình viên
cũng cần có một số vốn ngoại ngữ về chuyên ngành
• SQL là ngôn ngữ phi thủ tục, không đòi hỏi chúng ta
về cách thức truy cập dữ liệu thế nào. Tất cả các
thông báo của SQL đều rất dễ sử dụng và hầu như
giảm thiểu tối đa khả năng xảy ra lỗi
• SQL cung cấp các tập lệnh đa dạng cho việc hỏi đáp
dữ liệu
– Chèn, update, xóa các hàng trong 1 quan hệ
– Tạo, xóa, sửa đổi và thêm các đối tượng trong của cơ sở
dữ liệu
• Điều khiển việc truy cập tới CSDL và các
đối tượng của nó để đảm bảo tính năng
bảo mật của CSDL
• Luôn bảo đảm tính chất nhất quán và sự
ràng buộc
• Điều kiện tiên quyết để tiện lợi cho việc sử
dụng các hỏi đáp là phải nắm vững được
các cấu trúc cơ sở dữ liệu của mình
• Đối tượng làm việc của SQL
• Là các bảng (tổng quan là các quan hệ dữ
liệu 2 chiều). Các bảng này thường chứa
nhiều cột (gọi là trường) và nhiều hàng
(gọi là bản ghi). Cột với tên gọi và kiểu dữ
liệu xác định tạo nên cấu trúc của bảng
(kiểu dữ liệu của cột là dạng duy nhất).
4.2.2. Các kiểu dữ liệu
1. SQL Numeric Data Types
2. SQL Date and Time Data Types
3. SQL Character and String Data Types
4. SQL Unicode Character and String Data Types
5. SQL Binary Data Types
6. SQL Miscellaneous Data Types
4.2.3. Các hàm thư viện
SQL DDL (Data Definition Language)

• DDL là ngôn ngữ định nghĩa dữ liệu. Các


lệnh DDL bao gồm:
– Lệnh CREATE: Tạo một bảng, một View của
bảng, hoặc đối tượng khác trong Database.
– Lệnh ALTER: Sửa đổi một đối tượng
Database đang tồn tại, ví dụ như một bảng.
– Lệnh DROP: Xóa toàn bộ một bảng, một
View của bảng hoặc đối tượng khác trong một
Database.
SQL DML (Data Manipulation
Language)
• DML là ngôn ngữ thao tác dữ liệu. Các
lệnh DML bao gồm:
– Lệnh SELECT: Lấy các bản ghi cụ thể từ một
hoặc nhiều bảng.
– Lệnh INSERT: Tạo một bản ghi.
– Lệnh UPDATE: Sửa đổi các bản ghi.
– Lệnh DELETE: Xóa các bản ghi.
SQL DCL (Data Control Language)
• DCL là ngôn ngữ điều khiển dữ liệu. Các
lệnh DCL bao gồm:
– Lệnh GRANT: Trao một quyền tới người
dùng.
– Lệnh REVOKE: Thu hồi quyền đã trao cho
người dùng.
4.2.4. Các lệnh định nghĩa cơ sở dữ liệu

• Tạo một cơ sở dữ liệu


• Tạo một bảng
• Các loại ràng buộc trong SQL
• Sửa đổi cấu trúc bảng
Tạo một cơ sở dữ liệu

• Cú pháp:
– Create Database <Tên CSDL>
• Ví dụ: Tạo một cơ sở dữ liệu có tên là
QLTV _ Quản lý thư viện:
– Create Database QLTV;
Tạo một bảng
• Cú pháp:

• Trong đó, mệnh đề CONSTRAINT cho phép ta khai


báo các ràng buộc dữ liệu
Ví dụ: Tạo bảng DOCGIA
Các loại ràng buộc trong SQL
• Các dạng constraint gồm:
– NOT NULL
– UNIQUE
– PRIMARYKEY
– FOREIGN KEY (Referential)
– CHECK
– DEFAULT-Mặc định
NOT NULL (Không rỗng)
• Khi có mệnh đề NOT NULL có trong định
nghĩa của một cột thì ta bắt buộc thuộc
tính này phải có giá trị.
• Nếu ta không chỉ thị gì trong định nghĩa
của thuộc tính thì nó có thể có hoặc không
có giá trị.
Ví dụ
UNIQUE (Duy nhất)
• Chỉ ra ràng buộc duy nhất, các giá trị của
cột chỉ trong mệnh đề UNIQUE trong các
row của table phải có giá trị khác biệt. Giá
trị null là cho phép nêu UNIQUE dựa trên
một cột.
Ví dụ

CONSTRAINT UNQ_Ten_Diachi UNIQUE(Ten,Diachi))


PRIMARY KEY (Khóa chính)
• Chỉ ra ràng buộc duy nhất (giống UNIQUE), tuy
nhiên khoá là dạng khoá UNIQUE cấp cao
nhất. Một table chỉ có thể có một PRIMARY
KEY. Các giá trị trong PRIMARY KEY phải NOT
NULL
• Cú pháp:
Ví dụ
FOREIGN KEY (Referential)
• Chỉ ra mối liên hệ ràng buộc tham chiếu
giữa bảng này với bảng khác.
• Từ khoá:
– ON DELETE CASCADE
• Được chỉ định trong dạng khoá này để chỉ
khi dữ liệu cha bị xoá thì dữ liệu con cũng
tự động bị xoá theo.
• Cú pháp:
CHECK (Ràng buộc kiểm tra giá trị)

• Ràng buộc CHECK được sử dụng để yêu


cầu các giá trị trong cột, hoặc khuôn dạng
dữ liệu trong cột phải theo một quy tắc
nào đó. Trên một cột có thể có nhiều ràng
buộc này.
• Để khai báo một ràng buộc CHECK cho
một cột nào đó ta dùng cú pháp sau:
Ví dụ
DEFAULT (Mặc định)
• Ràng buộc DEFAULT được sử dụng để
quy định giá trị mặc định cho một cột. Giá
trị này sẽ tự động gán cho cột nếu người
sử dụng không nhập vào khi bổ sung bản
ghi.
• Cú pháp:
Sửa đổi cấu trúc bảng
• Cú pháp tổng quát
Thêm một ràng buộc CHECK
Thêm một thuộc tính
• Cú pháp:

• Ví dụ:
Thay đổi kiểu của một thuộc tính
• Cú pháp:

• Ví dụ:
Xóa một thuộc tính
• Cú pháp:

• Ví dụ:
Xoá đối tượng
• Cú pháp:

• Ví dụ:
4.2.5. Các lệnh cập nhật cơ sở dữ liệu
• INSERT được dùng khi bạn muốn thêm
(hoặc chèn) dữ liệu mới.
• UPDATE được sử dụng khi bạn muốn thay
đổi (hoặc cập nhật) dữ liệu sẵn có.
• DELETE được sử dụng khi bạn muốn loại bỏ
(hoặc xóa) dữ liệu sẵn có.
• REPLACE được sử dụng khi bạn muốn thêm
hoặc thay đổi (hoặc đổi chỗ) dữ liệu mới
hoặc dữ liệu đã có.
• TRUNCATE được sử dụng khi bạn muốn làm
trống (hoặc xóa) tất cả dữ liệu từ mẫu.
Thêm mới bản ghi (INSERT)
Cú pháp:
INSERT INTO <tênbảng>([<danh sách các cột>])
VALUES (<danh sách các giá trị>)

Ví dụ: thêm một sinh viên mới vào bảng SINHVIEN


INSERT INTO SINHVIEN (MaSV, HoDem, Ten, NgaySinh, GioiTinh, Tinh, MaLoP)
VALUES ("561205", "Nguyễn Tiến", "Minh", "3/8/92", "nam", "Hà
Nội","K57CNSHA");

Chú ý: Nếu các giá trị sau từ khoá VALUES hoàn toàn phù hợp về thứ tự với các
cột trong bảng, thì danh sách các cột có thể được bỏ qua.

Ví dụ: thêm một sinh viên mới vào bảng SINHVIEN không có danh sách
cột
INSERT INTO SINHVIEN VALUES ("561205", "Nguyễn Tiến", "Minh", "3/8/92",
"nam", "Hà Nội","K57CNSHA")
Thêm mới bản ghi (INSERT) (tiếp)
• Ta có thể thêm các bản ghi vào bảng từ câu lệnh
truy vấn (Select)
• Cú pháp:
– INSERT INTO <tênbảng> <Câu lệnh Select>
• Ví dụ: Ví dụ: thêm tất cả các dòng trong bảng
DSSV vào bảng SINHVIEN
– INSERT INTO SINHVIEN SELECT * FROM
DSSV ;
– Trong trường hợp các cột không giống nhau thì phải
chỉ rõ tên cột.
Câu lệnh sửa bản ghi – SQL Update
• Cú pháp:
• UPDATE <tên bảng>
SET
<tên cột 1> = <giá trị 1>,
<tên cột 2> = <giá trị 2>, ...,
<tên cột n> = < giá trị n>
[WHERE <điềukiện>];
Ví dụ: sửa hộ khẩu của các sinh viên từ Hà Tây thành
Hà Nội. Ví dụ
UPDATE SINHVIEN
SET
Tinh = "Hà Nội"
WHERE Tinh = "Hà Tây";

UPDATE SINHVIEN
SET
Tinh = REPLACE(Tinh, “Tây”, “Nội”)
WHERE Tinh = “Hà Tây”
Câu lệnh xoá bản ghi – SQL Delete
• Cú pháp:
• DELETE FROM <tên bảng>
[WHERE <điều kiện>];

TRUNCATE TABLE <Tên bảng>

• Ý nghĩa:
– Các bản ghi thoả mãn điều kiện WHERE sẽ bị xoá khỏi
bảng.
– Nếu không có mệnh đề WHERE thì tất cả các bản ghi của
bảng sẽ bị xóa khỏi bảng.
Ví dụ
• Ví dụ: xóa tất cả các bản ghi trong bảng DSSV
• DELETE FROM DSSV;

• Ví dụ: Xóa sinh viên lớp K53MTA khỏi bảng


SINHVIEN
• DELETE FROM SINHVIEN WHERE
MaLop = "K53MTA";
4.2.6. Lệnh truy vấn cơ sở dữ liệu
• SELECT được dùng khi bạn muốn đọc (hoặc lựa
chọn) dữ liệu của bạn.

• Cú pháp truy vấn dữ liệu tổng quát


• SELECT <Danh sách các cột>
FROM <Danh sách Bảng>
WHERE <Các điều kiện>
GROUP BY <Tên cột>
HAVING <Điều kiện dựa trên GROUP BY>
ORDER BY <Danh sách cột>
1. Dạng truy vấn đơn giản
• Cú pháp:
• SELECT <Danh sách các cột>
FROM <Danh sách Bảng>
lấy ra một số cột trong một bảng nào đó.

• Ví dụ: lấy ra mã sinh viên, họ đệm và tên của các


sinh viên trong bảng SINHVIEN
• SELECT MaSV, Hodem, Ten
FROM SINHVIEN;
2. Ký tự đại diện *
• Ký tự * đại diện cho tất cả các cột
• SELECT *
FROM <Tên Bảng>

• Ví dụ: Lấy ra danh sách các khoa


• SELECT *
FROM KHOA;
3. Mệnh đề WHERE
• Dùng để thiết lập điều kiện lấy dữ liệu
• SELECT <Danh sách các cột>
FROM <Tên bảng>
WHERE

• Ví dụ: lấy ra mã sinh viên, họ đệm và tên của các


sinh viên nữ
• SELECT MaSV, HoDem, Ten
FROM SINHVIEN
WHERE GioiTinh = "Nữ";
Ví dụ (tiếp)
• Ví dụ: lấy ra Mã sinh viên, Họ đệm và Tên của
các sinh viên nữ học lớp K55CNSHA

• SELECT MaSV, HoDem, Ten


FROM SINHVIEN
WHERE GioiTinh = "Nữ" and MaLop =
"K55CNSHA";
4. Toán tử BETWEEN
• Toán tử BETWEEN <giá trị 1> AND <giá trị 2>

• Ví dụ: Lấy ra danh sách các môn học có từ 2 đến 5


tín chỉ
• SELECT *
FROM MONHOC
WHERE SoTC BETWEEN 2 and 5;

Cách 2: WHERE SoTC >=2 AND SoTC <=5


5. Toán tử [NOT] LIKE
• Toán tử [NOT] LIKE: tìm một mẫu ký tự
• Sử dụng với các ký tự đại diện: _(1 ký tự), % (1
chuỗi bất kỳ)

• Ví dụ: lấy ra danh sách Sinh viên có Họ đệm bắt


đầu là “Nguyễn”
• SELECT *
FROM SINHVIEN
WHERE HoDem LIKE "Nguyễn%";
6. Toán tử [NOT] IN
• Toán tử [NOT] IN: phép toán so sánh trong 1 tập
hợp, 1 danh sách

• Ví dụ: lấy ra thông tin của các lớp thuộc khoa


công nghệ thông tin (mã CNTT), nông học (mã
NH) và chăn nuôi thú y (mã CNTY).
• SELECT *
FROM LOP
WHERE MaKhoa IN ("CNTT", "NH", "CNTY");
7. Truy vấn dữ liệu từ nhiều bảng
• Khi thông tin cần lấy ra có từ nhiều bảng khác
nhau, cần thực hiện truy vấn từ nhiều bảng
• Cú pháp:
SELECT <Danh sách các cột>
FROM <Danh sách các Bảng>
WHERE <Các điều kiện>
Ví dụ
• Ví dụ: Hiển thị thông tin về các sinh viên với các
kết quả học tập của họ. Thông tin hiển thị cần
(Mã sinh viên, Họ tên, Ngày sinh, Giới tính, Tên
môn học, Kết quả)
• SELECT SINHVIEN.MaSV, Hodem, Ten,
NgaySinh, GioiTinh, TenMH, KetQua
FROM SINHVIEN, KETQUA, MONHOC
WHERE SINHVIEN.MaSV = KETQUA.MaSV
AND KETQUA.MaMH = MONHOC.MaMH;
8. Mệnh đề ORDER BY
• Sắp xếp kết quả theo thứ tự mong muốn
ORDER BY [ASC | DESC]

• Ví dụ: lấy ra các sinh viên nữ học lớp K55CNSHA,


được sắp xếp theo vần alphabet của họ và tên

• SELECT MaSV, HoDem, Ten


FROM SINHVIEN
WHERE GioiTinh = "Nữ" and MaLop = "K55CNSHA"
ORDER BY Ten, HoDem;
9. Mệnh đề GROUP BY

• Nhóm dữ liệu lại theo từng nhóm để thực hiện các phép toán thống
kê.
• Cú pháp:
• GROUP BY <Danh sách Tên cột>

• Ví dụ: In ra danh sách các lớp và số sinh viên trong mỗi lớp từ bảng
SinhVien

• SELECT SINHVIEN.MaLop, LOP.TenLop,


COUNT(SINHVIEN.MaSV) AS 'Số sinh viên'
FROM SINHVIEN, LOP
WHERE SINHVIEN.MaLop = LOP.MaLop
GROUP BY SINHVIEN.MaLop, LOP.TenLop;
10. Một số hàm thông dụng
• AVG: giá trị trung bình
• MIN: giá trị nhỏ nhất
• MAX: giá trị lớn nhất
• COUNT: đếm số phần tử
• SUM: Tổng các phần tử
11. Mệnh đề HAVING
• Đặt điều kiện chọn sau khi đã nhóm dữ liệu bằng mệnh đề
GROUP BY.

• Ví dụ: In ra danh sách các lớp có số sinh viên > 2 từ bảng


SINHVIEN

• SELECT SINHVIEN.MaLop, LOP.TenLop,


COUNT(SINHVIEN.MaSV) AS 'Số sinh viên'
FROM SINHVIEN, LOP
WHERE SINHVIEN.MaLop = LOP.MaLop
GROUP BY SINHVIEN.MaLop, LOP.TenLop
HAVING COUNT(SINHVIEN.MaSV)>=2
12. Phát biểu Select với AS
• Đặt lại tên cột khi hiển thị kết quả

• Ví dụ: Hiển thị thông tin về các sinh viên với các kết quả
học tập của họ. Khi hiển thị cột KetQua đổi tên thành
cột DiemTB

• SELECT SINHVIEN.MaSV, HoDem, Ten, NgaySinh,


GioiTinh, TenMH, KetQua AS DiemTB
FROM SINHVIEN, KETQUA, MONHOC
WHERE SINHVIEN.MaSV = KETQUA.MaSV
AND KETQUA.MaMH = MONHOC.MaMH;
13. Phát biểu Select với DISTINCT
• Nếu kết quả truy vấn có nhiều bản ghi trùng
nhau, để chỉ các bản tin duy nhất (không trùng
nhau) ta dùng từ khoá DISTINCT

• Ví dụ: In ra danh sách các lớp trong bảng


SINHVIEN

• SELECT DISTINCT MaLop


FROM SINHVIEN;
14. Truy vấn con
• Đôi khi ta cần sử dụng kết quả của 1 câu truy vấn để làm điều kiện
cho 1 câu truy vấn khác, khi đó ta gọi là truy vấn con.
• Khi thực hiện, truy vấn con sẽ được thực hiện trước, rồi lấy kết quả
để thực hiện truy vấn chính.

• Dạng tổng quát:

• SELECT <Danh sách các cột>


FROM <Danh sách Bảng>
WHERE <Các điều kiện>
…<Têncột > IN ( NOT IN, =, <>, …)
(SELECT <Danh sách Bảng>
FROM <Danh sách Bảng>
WHERE <Các điều kiện>)
Ví dụ
• Ví dụ: Hiển thị thông tin về những sinh viên đã đăng kí
học và không phải thi lại môn học nào

• SELECT SINHVIEN.MaSV, HoDem, Ten, NgaySinh,


MaMH, KetQua
FROM SINHVIEN, KETQUA
WHERE (SINHVIEN.MaSV=KETQUA.MaSV)
AND SINHVIEN.MaSV IN (SELECT MaSV
FROM KETQUA
WHERE KetQua>=5);
4.3. Một số chức năng quản trị CSDL
• 4.3.1. Toàn vẹn dữ liệu với Trigger và Store
procedure
• 4.3.2. Phân quyền
• 4.3.3. Cải thiện hiệu suất CSDL
4.3.1. Toàn vẹn dữ liệu với Trigger và
Store procedure
• Stored procedure (Thủ tục)
– Là đoạn chương trình kịch bản (programming scripts)
với các câu lệnh SQL nhúng (embedded SQL) được
lưu dưới dạng đã được biên dịch và thi hành thực
tiếp bởi MySQL server,
– SP cho phép lưu trữ các logic ứng dụng trên CSDL.
Khi gọi SP lần đầu tiên, MySQL sẽ tạo một lịch thực
thi và lưu trữ nó trong bộ nhớ đệm. Ở những lần gọi
hàm tiếp theo, MySQL sử dụng sử dựng lại lịch thực
thi được lưu rất nhanh với hiệu xuất đáng tin cậy.
– SP là một mã SQL đã chuẩn bị sẵn mà bạn có thể
lưu, do đó đoạn mã có thể được sử dụng lại nhiều
lần.
• Vì vậy, nếu bạn có một truy vấn SQL mà
bạn viết đi viết lại nhiều lần, hãy lưu nó
dưới dạng một thủ tục được lưu trữ, sau
đó chỉ cần gọi nó để thực thi nó.
• Cũng có thể chuyển các tham số cho một
thủ tục được lưu trữ, để thủ tục được lưu
trữ có thể hoạt động dựa trên (các) giá trị
tham số được truyền vào.
Vì sao nên dùng Stored procedure
• Giảm dư thừa mã chương trình: Các đoạn
mã tương tự trong các ứng dụng như thêm,
cập nhật có thể lưu ở phía CSDL
• Cải thiện tốc độ thực thi câu lệnh SSQL
• Bảo trì: Nếu có sự thay đổi trong CSDL, mã
lệnh cần thay đổi có thể xác định trong các
SP
• An ninh CSDL tốt hơn: Trong các ứng dụng
an ninh cao, với SP có thể kiểm soát truy cập
dữ liệu và đưa ra các qui định an ninh tập
trung.
Nhược điểm của Stored procedure
• Thiếu tính khả chuyển (Lack of Portability)
– SP khó chuyển từ một DBMS sang một
DBMS khác. Yêu cầu lập trình và kiểm thử lại
đáng kể
• SQLServer: T-SQL
• Oracle: PL-SQL
• Tải DB Server
– Sử dụng SP nhiều có thể gây quá tải MySQL
server (SQL Server phải lưu trữ quá nhiều kế
hoạc thực thi)
• Hạn chế ngôn ngữ lập trình
– Lập trình SP không phong phú như các nền
tảng phát triển khác như Java hay PHP
– Lưu ý: Các phiên bản tương lai của MySQL
có thể cung cấp các giao diện cho phép tạo
các SP sử dụng các ngôn ngữ bên ngoài, ví
dụ Java
Sử dụng Stored Procedure khi?
• Thực hiện những phép toán phức tạp, lặp lại nhiều lần
• Project đòi hỏi nghiêm ngặt về tốc độ thực thi . Stored
Procedure cho tốc độ thực thi nhanh hơn so với các
câu lệnh SQL Server thông thường vì Stored
Procedure đã được lưu sẵn tại SQL server, do vậy nó
chỉ cần gọi một dòng lệnh để thực thi Stored
Procedure, điều này giúp tăng tốc độ thực thi.
• Trong quá trình tạo Stored Procedure, SQL Server đã
tối ưu hóa những dòng lệnh này, điều này giúp cho tốc
độ thực thi cao hơn câu lệnh SQL thông thường rất
nhiều.
Không sử dụng Stored Procedure khi?
• Store Procedured làm quá trình debug trở
nên khó khăn hơn.
• Vì vậy hãy nghĩ đến Stored Procedure
như là phương án cuối cùng để tối ưu hóa
tốc độ thực thi chương trình. Các project
có size nhỏ và vừa nên ưu tiên sử dụng
các thư viện ORM (Object Relation
Mapping), như Entity Framework cho C#,
TypeORM cho NodeJs.
Sự khác nhau của Thủ tục, Hàm
Thủ tục (PROCEDURE) Hàm (FUNCTION)

Cách gọi CALL Sử dụng các câu lệnh


trong sql như SELECT,
UPDATE
Giá trị trả về Có thể một hoặc nhiều kết Trả về một giá trị duy nhất
quả SELECT và các tham số thông qua RETURN
out
Các tham số Giá trị (input) và tham Chỉ các giá trị tham số
chiếu (output) Các tham số vào (input). Không cần
(IN, OUT, INOUT) các thẻ như IN..
Gọi thủ tục/hàm Có thể gọi các thủ tục và Chỉ có thể gọi các hàm
hàm khác khác
Cú pháp tạo Thủ tục/Hàm
CREATE FUNCTION name ([parameterlist])
RETURNS datatype [options] sqlcode

CREATE PROCEDURE name ([parameterlist])


[options] sqlcode
Ví dụ: Tạo một thủ tục tên uspActorList trả về danh
sách first_name, last_name của các actor sắp xếp theo
first_name

CREATE PROCEDURE uspActorList


AS
BEGIN
SELECT first_name, last_price
FROM actor
ORDER BY first_name;
END;
Ví dụ: Tạo một thủ tục tên uspActorList có tham số đầu
vào là max_id trả về danh sách first_name, last_name
của các actor sắp xếp theo first_name và có id < max_id

CREATE PROCEDURE actorList(IN max_id INT)


AS
BEGIN
SELECT first_name, last_price
FROM actor
WHERE actor_id < max_id
ORDER BY first_name;
END;
Ví dụ: Tạo một function tên film_in_stock trả về
số lượng với đầu vào (IN) là p_film_id,
p_store_id, đầu ra (OUT) là p_film_count
CREATE PROCEDURE film_in_stock(IN p_film_id INT, IN p_store_id INT,
OUT p_film_count INT)
READS SQL DATA
BEGIN
SELECT inventory_id
FROM inventory
WHERE film_id = p_film_id
AND store_id = p_store_id
AND inventory_in_stock(inventory_id);

SELECT FOUND_ROWS() INTO p_film_count;


END $$
Các câu lệnh khác
• DELIMITER $$
– Thường được sử dụng khi xác định các hàm,
thủ tục và trình kích hoạt (trong đó bạn phải
sử dụng nhiều câu lệnh). Dấu $$ được sử
dụng để xác định phần đầu của toàn bộ thủ
tục, bên trong các câu lệnh riêng lẻ được kết
thúc bởi ;. Bằng cách đó, khi mã được chạy
trong máy khách mysql, máy khách có thể
cho biết nơi toàn bộ thủ tục kết thúc và thực
thi nó như một đơn vị thay vì thực thi các câu
lệnh riêng lẻ bên trong.
• Lưu ý rằng từ khóa DELIMITER chỉ là một chức
năng của command line mysql client (và một số
máy khách khác) và không phải là một cấu trúc
của SQL thông thường. Nó sẽ không hoạt động
nếu chuyển nó qua một API ngôn ngữ lập trình
đến MySQL. Một số ứng dụng khách khác như
PHPMyAdmin có các phương thức khác để chỉ
định dấu phân cách không mặc định.
• Gán giá trị cho biến
Sử dụng SET hoặc SELECT INTO.
• VD:
SET @model_year = 2018;
• Gọi thủ tục:
Call film_in_stock(1,1, @film_count);
Select @film_count;
• Mệnh đề IF THEN
IF condition THEN commands;
[ELSEIF condition THEN commands;]
[ELSEcommands;]
END IF;
• Mệnh đề CASE
CASE expression
WHEN value1 THEN commands;
[WHEN value2 THEN commands;]
[ELSE commands;]
END CASE;
• Mệnh đề REPEAT UNTIL
[loopname:]
REPEAT commands;
UNTIL condition
END REPEAT [loopname];
• Mệnh đề WHILE
[loopname:]
WHILE condition DO commands;
END WHILE [loopname];
• Mệnh đề LEAVE
– LEAVE dùng thoát khỏi vòng lặp
– LEAVE cũng có thể dùng để thoát khỏi
BEGIN-END
Xử lý lỗi thông qua Handlers
• Luôn có khả năng Store Procedure gặp lỗi
trong khi thực thi các lệnh SQL. MySQL
cung cấp kỹ thuật xử lý lỗi thông qua
Handler
• Một handler cần định nghĩa sau khai báo
các biến, con trỏ và điều kiện, nhưng
trước các lệnh SQL
• Cú pháp khai báo một Handler

DECLARE type HANDLER FOR condition1,


condition2, condition3, ... statement;

– type: CONTINUE hoặc EXIT


– condition(s): Các điều kiện mà handler sẽ được
gọi (VD: Not found, SqlException,..)
– statement: Câu lệnh sẽ thi hành khi có điều kiện
xảy ra
VD: Nếu không tim thấy (NOT FOUND) customer_id
là khách hàng chưa trả đĩa thuê có id được lưu trong kho
là p_inventory_id thì sẽ trả về NULL

CREATE FUNCTION inventory_held_by_customer(p_inventory_id INT)


RETURNS INT
READS SQL DATA
BEGIN
DECLARE v_customer_id INT;
DECLARE EXIT HANDLER FOR NOT FOUND RETURN NULL;

SELECT customer_id INTO v_customer_id


FROM rental
WHERE return_date IS NULL
AND inventory_id = p_inventory_id;

RETURN v_customer_id;
END $$
Quản lý store procedure
• Hiển thị tất cả những Stored procedure đang
tồn tại trong tất cả các cơ sở dữ liệu

SHOW PROCEDURE STATUS;

• Hiển thị tất cả những Function đang tồn tại


trong tất cả các cơ sở dữ liệu

SHOW FUNCTION STATUS;


• Nếu chỉ muốn hiển thị ra stored procedure
của một cơ sở dữ liệu cụ thể sử dụng câu
lệnh:

SHOW PROCEDURE STATUS WHERE


Db = 'db_name';
• Tương tự với functions:

SHOW FUNCTION STATUS WHERE Db =


'db_name';

SHOW FUNCTION STATUS LIKE 'repeat%';

SHOW PROCEDURE STATUS LIKE 'film%';


• Hiển thị thông tin cụ thể của một procedure

SHOW CREATE PROCEDURE <name procedure>;


Ví dụ 1
• Tạo một stored procedure tên là displayFilmInfo
nhận category_id và language_id như là các
tham số:
– Nếu category_id và language_id được chỉ rõ, trả
lại thông tin các film có category_id và language
bằng các giá trị truyền vào.
– Nếu 0 được truyền như một tham số cho
language_id thì trả lại thông tin các film có
category_id là tham số truyền vào.
– Nếu 0 được truyền như một tham số cho
category_id thì trả lại các film có language_id là
tham số truyền vào.
DELIMITER $$
DROP PROCEDURE IF EXISTS displayFilmInfo;
CREATE PROCEDURE displayFilmInfo(IN p_category_id INT, IN p_language_id INT)
BEGIN
IF(p_language_id = 0) THEN
SELECT film.film_id FROM film
JOIN film_category ON film.film_id = film_category.film_id AND film_category.category_id = p_category_id;

ELSEIF (p_category_id = 0) THEN


SELECT film.film_id FROM film
WHERE film.language_id = p_language_id;

ELSEIF (p_language_id > 0 AND p_category_id > 0) THEN


SELECT film.film_id FROM film
JOIN film_category ON film.film_id = film_category.film_id AND film_category.category_id = p_category_id
WHERE film.language_id = p_language_id;

END IF;
END $$
DELIMITER ;
# thực thi procedure
CALL displayFilmInfo(1,1);
Kết quả
• mysql> CALL displayFilmInfo(1,1);
• +---------+
• | film_id |
• +---------+
• | 19 |
• | 21 |
• | 29 |
• | 38 |
• | 56 |
• | 67 |
• ....
• 64 rows in set (0.00 sec)

• Query OK, 0 rows affected (0.00 sec)


Ví dụ 2
• Viết hàm tính tổng số đĩa film được thuê
của của hàng trong tháng, năm. Với tham
số đầu vào là mã của hàng, tháng, năm.
Sau đó sử dụng hàm trong lệnh SELECT
đưa ra các cửa hàng và tổng số film được
thuê tại cửa hàng trong tháng 2/2006.
Procedure
DELIMITER $$
DROP PROCEDURE IF EXISTS total_movies;
CREATE PROCEDURE total_movies(IN p_store_id INT, IN p_month INT, IN
p_year INT)
BEGIN
SELECT inventory.store_id as store,count(rental.inventory_id) FROM
inventory
JOIN rental ON inventory.inventory_id = rental.inventory_id AND
month(rental.rental_date)=p_month AND year(rental.rental_date)=p_year
GROUP BY inventory.store_id
HAVING inventory.store_id=p_store_id;
END$$
DELIMITER ;

call total_movies(1,2,2006);
Kết quả
mysql> call total_movies(1,2,2006);
+--------+------------------------------------+
| store | count(rental.inventory_id) |
+--------+------------------------------------+
| 1| 92 |
+--------+-------------------------------------+
1 row in set (0.03 sec) Query OK, 0 rows affected
(0.03 sec)
• Function:
DELIMITER $$
DROP FUNCTION IF EXISTS total_inventory;
CREATE FUNCTION total_inventory (p_store_id INT, p_month INT, p_year INT)
RETURNS int
BEGIN
DECLARE v_out INT;
SELECT count(rental.inventory_id) INTO v_out FROM inventory
JOIN rental ON inventory.inventory_id = rental.inventory_id AND
month(rental.rental_date)=p_month AND year(rental.rental_date)=p_year
GROUP BY inventory.store_id
HAVING inventory.store_id=p_store_id;
return v_out;
END$$
DELIMITER ;

select store_id, total_inventory(store_id,2,2006) from store;


Kết quả
• mysql> select store_id,
total_inventory(store_id,2,2006) from store;
+------------+----------------------------------------------+
| store_id | total_inventory(store_id,2,2006) |
+------------+----------------------------------------------+
| 1| 92 |
| 2| 90 |
+------------+----------------------------------------------+
2 rows in set (0.07 sec)
• Trigger
– Triggers là quá trình tự động thi hành các
lệnh SQL hoặc Store procedure (SP) sau
hoặc trước các lệnh INSERT, UPDATE, hoặc
DELETE.
– Các ứng dụng có thể bao gồm: lưu lại thay
đổi hoặc cập nhật dữ liệu các bảng khác.
– Trigger chạy sau mỗi câu lệnh cập nhật
bảng do đó có thể thêm tải với CSDL
• Cú pháp
CREATE TRIGGER name BEFORE | AFTER
INSERT |UPDATE | DELETE ON tablename FOR
EACH ROW sql-code
• Cú pháp lệnh bên trong tương tự SP
• Trong trigger, mã lệnh có thể truy cập các
cột của bản ghi hiện tại
– OLD.columnname trả lại nội dung của bản ghi
trước khi bị thay đổi hoặc xóa (UPDATE,
DELETE)
– NEW.columnname trả lại nội dung của bản
ghi mới hoặc bản ghi thay thế (INSERT,
UPDATE)
Ví dụ
DELIMITER $$

CREATE TRIGGER `upd_film` AFTER UPDATE ON `film` FOR EACH ROW BEGIN
IF (old.title != new.title) or (old.description != new.description)
THEN
UPDATE film_text
SET title=new.title,
description=new.description,
film_id=new.film_id
WHERE film_id=old.film_id;
END IF;
END;;
DELIMITER ;
Ví dụ: Tạo trigger trên bảng payment, mỗi khi thêm, sửa bảng
payment sẽ cập nhật thông tin đó cùng với thông tin là thời gian
thêm, sửa vào bảng payment_log (tạo thêm)
drop table payment_log;
show create table payment;
CREATE TABLE payment_log (
payment_id smallint(5) DEFAULT NULL,
customer_id smallint(5) DEFAULT NULL ,
staff_id tinyint(3) unsigned DEFAULT NULL,
rental_id int(11) DEFAULT NULL,
amount decimal(5,2) DEFAULT NULL,
payment_date datetime DEFAULT NULL,
changedate DATETIME DEFAULT NULL,
action VARCHAR(50) DEFAULT NULL
);
DELIMITER $$
DROP TRIGGER if exists update_payment;
CREATE TRIGGER update_payment AFTER UPDATE ON payment
FOR EACH ROW
BEGIN
INSERT INTO payment_log
SET action = 'update',
payment_id = OLD.payment_id,
customer_id = OLD.customer_id,
staff_id = OLD.staff_id,
rental_id = OLD.rental_id,
amount = OLD.amount,
payment_date = OLD.payment_date,
changedate = NOW();
END$$
DELIMITER ;
Quản lý trigger
• Trigger được lưu trữ trong file:
/data_folder/database_name/table_name.trg,
• Để hiển thị các trigger gắn với 1 bảng dữ liệu
SELECT * FROM
`Information_Schema`.`Triggers`
WHERE Trigger_schema = 'database_name'
• Xóa một trigger
DROP TRIGGER tablename.triggername
• Thay đổi một trigger
ALTER TRIGGER, SHOW CREATE TRIGGER,
hoặc SHOW TRIGGER STATUS.
4.3.2. Phân quyền
• Quyền hạn ở đây dùng để chỉ quyền truy
cập cơ sở dữ liệu (CSDL). Bạn có thể tạo,
xóa hoặc từ chối quyền trong MS SQL
Server.
• Để phân quyền, sử dụng 1 trong 2 cách
sau.
– Cách 1: Dùng T-SQL
– Cách 2: Dùng SQL Server Management Studio
SSMS
Cách 1: Dùng T-SQL
• Cú pháp:

Use <database name> Grant <permission name>


on <object name> to <username\principle>
Ví dụ
• Để phân quyền chọn cho người dùng có
tên TestUser trên đối tượng là TestTable
trên CSDL có tên TestDB, chạy truy vấn
dưới đây:

USE TestDBGO Grant select on TestTable to


TestUser
Cách 2: Dùng SQL Server Management Studio SSMS

• Bước 1: Kết nối


tới CSDL, mở
rộng thư mục
như trong hình
dưới đây.
• Mở thư mục
Security > Users
và tìm tên người
dùng muốn phân
quyền
• Bước 2: Click
chuột phải
vào TestUser và
chọn Properties.
Màn hình dưới
đây sẽ hiện ra.
• Bước 3:
Dùng Search để tìm
kiếm sau đó chọn đối
tượng muốn phân
quyền, ở đây là
bảng TestTable.
• Bước 4: Click chọn
bảng TestTable, sau đó
chọn hộp
checkbox Grant cho các
thao tác trong danh sách
bên dưới như trong hình
dưới đây. Ở ví dụ này là
trao quyền chọn
bảng (Select).
• Bước 5: Click OK để
hoàn tất việc phân
quyền.
4.3.3. Cải thiện hiệu suất CSDL
Các mệnh đề cần chú ý
• Mệnh đề WHERE
• Phép JOIN
• Mệnh đề HAVING
• 1. Chỉ lấy ra dữ liệu cần thiết
SELECT driverslicensenr, name
FROM Drivers
WHERE EXISTS (SELECT '1' FROM Fines WHERE
fines.driverslicensenr = drivers.driverslicensenr);

SELECT driverslicensenr, name


FROM drivers
INNER JOIN fines ON fines.driverslicensenr =
drivers.driverslicensenr;
• 2. Giới hạn kết quả trả về
• Ví dụ:
SELECT TOP 3 * FROM Drivers;

SELECT *
FROM Drivers
WHERE driverslicensenr = 123456 AND
ROWNUM <= 3;
• 3. Không làm cho truy vấn phức tạp hơn
mức cần thiết
• Xem xét câu truy vấn:
SELECT driverslicensenr, name
FROM Drivers
WHERE driverslicensenr = 123456 OR driverslicensenr = 678910
OR driverslicensenr = 345678;

SELECT driverslicensenr, name


FROM Drivers
WHERE driverslicensenr IN (123456, 678910, 345678);
• SELECT driverslicensenr, name FROM Drivers
WHERE NOT (year > 1980);

• SELECT driverslicensenr, name FROM Drivers


WHERE year <= 1980;
• 4. Ràng buộc điều kiện một cách hợp lý
• Xem xét ví dụ sau:
SELECT state, COUNT(*) FROM Drivers WHERE state
IN ('GA', 'TX') GROUP BY state ORDER BY state

SELECT state, COUNT(*) FROM Drivers GROUP BY


state HAVING state IN ('GA', 'TX') ORDER BY state
Từ truy vấn đến kế hoạch thực thi
• Việc đánh giá chất lượng các câu truy vấn là rất
khó và có rất nhiều điều cần xem xét khi tìm kiếm
các lựa chọn thay thế cho một câu truy vấn. Mọi
sự trợ giúp đều hữu ích và đó là lý do vì sao cần
cách tiếp cận có cấu trúc để tối ưu hóa truy vấn
với một số công cụ.
• Cách tiếp cận có cấu trúc chủ yếu dựa trên kế
hoạch truy vấn. Như đã biết, câu truy vấn đầu tiên
được đưa vào cây phân tích cú pháp và xác định
chính xác thuật toán nào sẽ được sử dụng cho
mỗi hành động và thực hiện như thế nào.
CÁM ƠN CÁC BẠN!

You might also like