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

Tạo Stored Procedure INSERT dữ liệu trong phpMyAdmin/MySQL

Stored Procedure cho phép đóng gói logic INSERT phức tạp, tái sử dụng, và cấp quyền thực thi mà không cần cấp quyền INSERT trực tiếp trên bảng.

Cú pháp tạo procedure

DELIMITER //
CREATE PROCEDURE tên_procedure(IN tham_số1 KIỂU, IN tham_số2 KIỂU, ...)
BEGIN
    INSERT INTO tên_bảng (cột1, cột2, ...) VALUES (tham_số1, tham_số2, ...);
END //
DELIMITER ;

Ví dụ minh họa

Tạo bảng:

mysql> CREATE TABLE StoredProcedureInsertDemo (
    -> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> UserName VARCHAR(20),
    -> UserAge INT
    -> );
Query OK, 0 rows affected (0.63 sec)

Tạo procedure (trong phpMyAdmin: tab Routines → Add Routine, hoặc chạy SQL):

mysql> DELIMITER //
mysql> CREATE PROCEDURE procedure_InsertIntoTable(IN FirstName VARCHAR(100), IN Age INT)
    -> BEGIN
    ->     INSERT INTO StoredProcedureInsertDemo(UserName, UserAge) VALUES (FirstName, Age);
    -> END //
Query OK, 0 rows affected (0.34 sec)
mysql> DELIMITER ;

Gọi procedure:

mysql> CALL procedure_InsertIntoTable('Larry', 23);
Query OK, 1 row affected, 1 warning (0.19 sec)

Kiểm tra kết quả:

mysql> SELECT * FROM StoredProcedureInsertDemo;
+--------+----------+---------+
| UserId | UserName | UserAge |
+--------+----------+---------+
| 1      | Larry    | 23      |
+--------+----------+---------+

Trong phpMyAdmin

  1. Chọn database → Tab Routines → Add routine
  2. Điền: Name: procedure_InsertIntoTable, Type: PROCEDURE
  3. Parameters: Thêm FirstName VARCHAR(100) IN, Age INT IN
  4. Definition (Body):
    INSERT INTO StoredProcedureInsertDemo(UserName, UserAge) VALUES (FirstName, Age);
  5. Bấm Go

Mở rộng: Procedure với validation, transaction, trả về ID

DELIMITER //
CREATE PROCEDURE sp_InsertUser(
    IN p_name VARCHAR(100),
    IN p_email VARCHAR(100),
    IN p_age INT,
    OUT p_new_id INT
)
BEGIN
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        ROLLBACK;
        RESIGNAL;
    END;
    
    START TRANSACTION;
    INSERT INTO users(name, email, age) VALUES (p_name, p_email, p_age);
    SET p_new_id = LAST_INSERT_ID();
    COMMIT;
END //
DELIMITER ;

Gọi với OUT parameter:

CALL sp_InsertUser('John', 'john@example.com', 25, @new_id);
SELECT @new_id;

Ưu điểm Stored Procedure

  • Tái sử dụng logic, giảm code trùng lặp
  • Bảo mật: Cấp EXECUTE trên procedure, không cấp INSERT trên bảng
  • Hiệu năng: Execution plan cache, giảm network round-trip
  • Transaction atomicity
  • Logic nghiệp vụ tập trung tại DB