MySQL противоречие вставки

Я пытаюсь вставить в одну из моих таблиц (из той же таблицы). Мне нужно изменить 1 из значений, поэтому я попытался вставить с выберите, как ответили здесь. У меня есть автоматическое увеличение pk, и я хотел бы, чтобы вновь вставленный pk продолжил подсчет. поэтому вставка приведет к добавлению 1 к ПК.

INSERT INTO test.pp_publication_info
(id,
publication_fk,
template_fk,
allow_excel_upload)
SELECT 
id, 55, template_fk, allow_excel_upload
FROM pp_publication_info where id = "1";

Я получаю ошибку 1062, которая является повторяющейся записью для 1 КЛЮЧЕВОЙ ПЕРВИЧНЫЙ. Я хотел бы, однако, что из-за ИИ это будет +1 столбец ID. Поэтому я проверил, могу ли я добавить ON DUPLICATE KEY UPDATE id, К сожалению, это не имело значения, где я поместил это в запросе.

Итак, вкратце: могу ли я INSERT таким образом, с помощью выбора, удерживая функцию AI? Если так, то где я иду не так, и если нет, есть ли какие-либо альтернативы?

Дополнение: создайте выписку из моей таблицы:

CREATE TABLE `pp_publication_info` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`publication_fk` int(10) unsigned NOT NULL,
`template_fk` int(10) unsigned DEFAULT NULL,
`allow_excel_upload` tinyint(1) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;

1 ответ

Решение

Ваш id столбец AUTO_INCREMENT:

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

Это означает, что база данных будет генерировать для вас идентификатор при вставке записи. Так что просто не вставляйте значение в это поле. Он будет заполнен автоматически.

Так что-то вроде этого:

INSERT INTO test.pp_publication_info
  (publication_fk,
   template_fk,
   allow_excel_upload)
SELECT 
  55, template_fk, allow_excel_upload
FROM pp_publication_info where id = 1;

После INSERT выполняется, вы обнаружите, что id столбец любой новой записи (записей) был заполнен следующими значениями в последовательности. (Запрет любых пробелов в последовательности, которые могут произойти по ряду причин.)

Другие вопросы по тегам