Jak naprawdę opanować MySQL?

13

Używam mysql przez ten sam czas, co PHP. Czuję się jednak około 10 razy bardziej pewny w PHP; lub dowolny inny język programowania. Ale po prostu nie potrafię naprawdę pojąć SQL. Mam na myśli, że mogę wybierać, aktualizować, wstawiać, usuwać, dołączać itp., Ale jeśli chodzi o bardziej złożone rzeczy, jestem zgubiony. Jak napisać bardziej skomplikowaną instrukcję select, jak prawidłowo używać indeksów, jakiego silnika użyć itp.

Z jakiegoś powodu naprawdę uważam, że mysql doc jest trudny do naśladowania, ale php są łatwe do naśladowania.

Zaczynam myśleć, że być może mój mózg jest tak okablowany, że programowanie sprawia, że ​​od tego czasu jest mylące. Nie wiem Większość ludzi uważa, że ​​Regex jest tak mylący, ale dla mnie ma to bardziej naukowy sens niż jak zbudować instrukcję SQL. Nie zrozumcie mnie źle, nie nienawidzę SQL, bardzo mi się podoba, chcę tylko lepiej to zrozumieć.

Jaki jest najlepszy / najszybszy sposób, aby naprawdę opanować MySQL?

Kiedy mówię „mistrz”, nie mam na myśli guru wśród guru, mam na myśli wystarczająco sprytnego, aby zrozumieć większość pytań, które zadaję na SO, bez potrzeby pomocy.

JD Isaacks
źródło
2
Mówisz o SQL lub MySQL, ponieważ mogą to być bardzo różne rzeczy. Konfigurowanie i administrowanie replikacją to zupełnie inne zadanie niż pisanie skomplikowanego zapytania SQL. Podejrzewam, że to także funkcja czasu. Prawie na pewno spędzasz dużo więcej czasu na pisaniu PHP niż na SQL, nawet jeśli używasz ich przez „tyle samo czasu”.
Steven Evers
@SnOrfus Masz dobry pomysł na pisanie więcej kodu w PHP. MySQL to jedyny język relacyjnych baz danych, jakiego kiedykolwiek używałem. kiedy powiedziałem „SQL”, miałem na myśli ogólnie ten rodzaj języka.
JD Isaacks
Rób rzeczy, które są przydatne. Poznaj różne problemy, które możesz napotkać w prawdziwym świecie. W ten sposób poprowadzisz Cię do zbadania scenariuszy, które są bardziej złożone niż teoria podręczników. Przetestuj rzeczy w konsoli i sprawdź, czy możesz uzyskać pożądane wyniki bez użycia PHP. Na przykład darmowa klasa wprowadzająca do bazy danych, którą uruchomił Stanford, ma kilka fajnych ćwiczeń związanych z sieciami społecznościowymi.
James P.
Wiele osób nienawidzi PHP (z różnych powodów, niektóre bardzo dobre), ale jego dokumentacja jest doskonała. Jednym z powodów, dla których uważasz, że dokumenty PHP są łatwiejsze do naśladowania niż dokumenty MySQL, nie jest natura języków, ale natura dokumentacji.
TRiG

Odpowiedzi:

10

Użyj tego

Zinternalizowanie działania relacyjnych baz danych jest trudne dla wielu osób - ale jest bardzo cenne. Gdy będziesz pracować z SQL, będzie on działał w twoim mózgu. Naciskaj dalej.

Kiedy coś wydaje się dziwne, sprawdź

W przeglądarce Chrome skonfigurowałem tę wyszukiwarkę, więc wszystko, co muszę zrobić, to wpisać „m [zapytanie wyszukiwania]”, aby przeszukać dokumenty (wyszukiwarka dev.mysql.com jest do bani): {google: baseURL} search? {Google: RLZ} {google: akceptowaneSugestion} {google: originalQueryForSuggestion} sourceid = chrome & ie = {inputEncoding} i q = site: dev.mysql.com/doc/refman/5.1/en+%s

Jeśli dokumenty nie mają odpowiedzi, wejdź do #mysql na freenode i sprawdź, czy ktoś nie może dać wglądu.

Czytać!

Kiedy zrozumiesz, w jaki sposób działają relacyjne bazy danych, będziesz chciał dowiedzieć się więcej o tym, co MySQL robi z tymi magicznymi zapytaniami, które piszesz. Gorąco polecam High Performance MySQL - warto poświęcić czas.

