Come padroneggiare veramente MySQL?

13

Utilizzo mysql per la stessa quantità di tempo che utilizzo con PHP. Tuttavia mi sento 10 volte più fiducioso in PHP; o qualsiasi altro linguaggio di programmazione. Ma proprio non riesco a capire davvero davvero SQL. Voglio dire, posso selezionare, aggiornare, inserire, eliminare, partecipare, ecc. Ma quando si tratta di cose più complesse, sono perso. Come scrivere una dichiarazione di selezione più complicata, come utilizzare gli indici correttamente, quale motore usare, ecc.

Per qualche motivo trovo davvero difficile seguire i mysql doc, ma i php sono facili da seguire.

Sto iniziando a pensare che forse il mio cervello è appena cablato in un modo che rende la programmazione in grado di creare confusione. Non lo so. La maggior parte della gente pensa che Regex sia così confuso, ma per me ha un senso più scientifico di come costruire una dichiarazione di sql. Per favore non fraintendermi, non sto odiando SQL, mi piace davvero, voglio solo capirlo meglio.

Qual è il modo migliore / più veloce per padroneggiare veramente MySQL?

Quando dico "maestro", non intendo il guru tra i guru, intendo abbastanza intelligente per capire la maggior parte delle domande che chiedo a me stesso senza bisogno di aiuto.

    
posta JD Isaacks 24.09.2010 - 22:04
fonte

4 risposte

10

Usalo

Interiorizzare come funzionano i database relazionali è difficile per molte persone - ma è molto prezioso. Lavorando con SQL in più, si aprirà la strada verso il tuo cervello. Continua a spingerti.

Quando qualcosa sembra strano, cerca

In Chrome, ho impostato questo motore di ricerca, quindi tutto ciò che devo fare è digitare "m [query di ricerca]" 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, apri #mysql su freenode e vedi se qualcuno può fornire alcune informazioni.

Leggi!

Una volta capito come i database relazionali fanno le loro cose, vorrai sapere qualcosa di più su ciò che MySQL sta facendo con quelle query magiche che stai scrivendo. Consiglio vivamente MySQL ad alte prestazioni - vale davvero la pena.

    
risposta data 23.12.2010 - 05:03
fonte
9

Prima di tutto, ottieni una comprensione approfondita dei join. Non solo join interni e di sinistra. Sapere cosa fa un cross join e un full outer join. Conoscere le circostanze che potrebbero causare la scelta di un particolare tipo di join. Comprendere che non sono intercambiabili e che la query che utilizza un join di sinistra può restituire risultati diversi rispetto a quelli che utilizzano un join interno. (Si potrebbe pensare che sarebbe ovvio, ma ho letto troppe domande in cui le persone nel decifrare il loro problema, in qualche modo provano a caso diversi join.)

In seguito capisco davvero gli aggregati e come funzionano. Mysql ti permetterà di cavartela senza fare gruppo in modo standard. Ma avere la disciplina per definire correttamente il gruppo in base alla clausola. Ti aiuterà a capire cosa stai facendo e renderà la tua conoscenza più facilmente trasferibile ad altri database.

Scopri cosa fa la dichiarazione del caso.

Quando si eseguono query complesse, si impara a lavorare in blocchi. Verifica ad ogni blocco che hai i risultati che ti aspetti. Quindi, ad esempio, supponiamo di dover scrivere una query di reporting sugli ordini che sono stati restituiti negli ultimi 3 mesi e il 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, puoi aggiungere le informazioni sul motivo del reso. Una volta che hai questo solido, puoi aggiungere il cliente che lo ha restituito. Una volta che hai quel solido, aggiungi le informazioni di contatto per la persona. In ogni fase, controlla i risultati e verifica 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. Li metto su una riga separata e li commento mentre lavoro al passaggio successivo (rimuovendoli alla fine una volta che ho capito che ho ragione) in modo che siano disponibili a vedere di nuovo facilmente se aggiungendo un'altra ruga la query diventa divertente. Non è possibile eseguire query complesse correttamente senza una completa comprensione di come dovrebbero apparire i risultati. Pensando che sembra OK perché ha restituito alcuni risultati quasi garantirà che si hanno risultati errati una buona parte del tempo.

Ecco un elenco di alcune cose basilari che dovresti essere in grado di fare in SQL senza doverci pensare:

  1. Prima di tutto una selezione diretta senza join (e nessuna selezione *) ma con condizioni sulla selezione
  2. Dovresti sapere come combinare due o più tabelle e ottenere record che sono in tutte le tabelle
  3. Dovresti sapere come combinare due o più tabelle e ottenere record che sono in tutte le tabelle ma restituiscono solo un record dalla tabella con i molti aspetti 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 un cursore
  10. Dovresti essere in grado di aggiornare un gruppo di record in una tabella  senza un cursore
  11. Dovresti essere in grado di eliminare un gruppo di record in una tabella senza  un cursore
  12. Dovresti essere in grado di eseguire più azioni in una  transazione e gestisce il trapping degli errori
  13. Dovresti essere in grado di creare unione di record e sapere quando  usa UNION vice UNION ALL
  14. Dovresti essere in grado di variare i dati per un campo basato su alcuni  criteri (utilizzando CASE)

Una volta che ti senti a tuo agio con le tue conoscenze SQL di base, conosci la struttura del tuo database. Posso scrivere query complesse contro il dbs molto complicato che supporto molto più velocemente delle altre persone perché capisco la struttura e non devo pensare a dove sono archiviate le cose. Se si capisce la struttura della tabella e le relazioni con le chiavi esterne e dove sono memorizzati i valori di ricerca e cosa significano le colonne (non solo il loro nome ma quali dati sono contenuti in essi), si può essere esperti nell'interrogazione di quel database. La prima cosa che faccio in qualsiasi nuovo lavoro è comprendere a fondo la struttura db.

    
risposta data 06.09.2011 - 18:05
fonte
3

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

SQL definisce CHE COSA vuoi, non come farlo. Se puoi provare a rimuovere mentalmente quest'ultimo, il primo seguirà in tempo. Estrai questo livello nella tua mente e lascia che MySQL (o Oracle o qualsiasi altra cosa) si preoccupi di come .

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

In ogni caso, consiglio vivamente di concentrarsi sui primati codd e di comprendere la selezione, la proiezione, l'unione, l'unione e la differenza. Alla fine della giornata, i concetti sono semplici e probabilmente puoi realizzare l'80% di ciò che vuoi fare attraverso di loro. Il resto può seguire.

    
risposta data 23.12.2010 - 06:29
fonte
2

Il modo più veloce che ho trovato per "dominare" qualsiasi cosa era mettermi alla prova. Prendi una serie di dati e scrivi da otto a dieci cose diverse su cui vorresti richiedere. Un gruppo di studenti potresti voler trovare l'età media di tutti raggruppati per la media dei voti arrotondata al numero intero più vicino. Quindi scrivi le domande per loro. Inizia con una tabella, quindi aggiungi altro. Pratica dati uniti e funzioni incorporate.

    
risposta data 24.09.2010 - 22:48
fonte

Leggi altre domande sui tag