Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Хранит данные в алфавитном порядке, а надо в порядке заполнения / 19 сообщений из 19, страница 1 из 1
11.05.2014, 23:56:07
    #38638211
Afelion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
Доброго времени суток.

MySQL 5.1, InnoDB, MySQL Workbench.

Помогите, пожалуйста, исправить такую проблему:

Я заношу данные в таблицу из файла в следующей последовательности:
ID Группа1 К01-12С2 К01-12В3 К01-12А4 К02-12С5 К02-12В6 К02-12А

При SELECT * FROM Table, они выводятся в следующей последовательности:
ID Группа3 К01-12А2 К01-12В1 К01-12С6 К02-12А5 К02-12В4 К02-12С

А мне нужно, чтобы SELECT * FROM Table выводил данные в той последовательности, в которой они были занесены в таблицу.

Как я понял, проблема в том, какой метод представления (collation) БД я использую.
Пробовал делать запросы с
Код: sql
1.
SELECT * FROM Table COLLATE utf8_general_ci

,
Код: sql
1.
SELECT * FROM Table COLLATE utf8_unicode_ci

,
Код: sql
1.
SELECT * FROM Table COLLATE utf8_bin

- результата нет.
Кодировка БД, клиента, коннекшена и результата UTF8.

Просьба сильно не пинать, если вопрос глупый. В SQL 2-ой день.
...
Рейтинг: 0 / 0
12.05.2014, 00:14:17
    #38638219
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
SELECT * FROM Table ORDER BY id
...
Рейтинг: 0 / 0
12.05.2014, 00:37:40
    #38638225
Afelion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
Да, так можно. Но мне бы хотелось без ORDER BY. Сейчас попробовал тоже самое сделать на MSSQL - там в какой последовательности заносишь данные в БД, в такой они и хранятся.
...
Рейтинг: 0 / 0
12.05.2014, 00:48:08
    #38638228
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
AfelionНо мне бы хотелось без ORDER BY.В MySQL только ORDER BY и GROUP BY гарантируют порядок вывода.

И, кстати, покажите DDL таблицы. Любопытно, что там за первичный ключ.
...
Рейтинг: 0 / 0
12.05.2014, 01:10:57
    #38638234
Afelion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE SCHEMA IF NOT EXISTS `eljournal` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `eljournal`;

CREATE TABLE IF NOT EXISTS `eljournal`.`Tbl_Groups` (
  `ID_Group` INT NOT NULL AUTO_INCREMENT,
  `Number_group` VARCHAR(20) NOT NULL,
  PRIMARY KEY (`ID_Group`),
  UNIQUE INDEX `Name_subject_UNIQUE` (`Number_group` ASC))
ENGINE = InnoDB;



И только сейчас, глядя на DDL, я увидел слово "ASC" в абсолютно ненужном мне месте. Вот что значит доверять автоматическому генератору кодов!
...
Рейтинг: 0 / 0
12.05.2014, 01:19:29
    #38638236
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
AfelionИ только сейчас, глядя на DDL, я увидел слово "ASC" в абсолютно ненужном мне месте. Вот что значит доверять автоматическому генератору кодов!Это полная ерунда.
Во-первых, порядок сортировки в индексе далеко не всегда влияет на порядок вывода. И даже когда влияет - гарантии не дает.
Во-вторых, в MySQL все индексы ASC, т.к. MySQL по другому просто не умеет.
...
Рейтинг: 0 / 0
12.05.2014, 01:21:28
    #38638237
Afelion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
Да, действительно поторопился. Попробовал создавать без ASC и с ASK в ID - результат тот же - выводит в алфавитном порядке.
Это как то странно. Даже если так положено, то можете, пожалуйста, дать ссылку на какую-нибудь теорию по обоснованию этого явления?
...
Рейтинг: 0 / 0
12.05.2014, 01:25:23
    #38638238
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
AfelionДаже если так положено, то можете, пожалуйста, дать ссылку на какую-нибудь теорию по обоснованию этого явления?Это не "так положено". MySQL имеет право выводить записи в любом порядке, пока в запросе явно не указан порядок сортировки.
В данном конкретном случае похоже, что индекс `Name_subject_UNIQUE` используется в качестве покрывающего. Проверить это можно, посмотрев план запроса. Для этого нужно подставить слово EXPLAIN в его начале.
...
Рейтинг: 0 / 0
12.05.2014, 01:29:59
    #38638239
