MYSQL - СЕРВЕР:как “изменить порядок” таблицы
-
13-09-2019 - |
Вопрос
У меня есть таблица, подобная следующей,
| id | name | color |
------+--------+---------
| 1 | pear | green |
| 2 | apple | red |
| 3 | banana | yellow |
| 4 | grape | purple |
Я бы хотел изменить порядок в алфавитном порядке, используя столбец "name", и сбросить идентификатор (автоинкремент) с этим новым порядком, чтобы в итоге получилось следующее
| id | name | color |
------+--------+---------
| 1 | apple | red |
| 2 | banana | yellow |
| 3 | grape | purple |
| 4 | pear | green |
ВОПРОС:как я могу сделать это с помощью MYSQL?
Решение
Могу я спросить, почему вы хотели бы это сделать?
Если кто-либо изменит какое-либо из значений имени или вставит новые строки, это испортит вашу схему упорядочения.Попытка сохранить какой-то смысл в упорядочении PK, который уже доступен в другом месте таблицы (столбец name), кажется избыточной и, следовательно, плохой идеей.
Гораздо лучшее решение - не беспокоиться о значении столбца ID и просто выполнять сортировку по столбцу name при использовании данных в вашем приложении.
PS: Извините за ответ типа "без ответа".Обычно я предполагаю, что у вас есть веская причина, и просто даю ответ, который непосредственно касается того, что вы пытаетесь сделать, но я заметил из ваших других вопросов, что вы все еще находитесь на ранних стадиях изучения проектирования баз данных, поэтому я хотел помочь указать вам правильное направление, вместо того чтобы способствовать дальнейшему продвижению к опрометчивому подходу.
Другие советы
Самый простой способ сбросить автоматическое увеличение - это создать другую таблицу.
MySQL предоставляет такие команды, как CREATE TABLE LIKE
и RENAME TABLE
это полезно.
CREATE TABLE table2 LIKE table1;
INSERT INTO table2
SELECT * FROM table1 ORDER BY name;
DROP TABLE table1;
RENAME TABLE table2 TO table1;
Ты можешь ВЫБЕРИТЕ В создайте новую таблицу из старой таблицы, упорядочив ваш выбор по желанию.Имейте идентификатор автоматического увеличения в новой таблице.При необходимости удалите старую таблицу и переименуйте новую таблицу.
Почему бы не добавить "ЗАКАЗ ПО имени ASC" в конце вашего запроса?Я бы предположил, что вам по какой-то причине нужен идентификатор.
SELECT
RANK() Over (ORDER BY Name) As NewID
, Name
, Color
FROM Fruits
можно было бы сохранить во временную таблицу, затем обрезать, затем обрезать таблицу фруктов и вставить, но это, вероятно, дрянное решение.