Come dominare davvero MySQL?


13

Ho usato mysql per lo stesso periodo di tempo in cui ho usato PHP. Tuttavia, mi sento circa 10 volte più fiducioso in PHP; o qualsiasi altro linguaggio di programmazione. Ma non riesco proprio a cogliere davvero SQL. Voglio dire, posso selezionare, aggiornare, inserire, eliminare, unire, ecc. Ma quando si tratta di cose più complesse mi perdo. Come scrivere un'istruzione select più complicata, come utilizzare correttamente gli indici, quale motore utilizzare, ecc.

Per qualche ragione trovo davvero difficile seguire i documenti mysql, ma quelli php sono facili da seguire.

Sto cominciando a pensare che forse il mio cervello è solo cablato in un modo che rende la programmazione da allora ma sql confusa. Non lo so. Molte persone pensano che Regex sia così confuso, ma per me ha più senso scientifico di come costruire un'istruzione sql. Per favore, non fraintendetemi, non sto odiando su SQL, mi piace molto, voglio solo capirlo meglio.

Qual è il modo migliore / più veloce per dominare davvero MySQL?

Quando dico "maestro" non intendo il guru tra i guru, intendo abbastanza intelligente da capire la maggior parte delle domande che faccio su SO me stesso senza bisogno di aiuto.


2
Stai parlando di SQL o MySQL, perché possono essere cose molto diverse. L'impostazione e l'amministrazione della replica è un'attività molto diversa dalla scrittura di una query sql complicata. Sospetto che anche questa sia una funzione del tempo. Quasi sicuramente hai trascorso molto più tempo a scrivere PHP di quanto possiedi SQL, anche se li hai usati per "la stessa quantità di tempo".
Steven Evers,

@SnOrfus Hai ragione a scrivere più codice in PHP. MySQL è l'unico linguaggio di database relazionale che abbia mai usato. quando ho detto "SQL" intendevo solo quel tipo di linguaggio in generale.
JD Isaacks,

Fai cose utili. Esplora i diversi problemi che puoi incontrare nel mondo reale. In questo modo ti condurrà ad esplorare scenari più complessi della teoria dei libri di testo. Metti alla prova le cose nella console e vedi se riesci ad ottenere i risultati desiderati senza usare PHP. Ad esempio, la lezione di introduzione gratuita al database che Stanford ha lanciato ha alcuni interessanti esercizi relativi ai social network.
James P.

Molte persone odiano il PHP (per vari motivi, alcuni dei quali molto buoni), ma la sua documentazione è eccellente. Un motivo per cui i documenti PHP sono più facili da seguire rispetto ai documenti MySQL non è la natura delle lingue ma la natura della documentazione.
TRiG,

Risposte:


10

Usalo

Interiorizzare il funzionamento dei database relazionali è difficile per molte persone, ma è molto prezioso. Man mano che lavori di più con SQL, entrerà nel tuo cervello. Continua a spingerti.

Quando qualcosa sembra strano, indaga

In Chrome, ho impostato questo motore di ricerca, quindi tutto quello che devo fare è digitare "m [ricerca query]" per cercare i documenti (la ricerca di dev.mysql.com fa schifo): {google: baseURL} ricerca? {Google: RLZ} {google: acceptedSuggestion} {google: originalQueryForSuggestion} sourceid = cromo & ie = {} inputEncoding & q = sito: dev.mysql.com/doc/refman/5.1/en+%s

Se i documenti non hanno una risposta, fai clic su #mysql su freenode e vedi se qualcuno può fornire alcune informazioni.

Leggere!

Una volta capito come fanno i database relazionali, vorrai sapere qualcosa in più su cosa sta facendo MySQL con quelle magiche query che stai scrivendo. Consiglio vivamente MySQL ad alte prestazioni : ne vale davvero la pena.


1
Bene, la buona notizia è che ho già il libro che mi raccomandi, ma non ne ho ancora parlato molto. Grazie! +1 per istruzioni su come impostare la ricerca di Chrome.
JD Isaacks,

Ho il libro, non l'ho ancora letto.
Crosenblum,

@tehShrike come hai fatto su Chrome?
jaybny,

@jaybny fai clic con il pulsante destro del mouse sulla barra degli indirizzi e vai a "modifica motori di ricerca"
TehShrike

9

Innanzitutto, ottenere una conoscenza approfondita dei join. Non solo i join interni e di sinistra. Scopri cosa fa un cross join e un full outer join. Conoscere le circostanze che potrebbero indurti a scegliere un particolare tipo di join. Comprendere che non sono intercambiabili e che la query che utilizza un join sinistro può restituire risultati diversi rispetto a uno che utilizza un join interno. (Si potrebbe pensare che sarebbe ovvio, ma ho letto troppe domande in cui le persone nel descrivere il loro problema, in qualche modo provano casualmente diversi join.)

Quindi capire davvero gli aggregati e come funzionano. Mysql ti consentirà di evitare di fare bys di gruppo in modo standard. Ma avere la disciplina per definire completamente il gruppo dalla clausola correttamente. Ti aiuterà a capire cosa stai facendo e renderà la tua conoscenza più facilmente trasferibile ad altri database.

Scopri cosa fa l'istruzione case.

