MySQL 写一个存储过程 向数据库插入一条数据 并返回 ID 完整代码
时间: 2024-10-10 22:02:33 浏览: 7
MySQL 的存储过程是一种预编译的SQL语句集,可以接受输入参数并返回结果。下面是一个简单的存储过程示例,用于向名为 `my_table` 的表中插入新记录,并返回插入的行ID:
```sql
DELIMITER //
CREATE PROCEDURE InsertData(IN input_value VARCHAR(50), OUT inserted_id INT)
BEGIN
DECLARE @sql STRING;
SET @sql = CONCAT('INSERT INTO my_table (column1, column2) VALUES (?, ?) ON DUPLICATE KEY UPDATE column1 = values(column1)', ' RETURNING id;');
PREPARE stmt FROM @sql;
SET inserted_id = NULL;
-- 假设column1是主键
IF INSERT IGNORE INTO my_table (column1, column2) VALUES (input_value, 'some_value') THEN
EXECUTE stmt USING input_value, 'some_value';
GET DIAGNOSTICS inserted_id = ROW_COUNT();
END IF;
DEALLOCATE PREPARE stmt;
END;
//
DELIMITER ;
```
在这个例子中:
- `@sql` 变量构建了 SQL 插入语句,如果表中有唯一索引(如主键),则会使用 `ON DUPLICATE KEY UPDATE` 来处理插入冲突。
- `PREPARE` 和 `EXECUTE` 准备和执行动态SQL语句。
- `SET inserted_id = NULL` 和 `GET DIAGNOSTICS` 分别设置并获取插入操作后的行ID。
要调用这个存储过程,你可以这样做:
```sql
CALL InsertData('your_input', @inserted_id);
SELECT @inserted_id;
```