MySQL - Tham chiếu Lệnh

Chào mừng các pháp sư cơ sở dữ liệu tương lai! Hôm nay, chúng ta sẽ khám phá thế giới kỳ diệu của các lệnh MySQL. Đừng lo lắng nếu bạn chưa từng viết một dòng mã trước đây - đến cuối bài hướng dẫn này, bạn sẽ có thể gọi các phép thuật cơ sở dữ liệu như một chuyên gia!

MySQL - Statements Reference

Lệnh Định nghĩa Dữ liệu

Hãy bắt đầu với những viên gạch xây dựng của vương quốc cơ sở dữ liệu của chúng ta: Lệnh Định nghĩa Dữ liệu. Đây là các lệnh chúng ta sử dụng để tạo, sửa đổi và xóa cấu trúc của cơ sở dữ liệu.

CREATE TABLE

Hãy tưởng tượng bạn đang xây dựng một thư viện. Điều đầu tiên bạn cần là kệ sách, phải không? Trong MySQL, "kệ sách" của chúng ta là các bảng. Hãy tạo một bảng!

CREATE TABLE books (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
author VARCHAR(50),
publication_year INT
);

Lệnh này... tôi có nghĩa là, câu lệnh, tạo một bảng叫做 "books" với bốn cột:

  • id: Mã duy nhất cho mỗi sách
  • title: Tên sách (tối đa 100 ký tự)
  • author: Tác giả sách (tối đa 50 ký tự)
  • publication_year: Năm xuất bản sách

ALTER TABLE

Oops! Chúng ta quên thêm cột cho thể loại sách. Không sao, chúng ta có thể thay đổi bảng của mình:

ALTER TABLE books
ADD COLUMN genre VARCHAR(30);

Lệnh này thêm một cột mới叫做 "genre" vào bảng "books".

DROP TABLE

Nếu chúng ta quyết định không cần bảng của mình nữa (có lẽ chúng ta chuyển sang sách điện tử?), chúng ta có thể xóa nó:

DROP TABLE books;

Hãy cẩn thận với lệnh này, tuy nhiên! Nó giống như đốt cháy kệ sách của bạn - không thể quay lại!

Lệnh Thao tác Dữ liệu

Bây giờ chúng ta đã có cấu trúc, hãy điền nó với dữ liệu!

INSERT

Đã đến lúc thêm một số sách vào thư viện của chúng ta:

INSERT INTO books (title, author, publication_year, genre)
VALUES ('The Great Gatsby', 'F. Scott Fitzgerald', 1925, 'Classic');

Lệnh này thêm một sách vào bảng. Bạn có thể thêm nhiều sách trong một lượt:

INSERT INTO books (title, author, publication_year, genre)
VALUES
('To Kill a Mockingbird', 'Harper Lee', 1960, 'Fiction'),
('1984', 'George Orwell', 1949, 'Science Fiction');

SELECT

Bây giờ, hãy xem chúng ta có những sách nào:

SELECT * FROM books;

Lệnh này lấy tất cả các cột (*) từ bảng "books". Bạn có thể cụ thể hơn:

SELECT title, author FROM books WHERE publication_year < 1950;

Lệnh này lấy chỉ tiêu đề và tác giả của các sách xuất bản trước năm 1950.

UPDATE

Oops, chúng ta đã phạm sai lầm! "1984" thực sự là thể loại小说反乌托邦:

UPDATE books
SET genre = 'Dystopian Fiction'
WHERE title = '1984';

Lệnh này thay đổi thể loại cho sách có tiêu đề "1984".

DELETE

Giả sử chúng ta muốn xóa tất cả các sách xuất bản trước năm 1930:

DELETE FROM books
WHERE publication_year < 1930;

Hãy cẩn thận với DELETE - giống như DROP, nó là vĩnh viễn!

Lệnh Giao dịch và Khóa

Đôi khi, chúng ta cần đảm bảo rằng một loạt các thao tác xảy ra cùng một lúc, hoặc không xảy ra. Đó là nơi các giao dịch xuất hiện.

START TRANSACTION

START TRANSACTION;
INSERT INTO books (title, author, publication_year, genre)
VALUES ('Pride and Prejudice', 'Jane Austen', 1813, 'Romance');
UPDATE books SET publication_year = 1960 WHERE title = 'To Kill a Mockingbird';
COMMIT;

Lệnh này đảm bảo rằng cả INSERT và UPDATE xảy ra cùng một lúc. Nếu có lỗi, cả hai都不会生效.

ROLLBACK

Nếu chúng ta thay đổi ý kiến giữa chừng giao dịch:

