1 00:00:00,000 --> 00:00:02,405 >> [RIPRODUZIONE DI BRANI MUSICALI] 2 00:00:02,405 --> 00:00:10,439 3 00:00:10,439 --> 00:00:11,980 DAVID MALAN: Va bene, questo è CS50. 4 00:00:11,980 --> 00:00:13,740 Questa è la fine di otto settimane. 5 00:00:13,740 --> 00:00:15,887 E oggi, iniziamo a riempire alcuni pezzi 6 00:00:15,887 --> 00:00:17,720 quando si tratta di costruzione cose sul web. 7 00:00:17,720 --> 00:00:20,020 Quindi, ricordare che il Lunedi passiamo molto più tempo 8 00:00:20,020 --> 00:00:22,530 su PHP, che è questa dinamica linguaggio di programmazione che 9 00:00:22,530 --> 00:00:26,872 ci permette di uscita, tra l'altro cose, HTML e altri tali contenuti 10 00:00:26,872 --> 00:00:27,830 che ci vogliamo vedere. 11 00:00:27,830 --> 00:00:30,871 Ma noi non abbiamo davvero guardato come stiamo andando a memorizzare tutte le informazioni. 12 00:00:30,871 --> 00:00:34,477 Infatti, quasi tutte che il super interessanti siti web visitati oggi 13 00:00:34,477 --> 00:00:36,560 avere una sorta di banca dati sul back-end, giusto? 14 00:00:36,560 --> 00:00:39,540 Facebook salva sicuramente un sacco di dati su tutti noi e negozi Gmail tutto 15 00:00:39,540 --> 00:00:40,210 delle vostre email. 16 00:00:40,210 --> 00:00:44,150 >> E così, molti altri siti non sono solo contenuto statico che è informativo. 17 00:00:44,150 --> 00:00:45,640 In realtà dinamica in qualche modo. 18 00:00:45,640 --> 00:00:48,480 Si fornisce di ingresso, aggiorna le pagine per altre persone. 19 00:00:48,480 --> 00:00:50,620 Si riceve un messaggio, di inviare messaggi, e così via. 20 00:00:50,620 --> 00:00:54,250 Così oggi, guardiamo più da vicino le basi di un progetto 21 00:00:54,250 --> 00:00:57,330 che ti immerge in prossimo settimana, CS50 Finanza, che 22 00:00:57,330 --> 00:01:00,509 è in realtà sta per avere a costruire qualcosa che non in C, ma in PHP. 23 00:01:00,509 --> 00:01:02,550 Un sito che sembra un po 'di qualcosa di simile 24 00:01:02,550 --> 00:01:05,810 che permette di acquistare e vendere titoli che sono in realtà 25 00:01:05,810 --> 00:01:09,044 andare a attingere in tempo reale i dati di stock da Yahoo Finance. 26 00:01:09,044 --> 00:01:11,960 E così alla fine, avrete la illusione per te e per gli utenti 27 00:01:11,960 --> 00:01:14,550 che si sta effettivamente comprando e vendendo scorte e ottenere tempo quasi reale 28 00:01:14,550 --> 00:01:16,800 gli aggiornamenti, la gestione di un portafoglio, tutte 29 00:01:16,800 --> 00:01:20,310 sta per richiedere avere, in definitiva, un database di utenti. 30 00:01:20,310 --> 00:01:23,330 >> Così, con parole tue, soprattutto se non siete 31 00:01:23,330 --> 00:01:25,670 eccellente familiarità con il computer scienza o banche dati, cosa 32 00:01:25,670 --> 00:01:30,790 fai a sapere di un database per essere in questo momento, in termini non tecnici? 33 00:01:30,790 --> 00:01:32,300 Cos'è? 34 00:01:32,300 --> 00:01:36,882 Come descriveresti lo a un compagno di stanza o un amico? 35 00:01:36,882 --> 00:01:40,100 >> PUBBLICO: [incomprensibile] Informazioni [incomprensibile] 36 00:01:40,100 --> 00:01:44,430 >> DAVID MALAN: Quindi, un elenco di informazioni, o un store-- un elenco di informazioni 37 00:01:44,430 --> 00:01:47,160 che si potrebbe desiderare di memorizzare di qualcosa, come un utente. 38 00:01:47,160 --> 00:01:50,190 E che cosa gli utenti hanno essi associati? 39 00:01:50,190 --> 00:01:53,160 Se sei un utente su Facebook o Gmail, quali sono le caratteristiche 40 00:01:53,160 --> 00:01:54,940 che tutti noi utenti hanno? 41 00:01:54,940 --> 00:01:58,530 Come, cosa potrebbe essere alcune delle colonne nel foglio di calcolo a cui 42 00:01:58,530 --> 00:01:59,390 alluso l'ultima volta? 43 00:01:59,390 --> 00:02:01,140 Perché ancora una volta, è possibile pensare ad un database 44 00:02:01,140 --> 00:02:05,810 davvero come un file di Excel di fantasia o Google Foglio di calcolo o un file Numbers di Apple. 45 00:02:05,810 --> 00:02:08,280 >> Allora, cosa ne pensi di quando si pensa di un utente? 46 00:02:08,280 --> 00:02:11,290 Che cosa hanno? 47 00:02:11,290 --> 00:02:11,790 Che cos'è? 48 00:02:11,790 --> 00:02:12,470 >> PUBBLICO: Un nome. 49 00:02:12,470 --> 00:02:13,303 >> DAVID MALAN: Un nome. 50 00:02:13,303 --> 00:02:16,840 Quindi se il nome, come, David Malan sarebbe il nome di un utente. 51 00:02:16,840 --> 00:02:17,980 Che altro ha un utente? 52 00:02:17,980 --> 00:02:18,770 >> PUBBLICO: Un ID. 53 00:02:18,770 --> 00:02:19,561 >> DAVID MALAN: un ID. 54 00:02:19,561 --> 00:02:23,320 Così, come un numero di identificazione, come il vostro Harvard ID o il vostro ID Yale netto o simili. 55 00:02:23,320 --> 00:02:24,923 Che altro potrebbe avere un utente? 56 00:02:24,923 --> 00:02:25,890 >> PUBBLICO: password. 57 00:02:25,890 --> 00:02:29,240 >> DAVID MALAN: Una password, forse un indirizzo, forse un numero di telefono, forse 58 00:02:29,240 --> 00:02:30,050 un indirizzo email. 59 00:02:30,050 --> 00:02:32,640 Quindi, ci sono mazzi di campi e questo potrebbe sorta di spirale fuori controllo 60 00:02:32,640 --> 00:02:34,760 rapidamente non appena si inizia realizzando, oh, cerchiamo di conservare questo 61 00:02:34,760 --> 00:02:36,190 e cerchiamo di conservare questo e quello. 62 00:02:36,190 --> 00:02:37,657 >> Ma come possiamo effettivamente fare che? 63 00:02:37,657 --> 00:02:39,740 Così ancora una volta, il modello mentale avere per oggi come noi 64 00:02:39,740 --> 00:02:42,320 tuffarsi in effettivo SQL, Structured Query Language, 65 00:02:42,320 --> 00:02:44,186 è un database che assomiglia a questo. 66 00:02:44,186 --> 00:02:45,310 E 'solo righe e colonne. 67 00:02:45,310 --> 00:02:48,309 E si può immaginare di Google Spreadsheets o un qualsiasi numero di altri programmi. 68 00:02:48,309 --> 00:02:52,130 Ma ciò che è fondamentale su MySQL, che è il software di database che andremo ad utilizzare, 69 00:02:52,130 --> 00:02:54,920 la liberamente apertamente available-- usi Facebook 70 00:02:54,920 --> 00:02:59,200 e qualsiasi numero di altri websites-- database memorizza le cose relazionale. 71 00:02:59,200 --> 00:03:01,770 E un database relazionale solo uno che letteralmente significa 72 00:03:01,770 --> 00:03:03,672 memorizza i dati in righe e colonne. 73 00:03:03,672 --> 00:03:04,630 E 'così semplice. 74 00:03:04,630 --> 00:03:07,230 >> Quindi, anche qualcosa di simile Oracle potreste aver sentito parlare di genere 75 00:03:07,230 --> 00:03:08,271 è un database relazionale. 76 00:03:08,271 --> 00:03:10,929 E sotto il cofano, memorizza i dati in righe e colonne. 77 00:03:10,929 --> 00:03:12,970 E Oracle una carica sacco di soldi per farlo, 78 00:03:12,970 --> 00:03:15,550 che le tariffe di MySQL voi nulla per lo stesso. 79 00:03:15,550 --> 00:03:18,790 Quindi, SQL sta per dare noi almeno quattro operazioni. 80 00:03:18,790 --> 00:03:23,190 La capacità di selezionare i dati, come lettura dati, inserire, eliminare e aggiornare i dati. 81 00:03:23,190 --> 00:03:25,525 In altre parole, questi sono in realtà le quattro operazioni fondamentali 82 00:03:25,525 --> 00:03:28,950 che stanno andando per permetterci di cambiare roba in quelle righe e colonne. 83 00:03:28,950 --> 00:03:33,250 >> Lo strumento che utilizzeremo oggi soprattutto imparare SQL e di giocare con lui 84 00:03:33,250 --> 00:03:34,627 è di nuovo chiamato PHP MyAdmin. 85 00:03:34,627 --> 00:03:35,460 E 'strumento web based. 86 00:03:35,460 --> 00:03:38,200 Una coincidenza totale che è scritto in PHP. 87 00:03:38,200 --> 00:03:42,400 Ma sta andando a darci una grafica interfaccia utente in modo che possiamo realmente 88 00:03:42,400 --> 00:03:46,054 creare queste righe e colonne e poi parlare con loro tramite codice. 89 00:03:46,054 --> 00:03:47,970 Allora, ora cominciamo a quello che penso è francamente 90 00:03:47,970 --> 00:03:51,000 tipo di processo di divertimento costruire il back-end di siti web, 91 00:03:51,000 --> 00:03:54,580 le parti che gli utenti non lo fanno vedere, ma sicuramente fare preoccupano, 92 00:03:54,580 --> 00:03:56,170 perché questo è piuttosto di dati in corso. 93 00:03:56,170 --> 00:03:59,570 Quindi, simile a C e po 'meno come PHP, 94 00:03:59,570 --> 00:04:04,954 SQL o un database che supporta SQL, ha almeno questi tipi di dati 95 00:04:04,954 --> 00:04:05,870 e mazzi di altri. 96 00:04:05,870 --> 00:04:08,107 CHAR, VARCHAR, INT, BIGINT, Decimale e DATETIME. 97 00:04:08,107 --> 00:04:09,940 E c'è un intero mucchio di altre caratteristiche, 98 00:04:09,940 --> 00:04:11,940 ma facciamo questo per a titolo di esempio reale. 99 00:04:11,940 --> 00:04:16,450 >> Ho intenzione di andare in CS50 IDE dove, in anticipo, ho collegato 100 00:04:16,450 --> 00:04:19,372 e ho visitato anche un URL per questo strumento chiamato PHP MyAdmin. 101 00:04:19,372 --> 00:04:22,580 E nel problema impostare sette, vi racconteremo esattamente come arrivare a questa interfaccia 102 00:04:22,580 --> 00:04:23,200 anche. 103 00:04:23,200 --> 00:04:25,640 In alto a sinistra, notarlo dice lezione. 104 00:04:25,640 --> 00:04:27,610 E questo significa solo che in anticipo, ho creato 105 00:04:27,610 --> 00:04:31,360 un database chiamato lezione vuoto che non ha ancora i fogli di calcolo in esso. 106 00:04:31,360 --> 00:04:32,600 Non ci sono righe e colonne. 107 00:04:32,600 --> 00:04:34,308 Poiché il primo cosa stiamo andando a fare 108 00:04:34,308 --> 00:04:37,100 è cominciare a creare una tabella che sta per archiviare i nostri utenti. 109 00:04:37,100 --> 00:04:39,100 >> Così, letteralmente sopra qui a destra, io sono 110 00:04:39,100 --> 00:04:42,070 andando a dire il database Voglio un tavolo chiamato utenti. 111 00:04:42,070 --> 00:04:44,845 Quindi, questo è come il file che ho desidera memorizzare tutti i miei dati. 112 00:04:44,845 --> 00:04:45,720 E quante colonne? 113 00:04:45,720 --> 00:04:47,740 Beh, teniamolo semplice per ora. 114 00:04:47,740 --> 00:04:51,855 Voglio solo archiviare come un utente e un nome di un utente. 115 00:04:51,855 --> 00:04:53,020 Inizieremo piccolo. 116 00:04:53,020 --> 00:04:55,370 Quindi, voglio totale due colonne. 117 00:04:55,370 --> 00:04:57,360 E ho intenzione di andare avanti e fare clic su Vai. 118 00:04:57,360 --> 00:04:59,210 E poi, per queste colonne, quello che sto 119 00:04:59,210 --> 00:05:04,576 per fare-- se questo Internet cooperates-- tutto bene, 120 00:05:04,576 --> 00:05:05,950 quindi stiamo andando a cercare di nuovo. 121 00:05:05,950 --> 00:05:09,180 Ho intenzione di creare una tabella chiamata Gli utenti con due colonne, fare clic su Vai, OK. 122 00:05:09,180 --> 00:05:10,520 Ora l'abbiamo veramente veloce. 123 00:05:10,520 --> 00:05:12,065 Grazie, molto ben fatto. 124 00:05:12,065 --> 00:05:14,440 Va bene, allora ciò che vogliamo queste colonne di essere chiamato? 125 00:05:14,440 --> 00:05:16,080 >> Quindi, si sta andando ad essere chiamato Nome utente. 126 00:05:16,080 --> 00:05:19,480 Quindi, tutto quello che vedo qui-- e l'interfaccia diventa francamente un po 'brutto alla fine, 127 00:05:19,480 --> 00:05:21,270 una volta che si inizia a digitare in tutti questi dati. 128 00:05:21,270 --> 00:05:27,450 Ma ciò che è bello è che una sorta di paradossalmente, sto creando colonne, 129 00:05:27,450 --> 00:05:29,977 ma lo strumento ha scioccamente li a schiera e 130 00:05:29,977 --> 00:05:31,560 in modo che io possa configurare queste colonne. 131 00:05:31,560 --> 00:05:33,550 Quindi, ci sono due spazi vuoti lì sotto Nome. 132 00:05:33,550 --> 00:05:36,180 E uno di questi campi I vogliono chiamato Nome utente, 133 00:05:36,180 --> 00:05:38,000 e l'altro campo voglio chiamare Nome. 134 00:05:38,000 --> 00:05:40,340 >> E ora devo scegliere tipi di dati per queste cose. 135 00:05:40,340 --> 00:05:42,330 Così, mentre in Excel e Google Spreadsheets, 136 00:05:42,330 --> 00:05:45,531 se si desidera una colonna, è letteralmente basta digitare nome o nome utente, premere Invio. 137 00:05:45,531 --> 00:05:48,030 Forse si rendono grassetto solo per chiarezza, ma questo è tutto. 138 00:05:48,030 --> 00:05:50,140 Non si specifica il tipi di colonne. 139 00:05:50,140 --> 00:05:53,790 Ora in Google Spreadsheets o Excel, si potrebbe indicare come i dati vengono resi. 140 00:05:53,790 --> 00:05:58,120 Si potrebbe andare al menu Formato, e tu possibile specificare mostrargli il segno del dollaro come, 141 00:05:58,120 --> 00:05:59,900 mostrare questo come un valore in virgola mobile. 142 00:05:59,900 --> 00:06:01,990 >> Quindi, è simile nello spirito a che quello che stiamo per fare, 143 00:06:01,990 --> 00:06:04,740 ma questo è in realtà sta per forzare i dati da un certo tipo. 144 00:06:04,740 --> 00:06:07,750 Ora, anche se un attimo fa ho Detto questo ci sono solo alcuni tipi di dati, 145 00:06:07,750 --> 00:06:11,120 c'è in realtà un bel po ', e sono 146 00:06:11,120 --> 00:06:12,910 in vari gradi di specificità. 147 00:06:12,910 --> 00:06:14,970 E per inciso, è può anche fare cose di fantasia 148 00:06:14,970 --> 00:06:17,520 come geometrie di stoccaggio all'interno di un database. 149 00:06:17,520 --> 00:06:19,250 È possibile memorizzare le cose come coordinate GPS 150 00:06:19,250 --> 00:06:22,420 ed effettivamente trovare, matematicamente, punti che sono vicini agli altri. 151 00:06:22,420 --> 00:06:24,128 Ma stiamo andando a mantenere questo super semplice 152 00:06:24,128 --> 00:06:26,800 e andare fino a qui, tutto i cosiddetti tipi di stringhe. 153 00:06:26,800 --> 00:06:29,240 >> Quindi, ecco una lista di un sacco di opzioni. 154 00:06:29,240 --> 00:06:32,740 CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. 155 00:06:32,740 --> 00:06:34,110 Ed è una specie di travolgente. 156 00:06:34,110 --> 00:06:37,610 E purtroppo, un po ' paradossalmente a C, 157 00:06:37,610 --> 00:06:40,120 un CHAR non è davvero un CHAR. 158 00:06:40,120 --> 00:06:44,170 Se si specifica in un database che il tipo di dati è CHAR, 159 00:06:44,170 --> 00:06:47,390 ciò significa che sì, è un CHAR, ma è uno o più CHAR. 160 00:06:47,390 --> 00:06:49,630 E si deve specificare quanti CHAR si desidera. 161 00:06:49,630 --> 00:06:51,636 Allora, che cosa è un tipico di lunghezza per un nome utente? 162 00:06:51,636 --> 00:06:52,760 C'è un limite di solito? 163 00:06:52,760 --> 00:06:53,920 >> PUBBLICO: [incomprensibile] 164 00:06:53,920 --> 00:06:55,050 >> DAVID MALAN: 16 forse? 165 00:06:55,050 --> 00:06:55,990 Qualcosa del genere. 166 00:06:55,990 --> 00:06:57,948 Sai, in giorno, è usato per essere otto. 167 00:06:57,948 --> 00:07:00,289 A volte è 16 volte è ancora di più. 168 00:07:00,289 --> 00:07:02,080 E così, questo non lo fa dire dammi un CHAR. 169 00:07:02,080 --> 00:07:04,730 Questo significa che devo specificare la lunghezza del campo, 170 00:07:04,730 --> 00:07:07,402 e ora potrei dire qualcosa come 16. 171 00:07:07,402 --> 00:07:08,610 E c'è un compromesso qui. 172 00:07:08,610 --> 00:07:11,360 Quindi, vedremo in un momento questo significa che uno, 173 00:07:11,360 --> 00:07:14,620 ogni nome utente deve essere di 16 caratteri. 174 00:07:14,620 --> 00:07:18,720 Ma aspettate un minuto, M-A-L-A-N. Se questo è il mio nome utente e sto usando solo cinque, 175 00:07:18,720 --> 00:07:23,070 cosa vorresti proporre che il database da fare per gli altri 11 personaggi che 176 00:07:23,070 --> 00:07:24,471 Ho riservato lo spazio per? 177 00:07:24,471 --> 00:07:25,220 Cosa faresti? 178 00:07:25,220 --> 00:07:26,480 >> PUBBLICO: [incomprensibile] 179 00:07:26,480 --> 00:07:27,160 >> DAVID MALAN: Sì, solo tutti loro nulla fare. 180 00:07:27,160 --> 00:07:28,290 Renderli spazi. 181 00:07:28,290 --> 00:07:30,816 Ma probabilmente nullo, così un sacco di zeri backslash. 182 00:07:30,816 --> 00:07:33,190 Così, da un lato, abbiamo ora fatto in modo che il mio nome utente 183 00:07:33,190 --> 00:07:34,780 può essere non più di 16 caratteri. 184 00:07:34,780 --> 00:07:37,590 E il rovescio della medaglia di ciò è che se avessi davvero un nome lungo 185 00:07:37,590 --> 00:07:39,940 o voluto un tempo molto lungo nomeutente come alcuni di voi 186 00:07:39,940 --> 00:07:44,840 ragazzi potrebbero avere in quel college o a Yale.edu, non si può avere uno. 187 00:07:44,840 --> 00:07:47,177 E così in effetti, se hai mai registrato per un sito web 188 00:07:47,177 --> 00:07:49,385 e si ottiene urlato a dire la password è troppo lungo 189 00:07:49,385 --> 00:07:52,710 o il tuo nome utente è troppo lungo, è semplicemente perché un programmatore, quando 190 00:07:52,710 --> 00:07:55,500 configurare sua banca dati, ha deciso che questo campo sarà 191 00:07:55,500 --> 00:07:57,150 non più di questa lunghezza essere. 192 00:07:57,150 --> 00:08:00,580 >> Va bene, e allora se si procede a un nome? 193 00:08:00,580 --> 00:08:05,240 Quanto tempo dovrebbe un tipico nome di umano essere? 194 00:08:05,240 --> 00:08:07,492 Come molti personaggi, 16? 195 00:08:07,492 --> 00:08:09,450 Sto indovinando potremmo trovare qualcuno in questa stanza 196 00:08:09,450 --> 00:08:13,210 dove per il suo primo più ultimo nome è più lungo di 16 caratteri. 197 00:08:13,210 --> 00:08:14,850 Allora, cosa c'è di meglio di questo, il 17? 198 00:08:14,850 --> 00:08:17,040 18? 199 00:08:17,040 --> 00:08:18,830 25? 200 00:08:18,830 --> 00:08:20,350 Maggiore? 201 00:08:20,350 --> 00:08:20,980 30? 202 00:08:20,980 --> 00:08:21,855 >> PUBBLICO: [incomprensibile] 203 00:08:21,855 --> 00:08:23,700 DAVID MALAN: 5.000, oh mio Dio. 204 00:08:23,700 --> 00:08:26,309 Quindi, questo è probabilmente un discreto limite superiore, diciamo. 205 00:08:26,309 --> 00:08:28,350 E qui noi abbiamo tipo di per effettuare una chiamata in giudizio. 206 00:08:28,350 --> 00:08:30,400 Come, non c'è una risposta proprio qui. 207 00:08:30,400 --> 00:08:32,740 Infinito non è del tutto possibile, perché siamo alla fine 208 00:08:32,740 --> 00:08:34,781 andando a have-- siamo andando a esaurire la memoria. 209 00:08:34,781 --> 00:08:36,909 Quindi, dobbiamo fare un chiamata in giudizio a un certo punto. 210 00:08:36,909 --> 00:08:41,010 >> Molto comune sarebbe, per esempio, a use-- e fammi specificare CHAR qui 211 00:08:41,010 --> 00:08:46,050 come before-- 255 è stato letteralmente limite superiore di questo software di database 212 00:08:46,050 --> 00:08:46,700 anni fa. 213 00:08:46,700 --> 00:08:48,575 E così, un sacco di esseri umani sarebbe solo dire bene. 214 00:08:48,575 --> 00:08:49,420 255 è il limite. 215 00:08:49,420 --> 00:08:50,620 Diciamo basta usare il massimo. 216 00:08:50,620 --> 00:08:51,870 E questo è abbastanza ridicolo. 217 00:08:51,870 --> 00:08:55,060 Come, se si sta digitando di qualcuno nome per oltre 200 personaggi, 218 00:08:55,060 --> 00:08:56,140 che un po 'ridicolo. 219 00:08:56,140 --> 00:08:59,624 >> Ma, ricordate che non è ASCII l'unico sistema per caratteri. 220 00:08:59,624 --> 00:09:01,540 E così, soprattutto in un molte lingue asiatiche 221 00:09:01,540 --> 00:09:04,248 dove c'è personaggi non possiamo esprimere alle tastiere come il mio Stati Uniti 222 00:09:04,248 --> 00:09:08,209 tastiera, alcuni personaggi in realtà prendere 16 bit invece di otto bit. 223 00:09:08,209 --> 00:09:10,250 E così, questo in realtà non è poi così irragionevole 224 00:09:10,250 --> 00:09:12,250 che abbiamo bisogno di più spazio se vogliamo andare bene 225 00:09:12,250 --> 00:09:16,252 caratteri più grandi rispetto alla molto Uniti quelli centric abbiamo avuto la tendenza a discutere. 226 00:09:16,252 --> 00:09:17,460 Quindi, abbiamo bisogno di qualche limite superiore. 227 00:09:17,460 --> 00:09:21,470 Non so quale sia la migliore è, ma 255 è generalmente un comune. 228 00:09:21,470 --> 00:09:22,700 25 si sente basso. 229 00:09:22,700 --> 00:09:23,857 16, 32 si sentono basso. 230 00:09:23,857 --> 00:09:25,690 Vorrei peccare per eccesso di qualcosa di più alto. 231 00:09:25,690 --> 00:09:27,330 Ma c'è un compromesso, come sempre. 232 00:09:27,330 --> 00:09:31,902 Qual è la, forse, ovvio trade off di riservare 255 CHAR 233 00:09:31,902 --> 00:09:33,360 per il nome di tutti nel mio database? 234 00:09:33,360 --> 00:09:34,230 >> PUBBLICO: [incomprensibile] 235 00:09:34,230 --> 00:09:34,510 >> DAVID MALAN: Che cos'è? 236 00:09:34,510 --> 00:09:35,430 >> PUBBLICO: [incomprensibile] 237 00:09:35,430 --> 00:09:37,138 >> DAVID MALAN: E 'un sacco di memoria, giusto? 238 00:09:37,138 --> 00:09:42,280 M-A-L-A-N. Ho appena sprecato 250 personaggi solo per memorizzare il mio nome 239 00:09:42,280 --> 00:09:46,000 in difesa, in caso qualcuno nella classe ha una molto lungo nome. 240 00:09:46,000 --> 00:09:47,940 Che sembra un compromesso eccessivo. 241 00:09:47,940 --> 00:09:52,040 >> Così, si scopre che SQL, questo linguaggio di database, 242 00:09:52,040 --> 00:09:55,480 in realtà sostiene qualcosa chiamati VARCHAR o char. 243 00:09:55,480 --> 00:09:59,390 E questo è una specie di piacevole in quanto tale consente di specificare non un fisso 244 00:09:59,390 --> 00:10:01,900 larghezza, ma piuttosto, una larghezza variabile. 245 00:10:01,900 --> 00:10:05,060 E più precisamente, un larghezza massima del campo. 246 00:10:05,060 --> 00:10:08,901 Quindi, questo significa che un nome può essere non più di 250 caratteri, 247 00:10:08,901 --> 00:10:10,150 ma può certamente meno. 248 00:10:10,150 --> 00:10:11,733 E il database sta per essere intelligente. 249 00:10:11,733 --> 00:10:14,860 Se si mette in M-A-L-A-N, è solo andando ad utilizzare cinque, 250 00:10:14,860 --> 00:10:18,120 forse sei byte per come un carattere null finale, 251 00:10:18,120 --> 00:10:23,330 e non spendere un ulteriore 249 o 250 byte inutilmente. 252 00:10:23,330 --> 00:10:27,380 >> Quindi, questo sembra come dovrei hanno iniziato con questa storia. 253 00:10:27,380 --> 00:10:29,140 Ma c'è sempre un compromesso. 254 00:10:29,140 --> 00:10:33,024 Così, da un lato, un nome utente ho specificata da hardcoded a 16, 255 00:10:33,024 --> 00:10:34,940 e forse che non era la chiamata giusta, forse 256 00:10:34,940 --> 00:10:40,040 è, ma perché non usare VARCHAR per tutto? 257 00:10:40,040 --> 00:10:42,020 >> Esiste per un motivo. 258 00:10:42,020 --> 00:10:46,200 Perché non usare VARCHAR per tutti i campi la cui lunghezza non si conosce in anticipo 259 00:10:46,200 --> 00:10:48,180 se sembra essere una grande cosa, giusto? 260 00:10:48,180 --> 00:10:50,482 Usare solo tanto spazio quanto è necessario fino a questo limite? 261 00:10:50,482 --> 00:10:51,271 >> PUBBLICO: lento. 262 00:10:51,271 --> 00:10:52,146 DAVID MALAN: Speller? 263 00:10:52,146 --> 00:10:53,120 PUBBLICO: Lo rende più lento? 264 00:10:53,120 --> 00:10:53,970 DAVID MALAN: Oh, è più lento. 265 00:10:53,970 --> 00:10:55,720 Bene, questo è quasi sempre la risposta, francamente. 266 00:10:55,720 --> 00:10:56,520 Come, qual è il compromesso? 267 00:10:56,520 --> 00:10:58,570 E 'uno dei due costa più spazio o costa di più tempo. 268 00:10:58,570 --> 00:11:00,111 Quindi, in questo caso, potrebbe essere più lento. 269 00:11:00,111 --> 00:11:00,920 Come mai? 270 00:11:00,920 --> 00:11:05,830 >> PUBBLICO: [incomprensibile] determinando [incomprensibile]. 271 00:11:05,830 --> 00:11:06,640 >> DAVID MALAN: Good. 272 00:11:06,640 --> 00:11:09,670 Quindi, si potrebbe ricordare anche da PSED5, giocare con il vostro approccio 273 00:11:09,670 --> 00:11:12,750 al dizionario, se si deve allocare dinamicamente la memoria o mantenere 274 00:11:12,750 --> 00:11:14,630 crescere un buffer, che può effettivamente essere lento. 275 00:11:14,630 --> 00:11:16,963 Se devi chiamare malloc sotto il cofano e forse 276 00:11:16,963 --> 00:11:19,610 questo è ciò che MySQL sta facendo, in modo da sicuramente che potrebbe essere il caso. 277 00:11:19,610 --> 00:11:22,430 E se pensate che modo torna a PSet-- o addirittura 278 00:11:22,430 --> 00:11:26,340 settimane, due cose quando abbiamo fatto come ricerca binaria o anche ricerca lineare, 279 00:11:26,340 --> 00:11:30,690 una delle cose belle di ogni parola in un database o ogni parola in una colonna 280 00:11:30,690 --> 00:11:33,690 essendo esattamente la stessa lunghezza, anche se un intero gruppo di quei personaggi 281 00:11:33,690 --> 00:11:37,390 sono vuote, è che è possibile utilizzare accesso casuale i vostri dati, giusto? 282 00:11:37,390 --> 00:11:40,310 >> Se si sa che ogni parola è 16 caratteri di distanza, 283 00:11:40,310 --> 00:11:46,460 è possibile utilizzare l'aritmetica dei puntatori, in modo da parlare, e andare a noi 16, 32, 48, 64, 284 00:11:46,460 --> 00:11:49,589 e si può saltare solo utilizzando il aritmetica 285 00:11:49,589 --> 00:11:51,130 a qualsiasi delle parole nel database. 286 00:11:51,130 --> 00:11:54,280 Mentre se si tratta di un VARCHAR, cosa invece deve fare? 287 00:11:54,280 --> 00:11:55,960 >> [Telefono squilla] 288 00:11:55,960 --> 00:11:58,680 >> Se si tratta di un VARCHAR, si non è possibile utilizzare l'accesso casuale. 289 00:11:58,680 --> 00:12:01,341 Che cosa si deve cercare o fare? 290 00:12:01,341 --> 00:12:01,840 Sì? 291 00:12:01,840 --> 00:12:03,240 >> PUBBLICO: [incomprensibile] 292 00:12:03,240 --> 00:12:04,310 >> DAVID MALAN: Guarda attraverso la traccia whole-- 293 00:12:04,310 --> 00:12:06,518 tutta la lista ricerca di ciò che, più probabile? 294 00:12:06,518 --> 00:12:08,356 Che tipo di valore speciale? 295 00:12:08,356 --> 00:12:09,230 PUBBLICO: [incomprensibile] 296 00:12:09,230 --> 00:12:11,105 DAVID MALAN: Guardando per i terminatori Null 297 00:12:11,105 --> 00:12:13,637 che delimitano la separazione delle parole. 298 00:12:13,637 --> 00:12:15,720 Quindi, di nuovo, un compromesso, e non c'è una risposta giusta. 299 00:12:15,720 --> 00:12:18,380 Ma è qui, soprattutto quando gli utenti arrivare a essere molti 300 00:12:18,380 --> 00:12:21,700 e il carico sui server, il numero di chi lo utilizza ottiene alto, 301 00:12:21,700 --> 00:12:23,650 queste sono in realtà scelte non banali. 302 00:12:23,650 --> 00:12:26,640 Quindi, possiamo lasciare questi come questo, ma cerchiamo di scorrere verso il basso sulla destra 303 00:12:26,640 --> 00:12:27,332 Qui. 304 00:12:27,332 --> 00:12:30,290 Ora, ci sono un paio di colonne dove dobbiamo fare una chiamata in giudizio. 305 00:12:30,290 --> 00:12:35,170 Ha senso per consentire a un utente di il nome, il nome utente di un utente o di un utente del 306 00:12:35,170 --> 00:12:36,370 nome, per essere nullo? 307 00:12:36,370 --> 00:12:37,610 Cioè, solo vuoto. 308 00:12:37,610 --> 00:12:40,360 Si sente un po 'assurdo, quindi sono Non andando a controllare quelle scatole. 309 00:12:40,360 --> 00:12:42,670 Ma risulta in un database, è possibile dire, 310 00:12:42,670 --> 00:12:44,620 qualcuno può opzionalmente avere questo valore. 311 00:12:44,620 --> 00:12:47,180 Questa colonna non ha di essere effettivamente lì. 312 00:12:47,180 --> 00:12:48,570 >> Ora, c'è questo menu a discesa. 313 00:12:48,570 --> 00:12:50,810 E accorgo io sono ancora in prima fila là, 314 00:12:50,810 --> 00:12:52,520 così io sto parlando di nome utente ora. 315 00:12:52,520 --> 00:12:56,290 E si scopre che un database, a differenza di un semplice foglio di calcolo semplice, 316 00:12:56,290 --> 00:12:58,520 ha caratteristiche potenti chiamati indici. 317 00:12:58,520 --> 00:13:02,600 E un indice è un modo di raccontare la database in anticipo che l'umana 318 00:13:02,600 --> 00:13:03,900 Sono più intelligente di te. 319 00:13:03,900 --> 00:13:10,430 >> Io so che tipo di query, selezionare o inserire o cancellare o aggiornare, 320 00:13:10,430 --> 00:13:13,182 che il mio codice sta per finire per fare su questo database. 321 00:13:13,182 --> 00:13:14,390 Voglio leggere un sacco di dati. 322 00:13:14,390 --> 00:13:15,681 Voglio inserire un sacco di dati. 323 00:13:15,681 --> 00:13:17,530 Voglio sempre eliminare un sacco di dati. 324 00:13:17,530 --> 00:13:21,520 Se so che ho intenzione di essere l'accesso a un campo, come nome utente molto, 325 00:13:21,520 --> 00:13:24,770 Posso dire preventivamente il base di dati, ne so più di te, 326 00:13:24,770 --> 00:13:29,220 e voglio decreto che si dovrebbe indice di questo campo. 327 00:13:29,220 --> 00:13:33,200 Qualora l'indicizzazione di un campo o una colonna significa che il database in anticipo 328 00:13:33,200 --> 00:13:37,040 dovrebbe prendere in prestito alcune idee da, come, Settimana quattro e cinque e sei da CS50 329 00:13:37,040 --> 00:13:39,240 ed effettivamente costruire qualcosa di simile a una ricerca binaria 330 00:13:39,240 --> 00:13:41,560 albero o qualcosa generalmente chiamato un albero B 331 00:13:41,560 --> 00:13:43,410 che si sarebbe imparare in una classe come CS124 332 00:13:43,410 --> 00:13:46,710 a Harvard, una classe di algoritmi, o un qualsiasi numero di altri posti. 333 00:13:46,710 --> 00:13:49,570 >> Il database e la smart persone che hanno implementato la 334 00:13:49,570 --> 00:13:53,880 capirà come memorizzare tale tabella di informazioni 335 00:13:53,880 --> 00:13:57,061 in memoria in modo che le ricerche e altre operazioni sono super veloce. 336 00:13:57,061 --> 00:13:58,060 Non devi farlo. 337 00:13:58,060 --> 00:14:00,640 Non è necessario implementare ricerca lineare o ricerca binaria 338 00:14:00,640 --> 00:14:03,300 o merge sort o selezione tipo, nulla di tutto ciò. 339 00:14:03,300 --> 00:14:06,590 La banca dati fa per voi se dite essa preventivamente all'indice questo campo. 340 00:14:06,590 --> 00:14:09,100 >> E si può vedere anche, non c'è altre caratteristiche 341 00:14:09,100 --> 00:14:11,010 siamo in grado di dire il database di far rispettare. 342 00:14:11,010 --> 00:14:16,431 Che cosa potrebbe significare se scelgo Unico da questo menu, solo intuitivamente? 343 00:14:16,431 --> 00:14:16,930 Sì? 344 00:14:16,930 --> 00:14:17,889 >> PUBBLICO: [incomprensibile] 345 00:14:17,889 --> 00:14:19,930 DAVID MALAN: Sì, il nome utente deve essere univoco. 346 00:14:19,930 --> 00:14:23,330 E 'questo un bene o un male per un database, per un sito web con gli utenti? 347 00:14:23,330 --> 00:14:24,965 Dovrebbero essere i nomi utente unico? 348 00:14:24,965 --> 00:14:25,880 Sì, probabilmente. 349 00:14:25,880 --> 00:14:27,800 Se questo è ciò che il campo usiamo il login, 350 00:14:27,800 --> 00:14:31,867 non si vuole veramente per le persone che hanno la stessa sensazione o lo stesso nome utente. 351 00:14:31,867 --> 00:14:33,700 Quindi, possiamo avere la database di far rispettare che così 352 00:14:33,700 --> 00:14:37,880 che ormai nel mio codice PHP o qualsiasi altro linguaggio, Non ho, ad esempio, controllare 353 00:14:37,880 --> 00:14:41,490 fa necessariamente questo nome utente esisto prima di lasciarti registrare qualcuno? 354 00:14:41,490 --> 00:14:46,690 Il database non permetterà che due persone di nome Davide o Malans registrano in questo caso. 355 00:14:46,690 --> 00:14:50,030 >> E per inciso, anche se questo menu consente solo di selezionare uno, 356 00:14:50,030 --> 00:14:54,550 un indice univoco è uno che è indicizzato per prestazioni super veloce, 357 00:14:54,550 --> 00:14:56,100 ma impone anche unicità. 358 00:14:56,100 --> 00:14:58,850 E torneremo a quello che il altri due significare in un attimo. 359 00:14:58,850 --> 00:15:00,930 Nel frattempo, se vado a la mia seconda fila, che 360 00:15:00,930 --> 00:15:06,230 è il nome dell'utente, dovrei specificare che il nome dovrebbe essere unico? 361 00:15:06,230 --> 00:15:09,550 No, perché si potrebbe certamente have-- non c'è due David 362 00:15:09,550 --> 00:15:11,050 Malans in questa stanza, molto probabilmente. 363 00:15:11,050 --> 00:15:14,290 Ma se si sceglie un nome diverso, potremmo sicuramente collisioni. 364 00:15:14,290 --> 00:15:16,130 >> Ripensate alle tabelle e simili. 365 00:15:16,130 --> 00:15:18,604 Quindi, noi certamente non vogliamo per rendere il campo nome univoco. 366 00:15:18,604 --> 00:15:21,270 Quindi, stiamo solo andando a lasciare che, come cruscotto, plancia, cruscotto, niente. 367 00:15:21,270 --> 00:15:22,660 E ho intenzione di lasciare tutto il resto da solo. 368 00:15:22,660 --> 00:15:25,035 Infatti, la maggior parte di questi campi non dovremo preoccuparsi. 369 00:15:25,035 --> 00:15:27,830 E quando sono pronto a salvare questo, Se Internet coopera, 370 00:15:27,830 --> 00:15:35,032 Clicco Salva, e molto, molto, molto lentamente fa la banca dati vengono salvati. 371 00:15:35,032 --> 00:15:37,240 E ora sono tornato a questo interfaccia, che è vero, 372 00:15:37,240 --> 00:15:38,680 è travolgente a prima vista. 373 00:15:38,680 --> 00:15:42,450 Ma tutto quello che ho intenzione di fare è fare clic su sulla parola Utenti in alto a sinistra. 374 00:15:42,450 --> 00:15:47,630 Ho intenzione di andare qui, fare clic su Gli utenti, e per impostazione predefinita, 375 00:15:47,630 --> 00:15:50,180 ha eseguito alcuni SQL, ma più su che in un momento. 376 00:15:50,180 --> 00:15:52,654 Ecco solo un riassunto di quello che ho fatto. 377 00:15:52,654 --> 00:15:55,320 E non preoccuparsi che si vede parlare di latino e lo svedese qui. 378 00:15:55,320 --> 00:16:00,490 Questi sono solo il default impostazioni, perché MySQL in origine, 379 00:16:00,490 --> 00:16:04,000 o PHP MyAdmin, uno dei due è accaduto per essere scritto da alcune persone svedesi. 380 00:16:04,000 --> 00:16:06,100 Ma è irrilevante nel nostro caso qui. 381 00:16:06,100 --> 00:16:08,280 >> Va bene, e allora perché è tutto questo interessante? 382 00:16:08,280 --> 00:16:13,050 Si scopre, posso inserire dati in un database scrivendo codice. 383 00:16:13,050 --> 00:16:15,940 E sto vado avanti e nel mio file qui, sono 384 00:16:15,940 --> 00:16:19,000 intenzione di andare avanti e far finta come questo è collegato al database, che 385 00:16:19,000 --> 00:16:23,040 non è al momento, ma sarà essere quando si arriva a problema impostato sette. 386 00:16:23,040 --> 00:16:25,640 E ho intenzione di andare avanti e eseguire una funzione chiamata di query, 387 00:16:25,640 --> 00:16:28,730 che vi daremo in problema impostare il codice sette di distribuzione, che 388 00:16:28,730 --> 00:16:31,490 prende almeno un argomento, che è solo una stringa. 389 00:16:31,490 --> 00:16:33,460 Una stringa di codice SQL. 390 00:16:33,460 --> 00:16:36,700 Quindi, si sta per imparare a scrivere Structured Query Language. 391 00:16:36,700 --> 00:16:41,270 >> Se voglio inserire una nuova riga nel mio database perché qualcuno ha presentato 392 00:16:41,270 --> 00:16:47,600 un modulo per il mio codice, vorrei letteralmente scrivere INSERT INTO utenti la seguente 393 00:16:47,600 --> 00:16:52,800 i campi: nome utente, virgola, nome, i valori, 394 00:16:52,800 --> 00:16:57,480 e ora ho bisogno di inserire qualcosa come Malan, e citazione, 395 00:16:57,480 --> 00:17:01,490 unquote 'David Malan.' E adesso anche per chi non conosce SQL, 396 00:17:01,490 --> 00:17:07,830 perché sto usando apici all'interno di questa stringa verde? 397 00:17:07,830 --> 00:17:10,790 398 00:17:10,790 --> 00:17:13,040 Quale potrebbe essere il motivo qui? 399 00:17:13,040 --> 00:17:14,609 >> Notate Sono commistione due lingue. 400 00:17:14,609 --> 00:17:18,099 Query è una funzione PHP, ma ci vuole un argomento. 401 00:17:18,099 --> 00:17:21,740 E tale argomento deve essere di per sé scritto in un'altra lingua chiamato 402 00:17:21,740 --> 00:17:23,500 SQL, Structured Query Language. 403 00:17:23,500 --> 00:17:27,940 Così, tutto ciò che hanno appena messo in evidenza qui 404 00:17:27,940 --> 00:17:30,380 è questo linguaggio chiamato SQL. 405 00:17:30,380 --> 00:17:36,290 Quindi, qual è con le virgolette singole, proprio come un controllo di integrità rapida? 406 00:17:36,290 --> 00:17:37,324 Vai avanti. 407 00:17:37,324 --> 00:17:37,990 Sono stringhe. 408 00:17:37,990 --> 00:17:41,590 Così, citazione, unquote Malan e citazione, unquote David Malan sono stringhe. 409 00:17:41,590 --> 00:17:45,210 E proprio pensando intuitivamente ora, sapendo quello che sai di C e PHP, 410 00:17:45,210 --> 00:17:50,220 perché ho fatto a non fare questo, che di solito virgolette usati per le stringhe? 411 00:17:50,220 --> 00:17:52,310 Perché non ho voglia di farlo? 412 00:17:52,310 --> 00:17:52,810 Sì? 413 00:17:52,810 --> 00:17:53,685 >> PUBBLICO: [incomprensibile] 414 00:17:53,685 --> 00:17:56,695 415 00:17:56,695 --> 00:17:57,570 DAVID MALAN: Esattamente. 416 00:17:57,570 --> 00:17:59,653 Perché io sto già usando virgolette sulla strada 417 00:17:59,653 --> 00:18:01,929 al di fuori dell'argomento alla funzione PHP, 418 00:18:01,929 --> 00:18:03,470 Vorrei solo confondere il interprete. 419 00:18:03,470 --> 00:18:04,860 Non si sa, fanno questi vanno insieme? 420 00:18:04,860 --> 00:18:05,735 Do questi vanno insieme? 421 00:18:05,735 --> 00:18:06,810 Do questi vanno insieme? 422 00:18:06,810 --> 00:18:08,070 Così, invece alterno. 423 00:18:08,070 --> 00:18:11,784 >> Oppure avrei potuto fare qualcosa di simile, preventivo backslash o preventivo backslash. 424 00:18:11,784 --> 00:18:14,200 Francamente, che inizia appena a ottenere molto illeggibile e brutto. 425 00:18:14,200 --> 00:18:16,790 Ma che sarebbe raggiungere lo stesso risultato pure. 426 00:18:16,790 --> 00:18:19,760 >> Quindi, se dovessi eseguire questo domanda ora, vediamo cosa succede. 427 00:18:19,760 --> 00:18:22,740 Ho intenzione di andare avanti ora e piuttosto di eseguire il codice PHP, che 428 00:18:22,740 --> 00:18:24,610 è dove giocherai nel problema set di sette, 429 00:18:24,610 --> 00:18:27,200 Ho intenzione di andare invece PHP MyAdmin. 430 00:18:27,200 --> 00:18:29,770 E ho intenzione manualmente per andare alla scheda SQL, 431 00:18:29,770 --> 00:18:31,580 e fammi ingrandire i dell'interfaccia. 432 00:18:31,580 --> 00:18:34,007 E ho intenzione di incollare la cosa che ho appena scritto. 433 00:18:34,007 --> 00:18:36,090 E la codifica colore ha cambiato un po 'ora, 434 00:18:36,090 --> 00:18:38,750 proprio perché i formati di programmi le cose un po 'diverso. 435 00:18:38,750 --> 00:18:41,960 A meno di notare che tutto quello che ho fatto è che ho detto, inserire gli utenti. 436 00:18:41,960 --> 00:18:45,790 Ho specificato, poi, in una virgola separato lista tra parentesi i due 437 00:18:45,790 --> 00:18:48,850 campi che voglio inserire, e allora ho detto letteralmente valori 438 00:18:48,850 --> 00:18:51,510 seguito da un altro parentesi tonda, e poi i due valori 439 00:18:51,510 --> 00:18:53,520 Voglio plug-in, e ora per buona misura, 440 00:18:53,520 --> 00:18:55,010 Metterò una virgola alla fine. 441 00:18:55,010 --> 00:18:56,570 Quindi, questo non è C. Questo non è PHP. 442 00:18:56,570 --> 00:18:59,970 Questo è ora SQL, e sto incollandolo in questa interfaccia web based che è 443 00:18:59,970 --> 00:19:02,710 solo andando a lasciarmi, non appena clicco Go, 444 00:19:02,710 --> 00:19:08,060 eseguire la query sul database in esecuzione all'interno di CS50 IDE. 445 00:19:08,060 --> 00:19:09,470 >> Quindi questo è un bene. 446 00:19:09,470 --> 00:19:12,520 Si noti che ha detto una riga inserito, è andato super veloce, 447 00:19:12,520 --> 00:19:15,190 0,0054 secondi per inserire tali dati. 448 00:19:15,190 --> 00:19:16,610 Quindi, che suona abbastanza sano. 449 00:19:16,610 --> 00:19:19,350 Si riformattato mia domanda per me qui solo per vederlo 450 00:19:19,350 --> 00:19:21,730 in una sorta di codice colore versione. 451 00:19:21,730 --> 00:19:24,540 Ma ora se clicco Sfoglia, si noti che, anche 452 00:19:24,540 --> 00:19:29,070 se c'è un sacco di confusione su lo schermo, il mio tavolo ha ora due file. 453 00:19:29,070 --> 00:19:30,700 >> Quindi, mi permetta di andare avanti e fare un altro. 454 00:19:30,700 --> 00:19:33,760 Invece di questo, mi permetta vai alla scheda di SQL di nuovo. 455 00:19:33,760 --> 00:19:40,723 E questa volta farò inserire qualcosa di simile Rob e il suo nome sarà Rob Bowden. 456 00:19:40,723 --> 00:19:42,330 Bowden. 457 00:19:42,330 --> 00:19:44,040 Cerchiamo di fare clic su Salva. 458 00:19:44,040 --> 00:19:46,140 Oops, piuttosto Go. 459 00:19:46,140 --> 00:19:48,890 >> Fare di nuovo clic su Sfoglia e ora notare ho due righe. 460 00:19:48,890 --> 00:19:52,390 Quindi, questo è solo un modo più complesso modo di aprire Google Spreadsheets 461 00:19:52,390 --> 00:19:54,010 e solo digitando una riga in una colonna. 462 00:19:54,010 --> 00:19:57,070 Ma che cosa è fondamentale è che ora abbiamo la sintassi 463 00:19:57,070 --> 00:20:00,220 con cui scrivere codice in modo che in ultima analisi, potremmo realmente 464 00:20:00,220 --> 00:20:01,790 fare un po 'e questo. 465 00:20:01,790 --> 00:20:05,380 Ricordiamo che supporta PHP variabili globali eccellente. 466 00:20:05,380 --> 00:20:08,415 >> Ciò che è dentro di dollaro accedi sottolineatura GET in PHP? 467 00:20:08,415 --> 00:20:10,290 Abbiamo dato un'occhiata a uno o due semplici esempi. 468 00:20:10,290 --> 00:20:15,640 E in PSet6, ricordano avete ciao dot PHP che utilizza questa variabile. 469 00:20:15,640 --> 00:20:17,870 Che cosa va in là? 470 00:20:17,870 --> 00:20:21,015 O che cosa si tratta? 471 00:20:21,015 --> 00:20:22,522 Un po 'più forte. 472 00:20:22,522 --> 00:20:23,790 >> PUBBLICO: [incomprensibile] 473 00:20:23,790 --> 00:20:25,030 >> DAVID MALAN: E 'una neve seme di array, che 474 00:20:25,030 --> 00:20:27,714 è solo un modo elegante per dire un array con coppie di valori chiave. 475 00:20:27,714 --> 00:20:28,880 E le chiavi non sono numerici. 476 00:20:28,880 --> 00:20:30,420 Sono parole o stringhe. 477 00:20:30,420 --> 00:20:32,750 E in particolare, cosa sono quelle coppie di valori chiave? 478 00:20:32,750 --> 00:20:35,110 Da dove vengono? 479 00:20:35,110 --> 00:20:35,620 Scusate? 480 00:20:35,620 --> 00:20:36,994 >> PUBBLICO: [incomprensibile] 481 00:20:36,994 --> 00:20:37,660 DAVID MALAN: No? 482 00:20:37,660 --> 00:20:40,700 Dove fare quelli chiave coppie di valori vengono? 483 00:20:40,700 --> 00:20:42,490 Dillo ancora? 484 00:20:42,490 --> 00:20:44,610 Ancora? 485 00:20:44,610 --> 00:20:46,472 Sono l'unica udienza qualcosa? 486 00:20:46,472 --> 00:20:47,810 >> [Risata] 487 00:20:47,810 --> 00:20:49,042 >> Proprio così, sì? 488 00:20:49,042 --> 00:20:50,435 >> PUBBLICO: [incomprensibile] 489 00:20:50,435 --> 00:20:52,560 DAVID MALAN: Sì, provengono dalla stringa di query. 490 00:20:52,560 --> 00:20:55,380 Quindi, se si riavvolge in tempo per quando abbiamo giocato con Google 491 00:20:55,380 --> 00:20:59,600 e siamo andati a Google.com barra Ricerca punto di domanda q è uguale a gatti, 492 00:20:59,600 --> 00:21:03,550 se dovessi premete Invio e se Google sono state implementate in PHP, 493 00:21:03,550 --> 00:21:07,017 Codice PHP che Google ha scritto avrebbero accesso a simbolo del dollaro 494 00:21:07,017 --> 00:21:11,600 sottolineare GET all'interno del quale è una chiave denominata Q e un valore 495 00:21:11,600 --> 00:21:17,680 cosiddetti gatti che si può quindi utilizzare usato per fare una ricerca vera e propria con. 496 00:21:17,680 --> 00:21:20,860 >> Così, in effetti, quello che ho intenzione di fare ora è tornare al mio codice PHP 497 00:21:20,860 --> 00:21:23,140 che vedrete ancora più in PSet7. 498 00:21:23,140 --> 00:21:25,440 E invece di collegare in valori codificati duri che 499 00:21:25,440 --> 00:21:27,630 non sembra come un molto sito web dinamico, 500 00:21:27,630 --> 00:21:30,680 Sto per darvi un teaser di ciò che il codice vero e proprio avrebbe fatto. 501 00:21:30,680 --> 00:21:32,854 Si potrebbe mettere in due punti interrogativi come questo. 502 00:21:32,854 --> 00:21:34,270 Non so che cosa il nome utente è. 503 00:21:34,270 --> 00:21:37,390 Io non so quale sia il nome sta per essere, 504 00:21:37,390 --> 00:21:39,470 ma so che posso ottenere in modo dinamico. 505 00:21:39,470 --> 00:21:43,420 >> Quindi, se il codice che stiamo scrivendo ora è il codice in esecuzione sui server di Google, 506 00:21:43,420 --> 00:21:46,940 o se questo è ciao puntino PHP, che viene fornito con PSet6, 507 00:21:46,940 --> 00:21:48,650 Ho intenzione di passare in la funzione di query 508 00:21:48,650 --> 00:21:51,450 proprio come printf, due altri argomenti. 509 00:21:51,450 --> 00:21:57,120 GET, citazione, il nome utente unquote, e GET, citazione, nome unquote. 510 00:21:57,120 --> 00:22:00,720 E ora, che cosa la nota struttura generale è qui. 511 00:22:00,720 --> 00:22:03,320 Ho a sinistra lato della chiamata, 512 00:22:03,320 --> 00:22:05,480 questa funzione chiamata query in PHP. 513 00:22:05,480 --> 00:22:08,160 Ho ancora come prima argomento, solo una stringa di testo. 514 00:22:08,160 --> 00:22:11,000 >> Ma quella stringa di testo è scritto in un linguaggio chiamato SQL. 515 00:22:11,000 --> 00:22:12,616 E, francamente, non è una grande lingua. 516 00:22:12,616 --> 00:22:14,990 Stiamo solo andando a parlare formalmente oggi, davvero. 517 00:22:14,990 --> 00:22:17,031 E poi nel problema set sette, c'è relativamente 518 00:22:17,031 --> 00:22:18,800 alcune caratteristiche che siamo andando a sfruttare. 519 00:22:18,800 --> 00:22:22,530 I punti interrogativi, però, significano plug in un valore qui e presa in un altro valore 520 00:22:22,530 --> 00:22:23,130 Qui. 521 00:22:23,130 --> 00:22:26,010 E notate, ho omesso cosa da tutto il maledetto quote-- 522 00:22:26,010 --> 00:22:30,470 it-- intorno alla citazione segna questa volta. 523 00:22:30,470 --> 00:22:34,930 Ho omesso la citazione segni intorno il punto interrogativo, 524 00:22:34,930 --> 00:22:36,410 mi dispiace, questa volta. 525 00:22:36,410 --> 00:22:38,870 >> Allora, che cosa è bello su questo domanda caratteristica marchio che 526 00:22:38,870 --> 00:22:42,830 PHP tende a sostenere, Ruby e Python e altri linguaggi, 527 00:22:42,830 --> 00:22:45,730 questo significa solo presa in qualche apprezzi qui e sapete una cosa? 528 00:22:45,730 --> 00:22:48,300 A capire se utilizzare apici singoli o doppi apici. 529 00:22:48,300 --> 00:22:50,966 Non preoccupatevi di me con quelle dettagli intellettualmente interessante. 530 00:22:50,966 --> 00:22:53,780 Ma, assicurarsi che sia corretto in modo che il mio codice è in ultima analisi, 531 00:22:53,780 --> 00:22:57,010 operativa e sicuro, che avrà un significato prima lungo. 532 00:22:57,010 --> 00:23:00,460 >> Ora, quanti argomenti totale, solo per Sia chiaro, è la funzione di presa di query? 533 00:23:00,460 --> 00:23:05,240 534 00:23:05,240 --> 00:23:07,581 Chiunque vuole votare per più di due? 535 00:23:07,581 --> 00:23:08,080 Tre? 536 00:23:08,080 --> 00:23:10,001 Certo, perché? 537 00:23:10,001 --> 00:23:10,920 Perché tre? 538 00:23:10,920 --> 00:23:12,305 >> PUBBLICO: [incomprensibile] 539 00:23:12,305 --> 00:23:13,180 DAVID MALAN: Esattamente. 540 00:23:13,180 --> 00:23:14,610 La prima parte è la stringa. 541 00:23:14,610 --> 00:23:18,640 Il secondo argomento è il segno del dollaro sottolineare staffa GET nome utente. 542 00:23:18,640 --> 00:23:21,950 E il terzo argomento è il stessa cosa, ma solo il nome. 543 00:23:21,950 --> 00:23:24,590 In altre parole, ora se avessi un modulo web 544 00:23:24,590 --> 00:23:27,149 che doveva campi di testo, uno per il nome utente dell'utente, 545 00:23:27,149 --> 00:23:29,690 uno per il suo nome, semplicemente come si farebbe vedere in un sito web 546 00:23:29,690 --> 00:23:32,120 al momento della registrazione per qualche sito web, questo potrebbe 547 00:23:32,120 --> 00:23:35,450 essere il codice sul back-end che in realtà fa l'inserimento ora 548 00:23:35,450 --> 00:23:37,220 nel database. 549 00:23:37,220 --> 00:23:40,870 >> Ora invece, andiamo avanti veloce. 550 00:23:40,870 --> 00:23:43,840 Supponiamo che un utente è ora l'accesso e si desidera 551 00:23:43,840 --> 00:23:48,860 scrivere il codice PHP che controlla se la persona che ha appena registrato 552 00:23:48,860 --> 00:23:52,250 è in realtà un utente, è possibile utilizzare la sintassi abbastanza semplice. 553 00:23:52,250 --> 00:23:55,832 Si può dire SELECT, diciamo stella, dove stella significa tutto. 554 00:23:55,832 --> 00:23:57,540 Io non so quello che ho vogliono, così appena mi danno 555 00:23:57,540 --> 00:24:01,585 tutte le colonne della tabella chiama gli utenti dove, e questo è bello. 556 00:24:01,585 --> 00:24:03,710 Selezionare sostiene ciò che è chiamato un predicato, che è 557 00:24:03,710 --> 00:24:06,630 come un modo di qualificare ciò che si desidera. 558 00:24:06,630 --> 00:24:10,590 Dove nome utente uguale citazione, unquote Malan. 559 00:24:10,590 --> 00:24:13,680 Quindi anche qui, io ve conficcarono all'interno della discussione 560 00:24:13,680 --> 00:24:16,110 a una funzione PHP, una riga di codice SQL. 561 00:24:16,110 --> 00:24:18,680 E che il codice SQL questo il tempo è letteralmente andando 562 00:24:18,680 --> 00:24:21,790 per la ricerca di preventivo, unquote Malan. 563 00:24:21,790 --> 00:24:24,420 >> Ora che non è poi così utile, così ho intenzione di saltare quel 564 00:24:24,420 --> 00:24:28,650 e ho intenzione di mettere via questo suggerimento da Brady, e andare 565 00:24:28,650 --> 00:24:30,990 e plug-in invece un punto interrogativo qui. 566 00:24:30,990 --> 00:24:33,290 Così, tanto per essere chiari, cosa dovrebbe il mio secondo argomento 567 00:24:33,290 --> 00:24:37,480 essere se qualcuno ha appena effettuato il login e io voler controllare se lui o lei è in realtà 568 00:24:37,480 --> 00:24:39,265 un utente? 569 00:24:39,265 --> 00:24:40,140 PUBBLICO: [incomprensibile] 570 00:24:40,140 --> 00:24:40,890 DAVID MALAN: Sì. 571 00:24:40,890 --> 00:24:44,120 Sento dollaro segno di sottolineatura GET citazione, nome utente unquote. 572 00:24:44,120 --> 00:24:50,040 E che dovrebbe tornare a me una delle righe nel mio database 573 00:24:50,040 --> 00:24:51,986 che hanno un nome utente di Malan. 574 00:24:51,986 --> 00:24:54,860 Ora si spera, ho intenzione di tornare zero se Malan non è mai stato qui, 575 00:24:54,860 --> 00:24:56,290 o uno se ha. 576 00:24:56,290 --> 00:24:59,026 Non dovrei tornare due o tre o quattro. 577 00:24:59,026 --> 00:24:59,526 Come mai? 578 00:24:59,526 --> 00:25:00,220 >> PUBBLICO: [incomprensibile] 579 00:25:00,220 --> 00:25:01,120 >> DAVID MALAN: Ho detto unico, giusto? 580 00:25:01,120 --> 00:25:01,750 Motivo semplice. 581 00:25:01,750 --> 00:25:04,030 Perché ho detto è avuto modo di essere unico, solo logicamente, 582 00:25:04,030 --> 00:25:07,940 si può avere solo zero o uno Malans in questo particolare tabella di database. 583 00:25:07,940 --> 00:25:10,965 Ora, come un a parte, solo così hai visto , anche se io continuo ad usare GET 584 00:25:10,965 --> 00:25:14,350 e anche se PSet6 utilizzati solo Get, si può certamente avere POST. 585 00:25:14,350 --> 00:25:17,212 E ricordare che la Posta è un altro tecnica per la presentazione delle informazioni 586 00:25:17,212 --> 00:25:19,170 da un modulo, ma non si presenta nell'URL. 587 00:25:19,170 --> 00:25:22,690 E 'un po' più sicuro certamente per cose come nomi utente e password, 588 00:25:22,690 --> 00:25:25,210 PSet7 che sarà, infatti, comporta. 589 00:25:25,210 --> 00:25:28,130 >> Quindi, cerchiamo di fare questo in PHP MyAdmin e vedere cosa succede. 590 00:25:28,130 --> 00:25:30,020 Ho intenzione di andare alla scheda MySQL. 591 00:25:30,020 --> 00:25:34,450 E notare che il valore predefinito per PHP MyAdmin, solo per cercare di essere utile, 592 00:25:34,450 --> 00:25:37,050 è quello di selezionare stelle da parte degli utenti dove uno. 593 00:25:37,050 --> 00:25:39,430 Bene, uno è sempre vero, quindi questo ha la stupida efficace 594 00:25:39,430 --> 00:25:40,400 di sufficiente selezionare tutto. 595 00:25:40,400 --> 00:25:42,691 Ma ho intenzione di essere un po ' più pedante e manualmente 596 00:25:42,691 --> 00:25:45,920 digitare out SELEZIONA stelle da parte degli utenti. 597 00:25:45,920 --> 00:25:48,294 >> Ora tecnicamente, è possibile citare il nome delle tabelle. 598 00:25:48,294 --> 00:25:50,460 E 'raro che si deve, ma notano questi non sono 599 00:25:50,460 --> 00:25:52,240 le vostre citazioni normali sulla tastiera statunitense. 600 00:25:52,240 --> 00:25:54,760 Questo è il cosiddetto backtick, che è generalmente sul lato superiore sinistro 601 00:25:54,760 --> 00:25:56,000 angolo della vostra tastiera. 602 00:25:56,000 --> 00:25:58,500 Ma è raro che ci effettivamente bisogno di preoccuparsi di questo, 603 00:25:58,500 --> 00:25:59,950 quindi mi limiterò a li tralascio comunque. 604 00:25:59,950 --> 00:26:02,280 Così ora, lasciami andare avanti e ha colpito andare. 605 00:26:02,280 --> 00:26:06,616 E quante righe dovrei comprare indietro quando seleziono stelle da parte degli utenti? 606 00:26:06,616 --> 00:26:08,407 >> PUBBLICO: [incomprensibile] 607 00:26:08,407 --> 00:26:09,990 DAVID MALAN: Il numero di righe, certo. 608 00:26:09,990 --> 00:26:12,390 Ma quanti in questo storia concreta in questo momento? 609 00:26:12,390 --> 00:26:14,640 Due, perché c'era me e c'era Rob. 610 00:26:14,640 --> 00:26:19,370 Quindi, se clicco Go, vedo che visivamente Ho ottenuto indietro, anzi, due file. 611 00:26:19,370 --> 00:26:22,060 C'è un sacco di confusione sulla schermo, ma vedo solo due righe. 612 00:26:22,060 --> 00:26:28,580 Al contrario, se faccio questo di nuovo e fare Scegliere categoria degli utenti, dove username 613 00:26:28,580 --> 00:26:31,840 uguale citazione, unquote Malan, ora se clicco Go, 614 00:26:31,840 --> 00:26:33,970 Sto solo andando a ottenere indietro una riga. 615 00:26:33,970 --> 00:26:36,499 E, infine, se lo faccio qualcosa di simile a questo, supponiamo 616 00:26:36,499 --> 00:26:38,290 che non mi interessa ottenere tutto, 617 00:26:38,290 --> 00:26:41,020 che è una specie di insignificante oggi, perché ci sono solo due colonne. 618 00:26:41,020 --> 00:26:43,103 Non è che io sto selezionando una quantità enorme di dati. 619 00:26:43,103 --> 00:26:46,720 Supponiamo che io vado avanti e non selezionare il nome da 620 00:26:46,720 --> 00:26:51,990 utenti, dove username è uguale Malan, cosa c'è di bello su SQL onestamente, 621 00:26:51,990 --> 00:26:54,290 è che in realtà fa solo quello che gli si dice di fare. 622 00:26:54,290 --> 00:26:57,550 E 'piuttosto succinta, ma letteralmente solo indicare cosa si vuole fare. 623 00:26:57,550 --> 00:27:01,130 Selezionare il nome da dove gli utenti il nome utente uguale Malan. 624 00:27:01,130 --> 00:27:03,440 Ed è davvero così esplicito. 625 00:27:03,440 --> 00:27:08,410 Così, ora, se ho colpito Go, quanti righe Sto per tornare indietro? 626 00:27:08,410 --> 00:27:10,770 Uno, perché è solo Malan, si spera. 627 00:27:10,770 --> 00:27:13,100 O pari a zero se non è lì, ma al massimo. 628 00:27:13,100 --> 00:27:17,610 >> E quante colonne posso tornare? 629 00:27:17,610 --> 00:27:18,450 Quante colonne? 630 00:27:18,450 --> 00:27:20,658 Questa volta, sto solo andando per ottenere uno perché non ho 631 00:27:20,658 --> 00:27:22,380 selezionare stella, che è tutto. 632 00:27:22,380 --> 00:27:27,900 Ora sto selezionando solo nome, così ho solo tornare una colonna e una riga. 633 00:27:27,900 --> 00:27:31,730 E sembra sorta di appropriato ridicolo, solo guardando super 634 00:27:31,730 --> 00:27:33,060 piccolo come questo. 635 00:27:33,060 --> 00:27:34,290 Allora, che cosa sta realmente accadendo? 636 00:27:34,290 --> 00:27:36,890 Quando si esegue un SQL query utilizzando select, 637 00:27:36,890 --> 00:27:38,700 quello che stai ricevendo indietro dal database 638 00:27:38,700 --> 00:27:42,970 è come una tabella temporanea con righe e colonne, forse, 639 00:27:42,970 --> 00:27:46,260 ma che omettere tutto ciò che Non è stato effettivamente scelto da voi. 640 00:27:46,260 --> 00:27:49,010 Quindi, è come se qualcuno aveva un grande foglio di calcolo di tutti gli studenti 641 00:27:49,010 --> 00:27:51,610 registrato per alcuni gruppo di studenti, e tu dici, 642 00:27:51,610 --> 00:27:55,097 dammi tutta la matricola che hanno registrato per il nostro gruppo di studenti, cosa 643 00:27:55,097 --> 00:27:56,930 il vostro collega in gruppo di studenti potrebbe fare 644 00:27:56,930 --> 00:27:58,430 si potrebbero semplicemente consegnare voi tutto il foglio di calcolo. 645 00:27:58,430 --> 00:27:59,742 E 'come dire selezionare stella. 646 00:27:59,742 --> 00:28:02,200 Ed è un po 'fastidioso se si voleva solo la matricola. 647 00:28:02,200 --> 00:28:05,640 E così, se invece ha detto, Scegliere categoria da tabella di database 648 00:28:05,640 --> 00:28:08,470 dove l'anno è uguale citazione, matricola unquote, 649 00:28:08,470 --> 00:28:10,810 è come se il tuo amico nel gruppo di studenti 650 00:28:10,810 --> 00:28:13,770 letteralmente evidenziato e copiate solo le righe matricola, 651 00:28:13,770 --> 00:28:16,780 li incollato in un nuovo Google Foglio di calcolo o un file di Excel, 652 00:28:16,780 --> 00:28:18,860 e si restituì il risultante solo file. 653 00:28:18,860 --> 00:28:21,710 Questo è tutto quello che sta succedendo su concettualmente qui. 654 00:28:21,710 --> 00:28:23,920 >> Così, alla fine, si può fare alcune cose piuttosto di fantasia 655 00:28:23,920 --> 00:28:26,560 memorizzando le cose come nomi utente e le password e simili. 656 00:28:26,560 --> 00:28:30,310 Ma, a quanto pare, dovremmo fare un po 'diverso rispetto questo. 657 00:28:30,310 --> 00:28:34,750 Non è che intelligente per solo memorizzare un nome utente e una password. 658 00:28:34,750 --> 00:28:37,790 Qualcuno prima, penso qui, ha suggerito un ID. 659 00:28:37,790 --> 00:28:40,787 Ora, un ID potrebbe essere come un Harvard ID o di Yale Net ID, 660 00:28:40,787 --> 00:28:42,870 ma potrebbe essere ancora più semplice nel nostro caso database. 661 00:28:42,870 --> 00:28:45,120 E in effetti, il caso comune è di avere un'altra colonna. 662 00:28:45,120 --> 00:28:46,953 E ho intenzione di andare avanti e modificare il mio tavolo. 663 00:28:46,953 --> 00:28:49,521 E se si gioca in giro con questa interfaccia per PSet7, 664 00:28:49,521 --> 00:28:51,770 vedrai che è possibile controllare questo bottone qui e aggiungere 665 00:28:51,770 --> 00:28:53,750 un campo all'inizio della tabella. 666 00:28:53,750 --> 00:28:56,720 E ora se clicco Go, sta andando di darmi una di quelle forme 667 00:28:56,720 --> 00:28:57,600 da prima. 668 00:28:57,600 --> 00:29:00,170 Ho intenzione di aggiungere un campo denominato ID. 669 00:29:00,170 --> 00:29:03,070 E ho intenzione di farne un tipo numerico. 670 00:29:03,070 --> 00:29:05,362 >> Ho un sacco di valori numerici per. 671 00:29:05,362 --> 00:29:08,677 Sto solo andando a scegliere un INT e Non preoccuparti per le dimensioni più disparate. 672 00:29:08,677 --> 00:29:10,510 Non devo specificare una lunghezza o un valore, 673 00:29:10,510 --> 00:29:13,710 perché sta andando essere 32 bit non importa quale. 674 00:29:13,710 --> 00:29:16,070 Gli attributi, non abbiamo visto prima. 675 00:29:16,070 --> 00:29:18,410 Gli interessi in uno di questi opzioni di menu questa volta? 676 00:29:18,410 --> 00:29:21,890 677 00:29:21,890 --> 00:29:23,745 Per un INT? 678 00:29:23,745 --> 00:29:24,620 Che cosa proponete? 679 00:29:24,620 --> 00:29:27,350 680 00:29:27,350 --> 00:29:28,445 No? 681 00:29:28,445 --> 00:29:29,570 Qualcuno di questi ha senso? 682 00:29:29,570 --> 00:29:30,536 Già. 683 00:29:30,536 --> 00:29:31,900 Sì, non firmato, giusto? 684 00:29:31,900 --> 00:29:35,930 >> In generale, se stiamo andando a dare ognuno un numero unico, che 685 00:29:35,930 --> 00:29:38,200 è dove questa storia è andare, voglio davvero unico 686 00:29:38,200 --> 00:29:41,919 una persona di avere il numero come lo zero e uno e due e tre e quattro. 687 00:29:41,919 --> 00:29:43,710 Non ho bisogno di trattare con numeri negativi. 688 00:29:43,710 --> 00:29:45,210 Sembra proprio come eccessivamente complesso. 689 00:29:45,210 --> 00:29:48,470 Voglio quattro miliardi di possibili valori, non quattro miliardi di possibili valori, 690 00:29:48,470 --> 00:29:50,699 così ho appena raddoppiato il capacità del mio INT. 691 00:29:50,699 --> 00:29:53,490 Per inciso, se si vuole mettere in relazione questo a qualcosa come Facebook, 692 00:29:53,490 --> 00:29:56,190 indietro in una sorta di mio giorno in cui Facebook è uscito prima, 693 00:29:56,190 --> 00:29:59,510 Credo che quello che erano utilizzando nel loro database MySQL 694 00:29:59,510 --> 00:30:02,856 per memorizzare un utente di identificatore, era solo un INT. 695 00:30:02,856 --> 00:30:05,230 Ma, naturalmente, ci sono un sacco di persone reali nel mondo. 696 00:30:05,230 --> 00:30:07,438 C'è un sacco di falso Facebook conti nel mondo. 697 00:30:07,438 --> 00:30:11,701 E così alla fine, Facebook traboccava la dimensione di un INT, un quattro miliardi 698 00:30:11,701 --> 00:30:12,200 valore. 699 00:30:12,200 --> 00:30:15,032 Ed è per questo, se si guarda in giro e c'è siti web 700 00:30:15,032 --> 00:30:16,740 che può dirvi cosa il vostro ID univoco è. 701 00:30:16,740 --> 00:30:19,781 E se non avete mai scelto un nome utente Facebook, vedrete il vostro ID univoco. 702 00:30:19,781 --> 00:30:23,080 Penso che sia il profilo PHP puntino ID punto interrogativo è uguale a qualcosa. 703 00:30:23,080 --> 00:30:27,210 Questo è ora qualcosa di simile a un grande INT, o una lunga lungo se si vuole, 704 00:30:27,210 --> 00:30:29,700 che è un valore a 64 bit o qualcosa di simile. 705 00:30:29,700 --> 00:30:33,620 >> Così, anche nel mondo reale fare queste problemi in ultima analisi, a volte contano. 706 00:30:33,620 --> 00:30:37,600 E si scopre qui, se sono dando tutti i miei utenti un ID univoco, 707 00:30:37,600 --> 00:30:41,750 Voglio essere esplicito eccellente e minimamente rendere questo campo univoco. 708 00:30:41,750 --> 00:30:44,750 Ma si scopre c'è un pezzo di nomenclatura anche oggi 709 00:30:44,750 --> 00:30:46,470 questa è una chiave primaria. 710 00:30:46,470 --> 00:30:49,800 Se stai progettando un database tavolo e si conosce in anticipo 711 00:30:49,800 --> 00:30:55,580 che una delle colonne di tale tabella dovrebbe e sarà identificare univocamente le righe 712 00:30:55,580 --> 00:30:58,500 nella tabella, si desidera specificarla e raccontare il database, 713 00:30:58,500 --> 00:31:00,250 questa è la mia chiave primaria. 714 00:31:00,250 --> 00:31:02,110 Ci potrebbero essere dei duplicati in altri campi, 715 00:31:02,110 --> 00:31:06,330 ma io dico il database che questo è il mio primario, il mio campo più importante, 716 00:31:06,330 --> 00:31:08,420 che è garantito per essere unico. 717 00:31:08,420 --> 00:31:09,660 >> Ora, questo sembra ridondante. 718 00:31:09,660 --> 00:31:13,830 Ora sto proponendo che abbiamo aggiungere, facendo clic su Salva qui, 719 00:31:13,830 --> 00:31:17,210 un called-- campo e sto andando di andare avanti e fare clic AI, 720 00:31:17,210 --> 00:31:19,720 torneremo a che in un momento, Salva. 721 00:31:19,720 --> 00:31:22,540 Io propongo ora che mio tavolo simile a questa. 722 00:31:22,540 --> 00:31:26,305 Ho un campo INT denominato ID, un campo CHAR denominato Nome utente, 723 00:31:26,305 --> 00:31:31,100 un campo VARCHAR chiamato Nome, ma ID, se è primario e quindi unico, 724 00:31:31,100 --> 00:31:33,760 perché ho appena sprecato tempo l'introduzione di quello 725 00:31:33,760 --> 00:31:39,140 effettivamente è un secondo unico campo chiamato ID che è un INT? 726 00:31:39,140 --> 00:31:41,980 >> Nome utente, richiamo, è stato già unica, abbiamo detto. 727 00:31:41,980 --> 00:31:45,350 Quindi, solo logicamente, non è necessario ogni esperienza del database alla ragione 728 00:31:45,350 --> 00:31:47,570 attraverso questo, perché Avrei potuto introdotto 729 00:31:47,570 --> 00:31:50,065 un INT come il mio identificativo univoco come bene? 730 00:31:50,065 --> 00:31:52,740 731 00:31:52,740 --> 00:31:53,930 Cosa c'è questo-- dire di nuovo? 732 00:31:53,930 --> 00:31:55,580 >> PUBBLICO: [incomprensibile] 733 00:31:55,580 --> 00:31:59,534 >> DAVID MALAN: Random accesso è più facile, perché? 734 00:31:59,534 --> 00:32:00,410 >> PUBBLICO: [incomprensibile] 735 00:32:00,410 --> 00:32:02,367 DAVID MALAN: Sì, è basta accedere numeri. 736 00:32:02,367 --> 00:32:04,750 Quindi, se si pensa a questo veramente è un tavolo, come un array, 737 00:32:04,750 --> 00:32:07,690 ora ho identificatori univoci che io possa saltare. 738 00:32:07,690 --> 00:32:11,520 E meglio di così è ancora quella quanto è grande è un INT sarà di nuovo? 739 00:32:11,520 --> 00:32:14,450 740 00:32:14,450 --> 00:32:15,800 32 bit o quattro byte. 741 00:32:15,800 --> 00:32:17,750 >> Quanto è grande il mio nome utente sarà? 742 00:32:17,750 --> 00:32:20,310 743 00:32:20,310 --> 00:32:21,990 Al massimo? 744 00:32:21,990 --> 00:32:22,880 16 byte. 745 00:32:22,880 --> 00:32:26,080 >> Quindi, se siete veramente preoccuparsi le prestazioni del vostro codice, 746 00:32:26,080 --> 00:32:31,390 ripensa a PSet5, si preferisce per la ricerca di un valore quattro byte o un 16 747 00:32:31,390 --> 00:32:32,240 valore di byte, giusto? 748 00:32:32,240 --> 00:32:33,810 E 'davvero così semplice come sembra. 749 00:32:33,810 --> 00:32:38,060 Devi fare quattro volte tanto lavoro per la ricerca di nomi utente perché quei 750 00:32:38,060 --> 00:32:38,830 sono 16 byte. 751 00:32:38,830 --> 00:32:41,320 Quindi, si deve letteralmente confrontare tutti i 16 byte per essere 752 00:32:41,320 --> 00:32:43,140 certo sì, questo è il nome utente che voglio. 753 00:32:43,140 --> 00:32:46,610 Mentre per un INT, è possibile farlo con soli quattro byte. 754 00:32:46,610 --> 00:32:49,212 >> E come una digressione per chi interessati in hardware, 755 00:32:49,212 --> 00:32:52,420 si scopre che può andare bene qualcosa di simile un un valore a 32 bit in qualcosa INT o 756 00:32:52,420 --> 00:32:55,330 chiamato un registro in un computer CPU, che significa che è super, 757 00:32:55,330 --> 00:32:58,400 super veloce, anche al minor livello di hardware del computer. 758 00:32:58,400 --> 00:33:00,530 Quindi, ci sono solo vantaggi tutto intorno. 759 00:33:00,530 --> 00:33:01,530 Che cosa significa questo? 760 00:33:01,530 --> 00:33:04,850 Infatti, quando si sta progettando un tabella di database, quasi tutto il tempo 761 00:33:04,850 --> 00:33:07,170 hai intenzione di non avere solo i dati che ti interessano, 762 00:33:07,170 --> 00:33:09,280 ma anche qualcosa di simile un identificatore univoco 763 00:33:09,280 --> 00:33:11,280 perché questo sta per facciamo altre cose. 764 00:33:11,280 --> 00:33:13,160 E cerchiamo di viaggio più di un problema qui. 765 00:33:13,160 --> 00:33:15,990 >> Supponiamo che gli utenti non hanno solo nomi utente e nomi, 766 00:33:15,990 --> 00:33:19,540 ma hanno anche le cose come le città e stati e codici di avviamento postale, almeno 767 00:33:19,540 --> 00:33:20,432 qui negli Stati Uniti. 768 00:33:20,432 --> 00:33:22,390 Così, ho intenzione di andare avanti e dire in fretta, 769 00:33:22,390 --> 00:33:26,180 darmi altri tre colonne alla fine della tabella. 770 00:33:26,180 --> 00:33:28,900 E questo sta per essere città, questo sta per essere stato, 771 00:33:28,900 --> 00:33:30,400 e questo sta per essere Zip. 772 00:33:30,400 --> 00:33:32,710 >> Ora tipi City, che cosa dati questo dovrebbe essere, forse? 773 00:33:32,710 --> 00:33:35,460 774 00:33:35,460 --> 00:33:35,989 VARCHAR? 775 00:33:35,989 --> 00:33:37,780 Io non so quale sia il più lungo il nome della città è. 776 00:33:37,780 --> 00:33:40,571 Da qualche parte in America, non c'è probabilmente qualche assurdamente lunghi parola, 777 00:33:40,571 --> 00:33:43,605 così facciamo solo andare con 255, un po ' storicamente o arbitrariamente. 778 00:33:43,605 --> 00:33:44,730 Stato, quello che vuoi fare? 779 00:33:44,730 --> 00:33:48,380 780 00:33:48,380 --> 00:33:50,367 Chiamata in giudizio, giusto? 781 00:33:50,367 --> 00:33:51,700 Qual è forse il più efficiente? 782 00:33:51,700 --> 00:33:53,500 Quanti personaggi? 783 00:33:53,500 --> 00:33:55,950 Forse solo due, se possiamo farla franca facendo proprio, 784 00:33:55,950 --> 00:33:58,250 come, MA per Massachusetts e così via. 785 00:33:58,250 --> 00:34:00,520 Così, ho intenzione di andare un valore CAR di due. 786 00:34:00,520 --> 00:34:03,080 >> Codice di avviamento postale è interessante. 787 00:34:03,080 --> 00:34:06,679 Siamo qui a 02138, in modo che suggerisce che dovremmo usare ciò? 788 00:34:06,679 --> 00:34:07,470 Si tratta di un INT, giusto? 789 00:34:07,470 --> 00:34:10,030 790 00:34:10,030 --> 00:34:12,800 INT, INT, a breve? 791 00:34:12,800 --> 00:34:14,521 Breve avrebbe funzionato. 792 00:34:14,521 --> 00:34:15,020 No? 793 00:34:15,020 --> 00:34:18,920 794 00:34:18,920 --> 00:34:20,870 CHAR o cinque, ma voglio un INT. 795 00:34:20,870 --> 00:34:23,710 Perché spingere indietro su un INT? 796 00:34:23,710 --> 00:34:26,820 Convincermi da questo. 797 00:34:26,820 --> 00:34:29,210 Che cosa è stupido su un INT, la mia idea? 798 00:34:29,210 --> 00:34:29,871 Già. 799 00:34:29,871 --> 00:34:31,199 >> PUBBLICO: Raccogliere più memoria. 800 00:34:31,199 --> 00:34:32,909 >> DAVID MALAN: Raccogliere più memoria. 801 00:34:32,909 --> 00:34:35,310 Quattro byte, ma sei proponendo un codice postale 802 00:34:35,310 --> 00:34:39,000 come cinque byte o qualcuno è stato come un CHAR, che si sente come eh, che non è proprio 803 00:34:39,000 --> 00:34:39,620 il caso. 804 00:34:39,620 --> 00:34:40,489 >> Beh, divertente storia. 805 00:34:40,489 --> 00:34:43,179 Anni fa, quando ho utilizzato Microsoft Outlook per la mia e-mail, 806 00:34:43,179 --> 00:34:45,150 Alla fine ho voluto passare a Gmail. 807 00:34:45,150 --> 00:34:48,949 E così, ho esportato tutti i miei contatti da Outlook come file CSV. 808 00:34:48,949 --> 00:34:50,699 Comma Separated Values, che appena significava che 809 00:34:50,699 --> 00:34:54,060 aveva tutti i miei nomi di amici e ultimo nomi e numeri di telefono e codici postali 810 00:34:54,060 --> 00:34:54,747 e tutto questo. 811 00:34:54,747 --> 00:34:56,580 E poi ho fatto il errore di aprirlo 812 00:34:56,580 --> 00:34:58,640 in Excel, che è un programma di foglio di calcolo che 813 00:34:58,640 --> 00:35:00,289 capisce file CSV come abbiamo visto. 814 00:35:00,289 --> 00:35:03,080 Ma poi, devo aver colpito, come, Comando o di controllo S a un certo punto. 815 00:35:03,080 --> 00:35:06,250 E a quanto pare Excel al momento aveva una caratteristica in cui ogni volta che 816 00:35:06,250 --> 00:35:08,100 ha visto un numero, ha cercato di essere utile. 817 00:35:08,100 --> 00:35:11,610 E se quel numero è iniziato con zeri, sarebbe solo sbarazzarsi di loro. 818 00:35:11,610 --> 00:35:13,420 Perché avete bisogno di leader zeri sul interi? 819 00:35:13,420 --> 00:35:15,140 Sono senza senso, matematicamente. 820 00:35:15,140 --> 00:35:17,530 Non sono senza senso nel sistema, US Postal. 821 00:35:17,530 --> 00:35:19,954 Così, ho avuto per anni, a questo giorno, ho ancora 822 00:35:19,954 --> 00:35:22,370 avere amici che, quando la caso raro che ho bisogno di qualcuno 823 00:35:22,370 --> 00:35:24,078 affrontare in questi giorni, Io continuo a vedere che ho 824 00:35:24,078 --> 00:35:26,767 avere un amico a Cambridge, Massachusetts, 2138. 825 00:35:26,767 --> 00:35:29,350 Ed è fastidioso se siete cercando di risolvere di programmazione 826 00:35:29,350 --> 00:35:30,975 generare buste o semplicemente buttar giù. 827 00:35:30,975 --> 00:35:33,599 E questo è a causa di questo motivo, Ho scelto il tipo di dati sbagliato. 828 00:35:33,599 --> 00:35:34,490 Così, mi piace la tua idea. 829 00:35:34,490 --> 00:35:35,650 Usiamo un campo CHAR. 830 00:35:35,650 --> 00:35:38,340 Cinque personaggi, ad eccezione c'è un caso d'angolo. 831 00:35:38,340 --> 00:35:42,220 Se ancora invia la posta, a volte zip codici in questi giorni, 832 00:35:42,220 --> 00:35:45,360 sono, come, più quattro. 833 00:35:45,360 --> 00:35:48,200 Quindi, abbiamo bisogno di un trattino e poi abbiamo bisogno di più di quattro numeri. 834 00:35:48,200 --> 00:35:50,330 Quindi, per essere onesti, potrebbe andare molti modi diversi. 835 00:35:50,330 --> 00:35:52,371 >> Per ora, ho intenzione di continuare a semplice e io sono solo 836 00:35:52,371 --> 00:35:54,780 andare a dire che si tratta di un cinque valore CHAR e siamo 837 00:35:54,780 --> 00:35:56,739 andando a saltare l'intero cruscotto più quattro. 838 00:35:56,739 --> 00:35:58,280 Ma questi sono i tipi di compromessi. 839 00:35:58,280 --> 00:36:00,196 E si può pensare al stessi problemi derivanti 840 00:36:00,196 --> 00:36:01,860 con numeri di telefono o altri campi. 841 00:36:01,860 --> 00:36:04,350 >> E ora, questo è in realtà una strada sciocco andare giù. 842 00:36:04,350 --> 00:36:08,000 Supponiamo che sia Rob ed io e Hannah e Maria e [? Davon?] E Andy 843 00:36:08,000 --> 00:36:12,820 e altri sul personale vivono tutti a Cambridge, Massachusetts, 02138. 844 00:36:12,820 --> 00:36:17,970 Questo in realtà sentire stupido che io sono aggiungendo al mio tavolo utenti, città, provincia, 845 00:36:17,970 --> 00:36:18,630 e zip. 846 00:36:18,630 --> 00:36:20,980 Come mai? 847 00:36:20,980 --> 00:36:21,960 >> PUBBLICO: [incomprensibile] 848 00:36:21,960 --> 00:36:22,918 >> DAVID MALAN: Dire di nuovo? 849 00:36:22,918 --> 00:36:24,310 PUBBLICO: [incomprensibile] 850 00:36:24,310 --> 00:36:25,850 >> DAVID MALAN: Sono sempre intenzione di andare insieme, giusto? 851 00:36:25,850 --> 00:36:28,660 Quando si scopre, eravamo abituati a pensare questo era il caso fino a quando non esaustivamente 852 00:36:28,660 --> 00:36:30,570 cercato tutta Stati Uniti, e scopre che c'è 853 00:36:30,570 --> 00:36:32,653 sono alcune incongruenze dove più città hanno 854 00:36:32,653 --> 00:36:35,060 la stessa cerniera, che è strano. 855 00:36:35,060 --> 00:36:40,580 Ma, se stipuliamo per ora che 02138 è sempre Cambridge, Massachusetts, 856 00:36:40,580 --> 00:36:44,910 perché nel mondo vorresti conservare in il database Cambridge e MA e 02138 857 00:36:44,910 --> 00:36:49,357 per me e per Hannah e per Rob e per [? Davon?] E per gli altri che vivono 858 00:36:49,357 --> 00:36:51,190 qui a Cambridge, è perfettamente ridondante. 859 00:36:51,190 --> 00:36:54,480 >> Dovremmo scappare con appena l'archiviazione che cosa? 860 00:36:54,480 --> 00:36:55,610 Solo il codice di avviamento postale. 861 00:36:55,610 --> 00:36:58,660 Ma allora, se salviamo solo il codice di avviamento postale, io voglio, probabilmente, 862 00:36:58,660 --> 00:37:02,160 per il mio sito per sapere dove è 02138. 863 00:37:02,160 --> 00:37:03,910 Così, ho bisogno di un altro tavolo. 864 00:37:03,910 --> 00:37:04,697 E questo è OK. 865 00:37:04,697 --> 00:37:07,530 Ed in effetti, questo è uno dei processi di progettazione di tavoli progettazione 866 00:37:07,530 --> 00:37:11,472 che farete in PSet7 pure per cui volete scomporre dati comuni. 867 00:37:11,472 --> 00:37:14,430 Proprio come siamo stati lo scorporo codice comune e factoring fuori comune 868 00:37:14,430 --> 00:37:17,380 stili CSS, qui Anche nel database, 869 00:37:17,380 --> 00:37:21,180 se ho solo bisogno di 02138 univocamente identificare città natale di qualcuno, 870 00:37:21,180 --> 00:37:25,020 non conservare Cambridge, Mass per ogni utente rammendare nella tabella. 871 00:37:25,020 --> 00:37:29,770 >> Invece, avere una tabella separata denominata Zip che dovrebbe avere ciò che le colonne? 872 00:37:29,770 --> 00:37:33,490 Probabilmente un campo ID, proprio perché, per i principi che stiamo parlando di ora. 873 00:37:33,490 --> 00:37:35,720 Probabilmente un campo zip 02138. 874 00:37:35,720 --> 00:37:38,400 E poi probabilmente quello che altre colonne? 875 00:37:38,400 --> 00:37:42,950 Città e stato, ma hanno una sola riga per 02138, una riga per 02139, 876 00:37:42,950 --> 00:37:44,772 una riga per 90210. 877 00:37:44,772 --> 00:37:46,730 E questo è letteralmente tutti i codici di avviamento postale che conosco. 878 00:37:46,730 --> 00:37:49,012 >> Così ora, cosa si può fare? 879 00:37:49,012 --> 00:37:51,220 Questo è problematico, perché ora ho due tabelle. 880 00:37:51,220 --> 00:37:54,660 Così, i miei utenti sono per lo più qui, ma il loro informazioni sullo stato della città di 881 00:37:54,660 --> 00:37:55,390 qui. 882 00:37:55,390 --> 00:37:58,635 Così, si scopre con SQL, c'è in realtà un modo per unire le informazioni, 883 00:37:58,635 --> 00:38:00,470 e vedrete questo nel PSet. 884 00:38:00,470 --> 00:38:03,000 >> Ma si scopre che puoi fare qualcosa di simile. 885 00:38:03,000 --> 00:38:10,501 SELEZIONA stelle da parte degli utenti, JOIN cerniere ON utenti punteggiano zip zip uguale punteggiano zip. 886 00:38:10,501 --> 00:38:13,360 Che è un po 'prolisso, è vero, ma questo solo 887 00:38:13,360 --> 00:38:17,590 significa selezionare tutto dal processo di prendere la mia tabella utenti 888 00:38:17,590 --> 00:38:19,580 e il mio tavolo cerniere. 889 00:38:19,580 --> 00:38:22,120 Partecipa loro da una campo che hanno in colonna. 890 00:38:22,120 --> 00:38:24,780 Così, letteralmente facendo qualcosa in questo modo, e mi danno indietro 891 00:38:24,780 --> 00:38:27,360 una nuova tabella temporanea che è più ampio, che è più grande, 892 00:38:27,360 --> 00:38:29,450 che ha tutte le colonne da entrambi. 893 00:38:29,450 --> 00:38:33,510 E che, molto semplicemente, sarebbe il sintassi per fare qualcosa di simile. 894 00:38:33,510 --> 00:38:35,540 >> Quindi, c'è questo in anticipo, ma ci sta andando 895 00:38:35,540 --> 00:38:38,950 ad essere altre decisioni di progettazione Avrete devono fare, non solo con gli indici 896 00:38:38,950 --> 00:38:40,550 ma anche correre in sfide. 897 00:38:40,550 --> 00:38:43,360 In realtà, c'è una sfida in ogni progettazione di database 898 00:38:43,360 --> 00:38:47,930 per cui a volte due persone potrebbero desiderare per accedere alle stesse file di database 899 00:38:47,930 --> 00:38:48,530 tavola. 900 00:38:48,530 --> 00:38:51,450 Quindi, questo è qualcosa che faremo incontrare in PSet7 pure. 901 00:38:51,450 --> 00:38:54,686 >> Ma ho pensato di guardare un attacco che è possibile in SQL. 902 00:38:54,686 --> 00:38:56,560 Quali sono alcune delle problemi che possono sorgere? 903 00:38:56,560 --> 00:38:58,170 Quindi, si incontrano in questo PSet7. 904 00:38:58,170 --> 00:39:01,874 E vi diciamo quello che il titolo definitivo soluzione che codifica per questo problema. 905 00:39:01,874 --> 00:39:04,790 Ma se si prende una classe di livello superiore, in particolare nei sistemi operativi, 906 00:39:04,790 --> 00:39:06,950 si sta andando ad incontrare una questione di atomicità, 907 00:39:06,950 --> 00:39:10,080 il problema di cercare di fare più cose in una sola volta 908 00:39:10,080 --> 00:39:11,000 senza interruzione. 909 00:39:11,000 --> 00:39:14,560 >> E ho pensato di introdurre questo idea per PSet7 con una metafora 910 00:39:14,560 --> 00:39:18,160 che io stesso ho imparato in Margo Sistemi operativi CS164 di Seltzer 911 00:39:18,160 --> 00:39:18,990 anni di classe fa. 912 00:39:18,990 --> 00:39:22,230 Supponiamo di avere uno di questi dormitorio frigoriferi nella vostra stanza del dormitorio o casa, 913 00:39:22,230 --> 00:39:24,474 e si dispone di un vero e proprio debole per il latte. 914 00:39:24,474 --> 00:39:27,140 E così, si arriva a casa dalle classi un giorno, si apre il frigo. 915 00:39:27,140 --> 00:39:27,620 Oh, maledizione. 916 00:39:27,620 --> 00:39:28,870 Non c'è latte in frigo. 917 00:39:28,870 --> 00:39:32,470 Quindi, si chiude il frigo, chiudere la porta, bloccare il dormitorio, 918 00:39:32,470 --> 00:39:34,770 camminare dietro l'angolo per CVS, mettersi in fila, 919 00:39:34,770 --> 00:39:36,312 e avviare il controllo fuori per un po 'di latte. 920 00:39:36,312 --> 00:39:38,978 E sta andando a prendere un po ', perché quelli accidenti di self-checkout 921 00:39:38,978 --> 00:39:40,570 contatori prendono sempre di usare comunque. 922 00:39:40,570 --> 00:39:41,950 Così nel frattempo, il tuo compagno di stanza torna a casa. 923 00:39:41,950 --> 00:39:43,470 Lui o lei piace molto latte. 924 00:39:43,470 --> 00:39:45,520 Vengono nella stanza del dormitorio, aprire il frigorifero, oh, accidenti. 925 00:39:45,520 --> 00:39:46,490 Non c'è più latte. 926 00:39:46,490 --> 00:39:49,040 >> Così, lui o lei anche va dietro l'angolo. 927 00:39:49,040 --> 00:39:51,670 Ma ora, dal momento che c'è come due o tre o quattro CVSes nelle vicinanze, 928 00:39:51,670 --> 00:39:53,800 capita di andare ad uno dei quelli diversi in piazza. 929 00:39:53,800 --> 00:39:55,830 E così ora, a pochi minuti più tardi, tutti e due 930 00:39:55,830 --> 00:39:58,060 tornare a casa e ugh, problema peggiore. 931 00:39:58,060 --> 00:40:00,967 Ora avete troppo latte perché sta andando ad andare acida. 932 00:40:00,967 --> 00:40:03,050 E ti piace il latte, ma si non mi piace veramente il latte. 933 00:40:03,050 --> 00:40:06,730 >> Così ora, questo era un costoso errore perché tutti e due 934 00:40:06,730 --> 00:40:09,870 preso una decisione sulla base del stato di qualche variabile che 935 00:40:09,870 --> 00:40:12,660 sia in fase di essere cambiato da voi, 936 00:40:12,660 --> 00:40:14,560 l'iniziatore di andare a prendere il latte. 937 00:40:14,560 --> 00:40:17,785 Quindi, qual è forse un essere umano soluzione a questo problema? 938 00:40:17,785 --> 00:40:18,660 PUBBLICO: [incomprensibile] 939 00:40:18,660 --> 00:40:19,430 DAVID MALAN: Lascia una nota, giusto? 940 00:40:19,430 --> 00:40:21,850 Lasciare sempre una nota, se siete familiarità con quello show. 941 00:40:21,850 --> 00:40:23,100 Sì, ci sono due di noi. 942 00:40:23,100 --> 00:40:25,940 Così, lasciare sempre una nota, o letteralmente bloccare il frigorifero 943 00:40:25,940 --> 00:40:28,602 con qualche tipo di lucchetto o qualcosa sopra le righe in quel modo. 944 00:40:28,602 --> 00:40:31,310 Ma questo è in realtà sta per essere problema chiave con la progettazione di database, 945 00:40:31,310 --> 00:40:34,710 soprattutto quando si potrebbe avere più browser, più computer portatili, 946 00:40:34,710 --> 00:40:37,450 più utenti tutti cercando di aggiornare le informazioni in una sola volta. 947 00:40:37,450 --> 00:40:40,590 Informazioni particolarmente sensibili come le informazioni finanziarie, 948 00:40:40,590 --> 00:40:43,350 per cui con una compravendita di azioni sito web come ti verrà la costruzione, 949 00:40:43,350 --> 00:40:47,270 cosa succede se si desidera controllare quanti soldi avete e poi se avete abbastanza, 950 00:40:47,270 --> 00:40:48,490 comprare qualche azione? 951 00:40:48,490 --> 00:40:50,899 >> Ma cosa succede se qualcun altro che ha un conto cointestato con te 952 00:40:50,899 --> 00:40:52,690 è allo stesso tempo cercando per comprare un po 'di azione? 953 00:40:52,690 --> 00:40:55,190 Così, lui o lei è il controllo della saldo del conto, tutti e due 954 00:40:55,190 --> 00:40:57,540 ottenere indietro la stessa risposta, non c'è latte. 955 00:40:57,540 --> 00:41:00,580 O entrambi si ottiene indietro la risposta, si dispone di $ 100 nel conto. 956 00:41:00,580 --> 00:41:04,680 Entrambi si tenta di prendere la decisione acquistare una azione della alcune azioni della società. 957 00:41:04,680 --> 00:41:06,130 >> E ora, che cosa succede? 958 00:41:06,130 --> 00:41:07,140 Hai due parti? 959 00:41:07,140 --> 00:41:08,420 Non ci sono parti? 960 00:41:08,420 --> 00:41:10,320 Possono sorgere problemi del genere. 961 00:41:10,320 --> 00:41:11,755 Quindi, noi incontreremo quello. 962 00:41:11,755 --> 00:41:14,630 Attacchi di SQL injection, per fortuna, sono qualcosa ti aiuteremo con, 963 00:41:14,630 --> 00:41:17,430 ma questi sono atrocemente comune in questi giorni ancora. 964 00:41:17,430 --> 00:41:18,680 Così, questo è solo un esempio. 965 00:41:18,680 --> 00:41:21,290 Non faccio affermazioni che Sistema Harvard PIN 966 00:41:21,290 --> 00:41:23,130 vulnerabili a questo attacco particolare. 967 00:41:23,130 --> 00:41:24,160 Abbiamo provato. 968 00:41:24,160 --> 00:41:26,120 Ma, si sa che ci avere un campo come questo. 969 00:41:26,120 --> 00:41:29,620 E di Yale ID Net ha un simile cercando schermo in questi giorni. 970 00:41:29,620 --> 00:41:33,190 E si scopre, che forse il PIN di sistema è implementato in PHP. 971 00:41:33,190 --> 00:41:37,050 >> E se were-- è not-- essi potrebbe avere il codice che assomiglia a questo. 972 00:41:37,050 --> 00:41:38,210 Hanno due variabili. 973 00:41:38,210 --> 00:41:42,495 Dammi il nome utente e la password dalla variabile globale post eccellente 974 00:41:42,495 --> 00:41:43,970 che abbiamo parlato in precedenza. 975 00:41:43,970 --> 00:41:47,310 Forse Harvard ha una query come SELEZIONARE stelle da parte degli utenti 976 00:41:47,310 --> 00:41:50,005 dove username è uguale a quella e password eguaglia quella. 977 00:41:50,005 --> 00:41:51,880 E noto che io sono solo collegarlo usando 978 00:41:51,880 --> 00:41:55,050 la notazione parentesi graffa dall'altro giorno, che significa semplicemente collegare un valore 979 00:41:55,050 --> 00:41:55,550 Qui. 980 00:41:55,550 --> 00:41:57,449 Io non sto usando la domanda tecnica contrassegno. 981 00:41:57,449 --> 00:41:59,240 Non ho alcun secondo o il terzo argomento. 982 00:41:59,240 --> 00:42:02,350 Sono solo letteralmente costruendo la stringa me stesso. 983 00:42:02,350 --> 00:42:04,930 >> Il problema, però, è che se qualcuno come un scroob, 984 00:42:04,930 --> 00:42:09,020 che è un riferimento ad un film, registra con qualcosa di simile, 985 00:42:09,020 --> 00:42:11,250 e ho rimosso i punti che di solito coprire 986 00:42:11,250 --> 00:42:14,370 le password, e se egli è particolarmente dannoso 987 00:42:14,370 --> 00:42:18,860 e la sua password, forse è 12345, per il film intitolato "Balle spaziali" 988 00:42:18,860 --> 00:42:21,970 ma criticamente tipi un apostrofo dopo le cinque, 989 00:42:21,970 --> 00:42:24,790 poi letteralmente la parola o nello spazio, e quindi preventivo, 990 00:42:24,790 --> 00:42:29,160 uno unquote è uguale a uno preventivo, Ma bando ha omesso che cosa? 991 00:42:29,160 --> 00:42:32,700 Ha omesso la citazione a destra e ha omesso la citazione a sinistra. 992 00:42:32,700 --> 00:42:35,170 >> Perché se l'aggressore la presunzione di scroob 993 00:42:35,170 --> 00:42:38,160 è che le persone che hanno scritto questo codice PHP non fosse così brillante, 994 00:42:38,160 --> 00:42:42,990 forse hanno solo qualche singolo cita intorno l'interpolazione 995 00:42:42,990 --> 00:42:45,210 di una variabile in parentesi graffe? 996 00:42:45,210 --> 00:42:48,620 E così, forse, avrebbe potuto genere di completare il loro pensiero 997 00:42:48,620 --> 00:42:53,290 per loro, ma in un modo che sta andando di lasciarlo hackerato il PIN di sistema. 998 00:42:53,290 --> 00:42:55,310 In altre parole, supponiamo che questo è il codice 999 00:42:55,310 --> 00:42:57,140 e ora inseriamo cosa scroob digitato. 1000 00:42:57,140 --> 00:42:58,770 Ed è rossa, perché è male. 1001 00:42:58,770 --> 00:43:01,310 >> E il testo sottostante è quello che ha digitato, 1002 00:43:01,310 --> 00:43:05,510 scroob potrebbe ingannare il server di Harvard in costruzione di una query SQL 1003 00:43:05,510 --> 00:43:07,440 stringa simile a questa. 1004 00:43:07,440 --> 00:43:11,760 Password uguale a 12345 o uno fa uno. 1005 00:43:11,760 --> 00:43:14,820 Il risultato di cui, logicamente, è che questo registrerà scroob 1006 00:43:14,820 --> 00:43:18,360 in se la sua password è 12345 oppure, se uno uguale 1007 00:43:18,360 --> 00:43:22,660 uno, che è ovviamente sempre vero, il che significa scroob ottiene sempre. 1008 00:43:22,660 --> 00:43:26,060 >> E così, il modo per risolvere questo, come in molti casi, 1009 00:43:26,060 --> 00:43:28,140 sarebbe quello di scrivere di più sulla difensiva. 1010 00:43:28,140 --> 00:43:30,390 Per usare qualcosa come il nostro funzione di query effettiva, che 1011 00:43:30,390 --> 00:43:33,980 vedrete in PSet7, dove noi inseriamo qualcosa come punti interrogativi qui. 1012 00:43:33,980 --> 00:43:35,980 E la bellezza della funzione di interrogazione che abbiamo 1013 00:43:35,980 --> 00:43:40,010 darvi è che difende contro questi i cosiddetti attacchi di SQL injection, dove 1014 00:43:40,010 --> 00:43:44,260 qualcuno sta ingannando il codice in iniettare il proprio codice SQL. 1015 00:43:44,260 --> 00:43:47,380 Perché quello che la funzione di query diamo si effettivamente fare, 1016 00:43:47,380 --> 00:43:51,270 se si utilizza la sintassi punto interrogativo e un secondo ed un terzo argomento qui, 1017 00:43:51,270 --> 00:43:54,590 è che cosa ha aggiungere al input che l'utente fornito? 1018 00:43:54,590 --> 00:43:56,060 Quelli backslash cita. 1019 00:43:56,060 --> 00:43:58,590 >> Quindi, sfugge a qualsiasi potenziale personaggi pericolosi. 1020 00:43:58,590 --> 00:44:01,000 Questo sembra strano ora, ma non è vulnerabile 1021 00:44:01,000 --> 00:44:03,260 perché non più cambiare la logica 1022 00:44:03,260 --> 00:44:06,470 perché tutta quella password è ora una sola offerta che non è, 1023 00:44:06,470 --> 00:44:07,596 infatti, la password di scroob. 1024 00:44:07,596 --> 00:44:09,845 Quindi, ci sono stati alcune battute su questo nel corso degli anni. 1025 00:44:09,845 --> 00:44:12,570 Quindi, questa è stata una foto scattata di qualche geek in un parcheggio 1026 00:44:12,570 --> 00:44:16,620 per cui si potrebbe sapere che alcune città e gli stati cercano di eseguire la scansione del licenza 1027 00:44:16,620 --> 00:44:19,460 Piastra per emettere la fattura o di biglietto se si passa attraverso, senza, come, 1028 00:44:19,460 --> 00:44:20,660 la cosa E-Z Pass. 1029 00:44:20,660 --> 00:44:24,490 Quindi, questa persona presume che forse le persone che scrivono il sistema E-Z Passo 1030 00:44:24,490 --> 00:44:28,240 non erano così brillante, e forse appena concatenato insieme una stringa, 1031 00:44:28,240 --> 00:44:32,190 in modo che lui o lei non poteva maliziosamente non solo completare il loro pensiero, 1032 00:44:32,190 --> 00:44:35,150 ma in realtà eseguire un comando male, che non abbiamo ancora detto, 1033 00:44:35,150 --> 00:44:36,380 ma si può intuire. 1034 00:44:36,380 --> 00:44:39,820 Che, oltre a cancellare e inserire e aggiornare e selezionare, 1035 00:44:39,820 --> 00:44:43,370 c'è anche una parola chiave chiamato goccia, che letteralmente cancella tutto 1036 00:44:43,370 --> 00:44:45,300 nel database, che è particolarmente grave. 1037 00:44:45,300 --> 00:44:48,760 >> Siamo in grado di ingrandire questa se è un po 'difficile da vedere. 1038 00:44:48,760 --> 00:44:52,300 Questo, oggi, è un famoso cartone animato questo è meravigliosamente intelligente ora 1039 00:44:52,300 --> 00:44:53,145 e comprensibile. 1040 00:44:53,145 --> 00:45:00,880 1041 00:45:00,880 --> 00:45:04,750 >> [Risata] 1042 00:45:04,750 --> 00:45:05,910 >> Sì, fresco. 1043 00:45:05,910 --> 00:45:06,800 Tipo di geeking fuori. 1044 00:45:06,800 --> 00:45:08,800 Quindi questi, poi, sono Attacchi di SQL injection. 1045 00:45:08,800 --> 00:45:13,050 E sono così facile da evitare utilizzando il codice giusto o le librerie giuste. 1046 00:45:13,050 --> 00:45:15,947 E vedrete in PSet7, che è perché vi diamo la funzione di query. 1047 00:45:15,947 --> 00:45:17,780 Quindi, una coppia di occhiolini che abbiamo pensato 1048 00:45:17,780 --> 00:45:19,930 darvi qui nel nostro rimanendo insieme minuti. 1049 00:45:19,930 --> 00:45:24,030 Quindi, se ne ricorda a settimana pari a zero, abbiamo introdotto questi due lampadine che 1050 00:45:24,030 --> 00:45:26,610 sono belle, non solo perché sono abbastanza e sono colorate, 1051 00:45:26,610 --> 00:45:29,450 ma perché supportano qualcosa chiamato una API, un'applicazione 1052 00:45:29,450 --> 00:45:31,980 Interfaccia di programmazione e in CS50 finora, abbiamo 1053 00:45:31,980 --> 00:45:34,440 per lo più incentrata sulla GET e POST, ma si scopre 1054 00:45:34,440 --> 00:45:37,390 ci sono altri verbi HTTP PUT come. 1055 00:45:37,390 --> 00:45:39,430 >> Ed infatti, questo era una diapositiva di settimana a zero 1056 00:45:39,430 --> 00:45:44,930 per cui se si scrive codice che invia a la PSet6 una richiesta HTTP che 1057 00:45:44,930 --> 00:45:49,647 sembra che questo con questa porzione di testo nella parte inferiore, che si chiama JSON, 1058 00:45:49,647 --> 00:45:52,230 o JavaScript Object Notation che ne parleremo la prossima settimana, 1059 00:45:52,230 --> 00:45:57,030 è possibile attivare o disattivare o modificare il colore delle luci come quelle. 1060 00:45:57,030 --> 00:46:00,480 Quindi, se CS50 ha anche oltre ad alcuni di quelle lampadine qui a New Haven 1061 00:46:00,480 --> 00:46:02,480 se si desidera prendere in prestito loro per progetti finali, 1062 00:46:02,480 --> 00:46:04,370 anche un po 'di Microsoft Bande, che sono come 1063 00:46:04,370 --> 00:46:07,619 Orologi che si indossa al polso che allo stesso modo hanno una API in modo da 1064 00:46:07,619 --> 00:46:10,040 in grado di scrivere il proprio software per loro. 1065 00:46:10,040 --> 00:46:12,490 >> Abbiamo un conto con Codice Apple iOS così 1066 00:46:12,490 --> 00:46:15,510 che se avete un Orologio Apple o un iPhone o un iPad o un iPod, 1067 00:46:15,510 --> 00:46:17,707 è possibile scrivere codice che in realtà funziona su quelli. 1068 00:46:17,707 --> 00:46:19,540 Abbiamo un sacco di Arduino, che sono 1069 00:46:19,540 --> 00:46:22,010 minuscoli computer senza casi, essenzialmente, 1070 00:46:22,010 --> 00:46:25,240 che è possibile collegare via USB, in genere al proprio Mac o PC, 1071 00:46:25,240 --> 00:46:28,810 scrivere il codice che viene eseguito su questi fisico dispositivi che spesso hanno i sensori su di loro 1072 00:46:28,810 --> 00:46:30,790 in modo da poter interagire con il mondo reale. 1073 00:46:30,790 --> 00:46:32,860 Abbiamo un sacco di dispositivi Leap movimento, 1074 00:46:32,860 --> 00:46:36,500 che sono i dispositivi USB per Mac e PC, qui e ancora una volta, a New Haven. 1075 00:46:36,500 --> 00:46:40,080 E se lo si collega al Mac, si può effettivamente controllare il computer 1076 00:46:40,080 --> 00:46:42,550 scrivendo software che tramite raggi infrarossi, 1077 00:46:42,550 --> 00:46:46,360 di capire verso dove le vostre mani umane sono, anche senza toccare la tastiera. 1078 00:46:46,360 --> 00:46:49,135 Abbiamo pensato di condividere un rapido intravedere questo, per esempio. 1079 00:46:49,135 --> 00:46:51,428 >> [RIPRODUZIONE DI BRANI MUSICALI] 1080 00:46:51,428 --> 00:47:55,840 1081 00:47:55,840 --> 00:47:57,590 Quindi, abbiamo un intero mucchio di queste cose, 1082 00:47:57,590 --> 00:48:01,040 Anche chiamato bracciali Myo che si mette sopra il vostro avambraccio 1083 00:48:01,040 --> 00:48:04,595 e quindi è possibile controllare il vero il mondo virtuale come questo mondo o. 1084 00:48:04,595 --> 00:48:06,471 >> [RIPRODUZIONE DI BRANI MUSICALI] 1085 00:48:06,471 --> 00:49:17,580 1086 00:49:17,580 --> 00:49:20,920 Oppure, abbiamo anche un po 'di Google Cartone, che è letteralmente, come, 1087 00:49:20,920 --> 00:49:24,841 una scatola di cartone si potrebbe mettere sulla vostra faccia, ma scorrevole nel telefono in esso 1088 00:49:24,841 --> 00:49:27,590 in modo che si mette il bicchiere del vostro telefono cellulare veramente vicino agli occhi. 1089 00:49:27,590 --> 00:49:30,190 E Google è di cartone piuttosto a buon mercato a $ 10 o $ 20. 1090 00:49:30,190 --> 00:49:32,230 E ha poco lenti che leggermente fuori turno 1091 00:49:32,230 --> 00:49:35,900 l'immagine sullo schermo per il umana occhi per offrirti un senso di profondità 1092 00:49:35,900 --> 00:49:39,550 in modo che in realtà hanno un 3D ambiente di fronte a voi. 1093 00:49:39,550 --> 00:49:42,927 Abbiamo anche un po 'di Samsung Gear, che è la versione più costosa di questo, 1094 00:49:42,927 --> 00:49:46,010 ma che può scorrere in un modo simile Telefono Android e vi darà l'illusione 1095 00:49:46,010 --> 00:49:48,309 di-- o dare l'esperienza di realtà virtuale. 1096 00:49:48,309 --> 00:49:50,850 E nei nostri ultimi due minuti, abbiamo pensato di provare a fare questo. 1097 00:49:50,850 --> 00:49:55,250 Se posso proiettare ciò che Colton ha qui solo per stuzzicare l'appetito, 1098 00:49:55,250 --> 00:49:58,442 mi permetta di andare avanti e butto sul grande schermo qui. 1099 00:49:58,442 --> 00:49:59,400 Mi permetta di uccidere le luci. 1100 00:49:59,400 --> 00:50:02,290 Colton, vuoi andare avanti e mettere sul vostro cellulare per un attimo 1101 00:50:02,290 --> 00:50:05,171 e venire su oltre al centro del palco? 1102 00:50:05,171 --> 00:50:07,420 E vuoi project-- questo è quello che vede Colton. 1103 00:50:07,420 --> 00:50:10,560 >> Ora, la connessione Wi-Fi a qui è non così forte per questo dispositivo 1104 00:50:10,560 --> 00:50:13,870 che questo è super avvincente, ma Colton è letteralmente 1105 00:50:13,870 --> 00:50:15,710 in questo luogo futuristico magico. 1106 00:50:15,710 --> 00:50:16,796 Si vede solo un'immagine. 1107 00:50:16,796 --> 00:50:19,920 Stai visualizzando l'occhio sinistro e destro che il suo cervello sono cucendo insieme 1108 00:50:19,920 --> 00:50:22,260 in un tridimensionale ambiente sul suo volto. 1109 00:50:22,260 --> 00:50:24,319 Ha appena selezionata un'opzione di menu qui. 1110 00:50:24,319 --> 00:50:27,360 E così ancora una volta, indossa questo auricolare con un telefono Samsung su di esso che è 1111 00:50:27,360 --> 00:50:29,080 in modalità wireless proiettando la nostra testa. 1112 00:50:29,080 --> 00:50:30,349 Ora sei su Marte, mi pare? 1113 00:50:30,349 --> 00:50:31,140 COLTON: Penso di sì. 1114 00:50:31,140 --> 00:50:32,181 Non sono sicuro che [incomprensibile]. 1115 00:50:32,181 --> 00:50:34,250 [Risata] 1116 00:50:34,250 --> 00:50:36,374 >> DAVID MALAN: Risulta Marte ha questi menu. 1117 00:50:36,374 --> 00:50:41,590 >> COLTON: [incomprensibile] po 'di fresco posti se vogliamo andare a-- 1118 00:50:41,590 --> 00:50:43,330 >> DAVID MALAN: Dove vogliamo andare? 1119 00:50:43,330 --> 00:50:45,837 >> COLTON: [incomprensibile] 1120 00:50:45,837 --> 00:50:48,170 DAVID MALAN: E vediamo dove ci Colton sta prendendo ora. 1121 00:50:48,170 --> 00:50:48,961 COLTON: [incomprensibile] 1122 00:50:48,961 --> 00:50:52,830 1123 00:50:52,830 --> 00:50:56,380 >> DAVID MALAN: Quindi, c'è così tanti luoghi diversi si può prendere da soli. 1124 00:50:56,380 --> 00:51:00,590 C'è FAPIs tramite la quale è possibile scrivere giochi o interazioni 1125 00:51:00,590 --> 00:51:01,950 eseguire, in ultima analisi, al telefono. 1126 00:51:01,950 --> 00:51:03,908 Quindi, è in realtà solo scrittura di un telefono cellulare app. 1127 00:51:03,908 --> 00:51:06,380 Ma grazie al software e le capacità grafiche, 1128 00:51:06,380 --> 00:51:08,765 ora Colton è in questo piccolo piccolo cottage. 1129 00:51:08,765 --> 00:51:10,515 E con il rischio di travolgendo noi stessi, 1130 00:51:10,515 --> 00:51:13,330 Colton e mi atterrò in giro per mentre alla fine della classe qui oggi 1131 00:51:13,330 --> 00:51:14,300 se volete venire e giocare. 1132 00:51:14,300 --> 00:51:16,350 E noi li porteremo la prossima settimana pure. 1133 00:51:16,350 --> 00:51:18,420 Senza ulteriori, ado questo è tutto per oggi. 1134 00:51:18,420 --> 00:51:21,990 Ci vediamo la prossima settimana. 1135 00:51:21,990 --> 00:51:24,140 >> [MUSICA - Ragga TWINS, "uomo cattivo"] 1136 00:51:24,140 --> 00:55:23,146