Як насправді освоїти MySQL?


13

Я використовую mysql стільки ж часу, як і PHP. Однак я відчуваю приблизно 10 разів впевненість у PHP; або будь-яку іншу мову програмування. Але я просто не можу, здається, справді зрозуміти SQL. Я маю на увазі, я можу вибирати, оновлювати, вставляти, видаляти, приєднуватися тощо, але коли мова йде про більш складні речі, я втрачаюсь. Як написати складніший оператор select, як правильно використовувати індекси, який двигун використовувати тощо.

З якоїсь причини мені дійсно здається, що документи mysql важко дотримуватися, але PHP легко прослідкувати.

Я починаю думати, що, можливо, мій мозок просто провідний таким чином, що програмування робить з тих пір, але sql заплутано. Не знаю. Більшість людей вважають, що Regex настільки заплутаний, але для мене це має більше наукового сенсу, ніж як побудувати заяву sql. Будь ласка, не зрозумійте мене неправильно, я не ненавиджу SQL, мені це дуже подобається, я просто хочу це зрозуміти краще.

Який найкращий / найшвидший спосіб по-справжньому освоїти MySQL?

Коли я кажу "господар", я не маю на увазі гуру серед гуру, я маю на увазі достатньо розумний, щоб розібратися в більшості питань, які я задаю на "SO", не потребуючи допомоги.


2
Ви говорите про SQL чи MySQL, оскільки вони можуть бути дуже різними. Налаштування та адміністрування реплікації - це зовсім інше завдання від написання складного запиту sql. Я підозрюю, що це також функція часу. Ви майже напевно витрачаєте набагато більше часу на написання PHP, ніж у вас SQL, навіть якщо ви використовували їх "стільки ж часу".
Стівен Еверс

@SnOrfus У вас є хороша думка про те, щоб написати більше коду в PHP. MySQL є єдиною мовою реляційних баз даних, яку я коли-небудь використовував. коли я сказав "SQL", я мав на увазі саме такий тип мови загалом.
JD Isaacks

Робіть корисні речі. Вивчіть різні проблеми, з якими можна зіткнутися в реальному світі. Таким чином ви приведете до вивчення сценаріїв, які складніші за теорію підручників. Тестуйте речі в консолі і побачите, чи зможете ви отримати потрібні результати, не використовуючи PHP. Наприклад, клас безкоштовного впровадження бази даних, який запустив Стенфорд, має кілька цікавих вправ, пов’язаних із соціальними мережами.
Джеймс П.

Багато людей ненавидять PHP (з різних причин, деякі з них дуже хороші), але його документація відмінна. Однією з причин, за якою ви вважаєте, що документи PHP легше дотримуватися, ніж документи MySQL, - це не природа мов, а природа документації.
TRiG

Відповіді:


10

Використай це

Інтерналізація того, як працюють реляційні бази даних, важко для багатьох людей - але це дуже цінно. Оскільки ви більше працюєте з SQL, він буде проникати у ваш мозок. Продовжуйте наполягати.

Коли щось здається дивним, досліджуйте

У Chrome я налаштував цю пошукову систему, тому все, що мені потрібно зробити, - це ввести "m [пошуковий запит]" для пошуку документів (пошук пошукових записів dev.mysql.com): {google: baseURL} пошук? {Google: RLZ} {google: acceptSuggestion} {google: originalQueryForSuggestion} sourceid = chrome & ie = {inputEncoding} & q = site: dev.mysql.com/doc/refman/5.1/en+%s

Якщо у відповіді на документи немає відповідей, перейдіть до #mysql на freenode і перевірте, чи хтось може дати деяку інформацію.

Читай!

Як тільки ви зрозумієте, як реляційні бази даних роблять свою справу, ви захочете дізнатися трохи більше про те, що робить MySQL з тими магічними запитами, які ви пишете. Я б дуже рекомендував MySQL з високою продуктивністю - це дуже варте вашого часу.


1
Що ж, хороша новина - я вже маю книгу, яку ви рекомендуєте, просто ще не пережила її. Спасибі! +1 - інструкції, як налаштувати пошук за хромом.
JD Isaacks

У мене є книга, просто я її ще не прочитав.
crosenblum

@tehShrike як ти це зробив на хромі?
jaybny

@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, ознайомтеся зі структурою вашої бази даних. Я можу писати складні запити проти дуже складних даних, які я підтримую набагато швидше, ніж інші люди, тому що я розумію структуру і не потрібно думати, де зберігаються речі. Якщо ви розумієте структуру таблиці та зв’язки із зовнішніми ключами та де зберігаються значення пошуку та що означають стовпці (не лише їх ім’я, але які дані містяться в них), то ви можете бути експертом у запиті до цієї бази даних. Перше, що я роблю на будь-якій новій роботі - це глибоко зрозуміти структуру db.


3

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

SQL визначає, що ви хочете, а не як це зробити. Якщо ви можете спробувати подумки усунути останнє, перше піде вчасно. Абстрагуйте цей шар у своїй думці і дозвольте MySQL (або Oracle чи будь-якому іншому) хвилюватися про те, як .

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

У будь-якому разі, я настійно рекомендую зосередитись на приматах Кодда та розумінні вибору, проекції, приєднання, об'єднання та різниці. Зрештою, ці поняття є прямими, і ви, швидше за все, зможете виконати 80% того, що хочете зробити через них. Решта можуть слідувати.


+1 для другого абзацу чудова порада, і я ніколи про це не думав!
JD Isaacks

2

Найшвидший спосіб, який я знайшов "освоїти", - це кинути виклик собі. Візьміть набір даних і запишіть вісім-десять різних речей, які ви хочете запитувати. Група студентів, яку ви хочете знайти середній вік усіх, згрупованих за середнім балом, округленим до найближчого цілого числа. Потім запишіть запити до них. Почніть з однієї таблиці, а потім додайте більше. Дані практики приєднуються до вбудованих функцій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.