Mysql alter table auto increment

Mysql alter table auto increment

С завидной регулярностью возникает вопрос, как сбросить или изменить значение атрибута AUTO_INCREMENT для автоинкрементного столбца. Решение данной задачи укладывается в одну строчку MySQL кода, но сначала узнаем, как это значение узнать.

Для удобства работы с MySQL большинство веб-разработчиков используют специализированные приложения, которые позволяют работать с базой данных напрямую или через веб интерфейс. Одним из самых популярных решений с веб-интерфейсом является phpMyAdmin. Если phpMyAdmin под рукой, то посмотреть значение AUTO_INCREMENT можно во вкладке Структура интересующей нас таблицы.

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

Узнав, как можно посмотреть интересующий нас атрибут переходим непосредственно к его редактированию:

Если же нам необходимо сбросить значение атрибута AUTO_INCREMENT, то вместо значения подставляем 0:

Возможно данное решение кому-нибудь пригодится.

Поле автоматического приращения

Автоматическое приращение позволяет автоматически генерировать уникальный номер при вставке новой записи в таблицу.

Часто это поле первичного ключа, которое мы хотели бы создать автоматически каждый раз при вставке новой записи.

Синтаксис для MySQL

Следующая инструкция SQL определяет столбец "ID", который будет автоматически увеличивать поле первичного ключа в таблице "лица":

MySQL использует ключевое слово ауто_инкремент для выполнения функции автоматического приращения.

По умолчанию начальное значение для ауто_инкремент равно 1, и оно будет увеличиваться на 1 для каждой новой записи.

Чтобы позволить ауто_инкремент последовательности начать с другого значения, используйте следующую инструкцию SQL:

Чтобы вставить новую запись в таблицу "персоны", нам не нужно будет указывать значение для "ID" столбец (уникальное значение будет добавлено автоматически):

Вышеприведенная инструкция SQL вставит новую запись в таблицу "персоны". Столбцу "ID" присваивается уникальное значение. В столбце "имя" будет установлено значение "Ларс", а в столбце "Фамилия" будет установлено значение "Монсен Сотрудник IIP".

Синтаксис для SQL Server

Следующая инструкция SQL определяет столбец "ID", который будет автоматически увеличивать поле первичного ключа в таблице "лица":

Сервер MS SQL использует ключевое слово Identity для выполнения функции автоматического приращения.

Читайте также:  Gigabyte ga b75m d3v обновить биос

В приведенном выше примере начальное значение Identity равно 1, и оно будет увеличиваться на 1 для каждой новой записи.

Совет: Чтобы указать, что столбец "ID" должен начинаться со значения 10 и увеличиваться на 5, измените его на Identity (10, 5).

Чтобы вставить новую запись в таблицу "персоны", нам не нужно будет указывать значение для столбца "ID" (уникальное значение будет добавлено автоматически):

The SQL statement above would insert a new record into the "Persons" table. The "ID" column would be assigned a unique value. The "FirstName" column would be set to "Lars" and the "LastName" column would be set to "Monsen".

Синтаксис для доступа

Следующая инструкция SQL определяет столбец "ID", который будет автоматически увеличивать поле первичного ключа в таблице "лица":

Для выполнения функции автоматического приращения используется ключевое слово автоприращение.

По умолчанию начальное значение для автоприращения равно 1, и оно будет увеличиваться на 1 для каждой новой записи.

Совет: Чтобы указать, что столбец "ID" должен начинаться со значения 10 и увеличиваться на 5, измените автоприращение на автоприращение (10, 5).

Чтобы вставить новую запись в таблицу "персоны", нам не нужно будет указывать значение для столбца "ID" (уникальное значение будет добавлено автоматически):

Вышеприведенная инструкция SQL вставит новую запись в таблицу "персоны". Столбцу "п_ид" присваивается уникальное значение. В столбце "имя" будет установлено значение "Ларс", а в столбце "Фамилия" будет установлено значение "Монсен Сотрудник IIP".

Синтаксис для Oracle

В Oracle код немного сложнее.

Вам придется создать поле с автоматическим приращением с помощью объекта Sequence (этот объект генерирует номерную серию).

Используйте следующий синтаксис создания последовательности:

Приведенный выше код создает объект Sequence с именем сек_персон, начинающийся с 1 и увеличивающийся на 1. Он также будет кэшировать до 10 значений для производительности. Параметр cache указывает, сколько значений последовательности будет сохранено в памяти для более быстрого доступа.

Чтобы вставить новую запись в таблицу "персоны", мы должны будем использовать функцию NEXTVAL (Эта функция извлекает следующее значение из последовательности сек_персон):

