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

Tạo Stored Procedure để tạo bảng (CREATE TABLE) trong MySQL

MySQL cho phép định nghĩa Stored Procedure chứa câu lệnh DDL như CREATE TABLE. Điều này hữu ích để đóng gói logic tạo schema phức tạp, chạy lại được, quản trị phiên bản.

Tạo Stored Procedure tạo bảng

mysql> DELIMITER //
mysql> CREATE PROCEDURE Sp_Create_DemoTable()
BEGIN
    CREATE TABLE DemoTable (
        Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        UserFirstName VARCHAR(20),
        UserLastName VARCHAR(20)
    );
END //
mysql> DELIMITER ;

Giải thích: DELIMITER // thay đổi ký tự kết thúc câu lệnh từ ; sang // để cho phép dùng ; bên trong body procedure. DELIMITER ; khôi phục lại.

Gọi (Execute) Stored Procedure

mysql> CALL Sp_Create_DemoTable();
Query OK, 0 rows affected (0.18 sec)

Kiểm tra bảng đã được tạo

mysql> DESC DemoTable;
+---------------+-------------+------+-----+---------+----------------+
| Field         | Type        | Null | Key | Default | Extra          |
+---------------+-------------+------+-----+---------+----------------+
| Id            | int(11)     | NO   | PRI | NULL    | auto_increment |
| UserFirstName | varchar(20) | YES  |     | NULL    |                |
| UserLastName  | varchar(20) | YES  |     | NULL    |                |
+---------------+-------------+------+-----+---------+----------------+

Lợi ích của Stored Procedure tạo bảng

  • Tái sử dụng: Chạy lại dễ dàng bằng CALL cho nhiều database/môi trường.
  • Quản trị phiên bản: Lưu procedure trong git, dễ review thay đổi schema.
  • Đóng gói logic phức tạp: Kết hợp IF NOT EXISTS, tạo index, foreign key, partition, trigger... trong một procedure.
  • Điều kiện động: Dùng tham số (IN/OUT) để tạo bảng có tên động, cấu trúc động.

Ví dụ nâng cao: Procedure có tham số tên bảng

CREATE PROCEDURE Sp_Create_Table_With_Name(IN tbl_name VARCHAR(64))
BEGIN
    SET @sql = CONCAT('CREATE TABLE ', tbl_name, ' (Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(50))');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END

Gọi: CALL Sp_Create_Table_With_Name('MyNewTable');

Lưu ý: DDL trong Stored Procedure gây implicit commit (tự commit transaction hiện tại). Không thể rollback tạo bảng bên trong procedure.