[RIPRODUZIONE DI BRANI MUSICALI] DOUG LLOYD: in nostri video su temi di sviluppo web, abbiamo menzionato il concetto di un database di un paio di volte, giusto? Quindi un database sei probabilmente familiarità con da dire utilizzando Microsoft Excel o Google Spreadsheets. E 'davvero solo un organizzato set di tabelle, righe e colonne. E un database in cui i nostri negozi sito informazioni importanti per il nostro sito per funzionare correttamente. Ancora una volta, un esempio molto comune qui è la memorizzazione di nomi utente e password in un database, in modo che quando un utente accede a nostro sito web, il database può essere interrogato da vedere se l'utente esiste nel database. E se lo sono, controllare che la loro password è corretta. E se la loro password è corretta, allora possiamo dare loro qualunque pagina che stanno chiedendo. Quindi probabilmente stai, di nuovo, familiare con questa idea da Excel o Google Fogli di calcolo. Abbiamo basi di dati, tabelle, righe e colonne. E questo è davvero sorta del set fondamentale di ripartizione gerarchica qui. Quindi, ecco un foglio di calcolo di Excel. E se hai mai aperto questa o un altro programma simile si sa che questi qui sono rows-- 1, 2, 3, 4, 5, 6, 7. Queste sono le colonne. Forse qui, anche se si può Non utilizzare questa funzione terribilmente much-- Io zoom dentro-- abbiamo questa idea di un foglio. Così forse questi fogli, se Alterno avanti e indietro, sono diverse tabelle che esiste nel mio database. E se continuiamo l'esempio tutto A proposito, il nome di questo database è Book 1. Forse ho Book 2 e 3 Libro. Così ogni file di Excel è un database, ogni foglio è una tabella, e all'interno di ciascuna tabella ho questa idea di righe e colonne. Allora, come faccio a lavorare con questa banca dati? Come faccio ad avere informazioni da esso? Beh, c'è un linguaggio chiamato SQL-- che di solito basta chiamare Sequel-- e si distingue per la Structured Query Language. Ed è un linguaggio di programmazione, ma si tratta di una programmazione abbastanza limitato lingua. Non è abbastanza come gli altri che abbiamo lavorato con. Ma lo scopo di questo linguaggio di programmazione è quello di interrogare un database, a chiedere informazioni di un database, trovare le informazioni in un database e così via. Inoltre, in CS50-- ed è un molto piattaforma comune, si chiama MySQL. Questo è quello che usiamo in corso. Si tratta di un open source piattaforma che stabilisce un cosiddetto database-- relazionale un database, in modo efficace. Non abbiamo bisogno di ottenere entrare troppo nel dettaglio su ciò che è un database relazionale. Ma il linguaggio SQL è molto abile nel lavoro con MySQL e altri simili stili di database relazionali. E molte installazioni di MySQL venire con qualcosa chiamato phpMyAdmin, che è un utente grafica interface-- un GUI-- che rende un po 'più facile da usare per eseguire query di database, perché i database non sono solo utilizzati da programmatori avanzati, giusto? A volte ci sono queste piccole imprese, e non possono permettersi di assumere un team di programmatori, ma hanno ancora bisogno di memorizzare informazioni in un database. Qualcosa come phpMyAdmin lo rende molto facile per qualcuno che non ha mai programmato prima di raccogliere e acquisire familiarità con il modo lavorare con un database. Il problema è, phpMyAdmin, mentre è uno strumento fantastico per l'apprendimento sui database, esso è manuale. Stai andando ad avere per accedere esso ed eseguire i comandi e il tipo le cose in mano. E come sappiamo dal nostro esempio su PHP programmazione web, doverlo fare manualmente cose sul nostro sito web, se vogliamo una dinamica, attiva reattiva sito web, forse non è l'approccio migliore. Vorremmo trovare un modo per forse automatizzare questo in qualche modo. E SQL ci permetterà di fare questo. Così quando stiamo andando a iniziare a lavorare con SQL, abbiamo prima bisogno di avere una database da lavorare. Creazione di un database è qualcosa che probabilmente farà in phpMyAdmin, perché avrete solo bisogno di farlo una volta, e la sintassi per farlo è molto più semplice. E 'molto più facile per farlo in un'interfaccia utente grafica di digitare fuori come un comando. Il comando può ottenere un po 'ingombrante. Allo stesso modo, la creazione di un tavolo può ottenere un bel po 'ingombrante pure. E così le cose come creazione di un database e la creazione di un tavolo, che si è probabilmente solo andando a fare once-- una volta al tavolo, una volta per database-- va bene a farlo in un'interfaccia grafica. Nel processo di la creazione di una tabella, si ti hanno anche specificare tutti i colonne che saranno in tale tabella. Che tipo di informazioni fare si desidera memorizzare nella tabella? Forse il nome di un utente e la data di nascita, password, numero di ID utente, e forse città e stato, giusto? E per tutte le volte che vogliamo aggiungere un utente al database, vogliamo ottenere tutti e sei di questi pezzi di informazioni. E lo facciamo con l'aggiunta di righe alla tabella. Quindi per prima cosa creiamo un database, viene creato un tavolo. Durante la creazione un tavolo, ci viene chiesto per specificare ogni colonna vorremmo in questa tabella. E poi, come si comincia a aggiungere informazioni nel database e interrogare il database di più generally-- non solo l'aggiunta, ma tutto il resto siamo fare-- saremo trattare con righe della tabella, che è uno informazioni dell'utente da l'intero set. Così ogni colonna SQL è in grado di in possesso dei dati di un particolare tipo di dati. Così abbiamo eliminato questo tipo di idea di tipi di dati in PHP, ma sono di nuovo qui in SQL. E ci sono un sacco di tipi di dati. Qui è solo 20 di loro, ma non è nemmeno tutti. Quindi abbiamo idee come INTs-- Integers-- probabilmente conosciamo che questa colonna può contenere numeri interi. E ci sono variazioni thereon-- SMALLINT, TINYINT, MEDIUMINT, BIGINT. Forse non sempre bisogno di quattro morsi. Forse abbiamo bisogno di otto byte, e quindi abbiamo possono utilizzare queste variazioni su interi per essere un po 'più efficiente dello spazio. Siamo in grado di fare numeri decimali, abbiamo può fare numeri in virgola mobile. Questi sono piuttosto simili. Vi sono alcune differenze, e se si farebbe da cercare il Tipo SQL di guida, può vedere ciò che il leggero differenze tra loro. Forse vogliamo memorizzare informazioni su data e ora. Forse stiamo tenendo traccia di quando l'utente si è unito il nostro sito web, e così forse vogliamo di avere una colonna che è una volta data o un timestamp che indica quando l'utente in realtà iscritto. Possiamo fare geometrie e stringhe lineari. Questo è in realtà piuttosto fresco. Potremmo tracciare un area geografica utilizzando GIS coordinate per tracciare fuori area. Quindi può effettivamente memorizzare questo tipo di informazioni in una colonna SQL. TEXT è solo blob gigante di testo, forse. ENUM sono piuttosto interessante. In realtà esistono in C. Noi non parlare di loro perché non sono terribilmente comunemente usato, almeno CS50. Ma è un tipo di dati enumerato, che è in grado di contenere valori limitati. Un buon esempio qui sarebbe per creare un enum dove i sette i valori possibili sono Domenica, Lunedi, Martedì, Mercoledì, Giovedi, Venerdì, Sabato, giusto? Che tipo di dati Giorno di Settimana non esiste, ma potremmo creare un tipo di dati enumerato come che tale colonna può sempre e solo contenere uno di questi sette valori possibili. Abbiamo enumerato tutte dei valori possibili. Poi abbiamo CHAR e VARCHAR, e ho colorare questi verde perché siamo in realtà andando a prendere un secondo per parlare della differenza tra queste due cose. Così CAR, a differenza di C dove CHAR era un singolo carattere, in SQL un CHAR si riferisce a una stringa di lunghezza fissa. E quando creiamo questo Colonna, in realtà può specificare la lunghezza della stringa. Quindi in questo esempio, potremmo dire CHAR (10). Ciò significa che ogni elemento di quella colonna sarà composto da 10 byte di informazione. Né più, né meno. Quindi, se proviamo e messo in una 15 bit o un elemento di 15 caratteri o il valore in questa colonna, stiamo solo ottenere i primi 10. Se mettiamo in due valore lungo di carattere, stiamo andando ad avere i due personaggi, e poi otto morsi nulli. Non saremo mai più efficiente di quello. Un VARCHAR è un po 'come la nostra idea di una stringa che siamo familiare con da C o da PHP. Si tratta di una stringa di lunghezza variabile. E quando si crea questa colonna, basta specificare le lunghezze massime possibili. Quindi, forse 99, o comunemente 255. Questa sarebbe la lunghezza massima. E così se fossimo memorizzando 15 stringa di caratteri, useremmo 15 byte, forse 16 byte per il terminatore null. Se fossimo la memorizzazione di un tre stringa di caratteri, useremmo tre o quattro byte. Ma non avremmo utilizzare l'intero 99. Allora perché dovremmo avere entrambi? Beh, se abbiamo bisogno di capire come lungo qualcosa è con un VARCHAR, dobbiamo tipo di iterate attraverso di esso, proprio come abbiamo fatto in C e capire dove si ferma. Mentre se sappiamo che tutto in questa colonna è di 10 byte, forse sappiamo che le informazioni, si può saltare 10 byte, 10 byte, 10 byte, 10 byte, e sempre trovare il inizio della stringa. Quindi possiamo avere un po ' sprecato spazio con un CHAR, ma forse c'è un commercio off di avere una migliore velocità nella navigazione del database. Ma forse vogliamo che il flessibilità di un VARCHAR invece di having-- Se il nostro CHAR era 255, ma la maggior parte dei nostri utenti sono stati solo inserendo tre o quattro byte valore di informazioni o tre o quattro caratteri vale la pena di informazioni. Ma alcuni utenti stavano utilizzando l'intero 255, forse VARCHAR sarebbe più appropriato lì. Si tratta di una sorta di compromesso, e generalmente, a fini di CS50, non c'è bisogno di preoccuparsi troppo se si utilizza un CHAR o un VARCHAR. Ma nel mondo reale, queste cose non importa perché tutte queste colonne occupano spazio fisico effettivo. E spazio fisico, in mondo reale, arriva ad un premio. Quindi un'altra considerazione quando si sta costruendo un tavolo è quello di scegliere una colonna di essere quello che chiama una chiave primaria. E una chiave primaria è una colonna dove ogni singolo valore è unico. E ciò significa che si può facilmente scegliere una singola riga solo guardando alla chiave primaria di quella riga. Così, per esempio, è in generale, con gli utenti, non voglio due utenti che avere lo stesso numero ID utente. E così forse avete un sacco di informazioni, e forse due utenti possono hanno la stessa nome-- avete John Smith e John Smith. Questo non è necessariamente un problema, perché ci sono più persone nel mondo di nome John Smith. Ma abbiamo solo il numero ID di un utente 10, un utente numero 11, 12, 13 ID. Non abbiamo due utenti con lo stesso numero, e così forse numeri ID utente sarebbe una buona chiave primaria. Non abbiamo doppioni, e possiamo ora univocamente identificare ogni singola riga solo cercando in quella colonna. La scelta di chiavi primarie possono effettivamente effettuare operazioni della tabella successive molto più facile perché è possibile sfruttare il fatto che alcune righe sarà essere unico, o una determinata colonna del database o una tabella sarà unico per raccogliere righe di particolari. Si può anche avere un primario comune chiave, che si possono trovare occasione da usare, che è solo una combinazione di due colonne è garantito per essere unico. Così forse ne hai uno colonna che è As e B, una colonna che è uno, due, e tre, ma avrete sempre e solo avere un singolo A1, un'unica A2, e così via e così via. Ma si potrebbe avere un B2, un C2, o un A1, A2, A3, A4. Così si potrebbe avere più come, multipla B, quelli più, più due a due, ma si può sempre e solo avere un singola A1, B2, C3, e così via. Così come ho detto, SQL è un linguaggio di programmazione, ma ha un vocabolario piuttosto limitato. E non è così estesa come C e PHP e altri linguaggi che si parla nel corso. E 'più prolisso un lingua di quello che siamo andando a parlare in questo video, perché in questo video stiamo andando a parlare quattro operazioni che può eseguire su un tavolo. Ci sono più di questo. Possiamo fare più di questo, ma per i nostri scopi, stiamo generalmente intenzione di utilizzare solo quattro inserto operations--, selezionare, aggiornare e cancellare. E si può probabilmente intuire intuitivamente ciò che tutti e quattro di queste cose fanno. Ma noi andremo in un po ' di dettaglio su ciascuno. Così, per fini di questa video, supponiamo abbiamo i seguenti due tabelle in un unico database. Abbiamo una tabella chiamata Users che ha quattro il numero ID columns--, nome utente, password e il nome completo. E abbiamo un secondo tabella nello stesso database chiamato Moms che memorizza solo le informazioni su un nome utente e di una madre. Così per tutti gli esempi in questo video, faremo stia usando questa banca dati e successivi aggiornamenti ad esso. Quindi diciamo che vogliamo aggiungere informazioni a un tavolo. Questo è ciò che fa l'operazione di inserimento. Nello spiegare tutti questi comandi, io vado per darvi uno scheletro generale per l'uso. Perché in fondo, le query stanno andando sguardo piuttosto simili, stiamo solo andando stia cambiando leggermente diverse informazioni a fare cose diverse con il tavolo. Così per INSERT, lo scheletro sembra un po 'come questo. Vogliamo inserire nel una particolare tabella. Poi abbiamo una parentesi aperta e un elenco di colonne che vogliamo mettere i valori in. Chiudere parentesi, il i seguenti valori, e quindi ancora una volta, si elencano i valori vogliamo mettere nella tabella. Così un esempio di questo sarebbe il seguente. Voglio inserire nella tabella agli utenti la seguente columns-- nome utente, password, e nome completo. Quindi una nuova riga in cui sto mettendo in queste tre colonne e siamo andando a mettere nei valori Newman, USMAIL, e Newman. Quindi, in questo caso, sono mettendo il newman minuscolo nella colonna nome utente, la password USMAIL, e il nome completo del capitale N Newman nella colonna fullname. Quindi, ecco cosa il database sembrava come prima. Ecco ciò che il tavolo utenti sul top sembrava come prima abbiamo fatto questo. Dopo eseguiamo questo interrogazione, otteniamo questo. Abbiamo aggiunto una nuova riga alla tabella. Ma notare questo una cosa che non ho specificato, ma in qualche modo ho un valore di per, che è il 12 proprio qui. Non ho detto che volevo mettere il numero ID in là. Ho voluto mettere il nome utente, Password, fullname. E l'ho fatto, va bene. Ma ho anche avuto questa 12. Perché ho questo 12? Beh, si scopre che quando si definisce una colonna che sta per essere il vostro chiave primaria, che è di solito, come ho detto, un numero di identificazione. Non è sempre necessariamente sta per essere un numero di identificazione, ma di solito è una buona idea essere una sorta di valore intero. Avete un'opzione in phpMyAdmin quando si sta creando il database o il vostro tavolo per impostare che colonna come auto di incremento. Che è davvero una buona idea quando si sta lavorando con una chiave primaria, perché si vuole ogni valore in quella colonna essere unico. E se si dimentica di specificare per più di una persona, ora avete una situazione in cui tale colonna non è più unico. Si hanno due spazi vuoti, in modo da non può più identificare univocamente un column-- o non è più univoco possibile identificare una riga basata su quella colonna. Ha perso tutta la sua valore come chiave primaria. E così apparentemente quello che ho fatto Qui non è stato configurato l'ID utente colonna di incremento automatico in modo che ogni volta che aggiungere informazioni alla tabella, mi darà automaticamente un valore per la chiave primaria. Così posso mai dimenticare di farlo perché il database lo farà per me. Ecco, questo è una specie di piacevole. Ed ecco perché otteniamo 12 in là, perché ho impostare la colonna fino a incremento automatico. Se ho aggiunto qualcun altro sarebbe 13, se ho aggiunto qualcun altro sarebbe 14, e così via. Quindi cerchiamo di fare solo un altro inserimento. Noi inseriremo nella tabella mamme, in particolare, il nome utente e la madre colonna, i valori Kramer e Babs Kramer. E così abbiamo avuto prima. Dopo eseguiamo che Query SQL, abbiamo questo. Abbiamo aggiunto Kramer e Babs Kramer alla tabella mamme. Ecco, questo è l'inserimento. SELECT è quello che usiamo per l'estrazione informazioni dalla tabella. Quindi questo è come si ottiene informazioni dal database. E così i comandi SELEZIONA stanno per essere molto frequentemente utilizzato nella programmazione. Il generale framework-- il scheletro generale simile a questa. Selezionare un set di colonne da una tabella, e quindi opzionalmente è possibile specificare un condition-- o quello che noi chiamiamo di solito un predicato, di solito è il termine che usiamo in SQL. Ma è fondamentalmente quello che particolari righe che si desidera ottenere. Se si vuole, invece di ottenere tutto, restringere il campo, è qui che l'hai fatto. E poi opzionalmente, si può anche ordinare per una particolare colonna. Così forse si desidera avere le cose in ordine alfabetico basata su una colonna o in ordine alfabetico basato su un altro. Ancora una volta, WHERE e ORDER BY sono opzionali. Ma probabilmente sarà useful-- particolarmente DOVE sarà utile a restringere in modo da non fare ottenere il vostro intero database schiena e deve elaborare esso, basta ottenere i pezzi di esso che si preoccupano. Così, per esempio, potrei voler selezionare Numero ID e il nome completo da parte degli utenti. Che cosa potrebbe questo aspetto? Quindi, ecco la mia tabella utenti. Voglio selezionare IDNUM e il nome completo da parte degli utenti. Che cosa farò a ottenere? Ho intenzione di ottenere questo. Io non restringere il campo, quindi sono ottenere il numero di ID per ogni riga e sto ottenendo il pieno nome da ogni riga. OK. Che cosa devo fare per selezionare la password da parte degli utenti WHERE-- così ora Sto aggiungendo una condizione, un predicate-- dove IDNUM è inferiore a 12. Quindi, ecco di nuovo il mio database, mio tavolo utenti la cima. Che cosa sono io che vado ottenere se voglio selezionare tali informazioni, la password, dove ID utente o IDNUM è inferiore a 12? Ho intenzione di ottenere questo informazioni indietro, giusto? Succede che IDNUM è 10, meno di 12, il numero ID 11 a meno di 12. Sto diventando la password per le righe. Questo è quello che ho chiesto. Che dire di questo? Che cosa devo fare per selezionare stella dal tavolo mamme dove username è uguale a Jerry? OK, selezionare stella è lo speciale sorta di wild card cosiddetti che usiamo per ottenere tutto. Così che stanno dicendo di selezione nomeutente madre virgola, che è capitato di essere l'unico due colonne di questa tabella, Posso solo selezionare stelle e ottenere tutto dove il nome utente è uguale a Jerry. Ed è quello che vorrei ottenere se ho fatto quella query particolare. Ora, database sono grandi perché consentono di organizzare le informazioni forse un po 'più efficiente di quanto ci potrebbe altrimenti. Non necessariamente per memorizzare ogni pezzo rilevante di informazioni su un utente nella stessa tabella. Abbiamo avuto due tavoli lì. Abbiamo bisogno di memorizzare il nome della madre di tutti, e forse non abbiamo la sicurezza sociale numero, abbiamo la loro data di nascita. Che non sempre bisogno essere nella stessa tabella. Finché possiamo definire le relazioni tra la tables-- ed è lì che relazionale termine banca dati viene tipo di in play-- fintanto che possiamo definire relazioni tra le tabelle, possiamo sorta di compartimentalizzare o cose astratte un modo, dove abbiamo solo il informazioni veramente importanti abbiamo a cuore nella tabella degli utenti. E poi abbiamo informazioni accessorie o informazioni supplementari in altre tabelle che siamo in grado di riconnettersi al principale tabella utenti in un modo particolare. Quindi qui abbiamo queste due tabelle, ma c'è una relazione tra di loro, destra? Sembra che il nome utente potrebbe essere qualcosa che esiste in comune tra queste due diverse tabelle. Che importa se ora abbiamo una situazione in cui vuole ottenere il nome completo di un utente da tavolo dell'utente, e la loro madre nome dal tavolo madre? Non abbiamo un modo per ottenere che così com'è, giusto? Non c'è alcun tavolo singolo che contiene sia il nome completo e il nome della madre. Non abbiamo questa opzione da quello che abbiamo visto finora. E così dobbiamo introdurre l'idea di un JOIN. E si unisce sono probabilmente il più complex-- è davvero più complessa operazione stiamo andando a parlare nel video. Sono un po 'complicato, ma una volta a ottenere il blocco di esso, non sono in realtà troppo male. E 'solo un caso particolare di una SELECT. Stiamo andando a selezionare un insieme di colonne di una tabella di giunzione in una seconda tabella su alcuni predicato. In questo caso, pensare come questo-- tavolo uno è un cerchio qui, tavolo due è un altro cerchio qui. E quella parte predicato nel mezzo, è un po 'come se si pensa su come un diagramma di Venn, cosa cosa hanno in comune? Vogliamo collegare queste due tabelle sulla base di ciò che hanno in comune e creare questa tabella ipotetica cioè la fusione dei due insieme. Quindi vedremo questo in un esempio e forse ti aiuto chiarirlo un po '. Così forse si desidera selezionare USER.FULLNAME e moms.mother da utenti che entrano nel tavolo mamme in ogni situazione dove la colonna nome utente è lo stesso tra di loro. E questo è un nuovo sintassi qui, questo utente. e mamme .. Se io sto facendo più tabelle insieme, posso specificare un tavolo. Posso distinguere in particolare su che sulla in fondo lì. Posso distinguere il nome utente colonna della tabella utenti dalla colonna username tavolo le mamme, che sono otherwise-- se abbiamo appena detto nome utente uguale nome utente, che in realtà non significa nulla. Vogliamo farlo in cui corrispondono. Così posso specificare la tabella e il nome della colonna in caso di una situazione dove sarebbe poco chiaro di che cosa sto parlando. Ecco, questo è tutto quello che sto facendo non è che io sono dicendo questa colonna da questa tabella, ed essendo molto esplicito. Quindi, di nuovo, sto selezionando la nome, cognome e il nome della madre dalla tabella degli utenti collegati tra loro con il tavolo mamme in ogni situazione dove condividono che column-- essi condividono tale nome utente nozione. Così qui sono le tabelle che avevamo prima. Questo è lo stato della nostra database come esiste adesso. Le informazioni che stiamo estraendo è questo per cominciare. Questa è la nuova tabella che andremo per creare combinando questi insieme. E accorgiamo che non stiamo mettendo in evidenza Fila di Newman nella tabella degli utenti, e non stiamo mettendo in evidenza Fila di Kramer nella tabella mamme perché nessuno dei due esiste in sia sets-- in entrambe le tabelle. L'unica informazione che è in comune tra loro è Jerry è in entrambe le tabelle e gcostanza è in entrambe le tabelle. E così quando facciamo la SQL JOIN, quello che abbiamo get-- e stiamo facendo realmente ottenere questo. E 'una sorta di una variabile temporanea. E 'come un ipotetico fusione tra le due tabelle. Abbiamo effettivamente ottenere qualcosa come questo, dove Abbiamo unito insieme i tavoli sulla informazioni che hanno in comune. Così notare che users.username e la colonna moms.username, è esattamente lo stesso. Quella era l'informazione che era costante da parte degli utenti tabella e la tabella mamme. E così li abbiamo fusi insieme. Abbiamo scartato Kramer perché lui non esisteva nella tabella utenti, e abbiamo scartato Newman, perché egli non esiste nella tabella mamme. Quindi questa è la fusione ipotetica utilizzando l'operazione JOIN di SELECT. E poi cercavamo il il nome completo dell'utente e la madre dell'utente, e quindi questo è l'informazione che otterremmo dalla query globale che abbiamo fatto con SELECT. Così ci siamo uniti ai tavoli insieme e abbiamo estratto quelle due colonne, e quindi questo è quello che vorremmo ottenere. Ma SQL si unisce ad una specie di complicato. Probabilmente non fare loro troppo, ma solo avere un'idea dello scheletro che si potrebbe usare per unire due tavoli insieme se è necessario. Gli ultimi due sono un po 'più semplice lo prometto. Quindi l'aggiornamento, possiamo usare UPDATE per modificare le informazioni in una tabella. Il formato generale è un po 'UPDATE tavolo, impostare alcuni colonna a un valore DOVE qualche predicato è soddisfatto. Così, per esempio, potremmo voler per aggiornare la tabella utenti e impostare la password di yada bla, dove il numero ID è 10. Quindi, in questo caso, siamo aggiornamento della tabella utenti. Il numero di identificazione è 10 per che prima fila là, e vogliamo aggiornare il password bla bla. Ed è quello che sarebbe accaduto. E 'piuttosto semplice, giusto? E 'solo una molto semplice modifica della tabella. DELETE è l'operazione che abbiamo usato per rimuovere le informazioni da una tabella. DELETE FROM tabella WHERE alcuni predicato è soddisfatto. Vogliamo eliminare dal tabella utenti, per esempio dove il nome utente è Newman. Probabilmente si può intuire quello che sta succedendo a succederà qui dopo eseguiamo che SQL interrogazione, Newman è andato dal tavolo. Così tutte queste operazioni, come ho detto, sono molto facili da fare in phpMyAdmin. Si tratta di una interfaccia molto facile da usare. Ma richiede sforzo manuale. Non vogliamo impiegare sforzo manuale. Vogliamo che i nostri programmi alle fare questo per noi, giusto? Così si potrebbe desiderare di fare questo livello di programmazione. Vogliamo integrare SQL e hanno qualcos'altro per fare questo per noi. Ma che cosa abbiamo visto che permette noi di fare qualcosa a livello di programmazione? Abbiamo visto PHP, giusto? Esso introduce alcuni dinamismo nei nostri programmi. E così per fortuna, SQL e PHP giocare molto bene insieme. C'è una funzione in PHP chiamato interrogazione, che può essere utilizzato. E si può passare come la parametro o l'argomento per interrogare una query SQL che si desidera eseguire. E PHP lo farà per conto vostro. Così, dopo aver collegato al database con PHP, ci sono due cose principali che fate questo. C'è qualcosa chiamato MySQLi e qualcosa chiamato DOP. Non entreremo in un enorme importo particolare lì. In CS50 usiamo DOP. Dopo aver collegato al database, è possono poi rendere le query del database passando le query come argomenti di funzioni PHP. E quando lo fate, si memorizza la set di risultati in un array associativo. E sappiamo come lavorare con array associativi in ​​PHP. Quindi potrei dire qualcosa come questo-- $ results-- questo è in PHP-- uguale query. E poi all'interno della funzione di query che l'argomento che sto passando per interrogare che assomiglia a SQL. E nel fatto che è SQL. Ecco la stringa di query che avrei come eseguire il mio database. E così in rosso, questo è PHP. Questo è SQL che sono integrando in PHP facendo è l'argomento per la funzione di query. Voglio selezionare FullName da gli utenti dove identificativo uguale 10. E poi magari dopo che ho fatto che, Potrei dire qualcosa di simile. Voglio stampare il messaggio Grazie per il login. E voglio che interpolate-- Voglio interpolare $ fullname risultati. E così è così che io lavoro con quella array associativo che sono tornato. $ fullname risultati sarebbero fondamentalmente finire stampare, grazie per l'accesso, Jerry Seinfeld. Quello era il nome completo dove IDNUM uguale 10. E così tutto quello che sto facendo è che io sono now-- ho memorizzato la mia domanda, i risultati della mia ricerca e si traduce in un array associativo, e fullname è il nome del colonna mi stavo per. Ecco, questo è il mio chiave nei risultati array associativo che voglio. Quindi grazie per il login, $ risultati, fullname stamperà fuori, si attacca proprio tra quelli ricci bretelle, Jerry Seinfeld. E ti piace stampare il messaggio Grazie per l'accesso Jerry Seinfeld. Ora, probabilmente non vogliamo duro cose di codice del genere, giusto? Si potrebbe desiderare di fare qualcosa di simile stampa f, dove possiamo sostituire e magari raccogliere informazioni diverse, o forse hanno il processo di query informazioni diverse. E così di query, la funzione di query ha questa nozione di genere di sostituzioni molto simile stampare f cento s e c per cento, è punti interrogativi. E possiamo usare domanda marchi molto analogamente stampare f per le variabili di sostituzione. Così forse il tuo utente connesso in precedenza, e si è salvato il loro numero ID utente in $ _SESSION di PHP super- globale nel ID chiave. Quindi forse dopo essere loggato, si imposta $ _SESSION ID è uguale a 10, estrapolando dall'esempio abbiamo appena visto un secondo fa. E così quando abbiamo effettivamente eseguiamo Questa query i risultati ora, sarebbe collegare 10, o qualsiasi altra cosa il valore ID $ _SESSION è. E così che ci permette di essere un po 'più dinamico. Non stiamo duramente codifica le cose in più. Stiamo salvando le informazioni da qualche parte e poi possiamo usare ancora una volta che le informazioni a sorta di generalizzare quello che vogliamo fare, e proprio plug-in e il cambiamento il comportamento della nostra pagina sulla base di ciò il numero ID dell'utente in realtà è dopo che sono loggato. E 'anche possibile, però, che impostare i vostri risultati potrebbe consistere di più righe. In questo caso, si ha una serie di arrays-- un array di array associativi. E solo bisogno di scorrere attraverso di essa. E sappiamo come eseguire un'iterazione attraverso un array in PHP, giusto? Così qui è probabilmente il più cosa complessa che abbiamo visto finora. In realtà integra tre lingue insieme. Qui, in rosso, questo è il linguaggio HTML. Sto a quanto pare questo è starting-- un frammento di codice HTML che ho. Sto iniziando un nuovo paragrafo che dice mamme di Seinfeld TV. E poi subito dopo Sto iniziando un tavolo. E poi, dopo che, io avere qualche PHP, giusto? Ho tutto questo codice PHP in là. A quanto pare ho intenzione fare una query. E per rendere la query, ho intenzione di essere madri che usano Seleziona da mamme. Quindi questo è getting-- questo è SQL. Così il blu è SQL. Il rosso che abbiamo visto un secondo fa era HTML. E il verde qui è PHP. Così sto facendo una query al mio database, sono selezionare tutte le madri nella tabella mamme. Non solo restringendo il campo a particolari fila, sto chiedendo per tutti loro. Poi controllo se il risultato è Non uguale uguale falso. Questo è solo il mio modo di verificare genere di se i risultati non è uguale a null, che avremmo visto c per esempio. Fondamentalmente questo è solo il controllo per assicurarsi sicuro che in realtà ha dati indietro. Perché io non voglio iniziare la stampa fuori dati se non ho avuto alcun dato. Poi per ogni risultati come risultato la sintassi foreach da PHP, tutto quello che sto facendo è la stampa di madri $ risultato. E così ho intenzione di ottenere un set di tutte le madri di each-- è un array associativo di arrays-- e sto stampando ognuno come una riga di una tabella. E questo è davvero carina più o meno tutto ciò che devi fare. So che c'è un po ' bit succedendo qui in quest'ultimo esempio con array di arrays-- array di array associativi. Ma in realtà si limita a bollire giù in SQL per fare una query, di solito la selezione dopo che abbiamo già inserire le informazioni nella tabella, e poi semplicemente estraendolo. E questo è vorremmo tirarlo in questo caso particolare. Vorremmo estrarre tutto dell'individuo madri dalla tabella mamme. Abbiamo ottenuto tutta una serie di loro, e noi voglia di scorrere e stampare ognuno. Quindi, di nuovo, questo è probabilmente l'esempio più complicato abbiamo visto perché stiamo miscelatrice a tre diversi linguaggi insieme, giusto? Ancora una volta, abbiamo HTML qui in rosso, mescolato con qualche SQL qui in blu, mescolato con un po 'di PHP in verde. Ma tutti questi giocare bene insieme, è solo una questione di sviluppo buone abitudini in modo che si può ottenere loro di lavorare insieme nel modo desiderato. E l'unico modo per fare davvero è quello di pratica, pratica, pratica. Sono Doug Lloyd, questo è CS50.