mysql 存储函数 insert 语句 使用查询结果作为insert中的结果数据
步骤 1:创建表
首先,我们需要创建两个表,source_table
和target_table
。
CREATE TABLE IF NOT EXISTS source_table (
id INT AUTO_INCREMENT PRIMARY KEY,
value INT NOT NULL
);
CREATE TABLE IF NOT EXISTS target_table (
id INT AUTO_INCREMENT PRIMARY KEY,
source_value INT NOT NULL,
processed_value INT NOT NULL
);
步骤 2:插入示例数据到 source_table
我们将插入一些示例数据到source_table
中。例如,我们可以插入整数值:
INSERT INTO source_table (value) VALUES
(1), (2), (3), (4), (5),
(6), (7), (8), (9), (10);
步骤 3:创建存储过程
接下来,我们创建一个存储过程,名为 insert_data
,它会从 source_table
中读取值,并在 target_table
中插入新的记录。
DELIMITER //
CREATE PROCEDURE insert_data()
BEGIN
DECLARE v_source_value INT; -- 声明变量以存储查询结果
DECLARE counter INT DEFAULT 0; -- 初始化计数器
-- 循环插入数据,直到插入100条记录
WHILE counter < 100 DO
-- 从 source_table 随机选择一个值
SELECT value INTO v_source_value
FROM source_table
ORDER BY RAND() -- 随机选择
LIMIT 1;
-- 将选择的值插入到 target_table 中
INSERT INTO target_table (source_value, processed_value)
VALUES (v_source_value, v_source_value * 2); -- 假设 processed_value 是 source_value 的两倍
SET counter = counter + 1; -- 增加计数器
END WHILE;
END //
DELIMITER ;
步骤 4:调用存储过程
执行存储过程,插入100条数据。
CALL insert_data();
步骤 5:查看插入结果
最后,可以检查 target_table
中插入的数据:
SELECT * FROM target_table;
详细说明
-
创建表:
source_table
表用于存储我们将要从中提取值的原始数据。target_table
表用于存储最终的插入结果,包括从source_table
提取的source_value
和基于此计算得出的processed_value
。
-
插入示例数据:这是向
source_table
表插入一些示例值,以便后续的随机选择。 -
存储过程:
- 使用
DECLARE
声明变量v_source_value
来存储从source_table
查询得到的值。 - 使用
WHILE
循环来确保插入100条记录。 - 在循环内部,使用 SELECT 语句从
source_table
中随机选择一个值,并将该值存储到v_source_value
。 - 使用 INSERT INTO 语句将
source_value
和计算后的processed_value
插入到target_table
。
- 使用
-
调用存储过程:通过调用
CALL insert_data();
,存储过程会开始执行并插入100条记录。 -
验证结果:通过查询
target_table
查看刚刚插入的记录。
这样,你便可以在 MySQL 中创建一个存储过程来插入多条数据,同时结合前面表的数据。这是一个很常见的用法,可以用来自动化数据插入的过程。
举例:
create procedure instable1()
begin
declare v_preview_data longtext ;
declare v_signature longtext ;
declare i int default 1;
while i<5 DO
select w.preview_data into v_preview_data FROM seal w where w.id='id';
select w.signature into v_signature FROM seal w where w.id='2GkFdzexNI3tXXvGUYchq8';
insert into table1 (id,preview_data,signature) values (i,,v_preview_data v_signature);
set i = i +1;
end while;
end
call instable1();