sql如何批量进行执行存储过程并传参数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql如何批量进行执行存储过程并传参数?相关的知识,希望对你有一定的参考价值。
有一个存储过程sp_updateuser 是进行内部处理数据的 要给这个存储过程进行传入id值。然后先查一个表 select id from users where status<>'1' 检索出来的结果好多条、这些数据都是要去执行存储过程sp_updateuser @id=? 、那么如何运行一次把select那一句检索出来的所有行都执行那个存储过程并把@id传进去?
把SQL语句写成存储过程,这样以后每次只需要调用存储过程就行了 参考技术A 把 select id from users where status<>'1' 写在那个内部存储过程里面调用不可以嘛?那就可以直接引用查出来的ID了Mysql慢查询开启和查看 ,存储过程批量插入1000万条记录进行慢查询测试
首先登陆进入Mysql命令行 执行sql show variables like \'slow_query%\'; 结果为OFF 说明还未开启慢查询
执行sql show variables like \'long_query_time\'; 可以看到具体的慢查询 “”时限“
我们先开启慢查询 执行sql
set global slow_query_log=\'ON\';
这是再去查询一下(show variables like \'slow_query%\';)发现已经开启了。
也可以设置时限为1秒
set global long_query_time=1;
上面的方法只是临时生效,mysql重启后就会失效
我们设置永久性的需要 在/etc/my.cnf里设置 (如果是win phpstudy 则在my.ini里添加)
# 慢查询日志
slow_query_log = ON
slow_query_log_file = D:\\phpstudy\\PHPTutorial\\MySQL\\data\\XX-081269-01-slow.log
long_query_time = 1
重启即可
下面我们来慢查询执行一次
首先建表 批量插入1000万条测试记录
1 #创建测试的test表 2 DROP TABLE IF EXISTS test; 3 CREATE TABLE test( 4 ID INT(10) NOT NULL, 5 `Name` VARCHAR(20) DEFAULT \'\' NOT NULL, 6 PRIMARY KEY( ID ) 7 )ENGINE=INNODB DEFAULT CHARSET utf8; 8 9 #创建生成测试数据的存储过程 10 DROP PROCEDURE IF EXISTS pre_test; 11 DELIMITER // 12 CREATE PROCEDURE pre_test() 13 BEGIN 14 DECLARE i INT DEFAULT 0; 15 SET autocommit = 0; 16 WHILE i<10000000 DO 17 INSERT INTO test ( ID,`Name` ) VALUES( i, CONCAT( \'Carl\', i ) ); 18 SET i = i+1; 19 IF i%2000 = 0 THEN 20 COMMIT; 21 END IF; 22 END WHILE; 23 END; // 24 DELIMITER ; 25 26 #执行存储过程生成测试数据 27 CALL pre_test();
以上是关于sql如何批量进行执行存储过程并传参数?的主要内容,如果未能解决你的问题,请参考以下文章