Khóa học
Dữ liệu là nền tảng của xã hội ngày càng số hóa của chúng ta. Từ ứng dụng di động và hệ thống ngân hàng đến công cụ tìm kiếm và các chatbot AI thế hệ mới như ChatGPT, tất cả những công cụ này đều không thể tồn tại nếu thiếu dữ liệu. Bạn đã bao giờ tự hỏi tất cả dữ liệu này được lưu ở đâu chưa? Bạn đoán đúng rồi: cơ sở dữ liệu.
Cơ sở dữ liệu là một tập hợp có tổ chức của dữ liệu có cấu trúc, thường được lưu trữ trong một hệ thống máy tính. Phần lớn dữ liệu trên thế giới được lưu trong cơ sở dữ liệu quan hệ.
Trong hướng dẫn này, chúng ta sẽ tập trung vào MySQL, một hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) phổ biến. Được Oracle hậu thuẫn, MySQL là cơ sở dữ liệu mã nguồn mở, đáng tin cậy, có khả năng mở rộng và thân thiện với người dùng, được sử dụng bởi một số công ty quan trọng nhất trong lĩnh vực công nghệ, bao gồm Meta, Netflix và Airbnb.
Sau khi đọc bài viết này, bạn sẽ sẵn sàng bắt đầu sử dụng công cụ phổ biến và lâu đời này, từ việc cài đặt trên máy tính, tạo cơ sở dữ liệu đến thực hiện các truy vấn SQL cơ bản và những thao tác nâng cao hơn. Sẵn sàng thử thách chứ? Hãy bắt đầu thôi!
Yêu cầu tiên quyết và khái niệm cơ bản
Có nhiều loại cơ sở dữ liệu khác nhau, phù hợp để lưu trữ các loại dữ liệu khác nhau. Những năm gần đây, các loại cơ sở dữ liệu mới đã được phát triển để đáp ứng sự đa dạng ngày càng tăng của định dạng dữ liệu. Mặc dù các cơ sở dữ liệu NoSQL nổi lên, cơ sở dữ liệu quan hệ vẫn là loại phổ biến nhất.
Cơ sở dữ liệu quan hệ được thiết kế để lưu dữ liệu dưới dạng các bộ bảng được định nghĩa trước với hàng và cột, được liên kết với nhau thông qua một hoặc nhiều mối quan hệ.
Cách tiêu chuẩn để tạo, quản lý và giao tiếp với cơ sở dữ liệu là SQL (Structured Query Language - ngôn ngữ truy vấn có cấu trúc). SQL là nền tảng của một số hệ phổ biến nhất trên thị trường, bao gồm PostgreSQL, SQLite và MySQL.
Để theo hướng dẫn này, chúng tôi khuyến nghị bạn nên có hiểu biết cơ bản về SQL. Một cách tuyệt vời để bắt đầu là khóa học Nhập môn SQL của chúng tôi. Bạn cũng sẽ cần cài MySQL trên máy tính, vậy hãy xem cách cài đặt MySQL.
Cài đặt MySQL
Việc cài đặt công cụ khá đơn giản. Bạn chỉ cần tải đúng trình cài đặt từ trang web chính thức, tùy theo hệ điều hành của máy bạn là macOS, Windows hay Linux.
Cài đặt trên macOS
Sau khi bạn tải trình cài đặt gói MySQL, hãy làm theo hướng dẫn trong trình hướng dẫn cài đặt. Bạn có thể chọn cài đặt tiêu chuẩn, hoặc tùy chỉnh các thành phần cần cài bằng cách nhấp nút “Customize”.

