В PHP я создаю и выполняю SQL-запросы, например, следующие.
INSERT INTO Table (Column1, Column2, Column3) VALUES
('1', '2', '3'),
('A', 'B', 'C'),
('AA', 'BB', 'CC');
Однако порядок, в который они вставляются в базу данных, различен каждый раз, когда я пытаюсь это сделать. Есть ли способ, которым я могу убедиться, что они вставлены в том порядке, в котором они перечислены?
Дополнение: Спасибо, ребята, за помощь. Я использую PHP для создания таблиц MySQL из файлов CSV некоторое время. Раньше я всегда использовал созданную таблицу и вставлял сразу все строки. В этом случае таблица SQL всегда имела тот же порядок, что и мой запрос INSERT. Однако теперь я создаю MySQL, а затем постепенно добавляю содержимое. Это когда порядок базы данных становится случайным.
Я преодолел это, используя ALTER TABLE … ORDER BY, но мне любопытно, как в первом случае был порядок, и теперь он кажется очень случайным.
Порядок по умолчанию – это порядок выполнения операторов insert. Если между строками не существует иерархической связи, вставленный порядок не имеет значения. Если вы хотите, чтобы результат был согласованным, вы должны определить предложение ORDER BY
в своем запросе.
Если вы хотите получить строки в определенном порядке, единственный способ убедиться в том, что вы используете предложение ORDER BY.
Заказ, который они вставили, не так важен, поскольку вы, вероятно, будете использовать предложение ORDER BY
в своих запросах, когда вытаскиваете данные обратно. Помните, что MySQL предназначен для хранения данных, не обязательно представляя их.
SELECT col1, col2 FROM table1 ORDER BY col2 ASC // fixes any ordering issues in the native-storage
Отношение никогда не определяет порядок, поэтому вы не можете зависеть от этого. Вы можете использовать предложение ORDER BY, чтобы получить желаемые результаты.
Существует способ, которым вы можете гарантировать порядок, в котором они были вставлены:
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
.
Несмотря на то, что порядок вставки не является гарантией СУБД, он обычно является FIFO. Первым прибыл, первым обслужен.
Я не знаю (что я знаю), чтобы заставить инструкцию INSERT происходить в определенном порядке. Просто сделайте голый выбор, например:
SELECT * FROM Table
Не всегда возвращать данные в том же порядке. Это связано с тем, что MySQL (и все другие системы баз данных) предназначены для хранения данных, и разработчик должен запросить его соответствующим образом. К счастью, существует множество способов упорядочивания, ограничения и выбора данных, таких как:
ORDER BY column_name ASC LIMIT 10 WHERE column_name = "test" WHERE column_name IN (1, 2, 3) --etc