Как действительно освоить MySQL?

13

Я использую mysql в течение того же времени, что и PHP. Однако я чувствую себя примерно в 10 раз более уверенно в PHP; или любой другой язык программирования. Но я просто не могу понять, что такое SQL. Я имею в виду, я могу выбрать, обновить, вставить, удалить, присоединиться и т. Д., Но когда дело доходит до более сложных вещей, я теряюсь. Как написать более сложный оператор выбора, как правильно использовать индексы, какой движок использовать и т. Д.

По какой-то причине я действительно считаю, что документы на mysql трудны для подписки, а на php - легко.

Я начинаю думать, что, возможно, мой мозг просто устроен так, что программирование делает с тех пор, но sql сбивает с толку. Я не знаю. Большинство людей думают, что Regex настолько запутан, но для меня это имеет больше научного смысла, чем создание SQL-выражения. Пожалуйста, не поймите меня неправильно, я не ненавижу SQL, мне действительно это нравится, я просто хочу лучше понять его.

Какой лучший / самый быстрый способ действительно освоить MySQL?

Когда я говорю «мастер», я не имею в виду гуру среди гуру, я имею в виду достаточно умный, чтобы самому разобраться с большинством вопросов, которые я задаю о ТА без помощи.

JD Исаакс
источник
2
Вы говорите о SQL или MySQL, потому что это могут быть разные вещи. Настройка и администрирование репликации - это совсем другая задача, чем написание сложного SQL-запроса. Я подозреваю, что это также зависит от времени. Вы почти наверняка потратили гораздо больше времени на написание PHP, чем на SQL, даже если вы использовали их «столько же времени».
Стивен Эверс
@SnOrfus У вас есть хорошая идея написать больше кода на PHP. MySQL - единственный язык реляционных баз данных, который я когда-либо использовал. когда я говорил «SQL», я имел в виду именно этот тип языка в целом.
Джей Ди Айзекс
Делайте вещи, которые полезны. Исследуйте различные проблемы, с которыми вы можете столкнуться в реальном мире. Таким образом, вы сможете исследовать более сложные сценарии, чем теория из учебника. Протестируйте вещи в консоли и посмотрите, сможете ли вы получить желаемые результаты без использования PHP. Например, у класса бесплатного ознакомления с базами данных, который начал Стэнфорд, есть несколько классных упражнений, связанных с социальными сетями.
Джеймс П.
Многие люди ненавидят PHP (по разным причинам, некоторые из них очень хорошие), но его документация превосходна. Одной из причин, по которой вам легче следовать документам PHP, чем документам MySQL, является не природа языков, а природа документации.
TRiG

Ответы:

10

Используй это

Интернализация работы реляционных баз данных трудна для многих людей, но это очень ценно. Чем больше вы работаете с SQL, тем быстрее он проникнет в ваш мозг. Продолжай давить на себя.

Когда что-то кажется странным, исследуйте

В Chrome я настроил эту поисковую систему, поэтому все, что мне нужно сделать, это набрать «m [search query]» для поиска в документах (поиск dev.mysql.com - отстой): {google: baseURL} search? {Google: RLZ} {Google: acceptedSuggestion} {Google: originalQueryForSuggestion} SourceId = хром & т.е. = {КодировкаИсточника} & д = сайт: dev.mysql.com/doc/refman/5.1/en+%s

Если у документов нет ответа, зайдите в #mysql на freenode и посмотрите, сможет ли кто-нибудь что-то понять.

Читать!

Как только вы поймете, как реляционные базы данных делают свое дело, вы захотите узнать немного больше о том, что MySQL делает с этими волшебными запросами, которые вы пишете. Я очень рекомендую High Performance MySQL - оно того стоит.

TehShrike
источник
1
Что ж, хорошая новость в том, что у меня уже есть книга, которую вы рекомендуете, но я еще не прошел через нее. Благодарность! +1 для получения инструкций по настройке поиска Chrome.
Джей Ди Айзекс
У меня есть книга, просто еще не читал ее.
crosenblum
@tehShrike, как ты это сделал на Chrome?
Джейбни
@jaybny щелкните правой кнопкой мыши по строке URL и перейдите к «редактированию поисковых систем»
TehShrike
9

Прежде всего, получить полное понимание объединений. Не только внутренние и левые соединения тоже. Знайте, что делает перекрестное соединение и полное внешнее соединение. Знайте обстоятельства, которые заставили бы вас выбрать определенный тип объединения. Следует понимать, что они не являются взаимозаменяемыми, и тот запрос, который использует левое соединение, может возвращать результаты, отличные от запроса, который использует внутреннее соединение. (Можно было бы подумать, что это будет очевидно, но я прочитал слишком много вопросов, где люди при описании своей проблемы, несколько случайным образом пробуют разные объединения.)

Дальше реально разбираются агрегаты и как они работают. Mysql позволит вам не делать групповой обход стандартным способом. Но имейте дисциплину, чтобы полностью определить группу по предложению должным образом. Это поможет вам понять, что вы делаете, и сделает ваши знания более легко переносимыми в другие базы данных.

Узнайте, что делает заявление случая.

