MySQL PhpMyAdmin: измените AUTO_INCREMENT и / или INSERT_ID - PullRequest
1 голос
/ 17 августа 2011

У меня есть таблица счетов-фактур, в которой хранится одна запись для каждого счета-фактуры, причем первичным ключом является столбец идентификатора (int AUTO_INCREMENT), а также номер ссылки на счет-фактуру.

Теперь, к сожалению, мне пришлось вручную перенести некоторые счета-фактуры, сгенерированные в старой системе, которые имеют пятизначный идентификатор вместо четырехзначного, который используется текущей системой.

Однако, даже когда я сбрасываю AUTO_INCREMENT через PhpMyAdmin (Операции с таблицами) обратно к следующему четырехзначному идентификатору, он все равно вставляет пятизначную единицу, являющуюся более высоким идентификатором в таблице, плюс единицу.

Из поисков, мне кажется, что мне действительно нужно изменить insert_id, а также AUTO_INCREMENT? Я пытался выполнить ALTER TABLE invoices SET insert_id=8125 так же, как и ALTER TABLE invoices insert_id=8125, но ни одна из этих команд не является допустимой.

Может ли кто-нибудь объяснить правильный способ, которым я могу сбросить AUTO_INCREMENT, чтобы он вставлял записи с идентификаторами 8125 и далее, а затем, когда он достигнет 10962, он пропустит четыре записи, которые я вручную добавлен и продолжен последовательный идентификатор с 10966 и далее. Если он не пропустит 10962 - 10966, то это на самом деле не имеет значения, поскольку компания не генерирует столько счетов каждый год, так что это произойдет в следующем году, следовательно, не вызывает проблем.

Я был бы очень признателен за любую помощь в этой сложной ситуации, в которой я оказался! Большое спасибо

1 Ответ

1 голос
/ 17 августа 2011

Первое, что я предлагаю, это отказаться от PHPMyAdmin, потому что это одно из худших «приложений», когда-либо созданных для работы с MySQL.Получите правильный графический интерфейс.Мой любимый SQLYog .

Теперь к проблеме.Никогда, никогда не вмешивайтесь в первичный ключ, не пытайтесь «сбросить» его, как вы сказали, или обновить столбцы, которые имеют целое число, сгенерированное базой данных.Что касается того, почему, тема широкая и может обсуждаться в другом вопросе, просто никогда не трогайте первичный ключ, как только вы его настроите.

Во-вторых, кто-то удалял записи счетов-фактур, следовательно,автоинкремент теперь на 10k +, а не на 8k +.Это не плохо, но если вам нужны последовательные значения для ваших счетов (например, между счетами 1 и 5 не должно быть пропуска), тогда используйте дополнительное поле sequence_id или invoice_ref и используйте триггеры для вычисления этого числа.Не полагайтесь на функцию auto_increment, которая будет использовать числа, которые были утеряны в результате операции УДАЛИТЬ.

В качестве альтернативы, вы можете экспортировать базу данных, которую вы использовали, найти определение CREATE TABLE длятаблицу счетов, найдите строку, в которой написано «AUTO_INCREMENT = [some number]», и удалите эту инструкцию.Импортируйте в вашу новую базу данных, и auto_increment продолжится с последнего счета.Вы можете сделать то же самое, используя ALTER TABLE, однако реимпортировать безопаснее.

...