У меня есть таблица MySQL с первичным ключом автоматического увеличения. Я удалил несколько строк в середине таблицы. Теперь у меня есть, например, что-то вроде этого в столбце ID: 12, 13, 14, 19, 20. Я удалил 15, 16, 17 и 18 строк.
Я хочу переназначить / сбросить / переупорядочить первичный ключ, чтобы у меня была непрерывность, то есть сделать 19 на 15, 20 на 16 и так далее.
Как мне это сделать?
Несмотря на то, что этот вопрос кажется довольно старым, я отправлю ответ для тех, кто ищет здесь.
Если столбец используется в качестве внешнего ключа в других таблицах, убедитесь, что вы используете
ON UPDATE CASCADE
вместоON UPDATE NO ACTION
отношения внешнего ключа значение по умолчанию в этих таблицах.Далее, чтобы сбросить
AUTO_INCREMENT
счетчик, вы можете сразу же выпустить следующую инструкцию.Для MySQL будет сброшено значение на
MAX(id) + 1
.источник
.
id` = @count: = @count + 1`. Из документации: «Значение с правой стороны может быть буквальным значением, другой переменной, хранящей значение, или любым допустимым выражением, которое дает скалярное значение»Чтобы сбросить идентификаторы моей таблицы User, я использую следующий SQL-запрос. Выше было сказано, что это разрушит любые отношения, которые могут быть у вас с любыми другими таблицами.
источник
Вы можете просто использовать этот запрос
источник
Я думаю, это сработает
источник
Или из PhpMyAdmin удалите флаг «AutoIncrement», сохраните, установите его снова и сохраните. Это сбрасывает его.
источник
если хочешь
order by
источник
в phpmyadmin
перейдите к своей таблице-> щелкните меню операций-> перейти к параметрам таблицы-> измените AUTO_INCREMENT на то, откуда вы хотите начать.
ваш автоинкремент таблицы начинается с этого номера.
попытайся.
источник
Вы можете удалить функцию автоматического увеличения первичного ключа для этого столбца, затем каждый раз, когда вы обновляете этот столбец, выполняйте запрос перед рукой, который будет подсчитывать все строки в таблице, а затем запустить цикл, который повторяет этот счетчик строк, вставляя каждое значение в соответствующая строка и, наконец, запустите запрос, вставив новую строку со значением этого столбца, равным общему количеству строк плюс один. Это будет работать безупречно и станет самым надежным решением для тех, кто пытается добиться того, чем вы являетесь. Вот пример кода, который вы можете использовать для функции:
Здесь я создал ассоциативный массив, который я добавил к столбцу ранга с запросом в запросе выбора, который дал каждой строке значение ранга, начинающееся с 1. Затем я повторил ассоциативный массив.
Другой вариант - получить счетчик строк, запустить базовый запрос выбора, получить ассоциативный массив и повторить его таким же образом, но с добавленной переменной, которая обновляется на каждой итерации. Это менее гибкий, но выполнит то же самое.
источник
для InnoDB сделайте следующее (это удалит все записи из таблицы, сначала сделайте bakcup):
источник
У меня были те же сомнения, но я не мог внести никаких изменений в таблицу, я решил сделать следующее, увидев, что мой идентификатор не превышает максимальное число, установленное в переменной @count:
Решение требует, но оно безопасно и было необходимо, потому что в моей таблице были внешние ключи с данными из другой таблицы.
источник
Лучше всего изменить столбец и удалить атрибут auto_increment. Затем выполните еще один оператор alter и верните auto_increment в столбец. Это приведет к сбросу счетчика до максимума + 1 текущих строк и, таким образом, сохранит ссылки внешнего ключа обратно на эту таблицу, из других таблиц в вашей базе данных или любое другое использование ключа для этого столбца.
источник
Я считаю, что нужно создать новый столбец с именем row_order. затем измените порядок столбца. Я не принимаю изменения первичного ключа. В качестве примера, если столбец заказа - banner_position, я сделал что-то вроде этого: это для удаления, обновления, создания столбца позиции баннера. Вызовите эту функцию, измените их порядок.
источник
Это работает - https ://stackoverflow.com/a/5437720/10219008..... но если вы столкнетесь с проблемой 'Код ошибки: 1265. Данные усечены для столбца' id 'в строке 1' ... Затем запустите последующий. Добавление игнорирования в запрос на обновление.
источник
Вы также можете просто избежать использования числовых идентификаторов в качестве первичного ключа. Вы можете использовать коды стран в качестве основного идентификатора, если таблица содержит информацию о странах, или вы можете использовать постоянные ссылки, например, если в ней содержатся статьи.
Вы также можете просто использовать случайное значение или значение MD5. У всех этих возможностей есть свои преимущества, особенно в IT-сфере. числовые идентификаторы легко перечислить.
источник