MySQL Package Installer Wizard: Customize. Nguồn: MySQL
Sau khi cài đặt MySQL Server mới thành công, hãy hoàn tất các bước cấu hình bằng cách chọn kiểu mã hóa mặc định cho mật khẩu, đặt mật khẩu root và bật (hoặc tắt) MySQL server khi khởi động.
Khi cài đặt bằng trình cài đặt gói, các tệp sẽ được cài vào một thư mục trong /usr/local có tên khớp với phiên bản và nền tảng cài đặt.
Cài đặt trên Windows
Cài đặt MySQL trên Windows khá đơn giản. Phương pháp được khuyến nghị là tải Windows Installer và để nó cài đặt cũng như cấu hình một phiên bản MySQL cụ thể. Nếu bạn dùng cài đặt mặc định, Windows sẽ tự động khởi động MySQL như một máy chủ cục bộ.
Cài đặt trên Linux
Linux hỗ trợ nhiều giải pháp khác nhau để cài đặt MySQL. MySQL khuyến nghị bạn sử dụng một trong các bản phân phối từ Oracle, với nhiều phương pháp cài đặt khác nhau như trong tài liệu.
Tìm hiểu MySQL
Trước khi bắt đầu dùng MySQL, đáng để phân tích cách MySQL hoạt động. Hãy xem qua một số khái niệm cốt lõi.
Kiến trúc MySQL
Giống nhiều cơ sở dữ liệu quan hệ phổ biến khác, MySQL được thiết kế theo kiến trúc client-server.
Theo mô hình tính toán này, một máy chủ được thiết kế để lưu trữ dữ liệu, quản lý quyền truy cập và cấu hình cơ sở dữ liệu, và xử lý hầu hết tài nguyên cũng như dịch vụ được client yêu cầu.
Trong đa số kiến trúc client-server, có một máy chủ tập trung và nhiều client. Bất kỳ máy tính nào cũng có thể là máy chủ nếu được thiết lập để cung cấp dịch vụ. Tuy nhiên, máy chủ thường là các máy rất mạnh và lớn vì chúng phù hợp nhất để xử lý lượng lớn yêu cầu và dữ liệu.
Ngược lại, client có thể đặt trên bất kỳ loại máy tính nào.