При выполнении сложных запросов учитесь работать кусками. Убедитесь в том, что у вас есть ожидаемые результаты. Например, предположим, что вам нужно написать отчетный запрос по заказам, которые были возвращены за последние 3 месяца, и причину возврата, а также контактную информацию для клиента. Первый шаг - вернуть заказы за последние три месяца. Как только вы узнаете, что у вас есть это твердое тело, вы можете добавить информацию о причине возврата. Получив это твердое тело, вы можете добавить клиента, который его вернул. Получив это твердое тело, добавьте контактную информацию для этого человека. На каждом этапе проверяйте свои результаты и смотрите, имеют ли они смысл. В этом случае я, вероятно, хочу получить только одну запись на возвращенный заказ. Если на каком-либо промежуточном этапе число результатов увеличивается или уменьшается, вы знаете, что у вас возникла проблема с запросом. Иногда в строительных блоках вы захотите увидеть дополнительные поля, чтобы проверить правильность информации. Я помещаю их в отдельную строку и комментирую их, когда прорабатываю следующий шаг (удаляя их в конце, как только узнаю, что я прав), чтобы они были легко доступны для повторного просмотра, если добавление еще одной складки сделало запрос забавным. Вы не можете правильно выполнять сложные запросы, не понимая, как должны выглядеть ваши результаты. Думая, что все выглядит хорошо, потому что он вернул некоторые результаты, почти гарантирует, что вы получите неправильные результаты в течение большей части времени. м) правильно, так что они снова могут легко увидеть, если добавление еще одной складки сделало запрос забавным. Вы не можете правильно выполнять сложные запросы, не понимая, как должны выглядеть ваши результаты. Думая, что все выглядит хорошо, потому что он вернул некоторые результаты, почти гарантирует, что вы получите неправильные результаты в течение большей части времени. м) правильно, так что они снова могут легко увидеть, если добавление еще одной складки сделало запрос забавным. Вы не можете правильно выполнять сложные запросы, не понимая, как должны выглядеть ваши результаты. Думая, что все выглядит хорошо, потому что он вернул некоторые результаты, почти гарантирует, что вы получите неправильные результаты в течение большей части времени.

Вот список некоторых основных вещей, которые вы должны делать в SQL, не задумываясь об этом:

  1. Сначала прямой выбор без объединений (и без выбора *), но с условиями выбора
  2. Вы должны знать, как объединить две или более таблицы и получить записи, которые есть во всех таблицах
  3. Вы должны знать, как объединить две или более таблиц и получить записи, которые есть во всех таблицах, но возвращают только одну запись из таблицы с множеством сторон отношения один-ко-многим
  4. Вы должны быть в состоянии получить записи в одной таблице, но не в связанной таблице
  5. Вы должны иметь возможность агрегировать данные для отчета
  6. Вы должны быть в состоянии вставить одну запись в таблицу
  7. Вы должны иметь возможность обновить одну запись в таблице
  8. Вы должны иметь возможность удалить одну запись в таблице
  9. Вы должны быть в состоянии вставить группу записей в таблицу без курсора
  10. Вы должны иметь возможность обновлять группу записей в таблице без курсора
  11. Вы должны быть в состоянии удалить группу записей в таблице без курсора
  12. Вы должны иметь возможность выполнять несколько действий в одной транзакции и обрабатывать сообщения об ошибках
  13. Вы должны быть в состоянии создать объединение записей и знать, когда использовать UNION Vice UNION ALL
  14. Вы должны иметь возможность варьировать данные для одного поля на основе некоторых критериев (используя CASE)

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

HLGEM
источник
3

По моему мнению, чтобы изучить SQL (и это действительно то, о чем вы спрашиваете, специфика MySQL может появиться позже), вы должны удалить себя из потока управления управления программирования в стиле PHP. Думайте конкретно в парадигме декларативных языков:

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

Прикладная логика может встречаться в SQL против процедурного / OO-кода в PHP. Например, когда вы делаете запросы к базе данных о чем-то, вы можете последовательно объединить пользовательскую таблицу и, возможно, таблицу разрешений, чтобы обеспечить надлежащие права, вместо того, чтобы делать несколько предварительных запросов. Вставка может быть выполнена с помощью подобного выбора (insert into ... select ... ) вместо именованных значений, чтобы обеспечить проверку данных.

В любом случае, я настоятельно рекомендую сосредоточиться на приматах Кодда и понять отбор, проекцию, объединение, объединение и различие. В конце концов, концепции просты, и вы, вероятно, можете достичь 80% того, что вы хотите сделать с их помощью. Остальное может последовать.

Jé Queue
источник
+1 за 2-й абзац отличный совет, и я никогда не думал об этом таким образом!
Джей Ди Айзекс
2

Самым быстрым способом «овладеть» чем-либо было бросить вызов самому себе. Возьмите набор данных и запишите от восьми до десяти разных вещей, которые вы хотели бы запросить. Группу учеников, которую вы, возможно, захотите найти для каждого среднего возраста, сгруппированные по среднему баллу, округленному до ближайшего целого числа. Затем напишите запросы для них. Начните с одной таблицы, затем добавьте еще. Практика объединения данных и встроенные функции.

Джош К
источник