Afelion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
Код: sql
1.
EXPLAIN SELECT * FROM Table
...
Рейтинг: 0 / 0
12.05.2014, 01:33:38
    #38638241
Afelion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
Код: sql
1.
2.
EXPLAIN SELECT * FROM Table
ORDER BY ID



Теперь в поле Key значение Primary. Т.е. Вы были правы на счёт перекрытия.
...
Рейтинг: 0 / 0
12.05.2014, 01:34:06
    #38638242
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
О, как я и говорил :)
В другой раз данные могут оказаться прочитаны из таблицы. В другом порядке, разумеется.
А добавите поле в таблицу или секцию WHERE в запрос (уже не говоря про более сложные запросы), порядок может опять поменяться.

Поэтому вариант только один - указывать желаемую сортировку явно.
...
Рейтинг: 0 / 0
12.05.2014, 01:36:58
    #38638243
Afelion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
Спасибо за разбор!
...
Рейтинг: 0 / 0
12.05.2014, 10:20:44
    #38638388
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
AfelionДа, так можно. Но мне бы хотелось без ORDER BY. Сейчас попробовал тоже самое сделать на MSSQL - там в какой последовательности заносишь данные в БД, в такой они и хранятся.

если сможешь обосновать почему без ORDER BY - подскажу
...
Рейтинг: 0 / 0
12.05.2014, 11:23:02
    #38638488
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
MaratIskAfelionДа, так можно. Но мне бы хотелось без ORDER BY. Сейчас попробовал тоже самое сделать на MSSQL - там в какой последовательности заносишь данные в БД, в такой они и хранятся.

если сможешь обосновать почему без ORDER BY - подскажуВ частном случае, возможно, и подскажете.
В общем случае: сервер записывает данные так, как ему удобнее это делать (и вовсе не обязательно "подряд"). И извлекает точно так же. Поэтому говорить о каком-либо "порядке хранения" строк в таблице нельзя в принципе.

Конечно, если вам больше нравятся ненадежные приложения - вы вправе считать все что угодно, в том числе "хранение в порядке добавления", или "извлечение в порядке кластерного индекса" и т.п.

Но единственный гарантированный способ получения данных в требуемом порядке - ORDER BY.
...
Рейтинг: 0 / 0
12.05.2014, 11:36:09
    #38638506
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
Cygapb-007MaratIskпропущено...


если сможешь обосновать почему без ORDER BY - подскажуВ частном случае, возможно, и подскажете.Мне даже интересно в каком. Единственный частный случай, который я помню, требует MyISAM, но у топикстартера InnoDB.
...
Рейтинг: 0 / 0
12.05.2014, 14:49:02
    #38638813
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
Кроме всего прочего, я рекомендую топикстартеру завести отдельное поле, в котором бы хранился номер записи в порядке заполнения. Первичный ключ для этого использовать по хорошему нельзя, если действительно интересует какой-то особый порядок.
Что такое "порядок заполнения", кстати -- тоже большой вопрос.
...
Рейтинг: 0 / 0
12.05.2014, 14:55:51
    #38638828
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
авторПоэтому говорить о каком-либо "порядке хранения" строк в таблице нельзя в принципе.
для mysql верно ровно обратное. нельзя говорить о таблице без упорядочивания данных.
...
Рейтинг: 0 / 0
12.05.2014, 15:41:02
    #38638893
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
ScareCrowавторПоэтому говорить о каком-либо "порядке хранения" строк в таблице нельзя в принципе.
для mysql верно ровно обратное. нельзя говорить о таблице без упорядочивания данных.

Порядок хранения и порядок записей при выводе -- это сильно разные вещи.
...
Рейтинг: 0 / 0
12.05.2014, 17:23:41
    #38639011
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранит данные в алфавитном порядке, а надо в порядке заполнения
ТС не подозревает, что в таблице БД нет ни первой, ни ни последней записи
что физически в файле они могут располагаться как угодно

Модератор: Пост исправлен. Прошу впредь воздерживаться от переходов на личности.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Хранит данные в алфавитном порядке, а надо в порядке заполнения / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]