TehShrike
źródło
1
Cóż, dobrą wiadomością jest to, że mam już książkę, którą poleciłeś, jeszcze jej nie przeczytałem. dzięki! +1 za instrukcje konfiguracji wyszukiwania Chrome.
JD Isaacks,
Mam książkę, tylko jej jeszcze nie przeczytałem.
crosenblum
@tehShrike jak to zrobiłeś na Chrome?
jaybny
@jaybny kliknij prawym przyciskiem myszy pasek adresu i przejdź do „edycji wyszukiwarek”
TehShrike
9

Przede wszystkim dokładnie poznaj połączenia. Nie tylko połączenia wewnętrzne i lewe. Dowiedz się, co robi łączenie krzyżowe i pełne łączenie zewnętrzne. Poznaj okoliczności, które spowodują, że wybierzesz konkretny rodzaj złączenia. Zrozum, że nie można ich zamieniać, a zapytanie, które wykorzystuje lewe złączenie, może zwrócić inne wyniki niż to, które używa złączenia wewnętrznego. (Można by pomyśleć, że byłoby to oczywiste, ale przeczytałem zbyt wiele pytań, w których ludzie opisując swój problem, nieco przypadkowo wypróbowali różne połączenia).

Następnie naprawdę rozumiem agregaty i ich działanie. Mysql pozwoli ci uniknąć wykonywania grupowych czynności w standardowy sposób. Ale miej dyscyplinę, aby całkowicie zdefiniować grupę według klauzuli. Pomoże ci to zrozumieć, co robisz i ułatwi przeniesienie twojej wiedzy do innych baz danych.

Dowiedz się, co robi opis przypadku.

Podczas wykonywania złożonych zapytań naucz się pracować w porcjach. Sprawdź przy każdej porcji, czy masz oczekiwane wyniki. Załóżmy na przykład, że musisz napisać zapytanie sprawozdawcze dotyczące zamówień, które zostały zwrócone w ciągu ostatnich 3 miesięcy, powód zwrotu oraz dane kontaktowe klienta. Pierwszym krokiem jest odzyskanie zamówień w ciągu ostatnich trzech miesięcy. Gdy dowiesz się, że masz taką solidną treść, możesz dodać informacje o przyczynie zwrotu. Gdy już będziesz mieć taką bryłę, możesz dodać klienta, który ją zwrócił. Kiedy już to zrobisz, dodaj dane kontaktowe tej osoby. Na każdym etapie sprawdź wyniki i sprawdź, czy mają one sens. W tym przypadku prawdopodobnie chcę mieć tylko jeden rekord na każde zwrócone zamówienie. Jeśli na jakimkolwiek etapie pośrednim liczba wyników wzrośnie lub spadnie, wiesz, że masz problem z zapytaniem. Czasami w blokach konstrukcyjnych będziesz chciał zobaczyć dodatkowe pola, aby sprawdzić, czy informacje są poprawne. Umieszczam je w osobnym wierszu i komentuję je, gdy przechodzę do następnego kroku (usuwając je na końcu, gdy wiem, że mam rację), aby były łatwo dostępne, jeśli dodanie kolejnej zmarszczki sprawi, że zapytanie stanie się zabawne. Nie można poprawnie wykonywać złożonych zapytań bez dokładnego zrozumienia, jak powinny wyglądać wyniki. Myślenie, że wygląda OK, ponieważ zwróciło niektóre wyniki, prawie gwarantuje, że masz złe wyniki przez większą część czasu. m prawo), aby były łatwo widoczne, jeśli dodanie kolejnej zmarszczki sprawi, że zapytanie będzie zabawne. Nie można poprawnie wykonywać złożonych zapytań bez dokładnego zrozumienia, jak powinny wyglądać wyniki. Myślenie, że wygląda OK, ponieważ zwróciło niektóre wyniki, prawie gwarantuje, że masz złe wyniki przez większą część czasu. m prawo), aby były łatwo widoczne, jeśli dodanie kolejnej zmarszczki sprawi, że zapytanie będzie zabawne. Nie można poprawnie wykonywać złożonych zapytań bez dokładnego zrozumienia, jak powinny wyglądać wyniki. Myślenie, że wygląda OK, ponieważ zwróciło niektóre wyniki, prawie gwarantuje, że masz złe wyniki przez większą część czasu.

