执行 insert 语句产生 1172 - Result consisted of more than one row 错误

如题:

sql语句:

	INSERT INTO sr_zx (pk_sr_zx)VALUES('1253594340652486656')   

错误信息:

    INSERT INTO sr_zx (pk_sr_zx)VALUES('1253594340652486656')
    > 1172 - Result consisted of more than one row
    > 时间: 0.437s

排查后发现是因为触发器的缘故,触发器如下:

		CREATE TRIGGER `trg_sr_main_insert` AFTER INSERT ON `sr_main` FOR EACH ROW INSERT INTO st_buss_trigger(pk_st_buss_trigger, ttable, tmodel, tpkid, tzt, tctime) 
        VALUES (nextval('id'), 'sr_main', NEW.mdjlx, NEW.pk_sr_main, 0, sysdate())

在别的数据库都可以正常执行,在我的本地数据库就必须删了触发器才可以插入,数据库是MySQL5.7。

有没有大佬知道是怎么回事的?


触发器触发pk约束

不懂,可以解释的详细一点吗,表是没有外键约束的

结果包含多行,但是你这个触发器并不在sr_zx这张表里啊

啊,这个是我疏忽了,因为很多张表都有这个问题,sql语句跟触发器的创建语句不是从一个表复制的

nextval('id') 你这个自定义字段有没有配
你确定只执行了 insert into 语句 然后报影响多行的错?
单走一张3,你给我出一对老K就过分了呀

哈哈哈,我也觉得过分,找了一下午了也没找到为什么,确实只执行了insert into,而且在别的数据库执行都没问题,唯独在我本地执行不可以,必须删除触发器,但是触发器很多业务表都有,都删了也···

难道是 insert into 语句,会触发多行改表....
那这个触发器写的真是糟糕....
你发现没有,sr_main 触发了 st_buss_trigger 的insert 语句
... 这个之前的开发把业务全写触发器里了啊
后来维护的人会很快乐2333

触发器应该是为了作数据库的操作记录,至于为什么写成这样我就不知道了,MySQL我就只会增删改查,触发器不怎么用,不熟,如果是单纯由触发器导致,不应该只有在我本地数据库执行sql报错啊

这样写省事,但是维护起来很麻烦,你现在不就摸不着头脑吗...完全由DDL复制数据库,你试一试换其他值插入...

我试试看


用VALUE替换VALUES试试

你的表栏目数(列)应该不止一个,所以在加入新数据的时候数目要对上,没有值的列写null。表的每一列都必须有对应值。