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