MYSQL - СЕРВЕР:как “изменить порядок” таблицы

StackOverflow https://stackoverflow.com/questions/1850594

  •  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

можно было бы сохранить во временную таблицу, затем обрезать, затем обрезать таблицу фруктов и вставить, но это, вероятно, дрянное решение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top