Wie kann man MySQL wirklich beherrschen?

13

Ich habe MySQL für die gleiche Zeit verwendet, die ich PHP verwendet habe. Allerdings fühle ich mich in PHP ungefähr 10x sicherer; oder eine andere Programmiersprache. Aber ich kann SQL einfach nicht wirklich wirklich verstehen. Ich meine, ich kann auswählen, aktualisieren, einfügen, löschen, beitreten usw., aber wenn es um komplexere Dinge geht, bin ich verloren. Wie schreibe ich eine kompliziertere Select-Anweisung, wie verwende ich Indizes richtig, welche Engine soll ich verwenden usw.

Aus irgendeinem Grund finde ich es wirklich schwierig, den MySQL-Dokumenten zu folgen, aber die PHP-Dokumente sind einfach zu folgen.

Ich fange an zu denken, dass mein Gehirn vielleicht nur so verdrahtet ist, dass die Programmierung da aber verwirrend wirkt. Ich weiß es nicht. Die meisten Leute denken, dass Regex so verwirrend ist, aber für mich ist es wissenschaftlicher, als eine SQL-Anweisung zu konstruieren. Bitte versteh mich nicht falsch, ich hasse SQL nicht, ich mag es wirklich, ich möchte es nur besser verstehen.

Was ist der beste / schnellste Weg, um MySQL wirklich zu beherrschen?

Wenn ich "Meister" sage, meine ich nicht den Guru unter den Gurus, sondern schlau genug, um die meisten Fragen, die ich auf SO stelle, selbst herauszufinden, ohne Hilfe zu benötigen.

JD Isaacks
quelle
2
Sprechen Sie über SQL oder MySQL, weil es sich um sehr unterschiedliche Dinge handeln kann. Das Einrichten und Verwalten der Replikation ist eine ganz andere Aufgabe als das Schreiben einer komplizierten SQL-Abfrage. Ich vermute, dass dies auch eine Funktion der Zeit ist. Sie haben mit ziemlicher Sicherheit viel mehr Zeit mit dem Schreiben von PHP verbracht als mit SQL, selbst wenn Sie diese für "dieselbe Zeitspanne" verwendet haben.
Steven Evers
@ SnOrfus Sie haben gute Gründe, mehr Code in PHP zu schreiben. MySQL ist die einzige relationale Datenbanksprache, die ich jemals verwendet habe. Als ich "SQL" sagte, meinte ich nur diese Art von Sprache im Allgemeinen.
JD Isaacks
Mach Dinge, die nützlich sind. Erforschen Sie die verschiedenen Probleme, denen Sie in der realen Welt begegnen können. Auf diese Weise lernen Sie Szenarien kennen, die komplexer sind als die Schulbuchtheorie. Testen Sie die Dinge in der Konsole und prüfen Sie, ob Sie die gewünschten Ergebnisse erzielen können, ohne PHP zu verwenden. Zum Beispiel enthält die von Stanford gestartete Einführungsklasse für freie Datenbanken ein paar coole Übungen zu sozialen Netzwerken.
James P.
Viele Leute hassen PHP (aus verschiedenen Gründen, von denen einige sehr gut sind), aber die Dokumentation ist hervorragend. Ein Grund, warum Sie die PHP-Dokumente leichter verstehen als die MySQL-Dokumente, ist nicht die Art der Sprachen, sondern die Art der Dokumentation.
TRiG

Antworten:

10

Benutze es

Die Internalisierung der Funktionsweise relationaler Datenbanken ist für viele Menschen schwierig, aber sehr wertvoll. Wenn Sie mehr mit SQL arbeiten, dringt es in Ihr Gehirn ein. Dräng dich weiter.

Wenn etwas seltsam erscheint, untersuchen Sie es

In Chrome habe ich diese Suchmaschine so eingerichtet, dass ich nur "m [search query]" eingeben muss, um die Dokumente zu durchsuchen (die Suche auf dev.mysql.com ist mies): {google: baseURL} search? {Google: RLZ} {google: allowedSuggestion} {google: originalQueryForSuggestion} sourceid = chrome & ie = {inputEncoding} & q = site: dev.mysql.com/doc/refman/5.1/en+%s

Wenn die Dokumente keine Antwort haben, rufen Sie unter freenode #mysql auf und prüfen Sie, ob jemand einen Einblick geben kann.

Lesen!

Wenn Sie erst einmal verstanden haben, wie relationale Datenbanken funktionieren, möchten Sie ein bisschen mehr darüber erfahren, was MySQL mit diesen magischen Abfragen macht, die Sie schreiben. Ich kann High Performance MySQL nur empfehlen - es ist Ihre Zeit sehr wert.

TehShrike
quelle
1
Die gute Nachricht ist, dass ich das von Ihnen empfohlene Buch bereits habe und noch nicht viel davon durchgearbeitet habe. Vielen Dank! +1 für Anweisungen zum Einrichten der Chrome-Suche.
JD Isaacks
Ich habe das Buch, habe es nur noch nicht gelesen.
Crosenblum
@tehShrike wie hast du das auf chrom gemacht?
Jaybny
@ Jaybny Rechtsklick auf die URL-Leiste und gehen Sie zu "Suchmaschinen bearbeiten"
TehShrike
9

