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

Chèn dữ liệu trong Stored Procedure MySQL

Vấn đề: Tạo Stored Procedure nhận tham số và INSERT vào bảng

Cần procedure insert_demo nhận Name và Age, chèn vào bảng có Id AUTO_INCREMENT.

Giải pháp: CREATE PROCEDURE với tham số IN

1. Tạo bảng

CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(20),
    Age INT
);

2. Tạo Procedure

DELIMITER //

CREATE PROCEDURE insert_demo(IN p_Name VARCHAR(40), IN p_Age INT)
BEGIN
    INSERT INTO DemoTable (Name, Age) VALUES (p_Name, p_Age);
END //

DELIMITER ;

3. Gọi Procedure

CALL insert_demo('Chris', 24);

4. Kết quả

+----+-------+------+
| Id | Name  | Age  |
+----+-------+------+
|  1 | Chris |   24 |
+----+-------+------+

Giải thích

  • IN – Tham số đầu vào (mặc định). Có thêm OUT (trả về), INOUT (cả hai).
  • Tên tham số thường tiền tố p_ hoặc v_ để tránh trùng tên cột.
  • DELIMITER // – Thay đổi delimiter để định nghĩa procedure chứa ;.
  • Bên trong procedure: dùng tham số như biến bình thường.

Mở rộng: Trả về ID vừa chèn (LAST_INSERT_ID)

CREATE PROCEDURE insert_demo(IN p_Name VARCHAR(40), IN p_Age INT, OUT p_Id INT)
BEGIN
    INSERT INTO DemoTable (Name, Age) VALUES (p_Name, p_Age);
    SET p_Id = LAST_INSERT_ID();
END

Gọi: CALL insert_demo('David', 30, @new_id); SELECT @new_id;

Best practice

  • Validate input trong procedure (kiểm tra NULL, độ dài, phạm vi).
  • Xử lý lỗi với DECLARE ... HANDLER.
  • Tránh logic phức tạp trong procedure – chuyển sang application layer.