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

Viết stored procedure MySQL chèn dữ liệu vào bảng?

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

Stored Procedure đóng gói logic INSERT, chấp nhận tham số đầu vào (IN), giúp tái sử dụng và bảo mật.

Cú pháp tạo procedure

DELIMITER //
CREATE PROCEDURE procedure_name(IN param1 TYPE, IN param2 TYPE, ...)
BEGIN
    INSERT INTO table_name (col1, col2, ...) VALUES (param1, param2, ...);
END //
DELIMITER ;

Ví dụ hoàn chỉnh

1. Tạo bảng:

mysql> CREATE TABLE insertDataUsingStoredProcedure (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Name VARCHAR(20),
    -> Age INT
    -> );

2. Tạo Stored Procedure:

mysql> DELIMITER //
mysql> CREATE PROCEDURE StoredProcedureInsertData(
    -> IN StudentName VARCHAR(100), 
    -> IN StudentAge INT
    -> )
    -> BEGIN
    ->     INSERT INTO insertDataUsingStoredProcedure(Name, Age) VALUES (StudentName, StudentAge);
    -> END
    -> //
Query OK, 0 rows affected (0.13 sec)

mysql> DELIMITER ;

3. Gọi Procedure:

mysql> CALL StoredProcedureInsertData('Chris', 24);
Query OK, 1 row affected (0.18 sec)

4. Kiểm tra:

mysql> SELECT * FROM insertDataUsingStoredProcedure;
+----+-------+------+
| Id | Name  | Age  |
+----+-------+------+
| 1  | Chris | 24   |
+----+-------+------+

Các loại tham số

Ví dụ có OUT parameter (trả về ID vừa insert)

CREATE PROCEDURE InsertAndGetId(IN p_name VARCHAR(50), OUT p_id INT)
BEGIN
    INSERT INTO users(name) VALUES (p_name);
    SET p_id = LAST_INSERT_ID();
END;

// Gọi:
CALL InsertAndGetId('John', @new_id);
SELECT @new_id;

Lưu ý

  • DELIMITER // thay đổi delimiter tạm thời để tránh xung đột với ; trong procedure
  • Tên parameter không trùng tên cột (dùng prefix p_, v_, in_...)
  • Quyền: CREATE ROUTINE, EXECUTE
  • Xem procedure: SHOW CREATE PROCEDURE proc_name
  • Xóa: DROP PROCEDURE IF EXISTS proc_name
LoạiTừ khóaMô tả
InputINTruyền giá trị vào (mặc định)
OutputOUTTrả về giá trị ra
In/OutINOUTCả vào và ra