порядок строк при вставке строк в MySQL - PullRequest
5 голосов
/ 23 декабря 2009

В PHP я создаю и выполняю запросы SQL, как показано ниже.

INSERT INTO Table (Column1, Column2, Column3) VALUES<br> ('1', '2', '3'),<br> ('A', 'B', 'C'),<br> ('AA', 'BB', 'CC');

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

Дополнение: Спасибо ребята за помощь. Я использую PHP для создания таблиц MySQL из файлов CSV на некоторое время. В прошлом я всегда использовал создание таблицы и вставил все строки сразу. В этом случае таблица SQL всегда имела тот же порядок, что и мой запрос INSERT. Однако сейчас я создаю MySQL, а затем постепенно добавляю содержимое. Это когда порядок в базе данных становится случайным.

Я преодолел это с помощью запросов ALTER TABLE ... ORDER BY, но мне любопытно, что в первом случае был порядок, и теперь он кажется очень случайным.

Ответы [ 7 ]

4 голосов
/ 23 декабря 2009

Порядок по умолчанию - это порядок выполнения операторов вставки. Если между строками нет иерархической связи, вставленный порядок не имеет значения. Если вы хотите, чтобы вывод был согласованным, вы должны определить в своем запросе предложение ORDER BY.

3 голосов
/ 23 декабря 2009

Порядок их вставки не так важен, так как вы, вероятно, будете использовать предложение ORDER BY в своих запросах при извлечении данных обратно. Помните, MySQL предназначен для хранения данных, а не для их представления.

SELECT col1, col2
FROM table1
ORDER BY col2 ASC // fixes any ordering issues in the native-storage
3 голосов
/ 23 декабря 2009

Если вы хотите получить строки в определенном порядке, единственный способ убедиться в этом - использовать предложение ORDER BY.

2 голосов
/ 23 декабря 2009

Отношение никогда не определяет порядок, поэтому вы не можете зависеть от этого. Вы можете использовать предложение ORDER BY для получения желаемых результатов.

1 голос
/ 23 декабря 2009

Несмотря на то, что порядок вставки не гарантируется СУБД, обычно это FIFO. Первый вошел Первый вышел.

1 голос
/ 23 декабря 2009

Вы можете гарантировать порядок, в котором они вставлены:

INSERT INTO Table (Column1, Column2, Column3) VALUES ('1', '2', '3');
INSERT INTO Table (Column1, Column2, Column3) VALUES ('A', 'B', 'C');
INSERT INTO Table (Column1, Column2, Column3) VALUES ('AA', 'BB', 'CC');

: -)

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

Вам не гарантируется какая-либо конкретная информация при извлечении строк, если вы не укажете, в каком порядке вы хотите их разместить, поэтому вас не должно беспокоить порядок их создания. Без предложения order by порядок может фактически меняться каждый раз, когда вы делаете select.

0 голосов
/ 23 декабря 2009

Нет способа (о котором я знаю) заставить оператор INSERT встречаться в определенном Ордене. Просто делаю голый выбор, такой как:

SELECT * FROM Table

Не всегда возвращает данные в одном и том же порядке. Это связано с тем, что MySQL (и все другие системы баз данных) предназначены для хранения данных, и разработчик может запросить их соответствующим образом. К счастью, существует много разных способов упорядочить, ограничить и выбрать данные, например:

ORDER BY column_name ASC
LIMIT 10
WHERE column_name = "test"
WHERE column_name IN (1, 2, 3)
--etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...