0

我创建了下表:

 CREATE TABLE `test2` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `A` varchar(30) DEFAULT NULL,
  `B` varchar(30) DEFAULT NULL,
  `C` varchar(30) DEFAULT NULL,
  `D` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8

当我像这样插入一行时

insert into test2 (A, B, C, D) values ('a', 'b', 'c', 'd')

插入成功,但是如果我尝试在 A 列插入具有不同值的行,例如

insert into test2 (A, B, C, D) values ('aaa', 'b', 'c', 'd')

然后我收到错误 1136:列计数与第 1 行的值计数不匹配。有人可以帮我理解这个问题吗?我读过类似的问题,但在这种情况下我找不到问题所在。

该表具有以下触发器:

DELIMITER $$

CREATE TRIGGER test_update
AFTER INSERT
ON test2 FOR EACH ROW
BEGIN
    IF NEW.A IN (select A from test1) THEN
        update test1 
        set test1.B = new.B,
            test1.C = new.C,
            test1.D = new.D
        where test1.A = new.A;
    ELSEIF NEW.A NOT IN (select A from test1) THEN
        INSERT INTO test1 values (new.A, new.B, new.C, new.D);
    END IF;
END$$

DELIMITER ;

触发器的目的是如果列 A 的值已经存在于“test1”的行中,则更新表“test1”,或者如果 A 的值不存在,则在“test1”中插入新行。

CREATE TABLE `test1` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `A` varchar(30) DEFAULT NULL,
  `B` varchar(30) DEFAULT NULL,
  `C` varchar(30) DEFAULT NULL,
  `D` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
4

0 回答 0