#mysql #insert #mysql-error-1136
#mysql #вставить #mysql-ошибка-1136
Вопрос:
Я создал следующую таблицу:
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 ;
Цель триггера — обновить таблицу «test1», если значение столбца A уже существует в строке «test1», или вставить новую строку в «test1», если значение A не существует.
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
Комментарии:
1. Не повторяется. dbfiddle.uk /… Посмотрите, существует ли триггер в этой таблице — ошибка может возникнуть в его коде.
2. Эта ошибка является сообщением для sql, подобного этому
INSERT INTO table_name(col_name1, col_name2, col_name3) VALUES('value1','value2');
, поэтому проверьте запятую, одинарные кавычки, если что-то не так с форматом.3. @Akina да, есть триггер, я обновил свой вопрос, чтобы включить его. Спасибо, что нашли время ответить на мой вопрос.
4. Показать DDL для
test1
. Я думаю, что он содержит более 4 столбцов. Если это так, то укажите список столбцов во ВСТАВКЕ.5. Просматривая код триггера, я вижу, что
test1.A
он уникален (должен быть как минимум). Если это так, то удалите IF / подзапросы и используйте простую вставку.. ODKU в триггере.