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
столбец любой новой записи (записей) был заполнен следующими значениями в последовательности. (Запрет любых пробелов в последовательности, которые могут произойти по ряду причин.)