Читайте также:  Аутентификация по выбранному сертификату не пройдена

Вышеприведенная инструкция SQL вставит новую запись в таблицу "персоны". Столбцу "ID" присваивается следующий номер из последовательности сек_персон. В столбце "имя" будет установлено значение "Ларс", а в столбце "Фамилия" будет установлено значение "Монсен Сотрудник IIP".

AUTO_INCREMENT — это свойство поля таблицы, суть которого заключается в том, что при добавлении новых записей значение этого столбца устанавливается автоматически, причём значение равно на единицу больше предыдущего. Это свойство удобно применять для создания уникальных идентификаторов каждой строки — не нужно получать количество уже имеющихся строк или последнее значение, нет опасности запутаться.

Но у AUTO_INCREMENT есть одно интересное свойство — при удалении строк значение счётчика AUTO_INCREMENT не уменьшается. То есть, например, в таблицу было добавлено 10 записей, после этого все записи были удалены, а затем стали добавлять новые записи — в результате у первой новой записи значение столбца с AUTO_INCREMENT будет 11, у второй будет 12 и так далее.

Отсюда иногда возникает задача — сбросить значение AUTO_INCREMENT или установить AUTO_INCREMENT на единицу.

Сброс AUTO_INCREMENT для InnoDB баз данных

Если таблица не пустая, то для таких таблиц с движком хранения InnoDB невозможно установить AUTO_INCREMENT равное или меньшее значению в последней записи. Это вполне логично, поскольку в противном случае это привело бы к дублированию значения, которое должно быть уникальным для каждой строки.

Как сбросить AUTO_INCREMENT в phpMyAdmin

В веб интерфейсе phpMyAdmin вы можете просмотреть текущее значение AUTO_INCREMENT и изменить его. Для этого выберите таблицу, для которой вы хотите поменять AUTO_INCREMENT, затем перейдите в Операции → Параметры таблицы → AUTO_INCREMENT:

Установите желаемое значение — помните об ограничении для не пустых таблиц InnoDB.

Очистка таблицы и сброс AUTO_INCREMENT

Как уже было сказано, если удалить записи обычными средствами, то это удаление не сбрасывает значение AUTO_INCREMENT даже если удалены абсолютно все строки.

Выполнить удаление всех записей вместе со сбросом счётчика AUTO_INCREMENT можно командой:

Читайте также:  Microsoft mobile rm 1013

Изменение/сброс счётчика AUTO_INCREMENT без очистки таблицы

Другим вариантом является следующий SQL запрос:

Обратите внимание, что AUTO_INCREMENT можно установить на любое значение — но помните об ограничении для непустых таблиц InnoDB.

И ещё очень важное замечание об ALTER TABLE. Дело в том, что этот запрос приводит к перестроению всей таблицы. То есть MySQL создаст новую таблицу с той же структурой и добавит новое значение auto_increment и скопирует все записи с оригинальной таблицы, удалит оригинальную таблицу и переименует новую. Если таблица содержит много записей, то этот процесс может затянуться очень надолго.

Если нужно увеличить значение счётчика AUTO_INCREMENT, то проще вставить ненужную строку (а затем удалить, если нужно). Это займёт долю секунды, в то время как ALTER TABLE может потребовать дни для больших таблиц.

Допустим, я у меня есть таблица со столбцом auto_increment ID и другими столбцами col1, col2…:

Как уменьшить значение AUTO_INCREMENT для InnoDB

Предположим, в таблице имеется 10 записей, при этом у последней записи столбец AUTO_INCREMENT равен 20. Как изменить значение этого столбца ID, чтобы следующая запись имела номер 11?

Это невозможно сделать ни одним из описанных выше методов, но есть другие техники, которые могут иметь сторонние эффекты — поэтому будьте весьма осторожны с ними.

Итак, первый вариант — убрать свойство AUTO_INCREMENT у столбца ID, выполнить запрос для переназначения ID, и затем вернуть AUTO_INCREMENT:

Не нужно знать текущее максимальное значение. Этим способом счётчик автоматического прибавления будет сброшен и запущен автоматически с максимального существующего значения.

Но помните о медленной работе ALTER TABLE для больших таблиц.

Ещё один вариант — полностью удалить столбец id, а затем его вернуть с предыдущими настройками. Все поля внутри таблицы заполняются новыми значениями счётчика.

Помните о том, что:

    все поля внутри таблицы будут посчитаны заново и у них будут другие > Основывается на:

Ссылка на основную публикацию
Adblock detector