mysql存储过程 - 选择...进行更新

时间:2011-07-22 15:11:01

标签: mysql stored-procedures select auto-increment

我在存储过程中使用“select ... for update”。 但是当存储过程完成时,它返回我在开头做的“select ... for update”的结果。有没有办法让它阻止行而不返回它们?

存储过程代码:

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_save`(
in param_cod_emp char(5),
in param_cod_tab char(5),
in param_des_tab varchar(45),
in param_flg_new char(1))
BEGIN

declare var_cod_tab char(5);

start transaction;

select *
from tabla
where cod_emp=param_cod_emp
for update;

if(param_flg_new='0') then

set var_cod_tab=
(select max(cod_tab)+1
from tabla
where cod_emp=param_cod_emp);

insert into tabla(
cod_emp,
cod_tab,
des_tab)
values(
param_cod_emp,
var_cod_tab,
param_des_tab);

else

udpate tabla where
des_tab=param_des_tab
where cod_emp=param_cod_emp
and cod_tab=param_cod_tab;

end if;

commit;

END

这个代码是一个使char列看起来像auto_increment的好方法吗? 非常感谢你的时间。

2 个答案:

答案 0 :(得分:1)

您可以LOCK TABLE(MyISAM表)或BEGIN TRANSACTION或语法(对于InnoDB或Maria等具有交易功能的表引擎)。

更新:哦,现在我看到你做了START TRANSACTION。好吧,那么:

MySQL存储过程返回上次执行SELECT的结果。因此,如果要返回其他结果集,只需执行另一个SELECT。

答案 1 :(得分:0)

如果您使用触发器和序列来递增并插入id,那么您永远不必从正在插入或更新的表中选择max()并且可能不会出现此问题,我从未使用过选择更新..