A. Beginner-Level MySQL Questions:
-
MySQL là gì?
- MySQL là một hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở (RDBMS) sử dụng Structured Query Language (SQL) để truy cập, quản lý và thao tác dữ liệu được lưu trữ trong các cơ sở dữ liệu.
-
Những tính năng chính của MySQL là gì?
- Mã nguồn mở, hỗ trợ đa nền tảng, hiệu suất cao, hỗ trợ các truy vấn phức tạp, tính năng bảo mật, tuân thủ ACID, khả năng mở rộng, replication, và clustering.
-
Cơ sở dữ liệu quan hệ là gì?
- Một cơ sở dữ liệu quan hệ là loại cơ sở dữ liệu lưu trữ dữ liệu trong các bảng gồm các hàng và cột. Mỗi bảng có một khóa duy nhất, và các mối quan hệ giữa các bảng được thiết lập thông qua các foreign keys.
-
SQL là gì?
- SQL (Structured Query Language) là một ngôn ngữ lập trình chuẩn được sử dụng để quản lý và thao tác với cơ sở dữ liệu quan hệ, bao gồm các công việc như truy vấn, chèn, cập nhật và xóa dữ liệu.
-
Những loại dữ liệu nào có trong MySQL?
- MySQL hỗ trợ các loại dữ liệu như:
- Numeric:
INT
,FLOAT
,DOUBLE
,DECIMAL
- String:
VARCHAR
,TEXT
,CHAR
- Date and Time:
DATE
,DATETIME
,TIMESTAMP
,TIME
- Binary:
BLOB
,BINARY
- Numeric:
- MySQL hỗ trợ các loại dữ liệu như:
-
Primary key là gì?
- Primary key là một định danh duy nhất cho một bản ghi trong bảng. Nó đảm bảo rằng không có giá trị trùng lặp trong cột primary key, và mỗi bảng chỉ có một primary key.
-
Foreign key là gì?
- Foreign key là một trường (hoặc tập hợp các trường) trong một bảng dùng để xác định duy nhất một hàng của bảng khác, thiết lập liên kết giữa hai bảng và đảm bảo tính toàn vẹn tham chiếu.
-
Sự khác biệt giữa
CHAR
vàVARCHAR
là gì?CHAR
là kiểu chuỗi có độ dài cố định, trong khiVARCHAR
là kiểu chuỗi có độ dài biến đổi.CHAR
được dùng khi độ dài của chuỗi có thể dự đoán trước, trong khiVARCHAR
tiết kiệm bộ nhớ hơn với các độ dài thay đổi.
-
AUTO_INCREMENT
trong MySQL là gì?AUTO_INCREMENT
là một tính năng trong MySQL tự động tạo ra định danh duy nhất cho các bản ghi mới trong một bảng, thường được sử dụng cho các cột primary key.
-
JOIN
trong SQL là gì?JOIN
được sử dụng để kết hợp các hàng từ hai hoặc nhiều bảng dựa trên một cột liên quan. Các loạiJOIN
bao gồmINNER JOIN
,LEFT JOIN
,RIGHT JOIN
, vàFULL JOIN
.
-
INNER JOIN
là gì?INNER JOIN
chỉ trả về các hàng có giá trị trùng khớp trong cả hai bảng được kết hợp.
-
LEFT JOIN
là gì?LEFT JOIN
trả về tất cả các hàng từ bảng bên trái và các hàng khớp từ bảng bên phải. Nếu không có hàng nào khớp, các giá trị NULL sẽ được trả về cho các cột từ bảng bên phải.
-
UNION
trong SQL là gì?UNION
kết hợp các tập kết quả của hai hoặc nhiều truy vấn SELECT, loại bỏ các hàng trùng lặp giữa các truy vấn. Các cột trong tất cả các truy vấn SELECT phải có cùng số lượng và kiểu dữ liệu.
-
Sự khác biệt giữa
UNION
vàUNION ALL
là gì?UNION
loại bỏ các hàng trùng lặp, trong khiUNION ALL
bao gồm tất cả các hàng trùng lặp trong kết quả kết hợp.
-
GROUP BY
là gì?GROUP BY
nhóm các hàng có cùng giá trị vào các nhóm tóm tắt, thường được sử dụng với các hàm tổng hợp nhưSUM()
,AVG()
,COUNT()
,MIN()
, vàMAX()
.
B. Intermediate-Level MySQL Questions:
-
Index trong MySQL là gì?
- Index là một cấu trúc dữ liệu giúp cải thiện tốc độ của các thao tác truy xuất dữ liệu trên một bảng. Nó giúp nhanh chóng xác định dữ liệu mà không cần quét toàn bộ bảng.
-
Các loại indexes khác nhau trong MySQL là gì?
- Các loại indexes phổ biến trong MySQL bao gồm:
- Primary Index: Tự động tạo cho primary keys.
- Unique Index: Đảm bảo tất cả các giá trị trong cột được index là duy nhất.
- Full-text Index: Dùng cho việc tìm kiếm văn bản.
- Composite Index: Index trên nhiều cột.
- Các loại indexes phổ biến trong MySQL bao gồm:
-
Normalization là gì?
- Normalization là quá trình tổ chức các bảng cơ sở dữ liệu để giảm thiểu sự dư thừa và cải thiện tính toàn vẹn của dữ liệu. Nó liên quan đến việc chia nhỏ các bảng lớn thành các bảng nhỏ hơn, có liên quan.
-
Denormalization là gì?
- Denormalization là quá trình kết hợp các bảng để giảm số lượng các
JOIN
và cải thiện hiệu suất truy vấn, thường được sử dụng trong các ứng dụng có nhiều truy vấn đọc.
- Denormalization là quá trình kết hợp các bảng để giảm số lượng các
-
HAVING
trong SQL là gì?HAVING
được sử dụng để lọc các bản ghi sau khi đã áp dụng tổng hợp, thường đi kèm vớiGROUP BY
. Nó tương tựWHERE
, nhưngWHERE
được áp dụng trước khi tổng hợp.
-
Stored procedure là gì?
- Stored procedure là một tập hợp các câu lệnh SQL có thể được thực thi như một đơn vị duy nhất. Nó được lưu trữ trong cơ sở dữ liệu và có thể được gọi bằng một tên cụ thể, thường được dùng để đóng gói các logic phức tạp.
-
Trigger trong MySQL là gì?
- Trigger là một tập hợp các câu lệnh SQL tự động thực thi khi một sự kiện được chỉ định (INSERT, UPDATE, DELETE) xảy ra trên một bảng.
-
View trong MySQL là gì?
- View là một bảng ảo dựa trên kết quả của một truy vấn SELECT. Nó không lưu trữ dữ liệu vật lý mà cung cấp một cách để đơn giản hóa các truy vấn phức tạp.
-
Transaction trong MySQL là gì?
- Transaction là một chuỗi các câu lệnh SQL được thực thi như một đơn vị công việc duy nhất. Nó tuân theo các thuộc tính ACID (Atomicity, Consistency, Isolation, Durability).
-
Thuộc tính ACID là gì?
- Atomicity: Tất cả các thao tác trong một transaction đều được thực hiện hoặc không.
- Consistency: Transactions đưa cơ sở dữ liệu từ một trạng thái hợp lệ này sang một trạng thái hợp lệ khác.
- Isolation: Transactions không can thiệp lẫn nhau.
- Durability: Khi một transaction được cam kết, các thay đổi là vĩnh viễn.
C. Advanced-Level MySQL Questions:
-
Replication trong MySQL là gì?
- Replication là quá trình sao chép dữ liệu từ một MySQL server (master) sang một hoặc nhiều servers (slaves) để tạo ra sự dư thừa và cân bằng tải.
-
Các loại replication trong MySQL là gì?
- Master-Slave Replication: Dữ liệu được ghi vào master và sao chép sang slaves.
- Master-Master Replication: Cả hai servers đều có thể làm master và sao chép dữ liệu lẫn nhau.
- Group Replication: Replication multi-master cho các MySQL clusters có tính sẵn sàng cao.
-
InnoDB storage engine là gì?
- InnoDB là storage engine mặc định trong MySQL, cung cấp hỗ trợ cho các giao dịch tuân thủ ACID, foreign keys, và khôi phục sau sự cố.
-
Sự khác biệt giữa
DELETE
,TRUNCATE
, vàDROP
là gì?- DELETE: Xóa các hàng khỏi một bảng dựa trên một điều kiện. Có thể hoàn tác.
- TRUNCATE: Xóa tất cả các hàng khỏi một bảng nhưng giữ lại cấu trúc. Không thể hoàn tác.
- DROP: Xóa toàn bộ bảng, bao gồm cả cấu trúc. Không thể hoàn tác.
-
Làm thế nào để tối ưu hóa một truy vấn chậm trong MySQL?
- Các kỹ thuật bao gồm sử dụng indexing đúng cách, phân tích kế hoạch thực thi truy vấn (
EXPLAIN
), viết lại các truy vấn cho hiệu quả hơn, sử dụngJOIN
thay vì subqueries, tránhSELECT *
, và đảm bảo tài nguyên phần cứng phù hợp.
- Các kỹ thuật bao gồm sử dụng indexing đúng cách, phân tích kế hoạch thực thi truy vấn (