Вопрос по работе автоинкремента ID в БД
-
Всем привет.
Перенес на WP некоторые посты с другого движка.
Пришлось перенести новые посты в БД с ID 5000, когда как изначально отсчет постов остановился на 2000, перенесенные посты отлично работают, новые пока добавляются дальше на 2000+. Вопрос, когда автоинкремент дойдет до 5000 он перескочит те посты или начнет затирать имеющиеся?
-
Ответил в предыдущей теме, но теперь вижу, что ответ требует уточнения, т.к. мне пока не удалось воспроизвести ситуацию, когда значение
AUTO_INCREMENT
в таблице меньше одного из существующих ID.Извиняюсь не заметил.
Тоже читал что промежуток не заполняется, однако у меня заполняется.
Может быть это связано с тем что я напрямую меняю ид:$last_id = wp_insert_post($data); $new_id = $post_data['id'] + 500000; $last_id1 = $wpdb->query("UPDATE $wpdb->posts SET ID='$new_id' WHERE ID='$last_id'");
Может быть это связано с тем что я напрямую меняю ид:
Конечно. Если не указывать id явно, то insert будет создавать новое значение, следующее после максимального. Если, конечно, не сломаны auto_increment и primary key.
Юрий, подскажите, так как поведет себя auto_increment в будущем, учитывая что они не сломан? Будет затирать или продолжит?
В будущем — в смысле в штатном режиме? Должно увеличиваться на 1 после каждого insert. В PMA в «операциях» таблицы можно посмотреть (и изменить) текущее (следующее) значение AUTO_INCREMENT.
Да в штатном режиме, когда AUTO_INCREMENT дойдет до добавленных постов с ранее увеличенным числом ID, он будет переписывать? Или перепрыгнет имеющиеся и дальше пойдет +1…
AUTO_INCREMENT (в смысле свойства таблицы) должен быть больше максимального значения автоинкрементного поля. Я вообще не уверен, что его можно сделать меньше без хирургического вмешательства (в смысле редактирования непосредственно файлов базы)
пока не удалось воспроизвести ситуацию, когда значение
AUTO_INCREMENT
в таблице меньше одного из существующих ID.Проверил ещё раз — при запросе типа
UPDATE wp_posts SET ID = 10000 WHERE ID = 4500;
значение
AUTO_INCREMENT
в таблице автоматически увеличивается до 10001, как и при вставке новой записи. При попытке изменить его обратно на 4501 ничего не меняется, остаётся на 10001.Так что у меня есть некоторые сомнения в том, что «новые пока добавляются дальше на 2000+», если, конечно, в базе что-то не сломано.
А в чём вообще смысл этих манипуляций с ID? Может быть, задачу, ради которой понадобилось сохранять исходные ID с другого сайта, можно решить проще, если правильно её сформулировать?
Выполнить проще никак не получалось.
Я писал тут на форуме помочь тоже не смогли.
Задача была перенести из БД ДЛЕ посты в WP.
Но была проблема с ID категорий и постов, т.к они совпадали с имеющимися.
Пришлось вручную увеличивать их ИД.
Осложняло задачу и то что для моей темы создается 2 поста один как паблиш второй как на проверку админу пендинг.
Кроме того при переносе постера пришлось воспользоваться кодом:$image_data = @file_get_contents($image); if ($image_data != false) { // получаем информацию о файле в структуру $info = pathinfo($image); // если нет расширения - уходим if (!isset($info['extension'])) { return ""; } // создаем уникальное имя с расширением $filename = uniqid() . "." . $info['extension']; // получаем папку для загрузки, типа \wp-content\uploads\2020\10 $upload_dir = wp_upload_dir(); // создаем папку если ее нет и получаем имя файла if (wp_mkdir_p($upload_dir['path'])) { $file = $upload_dir['path'] . "/" . $filename; } else { $file = $upload_dir['basedir'] . "/" . $filename; } // пишем содержимое картинки в файл file_put_contents($file, $image_data); // получаем расширение и MIME тип файла $wp_filetype = wp_check_filetype($file, null); // создаем структуру для добавления аттача $attachment = array( 'post_mime_type' => $wp_filetype['type'], 'post_title' => sanitize_file_name($filename), 'post_content' => '', 'post_status' => 'inherit' ); // добавляем аттач к посту $post_id $attach_id = wp_insert_attachment($attachment, $file, $new_id); // создаем промежуточные копии изображения и метаданные $attach_data = wp_generate_attachment_metadata($attach_id, $file); // обновляем метаданные аттача wp_update_attachment_metadata($attach_id, $attach_data); // добавляем картинку посту set_post_thumbnail($new_id, $attach_id); }
что в свою очередь создает еще один пост с своим ИД.
В общем сейчас простестил посты, у меня заполняет тот промежуток что остался между старыми и перенесенными постами, поэтому я и тревожусь чтобы не было затирания в будущем.
Кроме того при переносе постов, новые посты присваивались с новым ИД, а вот публикация картинок и поста пендинг проходили как инкременты к старым постам. Было очень странно, такого функциоанала я скрипту не указывал.- Ответ изменён 3 года, 8 месяцев назад пользователем rsl89.
Я писал тут на форуме помочь тоже не смогли.
Задача была перенести из БД ДЛЕ посты в WPСкорее это вы не воспользовались данными вам советами
Все может быть.
Может быть советы были неверно сформулированы.
Но сделано то, что сделано.
И вопрос топика остается открытым.В общем сейчас простестил посты, у меня заполняет тот промежуток что остался между старыми и перенесенными постами, поэтому я и тревожусь чтобы не было затирания в будущем.
А какое сейчас значение
AUTO_INCREMENT
у таблицы? Можно посмотреть в phpMyAdmin на вкладке «Операции». Там же можно его увеличить до безопасного максимального значения, чтобы не беспокоиться о затирании.Текущее положение у меня 41261
Последний перенесенный пост имеет ИД 512503
- Тема «Вопрос по работе автоинкремента ID в БД» закрыта для новых ответов.