mysql触发器select into 总是为空的问题

本文介绍了一个关于数据库触发器的案例,在插入数据时遇到由于字段长度不匹配导致查询结果为空的问题。通过调整字段长度解决了问题,并总结了字段类型不一致可能导致的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一次写触发器。


实现的功能:


插入机构(bzsh_jg)的时候同步插入一条数据到control_unit表中。


先要根据隶属机构号(字段lsjgh)去查询父机构的数据,然后在插入的时候放入control_unit表的parentid这个字段。


代码如下:

delimiter $
create trigger bzsj_jg_insert
after insert on bzsh_jg
for each row 

begin

declare indexcode varchar(64);
declare controlunitname varchar(64);
declare parentid int;
declare unitlevel int;
declare paranetUnitLevel int;
declare strrev1 varchar(64);

set indexcode = new.jgh;
set controlunitname = new.jgmc;
set  strrev1 = new.lsjgh;

if new.lsjgh is null then
	
	set parentid = 0;
	set unitlevel = 0;
	
else

	select control_unit_id, unit_level  into parentid, paranetUnitLevel from control_unit where index_code = new.lsjgh;
	set unitlevel = paranetUnitLevel + 1;
	
end if;

insert into control_unit ( index_code, name, parent_id,unit_level,use_stream_sv,sequence_idx,operator_id, create_time,update_time,str_rev_1) 
									values ( indexcode, controlunitname,parentid,unitlevel, false,0,0,now(),now(),strrev1);

end$

测试的时候,parentid总是为空,把26行最后的new.lsjgh换成正常的数值就没问题了,比如:

select control_unit_id, unit_level  into parentid, paranetUnitLevel from control_unit where index_code = '123';


开始以为是select into 语句中不能传入 new的参数,调试好久才发现是字段长度的问题, control_unit 表的 index_code 长度 和 bzsh_jg 表中的 lsjgh 长度不一样,虽然都是varchar

index_code 是 varchar(64),lsjgh只有 varchar(20) ,插入bzsh_jg的时候lsjgh字段被自动截取为20个字符了,所以查到的结果为空。


结论:插入bzsh_jg表的时候lsjgh的长度被自动截取了,所以导致查出的数据为空.当字段类型不一致的情况,比如一个是int一个是varchar,也会出现这种情况。


顺便吐槽一下第三方公司的表命名和字段命名,全是拼音缩写,看的我蛋都碎了,太扯了。


转载于:https://my.oschina.net/u/1405773/blog/548596

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值