优点:
•存储过程只在创建时进行编译,以后每次执行都不需要编译,一般的sql每执行一次就编译一次,所以存储过程可以提高执行效率
create procedure procedure_name()//可以为无参数,也可以有 输入参数in, 还有输出参数out 如 in id int
begin
#语句
end;
如 从stu表根据sid查询名字sname id为偶数时查名字 否则查性别 sex
create procedure queryName(in id int,out varchar(50) name)
begin
if(id%2=0) then
select sname into name from stu where sid=id;
else
select sex into name from stu where sid=id;
end if;
end;
------------
执行存储过程要用关键字 CALL
set @name:='';
CALL queryName(105,@name);
select @name;
循环 while:
create procedure testa(IN mynumint)
BEGIN
DECLAREi intDEFAULT 0;
while(i< 10) DO
BEGIN
seti = i+1;
INSERTINTO testa (myid,myname)values (i,'name');
END;
ENDWHILE;
END;
循环repeat
BEGIN
DECLAREi int DEFAULT 100;
REPEAT
BEGIN
seti = i+1;
INSERTINTO testa (myid,myname)values (i,'admin');
END;
UNTILi > 110
endREPEAT;
END;
-----------------------------------------
触发器:
触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力
触发器作用:
自动记录日志:
CREATETRIGGER INSERT_STUDENT AFTER INSERT on t_student
FOR EACH ROW
BEGIN
INSERT INTO mylog (logid,stuname,action,mytime)
VALUES (NEW.sno,NEW.sname,'insert',NOW());
END;