Tải bản đầy đủ (.pdf) (19 trang)

(Tiểu luận) hệ quản trị cơ sở dữ liệu (co3021) assignment indexing and query processing in mysqland mongodb

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (775.71 KB, 19 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA KHOA HỌC – KỸ THUẬT MÁY TÍNH

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU (CO3021)

Assignment

Indexing and Query Processing in mySQLand
MongoDB

Giáo viên hướng dẫn:
Sinh viên:

Lê Thị Bảo Thu
Phùng Minh Khánh – 1913756
Trần Tiến Lộc – 1914038
Nguyễn Minh Bảo - 19121676

0

0

Tieu luan


Tp. Hồ Chí Minh, 2022

I.

Mở đầu


Tổng quan Cơ sở dữ liệu quan hệ đã là nền tảng của các ứng dụng doanh nghiệp

trong nhiều thập kỷ, và kể từ khi phát hành của MySQL vào năm 1995, nó đã trở thành
một lựa chọn phổ biến và không tốn kém, đặc biệt là một phần của nền tảng LAMP
phổ biến để củng cố các ứng dụng web ban đầu. Ngày nay, các doanh nghiệp hiện đại
đang nghĩ đến những cách tốt hơn để lưu trữ và quản lý dữ liệu - cho dù đó là để có
được cái nhìn sâu sắc hơn về khách hàng, thích nghi với những thay đổi của người
dùng hoặc đánh bại các đối thủ cạnh tranh với các ứng dụng và mơ hình kinh doanh
mới. Kết quả là nhiều giả định đã thúc đẩy sự phát triển của các cơ sở dữ liệu quan hệ
trước đó đã thay đổi:
 Yêu cầu năng suất của developers cao hơn và thời gian nhanh hơn để tiếp thị,
với các mơ hình dữ liệu truyền thống cứng nhắc truyền thống và sự phát triển
của các ứng dụng nguyên khối tạo ra các phương pháp nhanh, microservices
và DevOps, nén chu kỳ phát hành từ tháng, năm sang ngày và tuần.
 Sự cần thiết phải quản lý các loại dữ liệu mới, nhanh chóng thay đổi dữ liệu cấu trúc, bán cấu trúc, và dữ liệu đa hình được tạo ra bởi các lớp học mới của
ứng dụng web, di động, xã hội và IoT.
 Sự chuyển đổi bán buôn sang các hệ thống phân tán và điện toán đám mây,
cho phép các developers khai thác cơ sở hạ tầng tính tốn và lưu trữ theo yêu
cầu, có khả năng mở rộng cao với khả năng phục vụ khán giả bất cứ nơi nào
họ làm việc và chơi khắp thế giới trong khi đáp ứng được toàn bộ yêu cầu về
quy định cho chủ quyền dữ liệu.
Kết quả là các cơ sở dữ liệu không liên quan hoặc "NoSQL", như MongoDB,
đã xuất hiện để đáp ứng các yêu cầu của các ứng dụng mới và hiện đại hóa khối lượng
cơng việc hiện tại. Hỗ trợ cho các giao dịch ACID nhiều tài liệu, được lên kế hoạch
cho MongoDB 4.0 vào mùa hè năm 2018, sẽ làm cho các developers dễ dàng hơn
trong việc giải quyết các trường hợp sử dụng hiện tại hoặc trong tương lai sẽ gặp khó
khăn với MySQL. Bài viết này cung cấp tổng quan về MySQL và MongoDB, và các
trường hợp sử dụng thích hợp cho mỗi trường hợp.

0


0

Tieu luan


1.

Mongo database (MongoDB):
MongoDB là một database hướng tài liệu (document), một dạng NoSQL

database. Vì thế, MongoDB sẽ tránh cấu trúc table-based của relational database để
thích ứng với các tài liệu như JSON có một schema rất linh hoạt gọi là BSON.
MongoDB sử dụng lưu trữ dữ liệu dưới dạng Document JSON nên mỗi một collection
sẽ các các kích cỡ và các document khác nhau. Các dữ liệu được lưu trữ trong
document kiểu JSON nên truy vấn sẽ rất nhanh.
MongoDB lần đầu ra đời bởi MongoDB Inc., tại thời điểm đó là thế hệ 10, vào
tháng Mười năm 2007, nó là một phần của sản phẩm PaaS (Platform as a Service)
tương tự như Windows Azure và Google App Engine. Sau đó nó đã được chuyển thành
nguồn mở từ năm 2009.
MongoDB đã trở thành một trong những NoSQL database nổi trội nhất bấy giờ,
được dùng làm backend cho rất nhiều website như eBay, SourceForge và The New
York Times. Các tính năng của MongoDB gồm có: truy vấn ad hoc, indexing, nhân
bản (Replication), tổng hợp (Aggregation), lưu trữ file, cân bằng tải....
MongoDB mang đến cho người dùng khá nhiều lợi ích:
- Linh hoạt trong lưu trữ các kích cỡ dữ liệu khác nhau. Nhờ chúng được lưu
dưới dạng JSON nên thoải mái chèn bất kỳ thông tin nào tùy theo nhu cầu sử
dụng.
- Tiết kiệm thời gian trong việc kiểm tra sự tương thích về cấu trúc khi thêm,
xóa hoặc cập nhật dữ liệu. Nhờ MongoDB khơng có sự ràng buộc trong một

khn khổ, quy tắc nhất định nào.
- Bạn dễ dàng mở rộng hệ thống thông qua việc thêm node vào cluster. Cụm
các node này đóng vai trị như thư viện chứa các dữ liệu giao tiếp với nhau.
- Tốc độ truy vấn của MongoDB nhanh hơn so với RDBMS do toàn bộ dữ liệu
truy vấn đã được ghi đệm lên bộ nhớ RAM. Nhờ thế, những lượt truy vấn
sau sẽ được rút ngắn thời gian vì chúng khơng cần đọc từ ổ cứng.
- Trường dữ liệu “_id” (đại diện cho giá trị duy nhất trong mỗi document)
được tự động đánh chỉ mục nên hiệu suất luôn đạt mức cao nhất.

0

0

Tieu luan


Bên cạnh những lợi ích đó, MongoDB cũng có những điểm bất lợi như là:
- Không ứng dụng được cho các mơ hình giao dịch nào có u cầu độ chính
xác cao do khơng có ràng buộc.
- Chương trình MongoDB tiêu tốn khá nhiều dung lượng bộ nhớ do dữ liệu
được lưu dưới dạng key - value. Trong đó, một số collection chỉ có sự khác
biệt về value nên việc lặp lại key là điều khó tránh khỏi. Điều này dẫn đến
thừa dữ liệu.
- Khơng có cơ chế transaction (giao dịch) để phục vụ các ứng dụng ngân hàng.
- Dữ liệu lấy RAM làm trọng tâm hoạt động vì vậy khi hoạt động yêu cầu một
bộ nhớ RAM lớn.
- Mọi thay đổi về dữ liệu mặc định đều chưa được ghi xuống ổ cứng ngay lập
tức vì vậy khả năng bị mất dữ liệu từ nguyên nhân mất điện đột xuất là rất
cao.
2.


MySQL:
MySQL là một hệ thống quản trị cơ sở dữ liệu mã nguồn mở hướng đối tượng

(gọi tắt là RDBMS) hoạt động theo mơ hình client-server. Với RDBMS là viết tắt của
Relational Database Management System. MySQL được tích hợp apache, PHP.
MySQL quản lý dữ liệu thông qua các cơ sở dữ liệu. Mỗi cơ sở dữ liệu có thể có nhiều
bảng quan hệ chứa dữ liệu. MySQL cũng có cùng một cách truy xuất và mã lệnh tương
tự với ngôn ngữ SQL.
Mặc dù được phát hành từ những thập niên 90 nhưng MySQL vẫn luôn là sự
lựa chọn được ưu ái trong mắt các quản trị viên. Quá trình hình thành và phát triển của
MySQL được tóm tắt như sau:
- Công ty Thụy Điển MySQL AB phát triển MySQL vào năm 1994.
- Phiên bản đầu tiên của MySQL phát hành năm 1995.
- Công ty Sun Microsystems mua lại MySQL AB trong năm 2008.
- Năm 2010 tập đoàn Oracle thâu tóm Sun Microsystems. Ngay lúc đó, đội
ngũ phát triển của MySQL tách MySQL ra thành 1 nhánh riêng gọi là
MariaDB. Oracle tiếp tục phát triển MySQL lên phiên bản 5.5.
- Năm 2013 MySQL phát hành phiên bản 5.6.

0

0

Tieu luan


- Năm 2015 MySQL phát hành phiên bản 5.7.
- MySQL đang được phát triển lên phiên bản 8.0 và cho đến hiện nay có 2
phiên bản: miễn phí (MySQL Community Server) và có phí (Enterprise

Server).
Cũng như các hệ thống quản trị cơ sở dữ liệu khác, MySQL mang lại cho người
dùng những ưu điểm riêng biệt như sau:
- Dễ sử dụng: ổn định, dễ sử dụng và hoạt động trên hơn 20 nền tảng như
Linux, Windows, OS/X, HP-US, AIX, Netware cùng nhiều hệ điều hành
khác cung cấp một hệ thống lớn các hàm tiện ích rất mạnh.
- Độ bảo mật cao: rất thích hợp cho các ứng dụng có truy cập cơ sở dữ liệu
trên Internet khi sở hữu nhiều nhiều tính năng bảo mật thậm chí là ở cấp cao.
- Đa tính năng: hỗ trợ rất nhiều chức năng SQL được mong chờ từ một hệ
quản trị cơ sở dữ liệu quan hệ cả trực tiếp lẫn gián tiếp.
- Khả năng mở rộng và mạnh mẽ: MySQL có thể xử lý rất nhiều dữ liệu và
hơn thế nữa nó có thể được mở rộng nếu cần thiết.
- Nhanh chóng: Việc đưa ra một số tiêu chuẩn cho phép MySQL để làm việc
rất hiệu quả và tiết kiệm chi phí, do đó nó làm tăng tốc độ thực thi, xử lí
query.
Ngồi những lợi thế trên, MySQL cũng mang lại cho người dùng một số điểm
bất lợi khi sử dụng chúng:
- Giới hạn: Theo thiết kế, MySQL khơng có ý định làm tất cả và nó đi kèm
với các hạn chế về chức năng mà một vào ứng dụng có thể cần.
- Độ tin cậy: Cách các chức năng cụ thể được xử lý với MySQL (ví dụ tài liệu
tham khảo, các giao dịch, kiểm tốn,…) làm cho nó giảm đi phần nào độ tin
cậy hơn so với một số hệ quản trị cơ sở dữ liệu quan hệ khác.
- Dung lượng hạn chế: Nếu số bản ghi của bạn lớn dần lên thì việc truy xuất
dữ liệu của bạn là khá khó khăn, khi đó chúng ta sẽ phải áp dụng nhiều biện
pháp để tăng tốc độ truy xuất dữ liệu như là chia tải database này ra nhiều
server, hoặc tạo cache MySQL.

0

0


Tieu luan


II.
1.

Indexing
Tổng quan
Chỉ mục (Index) là bảng tra cứu đặc biệt mà cơng cụ tìm kiếm cơ sở dữ liệu có

thể sử dụng để tăng nhanh thời gian và hiệu suất truy xuất dữ liệu. Hiểu đơn giản, một
chỉ mục là một con trỏ chỉ tới từng giá trị xuất hiện trong bảng/cột được đánh chỉ mục.
Chỉ mục trong Database có ý nghĩa tương tự như các mục trong xuất hiện trong Mục
lục của một cuốn sách.
Một chỉ mục giúp tăng tốc các truy vấn SELECT và các mệnh đề WHERE.
Chúng chỉ được sử dụng để tăng tốc độ truy vấn và sẽ được sử dụng bởi cơ sở dữ liệu
tìm kiếm để xác định vị trí bản ghi rất nhanh.
Các lệnh INSERT và UPDATE tốn nhiều thời gian hơn trên các bảng có index
trong khi các lệnh SELECT trở nên nhanh hơn trên các bảng này. Lý do là vì, trong khi
chèn và cập nhật, database cũng phải cần chèn hoặc cập nhật các giá trị index . Các chỉ
mục có thể được tạo ra hoặc bỏ đi mà khơng ảnh hưởng đến dữ liệu.
Ta có thể tạo một index cho một tập hợp nhiều cột trong table. Giá trị của một
index key là phép concat các giá trị từ các record của các cột đó. Chẳng hạn nếu ta tạo
index cho chỉ một cột col_1 thì index key sẽ chỉ có giá trị tương ứng với giá trị record
của cột đó. Cịn nếu tạo index với 3 cột gộp col_1, col_2, col_3 thì giá trị của index
key sẽ là phép cộng concat của giá trị record 3 cột đó lại với nhau.
Nó cần có khơng gian lưu trữ riêng trên thiết bị lưu trữ (đĩa cứng) và có một
phần bản sao của dữ liệu của bảng được lập chỉ mục. Điều này có nghĩa rằng việc tạo ra
một chỉ mục là có sự dư thừa về dữ liệu

2.

Cấu trúc chỉ mục trong MongoDB

2.1. Tổng quan về cấu trúc chỉ mục trong MongoDB
Các loại chỉ mục trong MongoDB: Single Field Index, Compound Index,
Multikey Index, Geospatial Index.

0

0

Tieu luan


Trong lập chỉ mục MongoDB, tất cả các tập hợp có chỉ mục mặc định trên
trường _id. Nếu chúng ta không chỉ định bất kỳ giá trị nào cho _id thì MongoDB sẽ tạo
trường _id với một giá trị đối tượng. Chỉ mục này ngăn không cho khách hàng tạo hai
tài liệu có cùng giá trị trường _id.
Về cơ bản, các chỉ mục trong MongoDB tương tự như các chỉ mục trong các hệ
thống cơ sở dữ liệu khác. MongoDB xác định các chỉ mục ở cấp bộ sưu tập và hỗ trợ
các chỉ mục trên bất kỳ trường hoặc trường con nào của tài liệu trong bộ sưu tập
MongoDB.
2.2. Một số câu lệnh DDL phổ biến cho các loại chỉ mục trong MongoDB.
2.2.1. Single Field Indexes:

Tài liệu này mô tả các chỉ mục tăng dần / giảm dần trên một trường. Thao tác
sau tạo chỉ mục tăng dần trên trường soccre của bộ sưu tập bản ghi:
Ta có cấu trúc câu lệnh:
db.collection.createIndex( { <field1>: <type>} )


Ví dụ trong trường hợp trên:
db.records.createIndex( { score: 1 } )
db.records.find( { score: { $gt: 10 } } )

2.2.2. Single Field Indexes:

0

0

Tieu luan


MongoDB hỗ trợ các chỉ mục phức hợp, trong đó một cấu trúc chỉ mục duy
nhất chứa các tham chiếu đến nhiều trường trong collection document.
Ta có cấu trúc câu lệnh:
db.collection.createIndex( { <field1>:<type>,<field2>:<type2>,... } )

Ví dụ trong trường hợp trên:
db.products.createIndex( { "item": 1, "stock": 1 } )

2.2.3. Multikey Indexes:

Để lập chỉ mục một trường chứa giá trị mảng, MongoDB tạo một khóa chỉ mục
cho mỗi phần tử trong mảng. Các chỉ mục multikey này hỗ trợ các truy vấn hiệu quả
đối với các trường mảng. Chỉ mục nhiều khóa có thể được xây dựng trên các mảng
chứa cả giá trị vơ hướng (ví dụ: chuỗi, số) và tài liệu lồng nhau.
Ta có cấu trúc câu lệnh:
db.coll.createIndex( { <field>: < 1 or -1 > } )


0

0

Tieu luan


2.2.4. Geospatial Index:
Để truy vấn dữ liệu không gian địa lý, MongoDB hỗ trợ hai loại chỉ mục - chỉ
mục 2d và chỉ mục hình cầu 2d. Chỉ mục 2d sử dụng hình học phẳng khi trả về kết quả
và chỉ mục 2dsphere sử dụng hình học cầu để trả về kết quả.
Ta có cấu trúc câu lệnh:
db.collection.createIndex( { <location field> : "2d" } )

2.2.5. Xóa index trong Mongo:
Lệnh dropIndexesloại bỏ một hoặc nhiều chỉ mục (ngoại trừ chỉ mục trên
trường _id) khỏi collection được chỉ định.
Ta có cấu trúc câu lệnh:
{dropIndexes: <string>, index: <string|document|arrayofstrings>,
writeConcern: <document>, comment: <any>}

3.

Cấu trúc chỉ mục trong MySQL

3.1. Tổng quan về cấu trúc chỉ mục trong MySQL
Các loại index trong MySQL: Clustered - PRIMARY, UNIQUE (NOT NULL).
Nếu trong table khơng có cả 2 loại trên thì MySQL sẽ tự tạo một clustered index ẩn tên
là GEN_CLUST_INDEX trên một field ẩn tự động chứa id của các hàng (autoincrement, 6-byte). Loại thứ 2: Secondary bao gồm các loại index còn lại: INDEX.

MySQL cung cấp 3 kiểu index khác nhau cho data đó là B-Tree, Hash và R-Tree
index. Hiểu rõ về các kiểu index này sẽ giúp chúng ta tạo ra các loại index trong bảng
một cách hiệu quả hơn. Do R-Tree được sử dụng cho các loại dữ liệu khơng gian
spacial data và thường ít khi gặp phải nên bài viết này chúng ta sẽ tập chung so sánh 2
loại index là B-Tree và Hash.
B-Tree index có các đặc điểm sau: Dữ liệu index trong B-Tree được tổ chức và
lưu trữ theo dạng cây(tree), tức là có root, branch, leaf. Giá trị của các node được tổ
chức tăng dần từ trái qua phải. Khi truy vấn dữ liệu thì việc tìm kiếm trong B-Tree là 1
quá trình đệ quy, bắt đầu từ root node và tìm kiếm tới branch và leaf, đến khi tìm được
tất cả dữ liệu - thỏa mãn với điều kiện truy vấn thì mới dùng lại. B-Tree index được sử

0

0

Tieu luan


dụng cho những column trong bảng khi muốn tìm kiếm 1 giá trị nằm trong khoảng nào
đó.
Hash index có các đặc điểm sau: Hash index có một vài đặc điểm khác biệt so
với Btree index. Dữ liệu index được tổ chức theo dạng Key - Value được liên kết với
nhau. Khác với B-Tree, thì Hash index chỉ nên sử dụng trong các biểu thức tốn tử là =
và <>. Khơng sử dụng cho tốn từ tìm kiếm 1 khoảng giá trị như > hay < . Khơng thể
tối ưu hóa toán tử ORDER BY bằng việc sử dụng Hash index bởi vì nó khơng thể tìm
kiếm được phần từ tiếp theo trong Order. Toàn bộ nội dung của Key được sử dụng để
tìm kiếm giá trị records, khác với B-Tree một phần của node cũng có thể được sử dụng
để tìm kiếm. Hash có tốc độ nhanh hơn kiểu Btree.
MySQL thực hiện tải hàng loạt thay vì chèn từng bản ghi chỉ mục khi tạo hoặc
xây dựng lại chỉ mục. Phương pháp tạo chỉ mục này còn được gọi là Sorted index build.

3.2. Các câu lệnh DDL liên quan đến index trong MySQL
Ta có thể tạo index theo 2 cách: Chỉ định index ngay khi tạo table hoặc tạo index
cho 1 hay nhiều cột sau khi đã tạo table. Ví dụ tạo bảng đồng thời gán index:
CREATE TABLE newtable(
c1 INT PRIMARY KEY,
c2 INT NOT NULL,
c3 INT NOT NULL,
INDEX (c2,c3)
);

Thêm index cho bảng, với index mang tính duy nhất và khơng thể null:
ALTER TABLE tbl_name ADD PRIMARY KEY (olumn 1, column 2,..)

Thêm index cho bảng, với index mang tính duy nhất nhưng có thể null
ALTER TABLE tbl_name ADD UNIQUE index_name (column 1, column 2,..)

Thêm index cho bảng, có thể trùng lặp
ALTER TABLE tbl_name ADD INDEX index_name (column 1, column 2,..)

Thêm index đặc biệt thường cho tìm kiếm văn bản
ALTER TABLE tbl_name ADD FULLTEXT index_name (column 1, column 2,..)

Các lệnh xóa index
DROP INDEX index_name;

4. Query Processing
4.1. Giới thiệu xử lý truy vấn trong DBMS:

0


0

Tieu luan


Xử lý truy vấn trong DBMS - Mục tiêu chính của việc tạo cơ sở dữ liệu là lưu
trữ dữ liệu liên quan tại một nơi, truy cập và thao tác chúng khi người dùng yêu cầu.
Việc truy cập và thao tác dữ liệu cần được thực hiện một cách hiệu quả tức là; nó phải
được truy cập dễ dàng và nhanh chóng.
Nhưng cơ sở dữ liệu là một hệ thống và người dùng là một hệ thống hoặc ứng
dụng khác hoặc một người. Người dùng có thể yêu cầu dữ liệu bằng ngơn ngữ mà họ
hiểu. Nhưng DBMS có ngơn ngữ riêng (SQL) mà nó hiểu được. Do đó, người dùng
được yêu cầu truy vấn cơ sở dữ liệu bằng ngơn ngữ của nó - SQL. SQL này là một
ngôn ngữ cấp cao được tạo ra để xây dựng một cầu nối giữa người dùng và DBMS cho
giao tiếp của họ. Nhưng các hệ thống cơ bản trong DBMS sẽ khơng hiểu SQL. Phải có
một số ngơn ngữ cấp thấp mà các hệ thống này có thể hiểu được. Thông thường, bất kỳ
truy vấn nào được viết bằng SQL đều được chuyển đổi thành ngôn ngữ cấp thấp bằng
cách sử dụng đại số quan hệ mà hệ thống có thể hiểu được. Nhưng sẽ khó cho bất kỳ
người dùng nào viết trực tiếp các loại truy vấn đại số quan hệ. Nó địi hỏi kiến thức kỹ
lưỡng về nó.
Do đó, những gì DBMS làm là nó u cầu người dùng viết các truy vấn trong
SQL. Nó xác minh mã do người dùng viết và sau đó chuyển đổi chúng thành các ngơn
ngữ cấp thấp. Sau đó, nó chọn đường dẫn thực thi tốt nhất và thực hiện truy vấn và lấy
dữ liệu từ bộ nhớ trong. Tất cả các quá trình này được gọi chung là xử lý truy vấn
trong DBMS.
Đây là q trình từng bước chuyển ngơn ngữ cấp cao thành ngơn ngữ cấp thấp
mà máy có thể hiểu và thực hiện hành động được yêu cầu cho người dùng. Bộ xử lý
truy vấn trong DBMS thực hiện tác vụ này.

0


0

Tieu luan


Sơ đồ trên mô tả cách một truy vấn được xử lý trong cơ sở dữ liệu để hiển thị
kết quả. Khi một truy vấn được gửi đến cơ sở dữ liệu, nó sẽ được nhận bởi trình biên
dịch truy vấn. Sau đó, nó quét truy vấn và chia nó thành các mã thông báo riêng lẻ.
Sau khi các mã được tạo, chúng sẽ được trình phân tích cú pháp xác minh tính đúng
đắn của chúng. Sau đó, các truy vấn được mã hóa là chuyển đổi thành các biểu thức
quan hệ có thể có khác nhau, cây quan hệ và đồ thị quan hệ (Kế hoạch truy vấn). Sau
đó, trình tối ưu hóa truy vấn sẽ chọn chúng để xác định kế hoạch truy vấn tốt nhất để
xử lý. Nó kiểm tra trong danh mục hệ thống cho các ràng buộc và chỉ mục và quyết
định kế hoạch truy vấn tốt nhất. Nó tạo ra các kế hoạch thực thi khác nhau cho kế
hoạch truy vấn. Kế hoạch thực hiện truy vấn sau đó quyết định kế hoạch thực thi tốt
nhất và tối ưu hóa để thực thi. Bộ xử lý lệnh sau đó sử dụng kế hoạch thực thi này để
lấy dữ liệu từ cơ sở dữ liệu và trả về kết quả. Đây là tổng quan về cách xử lý truy vấn
hoạt động. Hãy cùng chúng tôi xem chi tiết bên dưới.
4.2. Xử lý truy vấn trong MongoDB:
4.2.1. Phương thức find():
- Hiển thị tập hợp cơ sở dữ liệu ở dạng Khơng có cấu trúc (Non - Structured)
({<Key>: <value>}) bao gồm <key> ”id” được tạo tự động bởi MongoDB và
dữ liệu thu thập được chèn bởi người dùng hoặc quản trị viên.
- Cú pháp:
db.collection_name.find ()
- Ví dụ: Câu lệnh db.users.find() được sử dụng để hiển thị tất cả các tài liệu có
trong bộ sưu tập bài viết như lệnh SELECT * FROM users.

0


0

Tieu luan


4.2.2. Phương thức findOne ():
- Có thể tìm thấy một tài liệu duy nhất bằng phương thức findOne (), Phương
thức này trả về tài liệu đầu tiên phù hợp với biểu thức truy vấn bộ lọc đã cho.
- Cú pháp:
db.collection_name.findOne ()
- -Ví dụ: Câu lệnh db.users.findOne() sẽ hiển thị tài liệu đầu tiên của bộ sưu
tập bài viết.

4.2.3. Phương thức pretty():
- Trong MongoDB, chúng ta có thể hiển thị các tài liệu của bộ sưu tập được
chỉ định theo cách được định dạng tốt bằng cách sử dụng phương thức
pretty().
- Cú pháp:
db.collection_name.find().pretty()
- Ví dụ: Câu lệnh db.users.find().pretty() sẽ hiển thị các tài liệu của bộ sưu tập
bài viết theo cách được định dạng tốt.

0

0

Tieu luan



4.2.4. Truy vấn dạng có điều kiện:
- Cú pháp: db.collection_name.find(query, projection)
- Trong đó:
+ collection_name : là tên collection của bạn.
+ query : không bắt buộc. Chỉ định những điều kiệu chúng ta muốn
+ projection : không bắt buộc. Chỉ định các trường để trả về trong các tài liệu
khớp với query trên, nếu projection rỗng thì trả về tất cả các trường.
+ Có dạng {field1: <value>, field2: <value> ... }, value có thể là bất kì sau
đây:
 hoặc true để trả về trường đó.
 0 hoặc false để loại trường đó.
 tốn tử projection khác.

0

0

Tieu luan


- Ví dụ: muốn lấy ra những user có name là “thu” ta dùng câu lệnh
db.users.find({name: 'thu'});

4.2.5. Truy vấn nhiều điều kiện ($and):
- Thực hiện một logic AND hoạt động trên một mảng của một hoặc nhiều biểu
thức và chọn ra các tài liệu đáp ứng tấy cả các biểu thức trong mảng.
- Cú pháp:
{$and: [ {<expression1>}, {<expression2>}, ... , {- Ví dụ: Câu lệnh db.users.find({$and: [{age: {$ne:20}},{age: {exists:
true}}]}) sẽ chọn tất cả document trong collections user thỏa mãn điều kiện:

các trường age có giá trị khơng bằng 20 và các trường price tồn tại.

- Truy vấn and với nhiều expressions cùng thực hiện.
- Ví dụ: Truy vấn này sẽ chọn ra tất cả document trong đó: các trường age có
giá trị bằng 20 hoặc 21 các trường name có giá trị băng thuthu hoặc
phone_number = 12341234123

4.3. Xử lý truy vấn trong MySQL:
 Có nhiều loại lệnh có thể được chia thành các loại sau:
- DDL (Ngơn ngữ định nghĩa dữ liệu)
- DML (Ngôn ngữ thao tác dữ liệu)
- DQL (Ngôn ngữ truy vấn dữ liệu)
- DCL (Ngôn ngữ điều khiển dữ liệu)
- TCL (Ngôn ngữ điều khiển giao dịch)
4.3.1. DDL (Ngôn ngữ định nghĩa dữ liệu):
- Khi chúng ta thực hiện bất kỳ thay đổi nào với cấu trúc vật lý của bảng trong
cơ sở dữ liệu, thì chúng tơi cần các lệnh DDL. Các lệnh CREATE, ALTER,
RENAME, DROP, TRUNCATE, v.v. nằm trong danh mục này. Khơng thể
khơi phục các lệnh đó.
4.3.1.1. CREATE: Nó được sử dụng để tạo một bảng hoặc cơ sở dữ liệu.

0

0

Tieu luan


+ Truy vấn: CREATE table employee;
4.3.1.2.


ALTER: Dùng để sửa đổi hoặc thay đổi các giá trị trong bảng.

+ Truy vấn: ALTER TABLE table_name
ADD COLUMN col_name;
4.3.1.3.

RENAME: Đổi tên bảng hoặc tên cơ sở dữ liệu.

+ Truy vấn: ALTER TABLE table_name
RENAME COLUMN col_name TO new_col_name;
4.3.1.4. DROP: Thao tác này loại bỏ các bản ghi của một bảng cũng như
cấu trúc của một bảng. Khơng thể hồn tác / hồn tác điều này.
+ Truy vấn: DROP TABLE IF EXISTS table_name;
4.3.1.5. TRUNCATE: Thao tác này chỉ làm trống các bản ghi, để lại cấu
trúc cho các bản ghi sau này.
+ Truy vấn: TRUNCATE TABLE employee;
4.3.2. DML (Ngôn ngữ thao tác dữ liệu):
- Như chúng ta có thể thấy tên ngơn ngữ Thao tác Dữ liệu, vì vậy khi các bảng
/ cơ sở dữ liệu được tạo, để thao tác một thứ bên trong thứ đó, chúng ta yêu
cầu các lệnh DML. Ưu điểm của việc sử dụng các lệnh này là nếu trong
trường hợp có bất kỳ thay đổi sai nào xảy ra, chúng ta có thể khơi phục /
hồn tác nó.
4.3.2.1. INSERT: Dùng để chèn hàng mới vào bảng.
+ Truy vấn: INSERT into employee
Values(101,’abcd’);
4.3.2.2. DELETE: Dùng để xóa một hàng hoặc tồn bộ bản ghi trong
bảng.
+ Truy vấn: DELETE TABLE employee;
4.3.2.3.


UPDATE: Dùng để cập nhật các bản ghi hiện có trong một bảng.

+ Truy vấn: UPDATE employee
SET col1 = new_col
WHERE condition;
4.3.2.4.

MERGE: Dùng để hợp nhất hai hàng.

0

0

Tieu luan


4.3.3. DCL (Ngơn ngữ điều khiển dữ liệu):
- Nó cấp hoặc thu hồi quyền truy cập của người dùng vào cơ sở dữ liệu.
4.3.3.1. GRANT: Cung cấp quyền truy cập cho người dùng
+ Truy vấn: GRANT CREATE table to user;
4.3.3.2.

REVOKE: Lấy lại quyền truy cập từ người dùng

+ Truy vấn: REVOKE CREATE table from user;
4.3.4. TCL (Ngôn ngữ điều khiển giao dịch):
- Điều này quản lý các vấn đề liên quan đến giao dịch trong bất kỳ cơ sở dữ
liệu nào. Điều này được sử dụng để khôi phục hoặc cam kết trong cơ sở dữ
liệu.

4.3.4.1. ROLLBACK: Được sử dụng để hủy hoặc hoàn tác các thay đổi
được thực hiện trong cơ sở dữ liệu
+ Truy vấn: ROLLBACK;
4.3.4.2. COMMIT: Được sử dụng để triển khai các thay đổi trong cơ sở
dữ liệu
+ Truy vấn: COMMIT;
4.3.5. DQL (Ngôn ngữ truy vấn dữ liệu):
- Ngôn ngữ truy vấn dữ liệu chỉ bao gồm lệnh SELECT mà chúng ta có thể
truy xuất và tìm nạp dữ liệu trên cơ sở một số điều kiện được cung cấp.
Nhiều mệnh đề SQL được sử dụng với lệnh này để truy xuất dữ liệu đã lọc.
(Dưới đây là một số dạng truy vấn DQL cơ bản)
4.3.5.1. SELECT: Được sử dụng để tìm nạp tất cả các bản ghi từ một
bảng.
+ Truy vấn: SELECT * FROM table;
4.3.5.2. DISTINCT: Được sử dụng để tìm nạp tất cả các giá trị duy nhất
từ một bảng.
+ Truy vấn: SELECT DISTINCT col_name FROM table;
4.3.5.3. WHERE: Được sử dụng để tha thứ các điều kiện trong việc truy
xuất các bản ghi.
+ Truy vấn: SELECT employee_id FROM employee
WHERE name = ‘stella’;

0

0

Tieu luan


4.3.5.4. COUNT: Được sử dụng để lấy số lượng bản ghi có trong một

bảng+ + Truy vấn: SELECT COUNT(*) FROM employee;
4.3.5.5. ORDER BY: Được sử dụng để sắp xếp cả giá trị số và chuỗi theo
cách tăng dần hoặc giảm dần. Nhưng theo mặc định, nó sắp xếp theo
cách tăng dần. Nếu chúng ta muốn giảm dần, thì chúng ta cần chỉ định
nó sau khi sử dụng mệnh đề ORDER BY.
+ Truy vấn: SELECT first_name FROM student
ORDER BY marks desc;
4.3.5.6. LIMIT: Điều này được sử dụng để chỉ định số lượng bản ghi
chúng ta muốn sau khi thực hiện truy vấn. Nếu chúng ta muốn có 5
sinh viên hàng đầu của một lớp, thì sau khi sắp xếp kết quả, chúng ta
có thể sử dụng LIMIT này bằng cách chỉ định 5. Vì vậy, nó sẽ chỉ tìm
nạp 5 bản ghi hàng đầu.
+ Truy vấn: SELECT first_name FROM student
ORDER BY marks desc
LIMIT 5;
4.3.5.7. AND: Nếu 2 điều kiện được đưa ra và cả hai điều kiện đều được
đáp ứng cho một bản ghi, thì chỉ truy vấn sẽ tìm nạp các bản ghi đó.
+Truy vấn: SELECT employee_id FROM employee
WHERE name = ‘stella’ AND city = ‘Bangalore’;
4.3.5.8. OR: Nếu 2 điều kiện được đưa ra và một trong số chúng được đáp
ứng cho một bản ghi, thì bản ghi đó sẽ được tìm nạp.
+Truy vấn: SELECT employee_id FROM employee
WHERE department = ‘IT’ OR city = ‘Bangalore’;
4.3.5.9. NOT: Được sử dụng với các điều kiện. Nếu chúng tơi chỉ định
KHƠNG trước bất kỳ điều kiện nào, các bản ghi không đáp ứng các
điều kiện đó sẽ được tìm nạp.
+Truy vấn: SELECT employee_id FROM employee
WHERE NOT BETWEEN 1 AND 10;
4.3.5.10. BETWEEN: Toán tử này chọn các bản ghi trong một phạm vi
nhất định. Chủ yếu chúng tôi sử dụng điều này khi chúng tôi muốn chỉ

định một phạm vi ngày.
+Truy vấn: SELECT emp_id FROM employee

0

0

Tieu luan


WHERE emp_id BETWEEN 1 AND 10;
4.3.5.11. IN: Toán tử này cho phép chúng ta chỉ định nhiều giá trị trong
một mệnh đề WHERE.
+Truy vấn: SELECT * FROM employee
WHERE employee_id IN (1001,1004,1008,1012);

5. Tài liệu tham khảo
1.

MongoDB là gì? Định nghĩa đầy đủ và chi tiết nhất về
MongoDB | TopDev

2.

MongoDB là gì? Tìm hiểu về MongoDB ( Chia sẻ từ A - Z)
(hostingviet.vn)

3.

MySQL là gì? Hướng dẫn tồn tập về MySQL - Trung tâm hỗ

trợ kỹ thuật | MATBAO.NET

0

0

Tieu luan



×