MySQL 存储函数 insert 语句 使用查询结果作为insert中的结果数据

mysql 存储函数 insert 语句 使用查询结果作为insert中的结果数据

步骤 1:创建表

首先,我们需要创建两个表,source_tabletarget_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;

详细说明

  1. 创建表

    • source_table 表用于存储我们将要从中提取值的原始数据。
    • target_table 表用于存储最终的插入结果,包括从 source_table 提取的 source_value 和基于此计算得出的 processed_value
  2. 插入示例数据:这是向 source_table 表插入一些示例值,以便后续的随机选择。

  3. 存储过程

    • 使用 DECLARE 声明变量 v_source_value 来存储从 source_table 查询得到的值。
    • 使用 WHILE 循环来确保插入100条记录。
    • 在循环内部,使用 SELECT 语句从 source_table 中随机选择一个值,并将该值存储到 v_source_value
    • 使用 INSERT INTO 语句将 source_value 和计算后的 processed_value 插入到 target_table
  4. 调用存储过程:通过调用 CALL insert_data(); ,存储过程会开始执行并插入100条记录。

  5. 验证结果:通过查询 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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值