Kiến trúc client-server. Nguồn: DataCamp
Trong MySQL, hai thành phần này là MySQL client và MySQL server.
Kiểu dữ liệu
Kiểu dữ liệu được dùng để xác định các giá trị mà một cột có thể chứa. Nó hoạt động như một dạng siêu dữ liệu giúp SQL hiểu loại dữ liệu mong đợi ở mỗi cột và cách xử lý truy vấn lên cột đó.
MySQL hỗ trợ các kiểu dữ liệu SQL thông thường trong ba nhóm chính:
- Kiểu số
- Kiểu chuỗi
- Kiểu ngày và giờ
Trong các bảng dưới đây, bạn có thể xem tổng quan về các kiểu dữ liệu chính trong MySQL.
Kiểu dữ liệu số
|
Kiểu dữ liệu |
Mô tả |
|
TINYINT |
Số nguyên rất nhỏ. |
|
SMALLINT |
Số nguyên nhỏ. |
|
MEDIUMINT |
Số nguyên trung bình. |
|
INT hoặc INTEGER |
Số nguyên tiêu chuẩn. |
|
BIGINT |
Số nguyên lớn. |
|
FLOAT |
Số thực dấu phẩy động. |
|
DOUBLE |
Số thực dấu phẩy động độ chính xác kép. |
|
DECIMAL hoặc NUMERIC |
Số thực dấu phẩy cố định. |
Kiểu dữ liệu ngày và giờ
|
Kiểu dữ liệu |
Mô tả |
|
DATE |
Giá trị ngày theo định dạng YYYY-MM-DD. |
|
TIME |
Giá trị thời gian theo định dạng HH:MM:SS. |
|
DATETIME |
Giá trị ngày và giờ theo định dạng YYYY-MM-DD HH:MM:SS. |
|
TIMESTAMP |
Giá trị dấu thời gian theo định dạng YYYY-MM-DD HH:MM:SS. |
|
YEAR |
Giá trị năm theo định dạng YYYY hoặc YY. |
Kiểu dữ liệu chuỗi
|
Kiểu dữ liệu |
Mô tả |
|
CHAR |
Chuỗi độ dài cố định. |
|
VARCHAR |
Chuỗi độ dài biến đổi. |
|
TINYTEXT |
Chuỗi văn bản rất nhỏ. |
|
TEXT |
Chuỗi văn bản nhỏ. |
|
MEDIUMTEXT |
Chuỗi văn bản trung bình. |
|
LONGTEXT |
Chuỗi văn bản lớn. |
|
ENUM |
Đối tượng chuỗi chỉ có thể nhận một giá trị, được chọn từ danh sách giá trị xác định trước. |
|
SET |
Đối tượng chuỗi có thể nhận không hoặc nhiều giá trị, được chọn từ danh sách giá trị xác định trước. |
Truy cập MySQL
Khi đã cài đặt MySQL trên máy, bạn có thể bắt đầu sử dụng từ terminal. Để khởi động MySQL, bạn có thể truy cập bằng tên người dùng và mật khẩu tương ứng. Ở đây, chúng ta sẽ truy cập MySQL bằng tài khoản root cùng mật khẩu root đặt trong quá trình cài đặt. Vì đăng nhập trên cùng máy đang chạy MySQL, chúng ta không cần cung cấp thông tin trong tham số host (-h):
> mysql -uroot -p
Nếu bạn muốn thêm người dùng mới, gõ:
> CREATE USER 'username' IDENTIFIED BY 'password';
Sau khi tạo người dùng mới, bạn có thể vào MySQL bằng lệnh này và một thông điệp chào mừng sẽ hiển thị, tiếp theo là dấu nhắc mysql>:
> mysql -u username -p
Welcome to the MySQL monitor. Commands end with; or \g.
Your MySQL connection id is 25
Server version: 8.1.0 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
Owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Cách tạo cơ sở dữ liệu MySQL
Tạo cơ sở dữ liệu
Đã đến lúc tạo cơ sở dữ liệu đầu tiên trong MySQL. Trong hướng dẫn này, chúng ta muốn tạo một cơ sở dữ liệu tên “datacamp_courses”, chứa thông tin về một số khóa học của DataCamp. Cơ sở dữ liệu được lưu trữ cục bộ.
Để tạo một cơ sở dữ liệu, dùng lệnh sau:
mysql> CREATE DATABASE datacamp_courses;
Để kiểm tra cơ sở dữ liệu đã được tạo, gõ lệnh sau và một bảng với tất cả cơ sở dữ liệu khả dụng sẽ được hiển thị:
mysql> SHOW databases;
+--------------------+
| Database |
+--------------------+
| datacamp_courses |
| mysql |
+--------------------+
5 rows in set (0,00 sec)
Giờ bạn đã sẵn sàng truy cập cơ sở dữ liệu mới tạo.
mysql> USE datacamp_courses;
Database changed
Tạo bảng
Đến đây, bạn đã tạo cơ sở dữ liệu đầu tiên. Nhưng nó vẫn còn trống. Giờ chúng ta sẽ tạo bảng đầu tiên của cơ sở dữ liệu. Chúng ta muốn tạo một bảng tên ‘courses’, với thông tin về một số khóa học có trong danh mục khóa học của DataCamp.
Đã đến lúc tạo bảng đầu tiên trong cơ sở dữ liệu “datacamp_courses”. Chúng ta muốn tạo một bảng với thông tin về một số khóa học trong Danh mục khóa học DataCamp.
Khóa chính của bảng sẽ là course_id (lưu ý chỉ khóa này được in đậm), và kiểu dữ liệu của nó là số nguyên. Khóa chính là một ràng buộc buộc các giá trị cột phải khác null và duy nhất. Nó cho phép bạn định danh duy nhất một bản ghi cụ thể hoặc một tập bản ghi trong bảng.
Các cột còn lại cung cấp thông tin về tên khóa học, giảng viên, công nghệ của khóa học và url.
Để tạo bảng đầu tiên của cơ sở dữ liệu “datatacamp_courses”, dùng lệnh sau:
mysql> CREATE TABLE courses (
course_id int NOT NULL,
course_name varchar(250) NOT NULL,
instructor_name varchar(250) NOT NULL,
technology varchar(50) NOT NULL,
topic varchar(50) NOT NULL,
PRIMARY KEY (course_id)
);
Các truy vấn SQL cơ bản
Bạn đã có cơ sở dữ liệu và bảng đầu tiên. Tuyệt! Giờ là lúc thêm dữ liệu vào bảng.
Hãy thêm một vài hàng với các khóa học phổ biến trong danh mục của chúng tôi bằng câu lệnh INSERT. Đoạn mã sau sẽ thực hiện điều đó.
INSERT INTO
courses (course_id, course_name, instructor_name, technology, topic) VALUES
(1, 'Introduction to SQL', 'Izzy Weber', 'SQL','Data Manipulation'),
(2, 'Database Design', 'Lis Sulmont', 'SQL', 'Data Engineering'),
(3, 'Data Manipulation with pandas', 'Richie Cotton', 'R','Programming'),
(4, 'Generative AI Concepts', 'Daniel Tedesco', 'Theory', 'AI & Machine Learning');
Để kiểm tra các hàng đã được thêm chính xác, hãy xem toàn bộ hàng trong bảng bằng câu lệnh SELECT:
SELECT * FROM courses;
+-----------+-------------------------------+-----------------+------------+-----------------------+
| course_id | course_name | instructor_name | technology | topic |
+-----------+-------------------------------+-----------------+------------+-----------------------+
| 1 | Introduction to SQL | Izzy Weber | SQL | Data Manipulation |
| 2 | Database Design | Lis Sulmont | SQL | Data Engineering |
| 3 | Data Manipulation with pandas | Richie Cotton | R | Programming |
| 4 | Generative AI Concepts | Daniel Tedesco | Theory | AI & Machine Learning |
+-----------+-------------------------------+-----------------+------------+-----------------------+
4 rows in set (0,00 sec)
Bạn có thể nhận thấy có một lỗi trong dữ liệu vừa thêm. Công nghệ của khóa học Data Manipulation with pandas là Python chứ không phải R. Hãy sửa lỗi bằng câu lệnh UPDATE cùng với mệnh đề WHERE để chỉ định hàng cần cập nhật
UPDATE courses SET technology = 'Python' WHERE course_id = 3;
SELECT * FROM courses;
+-----------+-------------------------------+-----------------+------------+-----------------------+
| course_id | course_name | instructor_name | technology | topic |
+-----------+-------------------------------+-----------------+------------+-----------------------+
| 1 | Introduction to SQL | Izzy Weber | SQL | Data Manipulation |
| 2 | Database Design | Lis Sulmont | SQL | Data Engineering |
| 3 | Data Manipulation with pandas | Richie Cotton | Python | Programming |
| 4 | Generative AI Concepts | Daniel Tedesco | Theory | AI & Machine Learning |
+-----------+-------------------------------+-----------------+------------+-----------------------+
4 rows in set (0,00 sec)
Cuối cùng, bạn có thể muốn xóa một bản ghi trong bảng. Ví dụ, hãy xóa khóa học Generative AI Concepts:
DELETE from courses WHERE course_name = 'Generative AI Concepts';
SELECT * FROM courses;
+-----------+-------------------------------+-----------------+------------+-------------------+
| course_id | course_name | instructor_name | technology | topic |
+-----------+-------------------------------+-----------------+------------+-------------------+
| 1 | Introduction to SQL | Izzy Weber | SQL | Data Manipulation |
| 2 | Database Design | Lis Sulmont | SQL | Data Engineering |
| 3 | Data Manipulation with pandas | Richie Cotton | Python | Programming |
+-----------+-------------------------------+-----------------+------------+-------------------+
3 rows in set (0,00 sec)
Chủ đề nâng cao
Đánh chỉ mục
Theo mặc định, khi MySQL cần tìm một số hàng, nó sẽ bắt đầu từ hàng đầu tiên rồi đọc từ đầu đến cuối. Hành vi này có thể gây vấn đề khi cơ sở dữ liệu của bạn có hàng triệu hàng, vì quá trình sẽ rất chậm.
Một cách tuyệt vời để tăng tốc độ tìm kiếm hàng trong bảng là tạo chỉ mục. Chỉ mục là một thành phần của bảng mà MySQL dùng để truy xuất nhanh hơn các hàng có những cột cụ thể.
Hãy tạo một chỉ mục trong bảng khóa học của chúng ta tên “idx_course” trên cột “course_id”.
CREATE INDEX idx_course
ON courses (course_id);
Join
Cho đến lúc này, chúng ta mới chỉ làm việc với bảng courses. Nhưng bạn chỉ thực sự tận dụng hết tiềm năng của cơ sở dữ liệu quan hệ, như MySQL, khi làm việc với nhiều bảng cùng lúc.
Công cụ kỳ diệu để kết hợp nhiều bảng là phép JOIN. Hãy tưởng tượng chúng ta có một bảng thứ hai trong cơ sở dữ liệu tên ‘instructors” chứa thông tin cơ bản về các giảng viên khóa học DataCamp. Đoạn script sau tạo bảng và thêm một số hàng (hư cấu):
mysql> CREATE TABLE instructors (
instructor_id int NOT NULL,
instructor_name varchar(250) NOT NULL,
role varchar(500) NOT NULL,
number_courses int NOT NULL,
PRIMARY KEY (instructor_id)
);
INSERT INTO
instructors (instructor_id, instructor_name, role, number_courses) VALUES
(1, 'Lis Sulmont', 'Data Scientist', 4),
(2, 'Daniel Tedesco', 'Business Analyst', 1),
(3, 'Richie Cotton', 'Data Evangelist',5),
(4, 'Izzy Weber', 'Data Engineer', 2),
(5, 'James Chapman', 'Data Analyst',3);
Giả sử bạn muốn gộp hai bảng để lấy thông tin về các khóa học, cũng như dữ liệu liên quan đến giảng viên. Chúng ta sẽ dùng INNER JOIN để chỉ lấy thông tin các khóa học xuất hiện trong bảng course. Cột chung để join là “instructor_name”.
mysql> SELECT * FROM courses
-> INNER JOIN instructors
-> ON courses.instructor_name = instructors.instructor_name;
+-----------+-------------------------------+-----------------+------------+-------------------+---------------+-----------------+-----------------+----------------+
| course_id | course_name | instructor_name | technology | topic | instructor_id | instructor_name | role | number_courses |
+-----------+-------------------------------+-----------------+------------+-------------------+---------------+-----------------+-----------------+----------------+
| 2 | Database Design | Lis Sulmont | SQL | Data Engineering | 1 | Lis Sulmont | Data Scientist | 4 |
| 3 | Data Manipulation with pandas | Richie Cotton | Python | Programming | 3 | Richie Cotton | Data Evangelist | 5 |
| 1 | Introduction to SQL | Izzy Weber | SQL | Data Manipulation | 4 | Izzy Weber | Data Engineer | 2 |
+-----------+-------------------------------+-----------------+------------+-------------------+---------------+-----------------+-----------------+----------------+
3 rows in set (0,00 sec)
Đây chỉ là một loại join, nhưng còn những loại khác cũng hữu ích tùy trường hợp sử dụng. Khóa học Joining Data in SQL và cheat sheet về JOINS của chúng tôi sẽ giúp bạn bắt đầu.
Thực hành tốt với MySQL
Biện pháp bảo mật
Các cơ sở dữ liệu hiện đại có thể lưu các bảng với hàng triệu hàng. Với rất nhiều dữ liệu và ứng dụng dựa trên đó, việc giữ an toàn cho dữ liệu là tối quan trọng.
Cơ sở dữ liệu gặp nhiều rủi ro phổ biến, bao gồm quản lý quyền truy cập kém, mật khẩu yếu và tấn công SQL injection. Để đối phó với các mối đe dọa và điểm yếu này, có thể triển khai nhiều chiến lược và biện pháp, bao gồm cấu hình đặc quyền truy cập theo người dùng, xây dựng trigger trong SQL Server, và áp dụng các phương pháp mã hóa. Một điểm khởi đầu tốt cho bảo mật SQL là khóa học Database Design của chúng tôi.
Tối ưu hiệu năng
Khi tiến bộ trên hành trình viết mã SQL, bạn sẽ dần nhận ra tầm quan trọng của hiệu năng. Một truy vấn SQL có thể được viết theo nhiều cách. Tất cả đều chạy, nhưng một số cách hiệu quả hơn.
Có nhiều chiến lược và mẹo giúp bạn cải thiện hiệu năng mã SQL, bao gồm các truy vấn lồng và các mệnh đề SQL như WHERE, HAVING và DISTINCT.
Nhưng hiệu quả không chỉ là vấn đề kỹ thuật; đó còn là vấn đề trật tự và dễ đọc. Chỉ với những thay đổi nhỏ trong cách bạn viết SQL, như dùng bí danh (alias) và chú thích, bạn có thể tạo khác biệt lớn giúp ích cho bạn và cả đội.
Muốn học thêm về tối ưu hiệu năng SQL? Xem khóa học Improving Query Performance in SQL Server của chúng tôi
Kết luận
Chúc mừng bạn đã đi đến cuối hướng dẫn MySQL này. Chúng tôi hy vọng bạn thích phần giới thiệu về MySQL và các khả năng của nó. Nếu bạn quan tâm đến quản trị cơ sở dữ liệu, học MySQL là một lựa chọn khôn ngoan.
Nhưng đây chỉ là khởi đầu cho hành trình của bạn. Nếu bạn muốn học thêm về MySQL và SQL nói chung, Datacamp đã sẵn sàng đồng hành. Dưới đây là một số tài nguyên để bạn bắt đầu:
Tôi là một chuyên viên phân tích dữ liệu tự do, hợp tác với các công ty và tổ chức trên toàn thế giới trong các dự án khoa học dữ liệu. Tôi cũng là giảng viên khoa học dữ liệu với hơn 2 năm kinh nghiệm. Tôi thường xuyên viết bài về khoa học dữ liệu bằng tiếng Anh và tiếng Tây Ban Nha; một số bài đã được đăng trên các trang uy tín như DataCamp, Towards Data Science và Analytics Vidhya. Là một nhà khoa học dữ liệu có nền tảng khoa học chính trị và luật, mục tiêu của tôi là làm việc tại giao điểm giữa chính sách công, pháp luật và công nghệ, tận dụng sức mạnh của ý tưởng để thúc đẩy các giải pháp và cách tiếp cận mới nhằm giúp chúng ta đối mặt với những thách thức cấp bách, đặc biệt là khủng hoảng khí hậu. Tôi xem mình là người tự học, không ngừng trau dồi và là một người ủng hộ vững chắc cho tính đa ngành. Không bao giờ là quá muộn để học điều mới.
