Trong một dự án thông thường, mỗi khi có yêu cầu mới cần thay đổi cơ sở dữ liệu ví dụ như:
  1. Thêm bảng.
  2. Thêm trường.
  3. Thêm index.
  4. ..

Chúng ta sẽ thường tạo một tập lệnh SQL (SQL script), nâng cấp mã nguồn, đến khi triển khai thì sẽ chạy SQL script trước rồi sau đó nâng cấp mã nguồn lên phiên bản mới sau.

Vì EzyPlatform phải cung cấp cho nhiều phần mềm khác nhau, cho nhiều người khác nhau, thậm chí là cả những nhà phát triển không thành thạo với công cụ và SQL nên nó sẽ phải tự động hoá việc thực thi và quản lý các SQL Script.

Quá trình thực thi SQL Script

EzyPlatform sẽ thực thi các SQL Script theo một quá trình như sau:

EzyPlatform thực thi SQL Script thế nào.png
  1. Khi khởi động EzyPlatform sẽ tìm đến các thư mục admin/resources/scripts và thư mục resources/scripts của các plugin.
  2. EzyPlatform sẽ kiểm tra xem tập tin script đã được thực thi trước đó chưa bằng cách truy vấn vào bảng ezy_run_script_histories.
  3. Nếu tập tin script chưa được thực thi thì EzyPlatform đọc tập tin, lấy nội dung SQL, cắt thành các đoạn ngăn cách nhau bằng dấu ;.
  4. EzyPlatform gửi các câu lệnh SQL đến database để thực thi.
  5. EzyPlatform tạo câu truy vấn đề thêm 1 bản ghi cho tập tin đã được thực thi vào bảng ezy_run_script_histories.

Bạn cần phải lưu ý rằng SQL Script của bạn có lỗi sẽ làm cho EzyPlatform không khởi động được, vậy nên hãy kiểm tra thật kỹ, nếu bạn muốn EzyPlatform vẫn khởi động được ngay cả khi SQL Script có lỗi, bạn hãy để các script trong tập tin có chứa từ alter, ví dụ alter_my_table.sql chẳng hạn.

Bảng ezy_run_script_histories có gì?

Bảng này có định nghĩa như sau:

CREATE TABLE IF NOT EXISTS `ezy_run_script_histories` (
    `module_name` varchar(120) NOT NULL,
    `module_type` varchar(15) NOT NULL,
    `script_name` varchar(120) NOT NULL,
    `run_at` datetime NOT NULL,
    PRIMARY KEY (`module_name`, `module_type`, `script_name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

Các trường có ý nghĩa thế này:

  1. module_name: Là tên của plugin.
  2. module_type: Là kiểu của plugin, ví dụ admin, web, socket.
  3. script_name: Là tên của file script.
  4. run_at: Là thời gian mà script được thực thi.

Bạn có cần can thiệp gì không?

Quá trình thực thi SQL được EzyPlatform hoàn toàn tự động 100%, các script chỉ được thực thi 1 lần duy nhất nên bạn có thể yên tâm không có trường hợp trùng nhau gây lỗi.

Tổng kết

Quản lý việc thực thi SQL script là một tính năng cơ bản nhưng rất quan trọng với EzyPlatform để nó có thể cập nhật, nâng cấp cơ sở dữ liệu một cách dễ dàng giúp các nhà phát triển không bị quá áp lực vào việc tạo ra các bảng hoàn hảo ngay từ ban đầu.