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.
Odpowiedzi:
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.
źródło
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:
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.
źródło
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ć.
źródło
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.
źródło