mariadb 为什么会出现错误4078(HY000):操作“=”的参数数据类型int和row非法?

irtuqstp  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(105)

我使用MariaDB 11.0.2,我的数据库包含两个表。它有一个非常普通的主键和一个用于命名测试的列。

CREATE TABLE `Tests` (
  `Test_ID` int(11) NOT NULL AUTO_INCREMENT,
  `Test_Name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`Test_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=136 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

字符串
它包含34个字段。
然后我有另一个表,我在其中输入测试结果,并且有一个外键用于引用前一个列的自己的Test_ID列。

CREATE TABLE `Test_Results` (
  `Test_ID` int(11) DEFAULT NULL,
  `Numerator` tinyint(1) NOT NULL,
  `Denominator` tinyint(1) DEFAULT NULL,
  `Test_Num` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`Test_Num`),
  KEY `Test_ID_Match` (`Test_ID`),
  CONSTRAINT `Test_ID_Match` FOREIGN KEY (`Test_ID`) REFERENCES `Tests` (`Test_ID`) ON UPDATE CASCADE,
) ENGINE=InnoDB AUTO_INCREMENT=2456 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


分母由触发器自动输入

CREATE DEFINER=`root`@`localhost` TRIGGER Automatic_Denominators
BEFORE INSERT ON Test_Results
FOR EACH ROW
BEGIN
    IF NEW.Test_ID in (3, 12, 14, 16, 19, 29) THEN
        SET NEW.Denominator = 4;
    ELSEIF NEW.Test_ID in (11, 21) THEN
        SET NEW.Denominator = 5;
    ELSEIF NEW.Test_ID in (25, 36) THEN
        SET NEW.Denominator = 6;
    ELSEIF NEW.Test_ID in (2, 9, 17) THEN
        SET NEW.Denominator = 7;
    ELSEIF NEW.Test_ID in (5, 27, 28) THEN
        SET NEW.Denominator = 8;
    ELSEIF NEW.Test_ID = 1 THEN
        SET NEW.Denominator = 12;
    ELSEIF NEW.Test_ID = (4, 8) THEN
        SET NEW.Denominator = 15;
    ELSEIF NEW.Test_ID in (6, 7, 22, 30) THEN
        SET NEW.Denominator = 20;
    ELSEIF NEW.Test_ID in (0) THEN
        SET NEW.Denominator = 26;
    END IF;
END


有趣的是:

MariaDB [Tutors_Prime]> insert into Test_Results (Test_ID, Numerator) VALUES (0, 26);
MariaDB [Tutors_Prime]> insert into Test_Results (Test_ID, Numerator) VALUES (4, 26);


测试ID为0和4的这两个条目返回ERROR 4078 (HY000): Illegal parameter data types int and row for operation '='

MariaDB [Tutors_Prime]> insert into Test_Results (Test_ID, Numerator) VALUES (5, 26);


但将正确输入任何其他测试ID。这很奇怪,因为0、4和5都出现在“Test”表中,但只有这两个数字返回错误。
我已经尝试用ON UPDATE CASCADE更改错误的主键值,所以我的数据仍然有意义。但是如果我将主键从0更改为100,错误仍然存在,现在:

MariaDB [Tutors_Prime]> insert into Test_Results (Test_ID, Numerator) VALUES (100, 26);


也会吐回错误。
知道为什么吗老实说,我甚至不明白错误代码。
谢谢你,谢谢

vbkedwbf

vbkedwbf1#

变更
ELSEIF NEW.Test_ID = (4, 8) THENELSEIF NEW.Test_ID IN (4, 8) THEN

相关问题