Quando si eseguono query complesse, imparare a lavorare a blocchi. Verifica ad ogni blocco che hai i risultati che ti aspetti. Ad esempio, supponiamo che sia necessario scrivere una query di report sugli ordini che sono stati restituiti negli ultimi 3 mesi e sul motivo del reso, nonché le informazioni di contatto per il cliente. Il primo passo è ottenere gli ordini restituiti negli ultimi tre mesi. Una volta che sai di avere quel solido, è possibile aggiungere le informazioni sul motivo della restituzione. Una volta ottenuto questo solido, è possibile aggiungere il cliente che lo ha restituito. Una volta che hai quel solido, aggiungere le informazioni di contatto per la persona. In ogni fase, controlla i risultati e vedi se hanno senso. In questo caso, probabilmente voglio finire con un solo record per ordine restituito. Se in qualsiasi fase intermedia, il numero di risultati aumenta o diminuisce, sai di avere un problema con la query. A volte nei blocchi predefiniti, vorrai vedere campi aggiuntivi solo per verificare se le informazioni sono corrette. Ho messo questi su una riga separata e li ho commentati mentre lavoro attraverso il passaggio successivo (rimuovendoli alla fine una volta che so di avere ragione) in modo che siano disponibili per vedere facilmente se l'aggiunta di un'altra ruga ha reso la query divertente. Non è possibile eseguire correttamente query complesse senza una comprensione approfondita di come dovrebbero essere i risultati. Pensare che appaia OK perché ha restituito alcuni risultati ti garantirà quasi di avere risultati sbagliati per buona parte del tempo. m destra) in modo che siano disponibili per essere rivisti facilmente se l'aggiunta di un'altra ruga ha reso la query divertente. Non è possibile eseguire correttamente query complesse senza una comprensione approfondita di come dovrebbero essere i risultati. Pensare che appaia OK perché ha restituito alcuni risultati ti garantirà quasi di avere risultati sbagliati per buona parte del tempo. m destra) in modo che siano disponibili per essere rivisti facilmente se l'aggiunta di un'altra ruga ha reso la query divertente. Non è possibile eseguire correttamente query complesse senza una comprensione approfondita di come dovrebbero essere i risultati. Pensare che appaia OK perché ha restituito alcuni risultati ti garantirà quasi di avere risultati sbagliati per buona parte del tempo.

Ecco un elenco di alcune cose di base che dovresti essere in grado di fare in SQL senza pensarci:

  1. Prima una selezione diretta senza join (e nessuna selezione *) ma con condizioni sulla selezione
  2. Dovresti sapere come combinare due o più tabelle e ottenere i record presenti in tutte le tabelle
  3. Dovresti sapere come combinare due o più tabelle e ottenere record che si trovano in tutte le tabelle ma restituiscono solo un record dalla tabella con il lato multiplo della relazione uno-a-molti
  4. Dovresti essere in grado di ottenere i record in una tabella ma non in una tabella associata
  5. Dovresti essere in grado di aggregare i dati per un rapporto
  6. Dovresti essere in grado di inserire un record in una tabella
  7. Dovresti essere in grado di aggiornare un record in una tabella
  8. Dovresti essere in grado di eliminare un record in una tabella
  9. Dovresti essere in grado di inserire un gruppo di record in una tabella senza cursore
  10. Dovresti essere in grado di aggiornare un gruppo di record in una tabella senza cursore
  11. Dovresti essere in grado di eliminare un gruppo di record in una tabella senza cursore
  12. Dovresti essere in grado di eseguire più azioni in una transazione e gestire il trapping degli errori
  13. Dovresti essere in grado di creare l'unione dei record e sapere quando utilizzare UNION vice UNION ALL
  14. Dovresti essere in grado di variare i dati per un campo in base ad alcuni criteri (usando CASE)

Quando ti senti a tuo agio con le tue conoscenze di base su SQL, scopri la struttura del tuo database. Riesco a scrivere query complesse contro i dbs molto complicati che supporto molto più velocemente di altre persone perché capisco la struttura e non devo pensare a dove sono archiviate le cose. Se capisci la struttura della tabella e le relazioni con le chiavi esterne e dove sono memorizzati i valori di ricerca e il significato delle colonne (non solo il loro nome ma quali dati sono conservati in esse), allora puoi essere esperto nella ricerca di quel database. La prima cosa che faccio in ogni nuovo lavoro è comprendere a fondo la struttura del db.


3

Secondo me per imparare l'SQL (e questo è davvero per quello che stai chiedendo, le specifiche di MySQL possono venire più tardi), dovresti rimuovere te stesso dal flusso di controllo della programmazione in stile PHP. Pensa specificamente al paradigma dei linguaggi dichiarativi:

SQL definisce COSA vuoi, non come farlo. Se puoi provare a rimuovere mentalmente il secondo, il primo seguirà in tempo. Riassumi questo livello nella tua mente e lascia che MySQL (o Oracle o altro) si preoccupi di come .

La logica dell'applicazione può verificarsi in codice SQL vs procedurale / OO in PHP. Ad esempio, quando si eseguono query nel database per qualcosa, è possibile unire in modo coerente una tabella utente e forse una tabella delle autorizzazioni per garantire i diritti corretti anziché effettuare più pre-query. L'inserimento può essere effettuato tramite una selezione simile ( insert into ... select ...) anziché valori nominati per garantire la convalida dei dati.

Ad ogni modo, consiglio vivamente di concentrarsi sulle primitive di Codd e comprendere la selezione, la proiezione, l'unione, l'unione e la differenza. Alla fine della giornata, i concetti sono semplici e puoi probabilmente realizzare l'80% di ciò che vuoi fare attraverso di essi. Il resto può seguire.


+1 per il secondo paragrafo ottimo consiglio e non ci ho mai pensato in questo modo!
JD Isaacks,

2

Il modo più veloce che ho trovato per "dominare" qualsiasi cosa era mettermi alla prova. Prendi una serie di dati e annota da otto a dieci cose diverse per le quali desideri eseguire una query. Un gruppo di studenti che potresti voler trovare l'età media di tutti i gruppi raggruppati in base alla media dei voti arrotondata al numero intero più vicino. Quindi scrivi le query per loro. Inizia con una tabella, quindi aggiungi altro. Pratica l'unione dei dati e le funzioni integrate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.