插入时结果包含多行

4

我在MySQL 5.5.41中使用存储过程遇到了问题。问题是在执行存储过程时抛出了错误 - Error code: 1172, SQLState: 42000, Message: Result consisted of more than one row。奇怪的是,它是在执行语句时抛出的:

    INSERT INTO TB__X
           (FK__A, FK__B, FK__C, FK__D, E, F, G, H, I, J, L)
        VALUES 
           (9106, 4927, NULL, 3, 4.9990234375, 20, 0, 0, 1, 0, 1);

表格如下:
CREATE TABLE `TB__X` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`FK__A` int(11) NOT NULL,
`FK__B` int(11) NOT NULL,
`FK__C` int(11) DEFAULT NULL,
`FK__D` int(11) NOT NULL,
`E` double NOT NULL,
`F` int(11) NOT NULL,
`G` double NOT NULL,
`H` tinyint(4) NOT NULL,
`I` tinyint(4) NOT NULL,
`J` tinyint(4) NOT NULL,
`K` TEXT,
`L` tinyint(4) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `IX_U_1` (`FK__B`,`FK__C`,`D`),
KEY `I__2` (`FK__A`),
KEY `I__3` (`FK__C`),
KEY `I__4` (`F`),
KEY `I__5` (`FK__D`),
CONSTRAINT `FK__1` FOREIGN KEY (`FK__B`) REFERENCES `TB__B` (`ID`),
CONSTRAINT `FK__2` FOREIGN KEY (`F`) REFERENCES `TB__F` (`ID`),
CONSTRAINT `FK__3` FOREIGN KEY (`FK__C`) REFERENCES `TB__C` (`ID`),
CONSTRAINT `FK__4` FOREIGN KEY (`FK__D`) REFERENCES `TB__D` (`ID`),
CONSTRAINT `FK__5` FOREIGN KEY (`FK__A`) REFERENCES `TB__A` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=13575 DEFAULT CHARSET=utf8

有人知道在insert语句中出现的这个错误是什么意思吗?


1
该过程是否执行了一些选择然后插入的操作?如果是,则选择的值必须使用游标,插入应在循环中进行。 - Abhik Chakraborty
问题似乎不在于INSERT语句(参见SQL Fiddle演示),至少不是单个语句的问题。您能提供更多细节吗? - wchiquito
@abhikchakraborty 这个程序正在执行SELECT INTO变量语句,但是在唯一索引上使用MAX/MIN、LIMIT 1或等值条件。 - piotrgajow
@wchiquito 我也是这么想的...但我已经逐个从过程中运行了这些查询,错误是在执行此INSERT期间引发的。这就是导致问题的确切查询。我还能提供什么更多的细节呢? - piotrgajow
你能否在SQL Fiddle中重现这个问题,或者提供带有一些测试数据的SELECT INTO语句? - wchiquito
1个回答

6

我已经找出了问题的原因。事实证明,我在插入数据的表上有一个 TRIGGER AFTER INSERT,而在触发器内部有一个 SELECT INTO 语句,它返回了超过一行的数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接