Machen Sie sich in erster Linie mit Joins vertraut. Auch nicht nur innere und linke Verbindungen. Erfahren Sie, was ein Cross-Join und ein vollständiger Outer-Join bewirken. Kennen Sie die Umstände, unter denen Sie einen bestimmten Join-Typ auswählen würden. Verstehen Sie, dass sie nicht austauschbar sind und dass die Abfrage, die eine linke Verknüpfung verwendet, möglicherweise andere Ergebnisse als eine Abfrage zurückgibt, die eine innere Verknüpfung verwendet. (Man würde denken, das wäre offensichtlich, aber ich habe zu viele Fragen gelesen, bei denen die Leute beim Beschreiben ihres Problems etwas zufällig verschiedene Verknüpfungen versuchen.)

Weiter verstehen Aggregate wirklich und wie sie funktionieren. Mit MySQL können Sie davonkommen, nicht wie gewohnt Gruppen-Bys zu machen. Aber haben Sie die Disziplin, die Gruppe durch Klausel richtig zu definieren. Dies hilft Ihnen zu verstehen, was Sie tun, und erleichtert die Übertragung Ihres Wissens auf andere Datenbanken.

Erfahren Sie, was die case-Anweisung bewirkt.

Lernen Sie bei komplexen Abfragen, in Stücken zu arbeiten. Vergewissern Sie sich bei jedem Block, dass Sie die erwarteten Ergebnisse erzielen. Nehmen wir zum Beispiel an, Sie müssen eine Berichtsabfrage für Bestellungen schreiben, die in den letzten 3 Monaten zurückgegeben wurden, und den Grund für die Rücksendung sowie die Kontaktinformationen für den Kunden. Der erste Schritt besteht darin, die Bestellungen der letzten drei Monate zurückzuerhalten. Sobald Sie wissen, dass Sie diesen Feststoff haben, können Sie die Informationen zum Grund für die Rücksendung hinzufügen. Sobald Sie dieses Volumen haben, können Sie den Kunden hinzufügen, der es zurückgegeben hat. Sobald Sie diesen Körper haben, fügen Sie die Kontaktinformationen für die Person hinzu. Überprüfen Sie in jeder Phase Ihre Ergebnisse und prüfen Sie, ob sie sinnvoll sind. In diesem Fall möchte ich wahrscheinlich nur einen Datensatz pro zurückgegebener Bestellung erhalten. Wenn in einem Zwischenstadium die Anzahl der Ergebnisse steigt oder fällt, wissen Sie, dass Sie ein Problem mit der Abfrage haben. Manchmal möchten Sie in Bausteinen zusätzliche Felder sehen, um zu überprüfen, ob die Informationen korrekt sind. Ich setze diese in eine separate Zeile und kommentiere sie aus, während ich den nächsten Schritt durcharbeite (und entferne sie am Ende, sobald ich weiß, dass ich Recht habe), damit sie wieder leicht zu sehen sind, wenn das Hinzufügen einer weiteren Falte die Abfrage lustig machte. Sie können komplexe Abfragen nicht korrekt ausführen, ohne genau zu wissen, wie Ihre Ergebnisse aussehen sollten. Denken Sie, es sieht in Ordnung aus, da es einige Ergebnisse zurückgibt, die fast garantieren, dass Sie einen guten Teil der Zeit falsche Ergebnisse haben. m richtig) so sind sie wieder leicht zu sehen, wenn das Hinzufügen einer weiteren Falte die Abfrage lustig gemacht hat. Sie können komplexe Abfragen nicht korrekt ausführen, ohne genau zu wissen, wie Ihre Ergebnisse aussehen sollten. Denken Sie, es sieht in Ordnung aus, da es einige Ergebnisse zurückgibt, die fast garantieren, dass Sie einen guten Teil der Zeit falsche Ergebnisse haben. m richtig) so sind sie wieder leicht zu sehen, wenn das Hinzufügen einer weiteren Falte die Abfrage lustig gemacht hat. Sie können komplexe Abfragen nicht korrekt ausführen, ohne genau zu wissen, wie Ihre Ergebnisse aussehen sollten. Denken Sie, es sieht in Ordnung aus, da es einige Ergebnisse zurückgibt, die fast garantieren, dass Sie einen guten Teil der Zeit falsche Ergebnisse haben.

