Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tự động tính độ dài chuỗi (CHAR_LENGTH) khi tạo bảng trong MySQL (Generated Column)

Từ MySQL 5.7, bạn có thể định nghĩa Generated Column (Cột sinh ra) - cột giá trị tự động tính toán từ các cột khác. Ví dụ: lưu độ dài chuỗi của cột Title vào cột Number_of_characters bằng CHAR_LENGTH() ngay khi CREATE TABLE.

Tạo bảng với Generated Column

mysql> CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Title VARCHAR(200),
    `Number_of_characters` INT AS (CHAR_LENGTH(Title))
);

AS (CHAR_LENGTH(Title)) định nghĩa cột ảo (VIRTUAL) - tính toán khi đọc, không tốn dung lượng lưu trữ. Thêm STORED sau AS để lưu vật lý (tốn dung lượng, đọc nhanh hơn).

Chèn dữ liệu

mysql> INSERT INTO DemoTable (Title) VALUES 
('Introduction To MySQL'),
('Introduction To Java'),
('Introduction To MongoDB');

Kết quả: Cột Number_of_characters tự động được tính

mysql> SELECT * FROM DemoTable;
+----+-------------------------+----------------------+
| Id | Title                   | Number_of_characters |
+----+-------------------------+----------------------+
|  1 | Introduction To MySQL   |                   21 |
|  2 | Introduction To Java    |                   20 |
|  3 | Introduction To MongoDB |                   23 |
+----+-------------------------+----------------------+

Lợi ích

  • Đảm bảo tính nhất quán: Độ dài luôn khớp với Title.
  • Không cần trigger, không cần logic ứng dụng.
  • Có thể index trên Generated Column (MySQL 5.7+ STORED, 8.0+ VIRTUAL) để tìm kiếm nhanh theo độ dài.

Các hàm thường dùng trong Generated Column

  • CHAR_LENGTH(), LENGTH()
  • UPPER(), LOWER(), TRIM()
  • JSON_EXTRACT() (trích xuất từ JSON)
  • Phép toán: price * quantity, YEAR(date), v.v.

Lưu ý: Generated Column không thể được chèn/ cập nhật trực tiếp (INSERT/UPDATE sẽ lỗi nếu chỉ định giá trị cho cột này).