我创建了下表:
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