ошибка mysql 1136: количество столбцов не соответствует количеству значений в строке 1

#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 в триггере.