MySQL 执行提示: Result consisted of more than one row 问题解析

开放功能需要冬天维护一个编号,这个编号是根据区域编号生成的,于是乎就写一个触发器动态维护,更新或者插入时自动判断累计10增长,

代码示例:

drop trigger if EXISTS trig_stationno_insert;
DELIMITER //
CREATE TRIGGER trig_stationno_insert BEFORE INSERT ON ins_station
  FOR EACH ROW BEGIN
			DECLARE n_stno varchar(50);
			-- select CONCAT(citycode,right('1000000'+'8',6)) into n_stno from ins_station where citycode = NEW.citycode;
			select max(ifnull(stno,concat(citycode,right('1000000'+'8',6)))) into n_stno from ins_station where citycode = NEW.citycode;
			set new.stno=n_stno+10;
  END
//
drop trigger if EXISTS trig_stationno_update;
DELIMITER //
CREATE TRIGGER trig_stationno_update BEFORE update ON ins_station
  FOR EACH ROW BEGIN
			DECLARE n_stno varchar(50);
			if (new.stno is null)
			then 
				select max(ifnull(stno,concat(citycode,right('1000000'+'8',6)))) into n_stno from ins_station where citycode = NEW.citycode;
				set new.stno=n_stno+10;
			end if;
  END
//

     其中涉及到几个难点,第一自动补零  因为就算是字符串用加号以后也会转成数值运算,智能通过高位运算在截取,比如你想得到   0005   就得拿10000+5 然后右截取4位。可能这里弄复杂了,不过能实现就好!

在过程中遇到一些问题,比如触发器中不能再使用update语句的问题;

还有一个问题比较郁闷,后面再反应过来,就是题目中的错误:Result consisted of more than one row

估计是一种机制的问题,在给某个变量赋值的时候(select xx into xxValue)只能有一个值,所以最好 保证记录的唯一性,用max sum min函数最好的方式。

这个或许在执行存储过程 或函数 或者触发器都会出的错误!

 

 

 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值