存储过程是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可以通过指定存储过程的名字并给定参数来调用执行。存储过程思想很简单,就是数据库SQL语言层面的代码封装与重用。存储过程在MySQL5.0版本开始支持。
存储过程可以完成一些普通SQL语句无法完成的任务:比如需要批量插入10W条记录。
假设这里有一个用户表:
drop table if exists xx_user;
create table xx_user(id int primary key auto_increment,name varchar(20),age int);
我们为了构造一个10w或者100w用户表记录,用户id自动增长,name为user-i,i为变量,比如user-1,user-2,user-3等等,age可以固定为18。普通的SQL语句来实现这个功能,只能是利用批量插入insert xx_user(name,age) values ('user-1',18),('user-2',18),...,('user-100000',18);要么就是通过现有的表,然后将表记录复制过去。
如果有了存储过程,我们可以在存储过程中,借助变量i,然后做一个while循环1000000次,然后插入记录。具体的实现过程如下所示:
mysql> delimiter //
mysql> create procedure add_user()
-> begin
-> declare i int default 0;
-> set i=0;
-> while i<1000000 do
&nbs