Oto lista kilku podstawowych rzeczy, które powinieneś być w stanie zrobić w SQL bez zastanowienia:

  1. Najpierw prosty wybór bez połączeń (i bez select *), ale z warunkami na zaznaczeniu
  2. Powinieneś wiedzieć, jak połączyć dwie lub więcej tabel i uzyskać rekordy, które znajdują się we wszystkich tabelach
  3. Powinieneś wiedzieć, jak łączyć dwie lub więcej tabel i uzyskiwać rekordy we wszystkich tabelach, ale zwracaj tylko jeden rekord z tabeli z wieloma stronami relacji jeden do wielu
  4. Powinieneś być w stanie uzyskać rekordy w jednej tabeli, ale nie w powiązanej tabeli
  5. Powinieneś mieć możliwość agregowania danych dla raportu
  6. Powinieneś być w stanie wstawić jeden rekord do tabeli
  7. Powinieneś być w stanie zaktualizować jeden rekord w tabeli
  8. Powinieneś być w stanie usunąć jeden rekord z tabeli
  9. Powinieneś być w stanie wstawić grupę rekordów do tabeli bez kursora
  10. Powinieneś być w stanie zaktualizować grupę rekordów w tabeli bez kursora
  11. Powinieneś być w stanie usunąć grupę rekordów w tabeli bez kursora
  12. Powinieneś być w stanie wykonać wiele akcji w jednej transakcji i obsłużyć pułapkę błędów
  13. Powinieneś być w stanie stworzyć unię rekordów i wiedzieć, kiedy używać UNION vice UNION ALL
  14. Powinieneś być w stanie różnicować dane dla jednego pola w oparciu o niektóre kryteria (używając CASE)

Kiedy poczujesz się swobodnie z podstawową znajomością SQL, poznaj strukturę bazy danych. Potrafię pisać skomplikowane zapytania w stosunku do bardzo skomplikowanych DBS, które obsługuję znacznie szybciej niż inne osoby, ponieważ rozumiem strukturę i nie muszę myśleć o tym, gdzie są przechowywane rzeczy. Jeśli rozumiesz strukturę tabeli i relacje między kluczami obcymi oraz gdzie przechowywane są wartości wyszukiwania i co oznaczają kolumny (nie tylko ich nazwa, ale jakie dane w nich przechowywane), możesz być ekspertem w wyszukiwaniu tej bazy danych. Pierwszą rzeczą, którą robię w każdej nowej pracy, jest dokładne zrozumienie struktury db.

HLGEM
źródło
3

Moim zdaniem, aby nauczyć się języka SQL (i tak naprawdę chodzi o to, o co pytasz, specyfika MySQL może przyjść później), powinieneś usunąć się z kontroli nad programowaniem w stylu PHP. Myśl konkretnie w paradygmacie języków deklaratywnych:

SQL określa CO chcesz, a nie jak to zrobić. Jeśli możesz spróbować mentalnie usunąć to drugie, pierwsze pojawi się z czasem. Wyodrębnij tę warstwę w swoim umyśle i pozwól MySQL (lub Oracle lub cokolwiek) martwić się o to, jak .

Logika aplikacji może występować w kodzie SQL vs kod proceduralny / OO w PHP. Na przykład podczas tworzenia zapytań do bazy danych o coś, możesz konsekwentnie dołączać do tabeli użytkowników i być może tabeli uprawnień, aby zapewnić odpowiednie prawa zamiast wykonywania wielu zapytań wstępnych. Wstawianie można wykonać przez podobny wybór ( insert into ... select ...) zamiast nazwanych wartości, aby zapewnić sprawdzanie poprawności danych.

W każdym razie bardzo polecam skupienie się na prymitywach Codda i zrozumienie selekcji, projekcji, łączenia, zjednoczenia i różnicy. Pod koniec dnia koncepcje są proste i prawdopodobnie możesz osiągnąć 80% tego, co chcesz zrobić za ich pośrednictwem. Reszta może nastąpić.

Jé Queue
źródło
+1 za akapit drugi świetna rada i nigdy nie myślałem o tym w ten sposób!
JD Isaacks,
2

Najszybszym sposobem na „opanowanie” czegokolwiek było rzucenie sobie wyzwania. Weź zestaw danych i zapisz od ośmiu do dziesięciu różnych rzeczy, o które chciałbyś zapytać. Grupa studentów, dla której możesz chcieć znaleźć średni wiek wszystkich osób pogrupowany według średniej ocen zaokrąglonej do najbliższej liczby całkowitej. Następnie napisz do nich zapytania. Zacznij od jednej tabeli, a następnie dodaj więcej. Ćwicz połączenia danych i wbudowane funkcje.

Josh K.
źródło