START TRANSACTION;
DELETE FROM books WHERE publication_year < 1900;
-- Oops, chúng tôi không có ý định làm điều đó!
ROLLBACK;

ROLLBACK hủy bỏ tất cả các thay đổi được thực hiện kể từ START TRANSACTION.

LệnhPreparedStatement

Lệnh PreparedStatement giống như các công thức nấu ăn - bạn thiết lập chúng một lần, sau đó sử dụng chúng nhiều lần với các nguyên liệu khác nhau.

PREPARE stmt FROM 'SELECT * FROM books WHERE author = ?';
SET @a = 'George Orwell';
EXECUTE stmt USING @a;

Lệnh này chuẩn bị một câu lệnh để tìm sách của một tác giả cụ thể, sau đó thực thi nó cho George Orwell.

Lệnh Hợp thành

Lệnh Hợp thành cho phép chúng ta nhóm nhiều câu lệnh lại với nhau. Chúng thường được sử dụng trong các thủ tục lưu trữ và hàm.

DELIMITER //
CREATE PROCEDURE CountBooks()
BEGIN
DECLARE bookCount INT;
SELECT COUNT(*) INTO bookCount FROM books;
SELECT CONCAT('There are ', bookCount, ' books in the library.') AS Message;
END //
DELIMITER ;

CALL CountBooks();

Thủ tục này đếm số lượng sách và hiển thị một thông báo.

Biến trong Chương trình Lưu trữ

Biến trong các chương trình lưu trữ giống như những hộp nhỏ nơi chúng ta có thể lưu trữ thông tin tạm thời.

DELIMITER //
CREATE PROCEDURE OldestBook()
BEGIN
DECLARE oldestYear INT;
DECLARE oldestTitle VARCHAR(100);

SELECT MIN(publication_year), title
INTO oldestYear, oldestTitle
FROM books;

SELECT CONCAT('The oldest book is ', oldestTitle, ' published in ', oldestYear) AS Message;
END //
DELIMITER ;

CALL OldestBook();

Thủ tục này tìm sách cũ nhất và cho chúng ta biết về nó.

Lệnh Điều khiển Luồng MySQL

Lệnh Điều khiển Luồng giúp chúng ta đưa ra quyết định trong mã của mình.

DELIMITER //
CREATE PROCEDURE CategoryByYear(IN pub_year INT)
BEGIN
DECLARE category VARCHAR(20);
IF pub_year < 1900 THEN
SET category = 'Very Old';
ELSEIF pub_year < 2000 THEN
SET category = 'Classic';
ELSE
SET category = 'Modern';
END IF;
SELECT category AS 'Book Category';
END //
DELIMITER ;

CALL CategoryByYear(1925);

Thủ tục này phân loại sách dựa trên năm xuất bản.

Lệnh Con trỏ MySQL

Con trỏ cho phép chúng ta duyệt qua một tập kết quả một hàng tại một thời điểm.

DELIMITER //
CREATE PROCEDURE ListBooks()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE book_title VARCHAR(100);
DECLARE cur CURSOR FOR SELECT title FROM books;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;

read_loop: LOOP
FETCH cur INTO book_title;
IF done THEN
LEAVE read_loop;
END IF;
SELECT book_title;
END LOOP;

CLOSE cur;
END //
DELIMITER ;

CALL ListBooks();

Thủ tục này liệt kê tất cả các tiêu đề sách một cách từng cái.

Lệnh Xử lý Điều kiện MySQL

Lệnh Xử lý Điều kiện cho phép chúng ta xử lý lỗi và cảnh báo một cách nhẹ nhàng.

DELIMITER //
CREATE PROCEDURE SafeInsert(IN book_title VARCHAR(100), IN book_author VARCHAR(50))
BEGIN
DECLARE EXIT HANDLER FOR 1062
BEGIN
SELECT 'Error: Duplicate entry' AS Message;
END;

INSERT INTO books (title, author) VALUES (book_title, book_author);
SELECT 'Book added successfully' AS Message;
END //
DELIMITER ;

CALL SafeInsert('The Great Gatsby', 'F. Scott Fitzgerald');

Thủ tục này chèn một sách một cách an toàn, xử lý trường hợp sách có thể đã tồn tại.

Và thế là bạn đã bước những bước đầu tiên vào thế giới của các lệnh MySQL. Nhớ rằng, thực hành là chìa khóa của thành công, vì vậy đừng ngại thử nghiệm với các lệnh này. Trước khi bạn biết, bạn sẽ quản lý cơ sở dữ liệu như một chuyên gia!

Credits: Image by storyset