Lại là chuỗi bài series phỏng vấn, SQL có rồi, các hệ cơ sở dữ liệu (RDBMS) khác có rồi, giờ tới lượt MySQL. DB phổ biến hàng đầu thế giới liệu phỏng vấn có gì khác biệt?
Tất cả sẽ tới trong 3 phần của chuỗi bài viết phỏng vấn MySQL.
Bắt đầu thôi nào anh em. Meme cuối cùng cũng chỉ là meme chứ không ý gì là dìm hàng MongoDB. Coi chứ nhiều khi đâu phải MySQL là ngon nhất, nhưng thôi cứ cập nhật kiến thức phỏng vấn đã.
1. VARCHAR và CHAR khác nhau thế nào? Lúc nào thì sử dụng cái nào?
Câu hỏi phỏng vấn MySQL này là câu hỏi cơ bản ha anh em. Đánh giá ở mức độ Junior, nắm chắc kiến thức về các kiểu dữ liệu.
Đầu tiên thì CHAR và VARCHAR chắc chắn là kiểu dữ liệu dạng chuỗi ha. Độ dài các kí tự là cần được quy định.
- CHAR lưu trữ các kí tự có độ dài cố định, trong khi VARCHAR lưu trữ các ký tự có độ dài không cố định (có thể thay đổi được)
- Với kiểu CHAR, khi đã khai báo độ dài cố định, nếu chuỗi input vào có độ dài nhỏ hơn, các kí tự phía sau sẽ được tự động thêm vào bằng khoảng trắng.
- Về hiệu suất thì CHAR tốt hơn VARCHAR một chút.
- Chính vì độ dài CHAR cấp là cố định từ trước nên bộ nhớ cấp phát cũng có giới hạn, VARCHAR thì ngược lại, bộ nhớ của VARCHAR chưa giới hạn trước mà có thể thay đổi.
Các kiến thức có thể bổ sung thêm ở phần này:
- Khác nhau giữa TRUNCATE và DELETE
- GRANT command trong MySQL
- Kiểu Blob trong MySQL
- Khác nhau giữa Foregin Key và Primary Key
- ENUM trong MySQL
2. MySQL có bao nhiêu stored objects (đối tượng lưu trữ)?
Làm việc nhiều với MySQL tất nhiên anh em ít nhất đã từng một lần nghe hoặc dùng tới VIEW, STORED PROCEDURE, STORED FUNCTION.
Câu hỏi phỏng vấn MySQL này được phân loại ở mức độ Middle. Có 5 đối tượng dùng để lưu trữ trong MySQL nha anh em, bao gồm VIEW, STORED PROCEDURE, STORED FUNCTION, TRIGGER, EVENT.
Liệt kê từng loại:
- VIEW – View được xem như một bảng ảo dưa trên kết quả truy vấn dữ liệu. Gom 3 field này ở bảng A, 2 field kia ở query B gom gom xếp xếp lại đem đặt vào VIEW.
- STORED PROCEDURE – Là stored objects, được gọi tới về lệnh call. Có cái đặc biệt là procedure không trả về giá trị. Chỉ thực hiện làm một việc gì đó nha
- STORED FUNCTION – Function thì ngược với PROCEDURE, nó có thể trả về một giá trị duy nhất. Có thể được gọi từ một câu lệnh khác.
- TRIGGER – Trigger là một chương trình được liên kết với bảng. Cái này có thể gọi trước hoặc gọi sau các thao tác anh em thực hiện với table (insert, update, delete)
- EVENT – Cái này anh em thường ít dùng, Event dùng để chạy một chương trình hoặc một tập các lệnh theo lịch trình đã lên từ trước đó.
Tham khảo việc làm MySQL Hồ Chí Minh hấp dẫn
3. Khác biệt giữa Heap Table và Temporary Table?
Anh em xài nhiều MySQL và thực hiện nhiều truy vấn hoặc có kinh nghiệm tối ưu performance có thể tự tin trả lời câu hỏi phỏng vấn MySQL này. Cũng không khó để trả lời câu này nếu nhìn vào từ khoá (Heap và Temporary).
Temporary tất nhiên là tạm, nên một số điểm khác biệt cốt lõi có thể nêu ra như sau:
- Heap thì tồn tại trên memory, nếu anh em restart DB hay gì đó thì mất ha. Temporary thì ngược lại, do tính chất tạm bợ nên temporary chỉ tồn tại theo sessions. Session mất nghĩa là ta cũng mất.
- Cũng phân biệt đối xử như vậy thì heap có thể chia sẻ giữa một vài client khi query tới DB, trong khi temporary table không chia sẻ giữa các clients.
- Có cái hơn là để tạo được bảng tạm (temporary) anh em cần được cấp quyền, còn Heap thì không, cứ tạo thoải mái.
Thông tin thêm là MySQL heap table sẽ dử dụng hash index và rất nhanh nha anh em.
4. Sự khác biệt giữa MySQL và MongoDB
Câu hỏi phỏng vấn MySQL này chỉ nêu ví dụ là sự khác biệt với MongoDB. Tuy nhiên anh em nếu có hiểu biết thêm về các hệ cơ sở dữ liệu khác thì càng tốt ha.
Về khác biệt thì có nhiều nhưng anh em có thể liệt kê một số khác biệt chính như sau:
MongoDB | MySQL |
Là hệ cơ sở dữ liệu mã nguồn mở lưu trữ dạng JSON | Là hệ cơ sở dữ liệu mã nguồn mở nhưng lưu trữ theo kiểu dữ liệu dạng quan hệ (relation) |
Mỗi dòng dữ liệu khác nhau được lưu trữ theo kiểu document (tài liệu) | Mỗi dòng dữ liệu được lưu trữ dưới dạng các hàng trong bảng |
Tài liệu một nhóm các Documents sẽ được lưu trữ trong Collection. | Một nhóm các records sẽ được lưu trữ trong một bảng |
Anh em cũng có thể nói thêm về kiến trúc, sự khác biệt về hiệu năng, lúc nào nên sử dụng MongoDB, lúc nào nên sử dụng MySQL.
5. Kiểu timestamp và đôi điều đặc biệt trong MySQL
Câu này bảo là trick thì cũng đúng, nhưng nếu anh em biết thêm thì cũng hay. Đầu tiên cho 1 statement tạo bảng. Bảng này có 2 cột kiểu TIMESTAMP là start và end
CREATE TABLE phongvan (cau1 VARCHAR(32), cau2 VARCHAR(32), batdau TIMESTAMP, kethuc TIMESTAMP); INSERT INTO game VALUES ("laptrinh", "cautrucvagiaithuat", now(), now());
Sau khi chạy xong câu này dữ liệu trong bảng như sau:
+-----------+--------+---------------------+---------------------+ | cau1 | cau2 | batdau | kethuc | +-----------+--------+---------------------+---------------------+ | laptrinh | cautrucvagiaithuat | 2014-07-17 20:44:35 | 2014-07-17 20:44:35 | +-----------+--------+---------------------+---------------------+
Câu hỏi là khi thực hiện câu SQL dưới đây, những dữ liệu nào sẽ thay đổi?
UPDATE phongvan SET cau1 = "cautrucvagiaithuat" WHERE cau1 = "laptrinh";
Hầu hết anh em đều cho rằng chỉ có cột cau1 là cập nhật. Nhưng kết quả lại là cả cột batdau cũng cập nhật theo, mặc dù ta không thực hiện chạy update. Nguyên nhân là do batdau và ketthuc thuộc kiểu TIMESTAMP. Trong MySQL kiểu timestamp sẽ tự động cập nhật khi thực hiện câu UPDATE. Nhưng chỉ duy nhất cột đầu tiên thực hiện cập nhật đó. Trớ trêu cuộc tình ghê.
Câu này trong bộ câu hỏi phỏng vấn MySQL thì liệt vào dạng trick ha. Nếu anh em có biết trả lời được thì tốt, nếu không cũng không thể đánh giá gì vì nó thuộc dạng trick người thì biết, người không.
6. Tham khảo thêm về phỏng vấn MySQL
- Difference between heap table and temporary table in MySQL?
- Amazon Best Sellers: Best MySQL Guides
- SQL trigger là gì? – Ưu, nhược điểm
Cảm ơn anh em đã đón đọc – Phỏng vấn vui vẻ nha anh em – Happy interview
Tác giả: Kiên Nguyễn
Có thể bạn quan tâm:
- Top 5 câu hỏi phỏng vấn SQL Developer – Phần 1
- MySQL: case vs. if vs. if function
- Top 5 công cụ mã nguồn mở dành cho MySQL administrator
Xem thêm Việc làm IT hấp dẫn trên TopDev