Hier ist eine Liste einiger grundlegender Dinge, die Sie in SQL ausführen sollten, ohne darüber nachdenken zu müssen:

  1. Zuerst eine direkte Auswahl ohne Verknüpfungen (und ohne Auswahl *), jedoch mit Bedingungen für die Auswahl
  2. Sie sollten wissen, wie Sie zwei oder mehr Tabellen kombinieren und Datensätze abrufen, die sich in allen Tabellen befinden
  3. Sie sollten wissen, wie Sie zwei oder mehr Tabellen kombinieren und Datensätze abrufen, die sich in allen Tabellen befinden, aber nur einen Datensatz aus der Tabelle mit den vielen Seiten der Eins-zu-Viele-Beziehung zurückgeben
  4. Sie sollten in der Lage sein, die Datensätze in einer Tabelle abzurufen, jedoch nicht in einer zugeordneten Tabelle
  5. Sie sollten in der Lage sein, Daten für einen Bericht zu aggregieren
  6. Sie sollten in der Lage sein, einen Datensatz in eine Tabelle einzufügen
  7. Sie sollten in der Lage sein, einen Datensatz in einer Tabelle zu aktualisieren
  8. Sie sollten in der Lage sein, einen Datensatz in einer Tabelle zu löschen
  9. Sie sollten in der Lage sein, eine Gruppe von Datensätzen ohne Cursor in eine Tabelle einzufügen
  10. Sie sollten in der Lage sein, eine Gruppe von Datensätzen in einer Tabelle ohne Cursor zu aktualisieren
  11. Sie sollten in der Lage sein, eine Gruppe von Datensätzen in einer Tabelle ohne Cursor zu löschen
  12. Sie sollten in der Lage sein, mehrere Aktionen in einer Transaktion auszuführen und Fehler zu beheben
  13. Sie sollten in der Lage sein, eine Vereinigung von Datensätzen zu erstellen und zu wissen, wann Sie UNION vice UNION ALL verwenden müssen
  14. Sie sollten in der Lage sein, die Daten für ein Feld anhand einiger Kriterien zu variieren (mit CASE).

Wenn Sie mit Ihren grundlegenden SQL-Kenntnissen vertraut sind, lernen Sie Ihre Datenbankstruktur kennen. Ich kann komplexe Abfragen gegen die sehr komplizierten Datenbanken, die ich unterstütze, viel schneller als andere Leute schreiben, weil ich die Struktur verstehe und nicht darüber nachdenken muss, wo Dinge gespeichert sind. Wenn Sie mit der Tabellenstruktur und den Fremdschlüsselbeziehungen vertraut sind und wissen, wo Nachschlagewerte gespeichert sind und was die Spalten bedeuten (nicht nur deren Name, sondern auch die darin enthaltenen Daten), können Sie diese Datenbank fachmännisch abfragen. Das erste, was ich in einem neuen Job mache, ist, die Datenbankstruktur genau zu verstehen.

HLGEM
quelle
3

Meiner Meinung nach sollten Sie sich aus dem Kontrollfluss der PHP-artigen Programmierung entfernen, um SQL zu lernen (und das ist wirklich das, was Sie fragen, MySQL-spezifische Informationen können später kommen) . Denken Sie speziell im Paradigma der deklarativen Sprachen:

SQL definiert, WAS Sie wollen, nicht, wie es geht. Wenn Sie versuchen können, Letzteres geistig zu entfernen, wird Ersteres rechtzeitig folgen. Abstrahieren Sie diese Ebene in Ihrem Kopf und lassen Sie MySQL (oder Oracle oder was auch immer) darüber nachdenken, wie .

Anwendungslogik kann in SQL im Vergleich zu prozeduralem / OO-Code in PHP auftreten. Wenn Sie beispielsweise Abfragen für etwas an die Datenbank richten, können Sie eine Benutzertabelle und möglicherweise eine Berechtigungstabelle konsistent verknüpfen, um die richtigen Rechte sicherzustellen, anstatt mehrere Vorabfragen durchzuführen. Das Einfügen kann über eine ähnliche Auswahl ( insert into ... select ...) anstelle von benannten Werten erfolgen, um die Datenüberprüfung sicherzustellen.

Auf jeden Fall empfehle ich dringend, mich auf die Codd-Grundprinzipien zu konzentrieren und Auswahl, Projektion, Zusammenführung, Vereinigung und Differenz zu verstehen. Letztendlich sind die Konzepte einfach und Sie können wahrscheinlich 80% dessen erreichen, was Sie durch sie erreichen möchten. Der Rest kann folgen.

Jé Queue
quelle
+1 für 2. Absatz toller Rat und ich habe nie so darüber nachgedacht!
JD Isaacks
2

Der schnellste Weg, etwas zu "meistern", war, mich selbst damit herauszufordern. Nehmen Sie einen Datensatz und schreiben Sie acht bis zehn verschiedene Dinge auf, nach denen Sie fragen möchten. Eine Gruppe von Schülern, für die Sie das Durchschnittsalter aller Schüler ermitteln möchten, gruppiert nach dem Notendurchschnitt, auf die nächste ganze Zahl gerundet. Dann schreiben Sie die Abfragen für sie. Beginnen Sie mit einer Tabelle und fügen Sie dann weitere hinzu. Übungsdaten werden zusammengefügt und Funktionen eingebaut.

Josh K
quelle