坑一:
MySQL创建存储过程中,存储过程的输入参数变量命名不应该与字段名相同。如果相同,导致的结果就是参数的值将不会是你传入的值,而是变成每条记录的那个字段的值。如果在删除操作时,将会删除整张表的记录,是非常危险的。
#删除存储过程
drop procedure if exists pro_test;
#创建存储过程
DELIMITER //
create procedure pro_test(IN c_age INTEGER)
begin
select * FROM ur_test_z WHERE age = c_age;
end//
DELIMITER ;
注:如果该存储过程定义如下:
#删除存储过程
drop procedure if exists pro_test;
#创建存储过程
DELIMITER //
create procedure pro_test(IN age INTEGER)
begin
select * FROM ur_test_z WHERE age = age;
end//
DELIMITER ;
查询结果为整张表的记录。
即使写成这样也不行,查询结果仍会是整张表的记录
#删除存储过程
drop procedure if exists pro_test;
#创建存储过程
DELIMITER //
create procedure pro_test(IN age INTEGER)
begin
DECLARE var_age INT;
SET var_age = age;
select * FROM ur_test_z WHERE age = var_age;
end//
DELIMITER ;