[英]mysql stored procedure - 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 的好方法吗? 非常感谢你花时间陪伴。
您可以LOCK TABLE
(MyISAM 表)或BEGIN TRANSACTION
或语法是什么(对于具有事务能力的表引擎,如 InnoDB 或 Maria)。
更新:哦,现在我看到你开始交易了。 好吧:
MySQL 存储过程返回最后执行的 SELECT 的结果。 因此,如果您想返回其他结果集,只需执行另一个 SELECT。
如果您使用触发器和序列来增加和插入 id,那么您永远不必从您要插入或更新的表中使用 select max() 并且可能不会有这个问题,我从来没有使用过 select 来更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.