1 00:00:00,000 --> 00:00:02,405 >> [REPRODUCCIÓ DE MÚSICA] 2 00:00:02,405 --> 00:00:10,439 3 00:00:10,439 --> 00:00:11,980 DAVID Malan: Molt bé, això és CS50. 4 00:00:11,980 --> 00:00:13,740 Aquest és el cap de setmana 8. 5 00:00:13,740 --> 00:00:15,887 I avui, comencem per omplir algunes peces 6 00:00:15,887 --> 00:00:17,720 quan es tracta de la construcció coses a la web. 7 00:00:17,720 --> 00:00:20,020 Per tant, recordar que dilluns passem molt més temps 8 00:00:20,020 --> 00:00:22,530 en PHP, que és aquesta dinàmica llenguatge de programació que 9 00:00:22,530 --> 00:00:26,872 ens anem de sortida, entre d'altres coses, HTML i altres tal contingut 10 00:00:26,872 --> 00:00:27,830 que anem a voler veure. 11 00:00:27,830 --> 00:00:30,871 Però en realitat no hem vist com anem a emmagatzemar qualsevol informació. 12 00:00:30,871 --> 00:00:34,477 De fet, gairebé qualsevol que el súper pàgines web interessants que visita avui 13 00:00:34,477 --> 00:00:36,560 tenir algun tipus de base de dades a la part final, no? 14 00:00:36,560 --> 00:00:39,540 Facebook dubte emmagatzema gran quantitat de dades sobre tots nosaltres i botigues de Gmail de tot 15 00:00:39,540 --> 00:00:40,210 dels seus correus electrònics. 16 00:00:40,210 --> 00:00:44,150 >> I així, molts altres llocs no són només contingut estàtic que és informatiu. 17 00:00:44,150 --> 00:00:45,640 En realitat és dinàmica d'alguna manera. 18 00:00:45,640 --> 00:00:48,480 Vostè proporciona l'entrada, s'actualitza les pàgines d'altres persones. 19 00:00:48,480 --> 00:00:50,620 Vostè rep missatges, envia missatges, i així successivament. 20 00:00:50,620 --> 00:00:54,250 Així que avui, mirem més de prop les bases d'un projecte 21 00:00:54,250 --> 00:00:57,330 que vostè va a submergir-se en la propera setmana, CS50 Finances, que 22 00:00:57,330 --> 00:01:00,509 és en realitat va a haver de construir cosa que no és en C, però en PHP. 23 00:01:00,509 --> 00:01:02,550 Un lloc web que es veu un mica alguna cosa com això 24 00:01:02,550 --> 00:01:05,810 que permet comprar i vendre accions que són en realitat 25 00:01:05,810 --> 00:01:09,044 va a recórrer a temps real les dades de saldos de Yahoo Finances. 26 00:01:09,044 --> 00:01:11,960 I així, en última instància, vostè tindrà la il·lusió per a tu i per als usuaris 27 00:01:11,960 --> 00:01:14,550 que en realitat estàs comprant i venent accions i aconseguir el temps gairebé real, 28 00:01:14,550 --> 00:01:16,800 actualitzacions, la gestió d'una cartera, tots els quals 29 00:01:16,800 --> 00:01:20,310 requerirà tenir, en última instància, una base de dades dels usuaris. 30 00:01:20,310 --> 00:01:23,330 >> Així, en les seves pròpies paraules, especialment si no estàs 31 00:01:23,330 --> 00:01:25,670 molt familiaritzats amb l'ordinador ciència o bases de dades, el que 32 00:01:25,670 --> 00:01:30,790 saps una base de dades per a ser en aquest moment, en termes no tècnics? 33 00:01:30,790 --> 00:01:32,300 Que és? 34 00:01:32,300 --> 00:01:36,882 Com ho descriuries a un company de quart o un amic? 35 00:01:36,882 --> 00:01:40,100 >> AUDIÈNCIA: [inaudible] informació [inaudible] 36 00:01:40,100 --> 00:01:44,430 >> DAVID Malan: Així, una llista de la informació, o un almacén-- una llista d'informació 37 00:01:44,430 --> 00:01:47,160 que és possible que vulgueu emmagatzemar per alguna cosa, com un usuari. 38 00:01:47,160 --> 00:01:50,190 ¿I quins usuaris tenen associat amb ells? 39 00:01:50,190 --> 00:01:53,160 Si vostè és un usuari al Facebook o Gmail, ¿quines són les característiques 40 00:01:53,160 --> 00:01:54,940 que tots els usuaris tenen? 41 00:01:54,940 --> 00:01:58,530 Igual que, el que podria ser part de la columnes al full de càlcul a què ens 42 00:01:58,530 --> 00:01:59,390 al·ludit última vegada? 43 00:01:59,390 --> 00:02:01,140 Perquè de nou, vostè pot pensar en una base de dades 44 00:02:01,140 --> 00:02:05,810 realment com un arxiu d'Excel de luxe o Google Full de càlcul o arxiu dels números d'Apple. 45 00:02:05,810 --> 00:02:08,280 >> Llavors, què pensa vostè de quan es pensa en un usuari? 46 00:02:08,280 --> 00:02:11,290 Què tenen? 47 00:02:11,290 --> 00:02:11,790 Què és això? 48 00:02:11,790 --> 00:02:12,470 >> AUDIÈNCIA: Un nom. 49 00:02:12,470 --> 00:02:13,303 >> DAVID Malan: Un nom. 50 00:02:13,303 --> 00:02:16,840 Així que si el nom, com, David Malan seria el nom d'algun usuari. 51 00:02:16,840 --> 00:02:17,980 ¿Què més ha un usuari? 52 00:02:17,980 --> 00:02:18,770 >> AUDIÈNCIA: Un ID. 53 00:02:18,770 --> 00:02:19,561 >> DAVID Malan: Un ID. 54 00:02:19,561 --> 00:02:23,320 Així que, com un número d'identificació, com el Harvard DNI o el teu Yale Net ID o similars. 55 00:02:23,320 --> 00:02:24,923 Quina altra cosa podria tenir un usuari? 56 00:02:24,923 --> 00:02:25,890 >> AUDIÈNCIA: Clau. 57 00:02:25,890 --> 00:02:29,240 >> DAVID Malan: Una contrasenya, potser una direcció, potser un número de telèfon, potser 58 00:02:29,240 --> 00:02:30,050 una adreça de correu electrònic. 59 00:02:30,050 --> 00:02:32,640 Així, hi ha munts de camps i aquest podria espècie d'espiral fora de control 60 00:02:32,640 --> 00:02:34,760 ràpidament tan aviat com comenci adonar-se, oh, anem a emmagatzemar aquest 61 00:02:34,760 --> 00:02:36,190 i anem a guardar això i allò. 62 00:02:36,190 --> 00:02:37,657 >> Però, com podem realment fer això? 63 00:02:37,657 --> 00:02:39,740 Així que de nou, el model mental tenir per ara, ja que 64 00:02:39,740 --> 00:02:42,320 submergir-se en SQL real, Structured Query Language, 65 00:02:42,320 --> 00:02:44,186 és una base de dades que té aquest aspecte. 66 00:02:44,186 --> 00:02:45,310 Són només les files i columnes. 67 00:02:45,310 --> 00:02:48,309 I vostè pot imaginar Google Spreadsheets o qualsevol nombre d'altres programes. 68 00:02:48,309 --> 00:02:52,130 Però el que és clau sobre MySQL, que és el programari de base de dades que utilitzarem, 69 00:02:52,130 --> 00:02:54,920 la llibertat obertament disponible- usos de Facebook 70 00:02:54,920 --> 00:02:59,200 i qualsevol nombre d'altres websites-- base de dades emmagatzema coses relacional. 71 00:02:59,200 --> 00:03:01,770 I una base de dades relacional només significa que, literalment, 72 00:03:01,770 --> 00:03:03,672 desa les vostres dades en files i columnes. 73 00:03:03,672 --> 00:03:04,630 És tan simple com això. 74 00:03:04,630 --> 00:03:07,230 >> Així que, fins i tot alguna cosa com Oracle que vostè pot haver sentit general de 75 00:03:07,230 --> 00:03:08,271 és una base de dades relacional. 76 00:03:08,271 --> 00:03:10,929 I sota de la campana, que emmagatzema les dades en files i columnes. 77 00:03:10,929 --> 00:03:12,970 I Oracle que una cobra molts diners per fer això, 78 00:03:12,970 --> 00:03:15,550 mentre que els càrrecs de MySQL que res per al mateix. 79 00:03:15,550 --> 00:03:18,790 Per tant, SQL se'ns va a donar almenys quatre operacions. 80 00:03:18,790 --> 00:03:23,190 La capacitat de seleccionar les dades, com a lectura dades, inserir, eliminar i actualitzar dades. 81 00:03:23,190 --> 00:03:25,525 En altres paraules, aquestes són realment les quatre operacions fonamentals 82 00:03:25,525 --> 00:03:28,950 que permetran que canviem coses en aquestes files i columnes. 83 00:03:28,950 --> 00:03:33,250 >> L'eina que utilitzarem avui especialment aprendre SQL i jugar amb ella 84 00:03:33,250 --> 00:03:34,627 de nou es diu PHP MyAdmin. 85 00:03:34,627 --> 00:03:35,460 És eina basada en web. 86 00:03:35,460 --> 00:03:38,200 Coincidència total que està escrit en PHP. 87 00:03:38,200 --> 00:03:42,400 Però va a donar-nos un gràfic interfície d'usuari perquè puguem realment 88 00:03:42,400 --> 00:03:46,054 crear aquestes files i columnes i després parlar amb ells a través de codi. 89 00:03:46,054 --> 00:03:47,970 Així que, ara començarem a el que crec que és francament 90 00:03:47,970 --> 00:03:51,000 tipus de procés de la diversió de la construcció de la part de darrere dels llocs web, 91 00:03:51,000 --> 00:03:54,580 les parts que els usuaris no ho fan veure, però sens dubte es preocupen, 92 00:03:54,580 --> 00:03:56,170 perquè això és més aviat de dades va. 93 00:03:56,170 --> 00:03:59,570 Per tant, similar a C i una poc menys com PHP, 94 00:03:59,570 --> 00:04:04,954 SQL o una base de dades que suporta SQL, té almenys aquests tipus de dades 95 00:04:04,954 --> 00:04:05,870 i raïms d'altres. 96 00:04:05,870 --> 00:04:08,107 CHAR, VARCHAR, INT, BIGINT, DECIMAL i DATETIME. 97 00:04:08,107 --> 00:04:09,940 I hi ha un tot munt d'altres característiques, 98 00:04:09,940 --> 00:04:11,940 però farem això per A tall d'exemple real. 99 00:04:11,940 --> 00:04:16,450 >> Vaig a anar a CS50 IDE en el qual, per endavant, m'he inscrit 100 00:04:16,450 --> 00:04:19,372 i jo també he visitat un URL per aquesta eina anomenada PHP MyAdmin. 101 00:04:19,372 --> 00:04:22,580 I en el problema establert set, et direm exactament com arribar a aquesta interfície 102 00:04:22,580 --> 00:04:23,200 tant be. 103 00:04:23,200 --> 00:04:25,640 A la cantonada superior esquerra, notar-ho diu conferència. 104 00:04:25,640 --> 00:04:27,610 I això només vol dir que per endavant, he creat 105 00:04:27,610 --> 00:04:31,360 una base de dades trucada de conferència buit que no té fulls de càlcul en ella encara. 106 00:04:31,360 --> 00:04:32,600 No hi ha files i columnes. 107 00:04:32,600 --> 00:04:34,308 A causa de que la primera El farem 108 00:04:34,308 --> 00:04:37,100 es començarà a crear una taula això va a emmagatzemar els nostres usuaris. 109 00:04:37,100 --> 00:04:39,100 >> Així que, literalment sobre aquí a la dreta, jo sóc 110 00:04:39,100 --> 00:04:42,070 dirà a la base de dades Vull una taula anomenada Usuaris. 111 00:04:42,070 --> 00:04:44,845 Per tant, això és com l'arxiu que jo voleu emmagatzemar totes les meves dades. 112 00:04:44,845 --> 00:04:45,720 I quantes columnes? 113 00:04:45,720 --> 00:04:47,740 Bé, anem a mantenir simple per ara. 114 00:04:47,740 --> 00:04:51,855 Només vull guardar com un nom d'usuari i un nom per a un usuari. 115 00:04:51,855 --> 00:04:53,020 Començarem petita. 116 00:04:53,020 --> 00:04:55,370 Per tant, vull dues columnes totals. 117 00:04:55,370 --> 00:04:57,360 I jo seguiré endavant i feu clic a Vés. 118 00:04:57,360 --> 00:04:59,210 I després, per aquests columnes, el que vaig 119 00:04:59,210 --> 00:05:04,576 a fer-- si això internet cooperates-- bé, 120 00:05:04,576 --> 00:05:05,950 així que anem a intentar-ho de nou. 121 00:05:05,950 --> 00:05:09,180 Vaig a crear una taula anomenada Els usuaris amb dues columnes, feu clic a Vés, OK. 122 00:05:09,180 --> 00:05:10,520 Ara ho tenim molt ràpid. 123 00:05:10,520 --> 00:05:12,065 Gràcies, molt ben fet. 124 00:05:12,065 --> 00:05:14,440 Molt bé, i què és el que volem aquestes columnes que es diuen? 125 00:05:14,440 --> 00:05:16,080 >> Així, un va a ser cridat nom d'usuari. 126 00:05:16,080 --> 00:05:19,480 Per tant, tot el que veig aquí-- i la interfície francament posa una mica lleig, finalment, 127 00:05:19,480 --> 00:05:21,270 una vegada que es comença a escriure en totes aquestes dades. 128 00:05:21,270 --> 00:05:27,450 Però el que és interessant és que tipus de paradoxalment, estic creant columnes, 129 00:05:27,450 --> 00:05:29,977 però l'eina té tontament el posaven en files 130 00:05:29,977 --> 00:05:31,560 de manera que pugui configurar aquestes columnes. 131 00:05:31,560 --> 00:05:33,550 Així, hi ha dos espais en blanc que hi ha a Nom. 132 00:05:33,550 --> 00:05:36,180 I un d'aquests camps I voler anomenat nom d'usuari, 133 00:05:36,180 --> 00:05:38,000 i l'altre camp Vull cridar Nom. 134 00:05:38,000 --> 00:05:40,340 >> I ara he de triar tipus de dades per a aquestes coses. 135 00:05:40,340 --> 00:05:42,330 Així, mentre que en Excel i Google Spreadsheets, 136 00:05:42,330 --> 00:05:45,531 si vols una columna, que, literalment, només has d'escriure el nom o nom d'usuari, premeu Enter. 137 00:05:45,531 --> 00:05:48,030 Potser ho fas negreta només per la claredat, però això és tot. 138 00:05:48,030 --> 00:05:50,140 No s'especifica la tipus de les columnes. 139 00:05:50,140 --> 00:05:53,790 Ara a Google Spreadsheets o Excel, podria especificar com es processa les dades. 140 00:05:53,790 --> 00:05:58,120 Vostè podria anar al menú Format, i vostè pot especificar mostrar aquest signe dòlar com, 141 00:05:58,120 --> 00:05:59,900 mostrar això com un valor de punt flotant. 142 00:05:59,900 --> 00:06:01,990 >> Així, és similar en esperit a que el que estem a punt de fer, 143 00:06:01,990 --> 00:06:04,740 però això és en realitat va a la força que les dades siguin un cert tipus. 144 00:06:04,740 --> 00:06:07,750 Ara, tot i que fa un moment em va dir que hi ha només uns pocs tipus de dades, 145 00:06:07,750 --> 00:06:11,120 hi ha realment una molt, i són 146 00:06:11,120 --> 00:06:12,910 en diversos graus d'especificitat. 147 00:06:12,910 --> 00:06:14,970 I com un part, que fins i tot pot fer coses de luxe 148 00:06:14,970 --> 00:06:17,520 com geometries d'emmagatzematge dins d'una base de dades. 149 00:06:17,520 --> 00:06:19,250 Pot emmagatzemar coses com coordenades GPS 150 00:06:19,250 --> 00:06:22,420 i, de fet trobar, matemàticament, punts que estan a prop d'altres. 151 00:06:22,420 --> 00:06:24,128 Però anem a mantenir aquesta super simple 152 00:06:24,128 --> 00:06:26,800 i arriben fins aquí, tots els anomenats tipus de cadenes. 153 00:06:26,800 --> 00:06:29,240 >> Així que, aquí tens una llista d'un tota munt d'opcions. 154 00:06:29,240 --> 00:06:32,740 CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. 155 00:06:32,740 --> 00:06:34,110 I és una mica aclaparador. 156 00:06:34,110 --> 00:06:37,610 I, per desgràcia, una mica paradoxalment a C, 157 00:06:37,610 --> 00:06:40,120 CHAR no és realment un CHAR. 158 00:06:40,120 --> 00:06:44,170 Si especifica en una base de dades que el seu tipus de dades és CHAR, 159 00:06:44,170 --> 00:06:47,390 això vol dir que sí, que és un CHAR, però és un o més caràcters. 160 00:06:47,390 --> 00:06:49,630 I vostè ha d'especificar quants CHAR desitja. 161 00:06:49,630 --> 00:06:51,636 Així que, què és una típica longitud d'un nom d'usuari? 162 00:06:51,636 --> 00:06:52,760 Hi ha un límit en general? 163 00:06:52,760 --> 00:06:53,920 >> AUDIÈNCIA: [inaudible] 164 00:06:53,920 --> 00:06:55,050 >> DAVID Malan: 16 potser? 165 00:06:55,050 --> 00:06:55,990 Alguna cosa així. 166 00:06:55,990 --> 00:06:57,948 Ja saps, de tornada al dia, el que solia ser 8. 167 00:06:57,948 --> 00:07:00,289 A vegades és 16 vegades és encara més que això. 168 00:07:00,289 --> 00:07:02,080 I així, això no ho fa significa dóna'm 1 CHAR. 169 00:07:02,080 --> 00:07:04,730 Això vol dir que he de especificar la longitud del camp, 170 00:07:04,730 --> 00:07:07,402 i ara jo podria dir alguna cosa així com 16. 171 00:07:07,402 --> 00:07:08,610 I no hi ha una solució de compromís aquí. 172 00:07:08,610 --> 00:07:11,360 Per tant, anem a veure en un moment això vol dir que un, 173 00:07:11,360 --> 00:07:14,620 cada nom d'usuari ha de ser de 16 caràcters. 174 00:07:14,620 --> 00:07:18,720 Però esperi un minut, M-A-L-A-N. Si això és el meu nom d'usuari i jo només estic fent servir 5, 175 00:07:18,720 --> 00:07:23,070 ¿Què li proposarà que la base de dades de fer pels altres 11 personatges que 176 00:07:23,070 --> 00:07:24,471 M'he reservat espai per? 177 00:07:24,471 --> 00:07:25,220 Què faríes? 178 00:07:25,220 --> 00:07:26,480 >> AUDIÈNCIA: [inaudible] 179 00:07:26,480 --> 00:07:27,160 >> DAVID Malan: Sí, només fer que tots nul. 180 00:07:27,160 --> 00:07:28,290 Fer-espais. 181 00:07:28,290 --> 00:07:30,816 Però probablement nul, de manera que un gran quantitat de zeros com nom. 182 00:07:30,816 --> 00:07:33,190 Així, d'una banda, tenim ara assegurat que el meu nom d'usuari 183 00:07:33,190 --> 00:07:34,780 pot ser no més de 16 caràcters. 184 00:07:34,780 --> 00:07:37,590 I l'altra cara d'això és que si tenia un nom molt llarg 185 00:07:37,590 --> 00:07:39,940 o volia un temps molt llarg username com alguns de vostès 186 00:07:39,940 --> 00:07:44,840 nois puguin tenir en aquest col·legi o en Yale.edu, no es pot tenir un. 187 00:07:44,840 --> 00:07:47,177 I així, de fet, si vostè té mai registrada per un lloc web 188 00:07:47,177 --> 00:07:49,385 i et cridar dient la contrasenya és massa llarga 189 00:07:49,385 --> 00:07:52,710 o el seu nom d'usuari és massa llarg, és simplement perquè un programador, quan 190 00:07:52,710 --> 00:07:55,500 la configuració de la base de dades, decidit que aquest camp 191 00:07:55,500 --> 00:07:57,150 no més d'aquesta longitud ser. 192 00:07:57,150 --> 00:08:00,580 >> Molt bé, i què si es procedeix a nomenar? 193 00:08:00,580 --> 00:08:05,240 Per quant de temps deu un nom de l'ésser humà típic? 194 00:08:05,240 --> 00:08:07,492 Quants personatges, 16? 195 00:08:07,492 --> 00:08:09,450 Suposo que vam poder trobar algú en aquesta sala 196 00:08:09,450 --> 00:08:13,210 on per la seva primera més última nom té més de 16 caràcters. 197 00:08:13,210 --> 00:08:14,850 Així que, el que és millor que això, 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 Més gran? 201 00:08:20,350 --> 00:08:20,980 30? 202 00:08:20,980 --> 00:08:21,855 >> AUDIÈNCIA: [inaudible] 203 00:08:21,855 --> 00:08:23,700 DAVID Malan: 5000, Déu meu. 204 00:08:23,700 --> 00:08:26,309 Llavors, això és probablement una decent límit superior, per així dir-ho. 205 00:08:26,309 --> 00:08:28,350 I aquí tenim la classe de per fer un judici. 206 00:08:28,350 --> 00:08:30,400 Igual, no hi ha una resposta aquí. 207 00:08:30,400 --> 00:08:32,740 Infinit no és molt possible, perquè som el temps 208 00:08:32,740 --> 00:08:34,781 va a tener-- estem es quedarà sense memòria. 209 00:08:34,781 --> 00:08:36,909 Per tant, hem de fer una crida de judici en algun moment. 210 00:08:36,909 --> 00:08:41,010 >> Molt comú seria, per exemple, de servei- i Permetre especificar CHAR aquí 211 00:08:41,010 --> 00:08:46,050 com abans-- 255 era, literalment, la límit superior d'aquest programari de base de dades 212 00:08:46,050 --> 00:08:46,700 fa anys. 213 00:08:46,700 --> 00:08:48,575 I així, una gran quantitat d'éssers humans acaba de dir, està bé. 214 00:08:48,575 --> 00:08:49,420 255 és el límit. 215 00:08:49,420 --> 00:08:50,620 Utilitzarem el màxim. 216 00:08:50,620 --> 00:08:51,870 I això és bastant ridícul. 217 00:08:51,870 --> 00:08:55,060 Igual que, si vostè està escrivint a algú és nom de 200 caràcters, a més, 218 00:08:55,060 --> 00:08:56,140 que una mica ridícul. 219 00:08:56,140 --> 00:08:59,624 >> Però, recordeu que no és ASCII l'únic sistema per als personatges. 220 00:08:59,624 --> 00:09:01,540 I així, especialment en una gran quantitat d'idiomes asiàtics 221 00:09:01,540 --> 00:09:04,248 on hi ha personatges que no poden expressar en els teclats com el meu Units 222 00:09:04,248 --> 00:09:08,209 teclat, alguns personatges en realitat prendre fins a 16 bits en lloc de vuit bits. 223 00:09:08,209 --> 00:09:10,250 I així, en realitat això no és tan irraonable 224 00:09:10,250 --> 00:09:12,250 que necessitem més espai si volem encaixar 225 00:09:12,250 --> 00:09:16,252 personatges més grans que el dels EUA les cèntriques hem tendit a discutir. 226 00:09:16,252 --> 00:09:17,460 Per tant, necessitem una mica de límit superior. 227 00:09:17,460 --> 00:09:21,470 No sé el que el millor és, però 255 és generalment molt comú. 228 00:09:21,470 --> 00:09:22,700 25 se sent baix. 229 00:09:22,700 --> 00:09:23,857 16, 32 se senten baix. 230 00:09:23,857 --> 00:09:25,690 M'agradaria errar pel costat d'alguna cosa superior. 231 00:09:25,690 --> 00:09:27,330 Però hi ha una solució de compromís, com sempre. 232 00:09:27,330 --> 00:09:31,902 Quin és el, potser, obvi comerç fora de la reserva de 255 caràcters 233 00:09:31,902 --> 00:09:33,360 per al nom de tots els membres de la meva base de dades? 234 00:09:33,360 --> 00:09:34,230 >> AUDIÈNCIA: [inaudible] 235 00:09:34,230 --> 00:09:34,510 >> DAVID Malan: Què és això? 236 00:09:34,510 --> 00:09:35,430 >> AUDIÈNCIA: [inaudible] 237 00:09:35,430 --> 00:09:37,138 >> DAVID Malan: És un gran quantitat de memòria, no? 238 00:09:37,138 --> 00:09:42,280 M-A-L-A-N. Acabo perdut 250 personatges només per emmagatzemar el meu nom 239 00:09:42,280 --> 00:09:46,000 defensiva en cas que algú a la classe té un nom molt llarg. 240 00:09:46,000 --> 00:09:47,940 Això sembla com una compensació excessiva. 241 00:09:47,940 --> 00:09:52,040 >> Així, resulta que SQL, aquest llenguatge de base de dades, 242 00:09:52,040 --> 00:09:55,480 en realitat dóna suport alguna cosa anomenats VARCHAR o CHAR variable. 243 00:09:55,480 --> 00:09:59,390 I això és una espècie de bonítol en què aquesta permet especificar no és una fixa 244 00:09:59,390 --> 00:10:01,900 amplada, sinó més aviat, una amplada variable. 245 00:10:01,900 --> 00:10:05,060 I més específicament, una amplada màxima del camp. 246 00:10:05,060 --> 00:10:08,901 Per tant, això vol dir que un nom pot ser no més de 250 caràcters, 247 00:10:08,901 --> 00:10:10,150 però sí que pot ser inferior. 248 00:10:10,150 --> 00:10:11,733 I la base de dades va ser intel·ligent. 249 00:10:11,733 --> 00:10:14,860 Si poses en M-A-L-A-N, només va a utilitzar cinc, 250 00:10:14,860 --> 00:10:18,120 potser sis bytes per com un caràcter nul de sortida, 251 00:10:18,120 --> 00:10:23,330 i no gastar un addicional 249 o 250 bytes innecessàriament. 252 00:10:23,330 --> 00:10:27,380 >> Per tant, això sembla com hauria han començat amb aquesta història. 253 00:10:27,380 --> 00:10:29,140 Però sempre hi ha una solució de compromís. 254 00:10:29,140 --> 00:10:33,024 Així, d'una banda, un nom d'usuari He especificada per ser codificat en 16, 255 00:10:33,024 --> 00:10:34,940 i potser això no era la decisió correcta, potser 256 00:10:34,940 --> 00:10:40,040 és, però ¿per què no fer servir Varchars per a tot? 257 00:10:40,040 --> 00:10:42,020 >> Existeix per una raó. 258 00:10:42,020 --> 00:10:46,200 Per què no utilitzar VARCHAR per a cada camp la longitud no saps per endavant 259 00:10:46,200 --> 00:10:48,180 si es tracta d'una gran cosa, no? 260 00:10:48,180 --> 00:10:50,482 Utilitzeu només tant espai com que necessita fins a aquest límit? 261 00:10:50,482 --> 00:10:51,271 >> AUDIÈNCIA: Més lent. 262 00:10:51,271 --> 00:10:52,146 DAVID Malan: corrector ortogràfic? 263 00:10:52,146 --> 00:10:53,120 AUDIÈNCIA: Fa que sigui més lent? 264 00:10:53,120 --> 00:10:53,970 DAVID Malan: Oh, és més lent. 265 00:10:53,970 --> 00:10:55,720 Bé, això és gairebé sempre la resposta, francament. 266 00:10:55,720 --> 00:10:56,520 Igual que, quin és l'equilibri? 267 00:10:56,520 --> 00:10:58,570 És ben costa més espai o costa més temps. 268 00:10:58,570 --> 00:11:00,111 Així, en aquest cas, podria ser més lent. 269 00:11:00,111 --> 00:11:00,920 Per què? 270 00:11:00,920 --> 00:11:05,830 >> AUDIÈNCIA: [inaudible] la determinació de [inaudible]. 271 00:11:05,830 --> 00:11:06,640 >> DAVID Malan: Good. 272 00:11:06,640 --> 00:11:09,670 Així, es pot recordar fins i tot de PSED5, jugant amb el seu enfocament 273 00:11:09,670 --> 00:11:12,750 el diccionari, si vostè ha de assignar memòria dinàmicament o mantenir 274 00:11:12,750 --> 00:11:14,630 el creixement d'un tampó, que en realitat pot ser lent. 275 00:11:14,630 --> 00:11:16,963 Si vostè ha de trucar a malloc sota de la campana i potser 276 00:11:16,963 --> 00:11:19,610 això és el que MySQL està fent, pel que sens dubte que podria ser el cas. 277 00:11:19,610 --> 00:11:22,430 I si vostè pensa manera tornar a PSet-- o fins i tot 278 00:11:22,430 --> 00:11:26,340 setmanes, dues coses quan ens va agradar recerca binària o fins i tot cerca lineal, 279 00:11:26,340 --> 00:11:30,690 una de les coses bones de cada paraula en una base de dades o cada paraula en una columna 280 00:11:30,690 --> 00:11:33,690 sent exactament la mateixa longitud, fins i tot si un munt d'aquests personatges 281 00:11:33,690 --> 00:11:37,390 estan en blanc, és que es pot utilitzar accés aleatori en les seves dades, no? 282 00:11:37,390 --> 00:11:40,310 >> Si vostè sap que cada paraula és 16 caràcters de distància, 283 00:11:40,310 --> 00:11:46,460 pot utilitzar l'aritmètica de punters, de manera que parlar, i vagi que ens 16, 32, 48, 64, 284 00:11:46,460 --> 00:11:49,589 i vostè pot saltar l'instant utilitzant l'aritmètica 285 00:11:49,589 --> 00:11:51,130 qualsevol de les paraules a la base de dades. 286 00:11:51,130 --> 00:11:54,280 Mentre que si es tracta d'un VARCHAR, ¿Quin lloc ha de fer? 287 00:11:54,280 --> 00:11:55,960 >> [Timbre del telèfon] 288 00:11:55,960 --> 00:11:58,680 >> Si és un VARCHAR, que no poden utilitzar l'accés aleatori. 289 00:11:58,680 --> 00:12:01,341 El que has de buscar o fer? 290 00:12:01,341 --> 00:12:01,840 Sí? 291 00:12:01,840 --> 00:12:03,240 >> AUDIÈNCIA: [inaudible] 292 00:12:03,240 --> 00:12:04,310 >> DAVID Malan: Miri a través de la traça whole-- 293 00:12:04,310 --> 00:12:06,518 a través de tota la llista buscant el que, el més probable? 294 00:12:06,518 --> 00:12:08,356 Quin tipus de valor especial? 295 00:12:08,356 --> 00:12:09,230 AUDIÈNCIA: [inaudible] 296 00:12:09,230 --> 00:12:11,105 DAVID Malan: Buscant per als terminadors nuls 297 00:12:11,105 --> 00:12:13,637 que demarquen la separació de paraules. 298 00:12:13,637 --> 00:12:15,720 Així que de nou, una solució de compromís, i no hi ha una resposta correcta. 299 00:12:15,720 --> 00:12:18,380 Però aquí és on, especialment quan els usuaris arriben a ser molts 300 00:12:18,380 --> 00:12:21,700 i la seva càrrega en els seus servidors, la nombre de persones que l'utilitzen s'eleva, 301 00:12:21,700 --> 00:12:23,650 aquests són en realitat les decisions no trivials. 302 00:12:23,650 --> 00:12:26,640 Així, podem deixar això com això, però anem a desplaceu-vos cap a baix a la dreta 303 00:12:26,640 --> 00:12:27,332 aquí. 304 00:12:27,332 --> 00:12:30,290 Ara, hi ha un parell de columnes on hem de fer un judici. 305 00:12:30,290 --> 00:12:35,170 Té sentit per permetre que un usuari de nom, nom d'usuari d'un usuari o un usuari de 306 00:12:35,170 --> 00:12:36,370 nom, en ser nul? 307 00:12:36,370 --> 00:12:37,610 És a dir, només en blanc. 308 00:12:37,610 --> 00:12:40,360 Se sent una mica sense sentit, així que estic no va a revisar aquestes caixes. 309 00:12:40,360 --> 00:12:42,670 Però resulta que en un base de dades, es pot dir, 310 00:12:42,670 --> 00:12:44,620 algú pot tenir opcionalment aquest valor. 311 00:12:44,620 --> 00:12:47,180 Aquesta columna no té estar realment allà. 312 00:12:47,180 --> 00:12:48,570 >> Ara, hi ha un menú desplegable. 313 00:12:48,570 --> 00:12:50,810 I noto que encara estic a la primera fila allà, 314 00:12:50,810 --> 00:12:52,520 pel que estic parlant nom d'usuari ara. 315 00:12:52,520 --> 00:12:56,290 I resulta que una base de dades, A diferència d'una simple senzilla full de càlcul, 316 00:12:56,290 --> 00:12:58,520 té característiques de gran abast anomenats índexs. 317 00:12:58,520 --> 00:13:02,600 I un índex és una manera de dir la base de dades per endavant que la I humana 318 00:13:02,600 --> 00:13:03,900 sóc més intel·ligent que tu. 319 00:13:03,900 --> 00:13:10,430 >> Sé quin tipus de consultes, seleccioneu o inserir o eliminar o actualitzar, 320 00:13:10,430 --> 00:13:13,182 que el meu codi es va a acabar fent d'aquesta base de dades. 321 00:13:13,182 --> 00:13:14,390 Vull llegir una gran quantitat de dades. 322 00:13:14,390 --> 00:13:15,681 Vull inserir una gran quantitat de dades. 323 00:13:15,681 --> 00:13:17,530 Vull constantment eliminar una gran quantitat de dades. 324 00:13:17,530 --> 00:13:21,520 Si sé que seré accedir a un camp com el nom d'usuari molt, 325 00:13:21,520 --> 00:13:24,770 Preventivament puc dir la base de dades, jo sé més que tu, 326 00:13:24,770 --> 00:13:29,220 i vull decret que vostè ha índex d'aquest camp. 327 00:13:29,220 --> 00:13:33,200 Quan la indexació d'un camp o una columna significa que la base de dades amb antelació 328 00:13:33,200 --> 00:13:37,040 ha de demanar prestat algunes idees de com, setmana quatre-cinc i sis del CS50 329 00:13:37,040 --> 00:13:39,240 i de fet construir una mena de recerca binària 330 00:13:39,240 --> 00:13:41,560 arbre o alguna cosa generalment es diu un arbre B 331 00:13:41,560 --> 00:13:43,410 que vostè aprendrà en una classe com cs124 332 00:13:43,410 --> 00:13:46,710 a Harvard, una classe d'algoritmes, o qualsevol nombre d'altres llocs. 333 00:13:46,710 --> 00:13:49,570 >> La base de dades i de la intel·ligent persones que van implementar 334 00:13:49,570 --> 00:13:53,880 serà trobar la manera d'emmagatzemar aquesta taula de la informació 335 00:13:53,880 --> 00:13:57,061 en la memòria perquè les recerques i altres operacions són super ràpid. 336 00:13:57,061 --> 00:13:58,060 No ha de fer-ho. 337 00:13:58,060 --> 00:14:00,640 Vostè no ha de posar en pràctica cerca lineal o recerca binària 338 00:14:00,640 --> 00:14:03,300 o fusionar espècie o la selecció classe, res d'això. 339 00:14:03,300 --> 00:14:06,590 La base de dades ho fa per vostè si li dius que de forma preventiva per indexar aquest camp. 340 00:14:06,590 --> 00:14:09,100 >> I es pot veure també, que hi ha algunes altres característiques 341 00:14:09,100 --> 00:14:11,010 podem dir-li a la base de dades per fer complir. 342 00:14:11,010 --> 00:14:16,431 Què podria significar Si trio Steam d'aquest menú, només intuïtivament? 343 00:14:16,431 --> 00:14:16,930 Sí? 344 00:14:16,930 --> 00:14:17,889 >> AUDIÈNCIA: [inaudible] 345 00:14:17,889 --> 00:14:19,930 DAVID Malan: Sí, la nom d'usuari ha de ser únic. 346 00:14:19,930 --> 00:14:23,330 És això una cosa bona o una cosa dolenta per una base de dades, per a un lloc web amb els usuaris? 347 00:14:23,330 --> 00:14:24,965 En cas de noms d'usuari sigui únic? 348 00:14:24,965 --> 00:14:25,880 Sí, probablement. 349 00:14:25,880 --> 00:14:27,800 Si això és el que el camp que utilitza per connectar-se, 350 00:14:27,800 --> 00:14:31,867 vostè realment no vol la gent que té la mateixa sensació o el mateix nom d'usuari. 351 00:14:31,867 --> 00:14:33,700 Així, podem tenir la base de dades de fer complir el que 352 00:14:33,700 --> 00:14:37,880 que ara en el meu codi PHP o qualsevol altre idioma, Jo no he de, per exemple, comprovar 353 00:14:37,880 --> 00:14:41,490 necessàriament té aquest nom d'usuari existeixo abans de deixar que algú es registra? 354 00:14:41,490 --> 00:14:46,690 La base de dades no permetrà que dues persones nomenades David o Malans registren en aquest cas. 355 00:14:46,690 --> 00:14:50,030 >> I com un a part, tot i que aquest menú només li permet seleccionar un, 356 00:14:50,030 --> 00:14:54,550 un índex únic és un que és indexats per a un rendiment súper ràpid, 357 00:14:54,550 --> 00:14:56,100 però també fa complir singularitat. 358 00:14:56,100 --> 00:14:58,850 I anem a tornar al que el altres dos significar en un moment. 359 00:14:58,850 --> 00:15:00,930 Mentrestant, si vaig a la meva segona fila, que 360 00:15:00,930 --> 00:15:06,230 és el nom de l'usuari, d'especificar que el nom ha de ser únic? 361 00:15:06,230 --> 00:15:09,550 No, perquè certament es podria tener-- no ha de dos David 362 00:15:09,550 --> 00:15:11,050 Malans en aquesta sala, el més probable. 363 00:15:11,050 --> 00:15:14,290 Però si triem un nom diferent, podríem segurament tindrà col·lisions. 364 00:15:14,290 --> 00:15:16,130 >> Penseu de nou per discutir taules i similars. 365 00:15:16,130 --> 00:15:18,604 Així que, certament no volem per fer el camp de nom únic. 366 00:15:18,604 --> 00:15:21,270 Per tant, només ens en sortirem que, com el tauler, tauler, tauler, res. 367 00:15:21,270 --> 00:15:22,660 I jo vaig a deixar tota la resta sol. 368 00:15:22,660 --> 00:15:25,035 De fet, la majoria d'aquests camps no anem a haver de preocupar-se. 369 00:15:25,035 --> 00:15:27,830 I quan estigui llest per guardar aquesta, si l'internet coopera, 370 00:15:27,830 --> 00:15:35,032 Faig clic a Desa, i molt, molt, molt poc a poc la base de dades no ser fora de perill. 371 00:15:35,032 --> 00:15:37,240 I ara estic de tornada a aquest interfície, que és cert, 372 00:15:37,240 --> 00:15:38,680 és aclaparadora a primera vista. 373 00:15:38,680 --> 00:15:42,450 Però tot el que vaig a fer és clic en la paraula d'Usuaris en la part superior esquerra. 374 00:15:42,450 --> 00:15:47,630 Vaig a anar per aquí, feu clic a Els usuaris i, per defecte, 375 00:15:47,630 --> 00:15:50,180 ha executat alguna SQL, però més sobre això en un moment. 376 00:15:50,180 --> 00:15:52,654 Això és només un resum del que vaig fer. 377 00:15:52,654 --> 00:15:55,320 I que no es preocupés que veus parlar d'Amèrica i suec aquí. 378 00:15:55,320 --> 00:16:00,490 Aquestes són només el predeterminat ajustos, ja que MySQL originalment, 379 00:16:00,490 --> 00:16:04,000 o PHP MyAdmin, un dels dos va passar a ser escrit per algunes persones sueques. 380 00:16:04,000 --> 00:16:06,100 Però és irrellevant en el nostre cas aquí. 381 00:16:06,100 --> 00:16:08,280 >> Molt bé, així que per què és tot això interessant? 382 00:16:08,280 --> 00:16:13,050 Resulta, puc inserir dades en una base de dades mitjançant l'escriptura de codi. 383 00:16:13,050 --> 00:16:15,940 I estic a seguir endavant i en el meu arxiu d'aquí, estic 384 00:16:15,940 --> 00:16:19,000 seguirà endavant i fer veure aquest està connectat a la base de dades, la qual 385 00:16:19,000 --> 00:16:23,040 no és en aquest moment, però ho farà serà quan arribem al problema vam posar 07:00. 386 00:16:23,040 --> 00:16:25,640 I jo vaig a seguir endavant i executar una funció anomenada de consulta, 387 00:16:25,640 --> 00:16:28,730 que li donarem en el problema establir codi de distribució de set, que 388 00:16:28,730 --> 00:16:31,490 té almenys un argument, que és només una cadena. 389 00:16:31,490 --> 00:16:33,460 Una cadena de codi SQL. 390 00:16:33,460 --> 00:16:36,700 Per tant, estàs a punt d'aprendre a escriure Structured Query Language. 391 00:16:36,700 --> 00:16:41,270 >> Si vull inserir una nova fila en el meu base de dades perquè algú ha presentat 392 00:16:41,270 --> 00:16:47,600 una forma de la meva codi, ho faria, literalment, escriure INSERT INTO usuaris la següent 393 00:16:47,600 --> 00:16:52,800 camps: nom d'usuari, coma, el nom, els valors, 394 00:16:52,800 --> 00:16:57,480 i ara he de inserir alguna cosa així com Malan, i cita, 395 00:16:57,480 --> 00:17:01,490 fi de la cita 'David Malan. I ara fins i tot per als que no estan familiaritzats amb SQL, 396 00:17:01,490 --> 00:17:07,830 Per què estic fent servir cometes simples dins d'aquesta cadena verd? 397 00:17:07,830 --> 00:17:10,790 398 00:17:10,790 --> 00:17:13,040 Quina podria ser la raó aquí? 399 00:17:13,040 --> 00:17:14,609 >> Noti que sóc co-barreja dos idiomes. 400 00:17:14,609 --> 00:17:18,099 Consulta és una funció PHP, però es necessita un argument. 401 00:17:18,099 --> 00:17:21,740 I aquest argument ha de ser en si mateix escrit en un altre llenguatge anomenat 402 00:17:21,740 --> 00:17:23,500 SQL, Structured Query Language. 403 00:17:23,500 --> 00:17:27,940 Per tant, tot el que jo simplement han posat en relleu aquí 404 00:17:27,940 --> 00:17:30,380 és aquest llenguatge anomenat SQL. 405 00:17:30,380 --> 00:17:36,290 Llavors, què passa amb les cometes simples, igual que una comprovació de validesa ràpida? 406 00:17:36,290 --> 00:17:37,324 Endavant. 407 00:17:37,324 --> 00:17:37,990 Són cadenes. 408 00:17:37,990 --> 00:17:41,590 Així, cita, cap de la cita Malan i pressupost, Ho van dir ells David Malan són cadenes. 409 00:17:41,590 --> 00:17:45,210 I només pensar intuïtivament ara, sabent el que saps sobre C i PHP, 410 00:17:45,210 --> 00:17:50,220 ¿Per què no faig això, que en general cometes dobles usades per a cordes? 411 00:17:50,220 --> 00:17:52,310 Per què jo no vull fer això? 412 00:17:52,310 --> 00:17:52,810 Sí? 413 00:17:52,810 --> 00:17:53,685 >> AUDIÈNCIA: [inaudible] 414 00:17:53,685 --> 00:17:56,695 415 00:17:56,695 --> 00:17:57,570 DAVID Malan: Exactament. 416 00:17:57,570 --> 00:17:59,653 Perquè jo ja estic fent servir cometes dobles en el camí 417 00:17:59,653 --> 00:18:01,929 fora de la discussió a la funció de PHP, 418 00:18:01,929 --> 00:18:03,470 Només vull confondre l'intèrpret. 419 00:18:03,470 --> 00:18:04,860 No se sap, no aquestes van de la mà? 420 00:18:04,860 --> 00:18:05,735 ¿Aquests van de la mà? 421 00:18:05,735 --> 00:18:06,810 ¿Aquests van de la mà? 422 00:18:06,810 --> 00:18:08,070 Així que en lloc altern. 423 00:18:08,070 --> 00:18:11,784 >> O podria fer alguna cosa com això, cita barra invertida o una cita barra invertida. 424 00:18:11,784 --> 00:18:14,200 Francament, això comença a arribar molt il·legible i lleig. 425 00:18:14,200 --> 00:18:16,790 Però això seria aconseguir el mateix resultat també. 426 00:18:16,790 --> 00:18:19,760 >> Així que, si hagués de executar aquest consulta ara, anem a veure què passa. 427 00:18:19,760 --> 00:18:22,740 Vaig a seguir endavant ara i bastant d'executar el codi PHP, que 428 00:18:22,740 --> 00:18:24,610 és on es jugarà al problema d'establir 7, 429 00:18:24,610 --> 00:18:27,200 Vaig a anar al seu lloc de PHP MyAdmin. 430 00:18:27,200 --> 00:18:29,770 I vaig manualment per anar a la pestanya SQL, 431 00:18:29,770 --> 00:18:31,580 i que em faci zoom a la interfície. 432 00:18:31,580 --> 00:18:34,007 I em vaig a pegar en el que acaba d'escriure. 433 00:18:34,007 --> 00:18:36,090 I el codi de colors té canviat una mica ara, 434 00:18:36,090 --> 00:18:38,750 només perquè els formats de programes coses una mica diferent. 435 00:18:38,750 --> 00:18:41,960 Però noto que tot el que he fet és el que he dit, inserir en Usuaris. 436 00:18:41,960 --> 00:18:45,790 He especificat, llavors, en una coma separats llista entre parèntesis els dos 437 00:18:45,790 --> 00:18:48,850 camps que vull inserir, i llavors jo he dit, literalment, els valors 438 00:18:48,850 --> 00:18:51,510 seguit d'un altre parin, i després els dos valors 439 00:18:51,510 --> 00:18:53,520 Vull plug-in, i ara per a la bona mesura, 440 00:18:53,520 --> 00:18:55,010 Vaig a posar un punt i coma al final. 441 00:18:55,010 --> 00:18:56,570 Per tant, això no és C. Això no és PHP. 442 00:18:56,570 --> 00:18:59,970 Es tracta ara de SQL, i estic enganxant en aquesta interfície basada en la web que és 443 00:18:59,970 --> 00:19:02,710 només va a deixar-me, tan aviat com faci clic a Vés, 444 00:19:02,710 --> 00:19:08,060 executar aquesta consulta a la base de dades s'executa dins de l'IDE CS50. 445 00:19:08,060 --> 00:19:09,470 >> Així que això és bo. 446 00:19:09,470 --> 00:19:12,520 Recordeu que va dir una fila inserit, va ser súper ràpid, 447 00:19:12,520 --> 00:19:15,190 0,0054 segons per inserir aquestes dades. 448 00:19:15,190 --> 00:19:16,610 Així que, això sona bastant saludable. 449 00:19:16,610 --> 00:19:19,350 Es torna a formatar la meva consulta per a mi aquí només per veure-ho 450 00:19:19,350 --> 00:19:21,730 en una mena de codi de color de versions. 451 00:19:21,730 --> 00:19:24,540 Però ara si faig clic Navegar, notar que, fins i tot 452 00:19:24,540 --> 00:19:29,070 encara que hi ha una gran quantitat de desordre en la pantalla, la meva taula ara té dues files. 453 00:19:29,070 --> 00:19:30,700 >> Així que, deixa seguir endavant i fer una altra. 454 00:19:30,700 --> 00:19:33,760 En lloc d'això, em va deixar aneu a la pestanya SQL nou. 455 00:19:33,760 --> 00:19:40,723 I aquesta vegada vaig a inserir una cosa així Rob i portaran el nom Rob Bowden. 456 00:19:40,723 --> 00:19:42,330 Bowden. 457 00:19:42,330 --> 00:19:44,040 Anem clic a Desa. 458 00:19:44,040 --> 00:19:46,140 Vaja, en lloc Go. 459 00:19:46,140 --> 00:19:48,890 >> Feu clic a Navega de nou, i Ara notar Tinc dues files. 460 00:19:48,890 --> 00:19:52,390 Per tant, això és només una forma més complexa manera d'obrir Google Spreadsheets 461 00:19:52,390 --> 00:19:54,010 i només teclejar una fila en una columna. 462 00:19:54,010 --> 00:19:57,070 Però el que és fonamental és que ara tenim la sintaxi 463 00:19:57,070 --> 00:20:00,220 amb el qual escriure codi perquè en última instància, podríem realitat 464 00:20:00,220 --> 00:20:01,790 fer alguna cosa i això. 465 00:20:01,790 --> 00:20:05,380 Recordem que suporti PHP Variables súper globals. 466 00:20:05,380 --> 00:20:08,415 >> Què hi ha dins de dòlar signar subratllat GET en PHP? 467 00:20:08,415 --> 00:20:10,290 Prenem una ullada a un o dos exemples senzills. 468 00:20:10,290 --> 00:20:15,640 I en PSet6, Recall té hola dot PHP que utilitza aquesta variable. 469 00:20:15,640 --> 00:20:17,870 Què passa aquí? 470 00:20:17,870 --> 00:20:21,015 O el que és? 471 00:20:21,015 --> 00:20:22,522 Una mica més fort. 472 00:20:22,522 --> 00:20:23,790 >> AUDIÈNCIA: [inaudible] 473 00:20:23,790 --> 00:20:25,030 >> DAVID Malan: És una neu llavor de la matriu, que 474 00:20:25,030 --> 00:20:27,714 és només una forma elegant de dir una matriu que té parells de valors clau. 475 00:20:27,714 --> 00:20:28,880 I les claus no són numèrics. 476 00:20:28,880 --> 00:20:30,420 Són paraules o cadenes. 477 00:20:30,420 --> 00:20:32,750 I en concret, el que són aquells parells de valors clau? 478 00:20:32,750 --> 00:20:35,110 D'on vénen? 479 00:20:35,110 --> 00:20:35,620 Ho sentim? 480 00:20:35,620 --> 00:20:36,994 >> AUDIÈNCIA: [inaudible] 481 00:20:36,994 --> 00:20:37,660 DAVID Malan: No? 482 00:20:37,660 --> 00:20:40,700 D'on vénen les claus parells de valors vénen? 483 00:20:40,700 --> 00:20:42,490 Dir una altra vegada? 484 00:20:42,490 --> 00:20:44,610 Una altra vegada? 485 00:20:44,610 --> 00:20:46,472 Sóc l'únic audiència alguna cosa? 486 00:20:46,472 --> 00:20:47,810 >> [El] 487 00:20:47,810 --> 00:20:49,042 >> Això és correcte, no? 488 00:20:49,042 --> 00:20:50,435 >> AUDIÈNCIA: [inaudible] 489 00:20:50,435 --> 00:20:52,560 DAVID Malan: Sí, provenen de la cadena de consulta. 490 00:20:52,560 --> 00:20:55,380 Així doncs, si es rebobina en el temps per quan hem jugat amb Google 491 00:20:55,380 --> 00:20:59,600 i ens hem anat a Google.com slash Cerca signe d'interrogació q és igual als gats, 492 00:20:59,600 --> 00:21:03,550 si hagués de prem Intro i si Google es van implementar en PHP, 493 00:21:03,550 --> 00:21:07,017 Codi PHP que Google va escriure tindrien accés a la mostra de dòlar 494 00:21:07,017 --> 00:21:11,600 ressaltar GET dins dels quals és una clau anomenada Q i un valor 495 00:21:11,600 --> 00:21:17,680 anomenats gats que a continuació, pot utilitzar s'utilitza per fer una recerca real amb. 496 00:21:17,680 --> 00:21:20,860 >> Així que, de fet, el que vaig a fer ara és tornar al meu codi PHP 497 00:21:20,860 --> 00:21:23,140 que vostè va a tornar a veure més d'en PSet7. 498 00:21:23,140 --> 00:21:25,440 I en comptes d'endollar en valors codificats dures que 499 00:21:25,440 --> 00:21:27,630 no sembla com un molt lloc web dinàmic, 500 00:21:27,630 --> 00:21:30,680 Vaig a donar-li un teaser de el que faria el seu codi real. 501 00:21:30,680 --> 00:21:32,854 Es podria posar en dos, signes d'interrogació com aquest. 502 00:21:32,854 --> 00:21:34,270 No sé el que el nom d'usuari és. 503 00:21:34,270 --> 00:21:37,390 No sé el que el nom serà, 504 00:21:37,390 --> 00:21:39,470 però sí que sé que puc aconseguir-los de forma dinàmica. 505 00:21:39,470 --> 00:21:43,420 >> Així que, si el codi que estem escrivint ara és el codi que s'executa en els servidors de Google, 506 00:21:43,420 --> 00:21:46,940 o si es tracta hola dot PHP, que ve amb PSet6, 507 00:21:46,940 --> 00:21:48,650 Vaig a passar a la funció de consulta 508 00:21:48,650 --> 00:21:51,450 igual que printf, dos arguments. 509 00:21:51,450 --> 00:21:57,120 GET, cita, nom d'usuari unquote, i GET, cita, el nom de la fi de la cita. 510 00:21:57,120 --> 00:22:00,720 I ara, observi el que el estructura general és aquí. 511 00:22:00,720 --> 00:22:03,320 Tinc a l'esquerra part de la trucada, 512 00:22:03,320 --> 00:22:05,480 aquesta funció crida consulta en PHP. 513 00:22:05,480 --> 00:22:08,160 Encara tinc com a primera argument, només una cadena de text. 514 00:22:08,160 --> 00:22:11,000 >> Però aquesta cadena de text és escrit en un llenguatge anomenat SQL. 515 00:22:11,000 --> 00:22:12,616 I, francament, no és una llengua gran. 516 00:22:12,616 --> 00:22:14,990 Només parlarem de formalment avui, de veritat. 517 00:22:14,990 --> 00:22:17,031 I després en el conjunt de problemes 07:00, hi ha relativament 518 00:22:17,031 --> 00:22:18,800 algunes característiques que estem va a aprofitar. 519 00:22:18,800 --> 00:22:22,530 Els signes d'interrogació, però, signifiquen que connectar un valor aquí i tap en un altre valor 520 00:22:22,530 --> 00:22:23,130 aquí. 521 00:22:23,130 --> 00:22:26,010 I fixeu-vos, he omès el de tot el maleït quote-- 522 00:22:26,010 --> 00:22:30,470 it-- al voltant de la cita marca aquest moment. 523 00:22:30,470 --> 00:22:34,930 He omès la cita marques de tot el signe d'interrogació, 524 00:22:34,930 --> 00:22:36,410 Malauradament, en aquesta ocasió. 525 00:22:36,410 --> 00:22:38,870 >> Així que, quin és bo d'això funció del signe d'interrogació que 526 00:22:38,870 --> 00:22:42,830 PHP tendeix a donar suport, Ruby i Python i altres llenguatges, 527 00:22:42,830 --> 00:22:45,730 això només significa l'endoll d'alguna valora aquí i saps què? 528 00:22:45,730 --> 00:22:48,300 A determinar si s'ha d'utilitzar cometes simples o dobles. 529 00:22:48,300 --> 00:22:50,966 No em molestis amb els detalls intel·lectualment poc interessants. 530 00:22:50,966 --> 00:22:53,780 Però, assegureu-vos que és correcta perquè el meu codi és en última instància, 531 00:22:53,780 --> 00:22:57,010 operativa i segura, la qual cosa tindrà un significat en poc temps. 532 00:22:57,010 --> 00:23:00,460 >> Ara, quants arguments en total, només per ser clar, és la funció de presa de consulta? 533 00:23:00,460 --> 00:23:05,240 534 00:23:05,240 --> 00:23:07,581 Algú vol votar per més de dos? 535 00:23:07,581 --> 00:23:08,080 Tres? 536 00:23:08,080 --> 00:23:10,001 És clar, per què? 537 00:23:10,001 --> 00:23:10,920 Per què tres? 538 00:23:10,920 --> 00:23:12,305 >> AUDIÈNCIA: [inaudible] 539 00:23:12,305 --> 00:23:13,180 DAVID Malan: Exactament. 540 00:23:13,180 --> 00:23:14,610 La primera part és la cadena. 541 00:23:14,610 --> 00:23:18,640 El segon argument és el signe de dòlar ressaltar GET suport de nom d'usuari. 542 00:23:18,640 --> 00:23:21,950 I el tercer argument és el el mateix, però només el nom. 543 00:23:21,950 --> 00:23:24,590 Així, en altres paraules, ara si jo tingués un formulari web 544 00:23:24,590 --> 00:23:27,149 que tenien als camps de text, un per al nom d'usuari, 545 00:23:27,149 --> 00:23:29,690 un pel seu nom, igual com pots veure en una pàgina web 546 00:23:29,690 --> 00:23:32,120 quan es registra per algun lloc web, això podria 547 00:23:32,120 --> 00:23:35,450 ser el codi en la part final que realment fa la inserció ara 548 00:23:35,450 --> 00:23:37,220 a la base de dades. 549 00:23:37,220 --> 00:23:40,870 >> Ara per contra, anem a avançar ràpidament. 550 00:23:40,870 --> 00:23:43,840 Suposem que un usuari és ara ingressar i desitja 551 00:23:43,840 --> 00:23:48,860 escriure codi PHP que comprova si la persona que acaba d'iniciar sessió 552 00:23:48,860 --> 00:23:52,250 és en realitat un usuari, pot utilitzar la sintaxi molt simple. 553 00:23:52,250 --> 00:23:55,832 Es pot dir SELECT, diguem estrella, on significa estrella tot. 554 00:23:55,832 --> 00:23:57,540 No sé el que vull volen, així que simplement me 555 00:23:57,540 --> 00:24:01,585 totes les columnes de la taula crida als usuaris en els quals, i això és bo. 556 00:24:01,585 --> 00:24:03,710 Seleccioneu recolza el que és anomenat un predicat, que és 557 00:24:03,710 --> 00:24:06,630 com una manera de qualificar el que vols. 558 00:24:06,630 --> 00:24:10,590 On nom d'usuari és igual Ho van dir ells Malan. 559 00:24:10,590 --> 00:24:13,680 Així que aquí també, que he incrustat dins de l'argument 560 00:24:13,680 --> 00:24:16,110 a una funció de PHP, una línia de codi SQL. 561 00:24:16,110 --> 00:24:18,680 I aquest codi SQL està vegada que se'n va, literalment, 562 00:24:18,680 --> 00:24:21,790 per buscar Ho van dir ells Malan. 563 00:24:21,790 --> 00:24:24,420 >> Ara això no és del tot útil, així que em vaig a saltar aquesta 564 00:24:24,420 --> 00:24:28,650 i jo vaig a posar distància aquest consell de Brady, i vagi 565 00:24:28,650 --> 00:24:30,990 i plug-in en el seu lloc un signe d'interrogació aquí. 566 00:24:30,990 --> 00:24:33,290 Per tant, només perquè quedi clar, el que he d'informar al meu segon argument 567 00:24:33,290 --> 00:24:37,480 se si algú acaba d'iniciar sessió i jo que vulgueu comprovar si ell o ella és en realitat 568 00:24:37,480 --> 00:24:39,265 un usuari? 569 00:24:39,265 --> 00:24:40,140 AUDIÈNCIA: [inaudible] 570 00:24:40,140 --> 00:24:40,890 DAVID Malan: Sí. 571 00:24:40,890 --> 00:24:44,120 Sento dòlar signe de subratllat Obtenir cotització, nom d'usuari unquote. 572 00:24:44,120 --> 00:24:50,040 I això hauria de tornar a mi qualsevol de les files en la meva base de dades 573 00:24:50,040 --> 00:24:51,986 que tenen un nom d'usuari de Malan. 574 00:24:51,986 --> 00:24:54,860 Ara amb sort, vaig a tornar zero si no Malan ha estat aquí, 575 00:24:54,860 --> 00:24:56,290 o un si ell té. 576 00:24:56,290 --> 00:24:59,026 No hauria de tornar dues o tres o quatre. 577 00:24:59,026 --> 00:24:59,526 Per què? 578 00:24:59,526 --> 00:25:00,220 >> AUDIÈNCIA: [inaudible] 579 00:25:00,220 --> 00:25:01,120 >> DAVID Malan: Vaig dir únic, oi? 580 00:25:01,120 --> 00:25:01,750 Raó simple. 581 00:25:01,750 --> 00:25:04,030 Perquè li vaig dir que ha de ser únic, simplement lògicament, 582 00:25:04,030 --> 00:25:07,940 només es pot tenir zero o un Malans en aquesta taula de base de dades en particular. 583 00:25:07,940 --> 00:25:10,965 Ara com un a part, perquè l'has vist que, tot i que segueixo fent servir GET 584 00:25:10,965 --> 00:25:14,350 i encara PSet6 només s'utilitzen GET, que sens dubte pot tenir POST. 585 00:25:14,350 --> 00:25:17,212 I recordem que Post és una altra tècnica per a la presentació de la informació 586 00:25:17,212 --> 00:25:19,170 d'una forma, però no apareix en la URL. 587 00:25:19,170 --> 00:25:22,690 És una mica més segur sens dubte per coses com noms d'usuari i contrasenyes, 588 00:25:22,690 --> 00:25:25,210 PSet7 que, de fet, impliquen. 589 00:25:25,210 --> 00:25:28,130 >> Per tant, farem això en PHP MyAdmin i veure què passa. 590 00:25:28,130 --> 00:25:30,020 Vaig a anar a la pestanya de MySQL. 591 00:25:30,020 --> 00:25:34,450 I compte que el valor predeterminat per PHP MyAdmin, només per tractar de ser útil, 592 00:25:34,450 --> 00:25:37,050 és seleccionar l'estrella dels usuaris on un. 593 00:25:37,050 --> 00:25:39,430 Bé, un sempre és cert, per la qual això té la tonta efectiva 594 00:25:39,430 --> 00:25:40,400 de només has de seleccionar tot. 595 00:25:40,400 --> 00:25:42,691 Però jo seré una mica més pedant i manual 596 00:25:42,691 --> 00:25:45,920 escrigui a terme estrella SELECT FROM usuaris. 597 00:25:45,920 --> 00:25:48,294 >> Ara tècnicament, pot citar el nom de les taules. 598 00:25:48,294 --> 00:25:50,460 És estrany que vostè ha de, però noten aquests no són 599 00:25:50,460 --> 00:25:52,240 seus pressupostos normals en el teclat d'Estats Units. 600 00:25:52,240 --> 00:25:54,760 Aquest és el backtick trucada, que generalment en la part superior esquerra 601 00:25:54,760 --> 00:25:56,000 cantonada del seu teclat. 602 00:25:56,000 --> 00:25:58,500 Però és estrany que Tu en realitat ha de molestar amb això, 603 00:25:58,500 --> 00:25:59,950 així que vaig a ometre totes maneres. 604 00:25:59,950 --> 00:26:02,280 Així que ara, deixa anar endavant i va colpejar anar. 605 00:26:02,280 --> 00:26:06,616 I quantes files he d'obtenir tornar quan selecciono l'estrella dels usuaris? 606 00:26:06,616 --> 00:26:08,407 >> AUDIÈNCIA: [inaudible] 607 00:26:08,407 --> 00:26:09,990 DAVID Malan: El nombre de files, segur. 608 00:26:09,990 --> 00:26:12,390 Però, quants en aquest pisos de concret en aquest moment? 609 00:26:12,390 --> 00:26:14,640 Dos, perquè no hi havia mi i no hi havia Rob. 610 00:26:14,640 --> 00:26:19,370 Per tant, si faig clic a Vés, veig visualment que He aconseguit tornar, de fet, dues files. 611 00:26:19,370 --> 00:26:22,060 Hi ha una gran quantitat de desordre en la pantalla, però només veig dues files. 612 00:26:22,060 --> 00:26:28,580 Per contra, si ho faig de nou i fer Estrelles SELECT FROM usuaris, en el seu nom d'usuari 613 00:26:28,580 --> 00:26:31,840 és igual a la cita, fi de la cita Malan, ara si em feu clic a Vés, 614 00:26:31,840 --> 00:26:33,970 Jo només vaig a tornar una fila. 615 00:26:33,970 --> 00:26:36,499 I finalment, si ho faig alguna cosa com això, suposem 616 00:26:36,499 --> 00:26:38,290 que no m'importa aconseguir tot, 617 00:26:38,290 --> 00:26:41,020 que és una mena de sentit ara, perquè hi ha només dues columnes. 618 00:26:41,020 --> 00:26:43,103 No és com que estic seleccionant una enorme quantitat de dades. 619 00:26:43,103 --> 00:26:46,720 Suposem que seguir endavant i no seleccioneu el nom des 620 00:26:46,720 --> 00:26:51,990 usuaris, on nom d'usuari és igual a Malan, el bo de SQL amb honestedat, 621 00:26:51,990 --> 00:26:54,290 és que en realitat només fa el que li dius que faci. 622 00:26:54,290 --> 00:26:57,550 És bastant succinta, però que, literalment, simplement dir-li el que vols fer. 623 00:26:57,550 --> 00:27:01,130 Seleccioneu el nom dels usuaris on el nom d'usuari és igual a Malan. 624 00:27:01,130 --> 00:27:03,440 I realment és així d'explícit. 625 00:27:03,440 --> 00:27:08,410 Així que, ara si em va colpejar Go, quants files vaig a tornar? 626 00:27:08,410 --> 00:27:10,770 Un, perquè és només Malan, és d'esperar. 627 00:27:10,770 --> 00:27:13,100 O zero si no està allà, però un al màxim. 628 00:27:13,100 --> 00:27:17,610 >> I quantes columnes vaig a tornar? 629 00:27:17,610 --> 00:27:18,450 Quantes columnes? 630 00:27:18,450 --> 00:27:20,658 Aquesta vegada, només vaig per aconseguir un perquè jo no vaig fer 631 00:27:20,658 --> 00:27:22,380 seleccioneu estrella, que és tot. 632 00:27:22,380 --> 00:27:27,900 Ara estic seleccionant sol nom, així que simplement tornar a una columna i una fila. 633 00:27:27,900 --> 00:27:31,730 I sembla una mena de forma adequada ridícul, super mirant 634 00:27:31,730 --> 00:27:33,060 petit com aquest. 635 00:27:33,060 --> 00:27:34,290 Per tant, el que realment està passant? 636 00:27:34,290 --> 00:27:36,890 A l'executar un SQL consulta mitjançant selecció, 637 00:27:36,890 --> 00:27:38,700 el que està rebent de tornada de la base de dades 638 00:27:38,700 --> 00:27:42,970 és com una taula temporal amb files i columnes, potser, 639 00:27:42,970 --> 00:27:46,260 però que omet res a No va ser realment triat per vostè. 640 00:27:46,260 --> 00:27:49,010 Així, és com si algú tenia una gran full de càlcul de tots els estudiants 641 00:27:49,010 --> 00:27:51,610 registrada per alguna grup d'estudiants, i dius: 642 00:27:51,610 --> 00:27:55,097 dóna'm tot el primer any que han registrada per al nostre grup d'alumnes, el que 643 00:27:55,097 --> 00:27:56,930 el seu col·lega en el grup d'estudiants podria fer 644 00:27:56,930 --> 00:27:58,430 és que només es podien lliurar que tot el full de càlcul. 645 00:27:58,430 --> 00:27:59,742 Això és com dir que seleccioni estrelles. 646 00:27:59,742 --> 00:28:02,200 I que és una mica molest si només volia que l'estudiant de primer any. 647 00:28:02,200 --> 00:28:05,640 I així, si en comptes de dir, seleccioneu l'estrella de la taula de base de dades 648 00:28:05,640 --> 00:28:08,470 on l'any és igual a cita, estudiant de primer any final de la cita, 649 00:28:08,470 --> 00:28:10,810 és com si el teu amic en el grup d'estudiants 650 00:28:10,810 --> 00:28:13,770 literalment ressaltat i copiats només les files de primer any, 651 00:28:13,770 --> 00:28:16,780 els pega en un nou Google Full de càlcul o un arxiu d'Excel, 652 00:28:16,780 --> 00:28:18,860 i va tornar el resultant només arxiu. 653 00:28:18,860 --> 00:28:21,710 Això és tot el que està passant en conceptualment aquí. 654 00:28:21,710 --> 00:28:23,920 >> Així que al final, el que podem fer algunes coses bastant luxe 655 00:28:23,920 --> 00:28:26,560 emmagatzemant coses com noms d'usuari i contrasenyes i similars. 656 00:28:26,560 --> 00:28:30,310 Però, resulta que hem de fer una mica diferent a això. 657 00:28:30,310 --> 00:28:34,750 No és tan intel·ligent com per només emmagatzemar un nom d'usuari i una contrasenya. 658 00:28:34,750 --> 00:28:37,790 Algú anterior, crec que aquí baix, es suggereix una identificació. 659 00:28:37,790 --> 00:28:40,787 Ara una identificació podria ser com un Harvard identificació o de Yale Net ID, 660 00:28:40,787 --> 00:28:42,870 però podria ser fins i tot més simple en el nostre cas la base de dades. 661 00:28:42,870 --> 00:28:45,120 I, en efecte, el cas comú és tenir una altra columna. 662 00:28:45,120 --> 00:28:46,953 I jo vaig a anar endavant i editar la meva taula. 663 00:28:46,953 --> 00:28:49,521 I si jugues una mica amb aquesta interfície per PSet7, 664 00:28:49,521 --> 00:28:51,770 veuràs que es pot comprovar aquest botó aquí i afegir 665 00:28:51,770 --> 00:28:53,750 un camp al començament de la taula. 666 00:28:53,750 --> 00:28:56,720 I ara si faig clic a Vés, va que em donés una d'aquestes formes 667 00:28:56,720 --> 00:28:57,600 d'abans. 668 00:28:57,600 --> 00:29:00,170 Vaig a afegir un camp anomenat ID. 669 00:29:00,170 --> 00:29:03,070 I jo faré que sigui un tipus numèric. 670 00:29:03,070 --> 00:29:05,362 >> Tinc un munt de valors per als valors numèrics. 671 00:29:05,362 --> 00:29:08,677 Jo només vaig a triar un INT i No et preocupis per les mides dispars. 672 00:29:08,677 --> 00:29:10,510 Jo no he de especificar una longitud o un valor, 673 00:29:10,510 --> 00:29:13,710 perquè serà 32 bits no importa què. 674 00:29:13,710 --> 00:29:16,070 Atributs, no vam veure abans. 675 00:29:16,070 --> 00:29:18,410 Qualsevol interès en qualsevol d'aquests opcions de menú en aquesta ocasió? 676 00:29:18,410 --> 00:29:21,890 677 00:29:21,890 --> 00:29:23,745 Per a una INT? 678 00:29:23,745 --> 00:29:24,620 Què proposes? 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 ¿Algun d'ells té sentit? 682 00:29:29,570 --> 00:29:30,536 Sí. 683 00:29:30,536 --> 00:29:31,900 Sí, sense signar, oi? 684 00:29:31,900 --> 00:29:35,930 >> Generalment, si anem a donar cadascun un nombre únic, que 685 00:29:35,930 --> 00:29:38,200 és on aquesta història és va, jo en realitat només vull 686 00:29:38,200 --> 00:29:41,919 que una persona tingui el nombre com zero i un-dos i tres i quatre. 687 00:29:41,919 --> 00:29:43,710 Jo no necessito per fer front amb nombres negatius. 688 00:29:43,710 --> 00:29:45,210 Simplement sembla que la complexitat excessiva. 689 00:29:45,210 --> 00:29:48,470 Vull 4000000000 de valors possibles, no 4000000000 de valors possibles, 690 00:29:48,470 --> 00:29:50,699 així que només duplicant la capacitat de la meva INT. 691 00:29:50,699 --> 00:29:53,490 Com acotació al marge, si vols relacionar això a alguna cosa com Facebook, 692 00:29:53,490 --> 00:29:56,190 tornada en classe del meu dia en què Facebook va sortir per primera vegada, 693 00:29:56,190 --> 00:29:59,510 Crec que el que eren utilitzant a la base de dades MySQL 694 00:29:59,510 --> 00:30:02,856 per emmagatzemar un usuari de identificador, era només un INT. 695 00:30:02,856 --> 00:30:05,230 Però, és clar, hi ha molt de gent real en el món. 696 00:30:05,230 --> 00:30:07,438 Hi ha una gran quantitat de falsos Facebook comptes en el món. 697 00:30:07,438 --> 00:30:11,701 I pel que finalment, Facebook va desbordar la mida d'un INT, un de quatre mil milions 698 00:30:11,701 --> 00:30:12,200 valor. 699 00:30:12,200 --> 00:30:15,032 Raó per la qual, si ens fixem voltant i hi ha llocs web 700 00:30:15,032 --> 00:30:16,740 que pot dir-li el que el seu identificador únic és. 701 00:30:16,740 --> 00:30:19,781 I si mai tria un nom d'usuari a Facebook, veuràs el teu ID únic. 702 00:30:19,781 --> 00:30:23,080 Crec que és el perfil PHP dot signe d'interrogació ID és igual a alguna cosa. 703 00:30:23,080 --> 00:30:27,210 Això és ara una cosa així com un gran INT, o un llarg temps si es vol, 704 00:30:27,210 --> 00:30:29,700 que és un valor de 64 bits o alguna cosa semblant. 705 00:30:29,700 --> 00:30:33,620 >> Així que, fins i tot en el món real fer això qüestions en última instància, de vegades importen. 706 00:30:33,620 --> 00:30:37,600 I resulta que aquí, si sóc donant a tots els meus usuaris un identificador únic, 707 00:30:37,600 --> 00:30:41,750 Vull ser super explícita i mínimament fer d'aquest camp únic. 708 00:30:41,750 --> 00:30:44,750 Però resulta que hi ha una tros de nomenclatura també avui 709 00:30:44,750 --> 00:30:46,470 això és una clau principal. 710 00:30:46,470 --> 00:30:49,800 Si vostè està dissenyant una base de dades taula i vostè sap per endavant 711 00:30:49,800 --> 00:30:55,580 que una de les columnes d'aquesta taula ha i va identificar de forma exclusiva les files 712 00:30:55,580 --> 00:30:58,500 a la taula, que desitja especificar i dir-li a la base de dades, 713 00:30:58,500 --> 00:31:00,250 aquest és el meu clau principal. 714 00:31:00,250 --> 00:31:02,110 Hi pot haver duplicats en altres camps, 715 00:31:02,110 --> 00:31:06,330 però jo estic dient la base de dades que aquesta és el meu primària, el meu camp més important, 716 00:31:06,330 --> 00:31:08,420 això garanteix que sigui únic. 717 00:31:08,420 --> 00:31:09,660 >> Ara, això sembla redundant. 718 00:31:09,660 --> 00:31:13,830 Ara estic proposant que ens afegir, fent clic a Desa aquí, 719 00:31:13,830 --> 00:31:17,210 1 called-- camp i vaig seguir endavant i feu clic a la IA, 720 00:31:17,210 --> 00:31:19,720 tornarem a que en un moment, Save. 721 00:31:19,720 --> 00:31:22,540 Estic proposant ara que la meva taula aquest aspecte. 722 00:31:22,540 --> 00:31:26,305 Tinc un camp INT anomenada ID, un camp CHAR anomenat nom d'usuari, 723 00:31:26,305 --> 00:31:31,100 un camp VARCHAR anomenada Nom, però ID, si és primari i per tant, únic, 724 00:31:31,100 --> 00:31:33,760 Per què m'acaba de perdre el temps de la introducció del 725 00:31:33,760 --> 00:31:39,140 efectivament és un segon única camp anomenat ID que és un INT? 726 00:31:39,140 --> 00:31:41,980 >> Nom d'usuari, record, era Ja únic, vam dir. 727 00:31:41,980 --> 00:31:45,350 Així que, lògicament, no cal cap experiència de base de dades a la raó 728 00:31:45,350 --> 00:31:47,570 a través d'aquest, per què pot ser que he introduït 729 00:31:47,570 --> 00:31:50,065 1 INT com el meu identificador únic també? 730 00:31:50,065 --> 00:31:52,740 731 00:31:52,740 --> 00:31:53,930 Què té esto-- diuen una altra vegada? 732 00:31:53,930 --> 00:31:55,580 >> AUDIÈNCIA: [inaudible] 733 00:31:55,580 --> 00:31:59,534 >> DAVID Malan: Random l'accés és més fàcil, per què? 734 00:31:59,534 --> 00:32:00,410 >> AUDIÈNCIA: [inaudible] 735 00:32:00,410 --> 00:32:02,367 DAVID Malan: Sí, és simplement accedir als números. 736 00:32:02,367 --> 00:32:04,750 Per tant, si vostè pensa d'aquesta veritat és una taula, com una matriu, 737 00:32:04,750 --> 00:32:07,690 Ara tinc identificadors únics que puc saltar. 738 00:32:07,690 --> 00:32:11,520 I encara millor que la que és Com de gran és un INT va ser una altra vegada? 739 00:32:11,520 --> 00:32:14,450 740 00:32:14,450 --> 00:32:15,800 32 bits o quatre bytes. 741 00:32:15,800 --> 00:32:17,750 >> Què tan gran és el meu nom d'usuari serà? 742 00:32:17,750 --> 00:32:20,310 743 00:32:20,310 --> 00:32:21,990 Al màxim? 744 00:32:21,990 --> 00:32:22,880 16 bytes. 745 00:32:22,880 --> 00:32:26,080 >> Per tant, si vostè està realment preocupar-se per el rendiment del seu codi, 746 00:32:26,080 --> 00:32:31,390 pensa de nou a PSet5, preferiria per buscar un valor de quatre bytes o un 16 747 00:32:31,390 --> 00:32:32,240 valor de byte, oi? 748 00:32:32,240 --> 00:32:33,810 Realment és tan simple com això. 749 00:32:33,810 --> 00:32:38,060 Vostè ha de fer quatre vegades més quantitat de treball per buscar noms d'usuari perquè aquests 750 00:32:38,060 --> 00:32:38,830 són 16 bytes. 751 00:32:38,830 --> 00:32:41,320 Per tant, vostè ha de, literalment, comparar els 16 bytes per ser 752 00:32:41,320 --> 00:32:43,140 Segur que sí, això és nom d'usuari que vull. 753 00:32:43,140 --> 00:32:46,610 Mentre que per a un INT, pot fer-ho amb només quatre bytes. 754 00:32:46,610 --> 00:32:49,212 >> I com un a part per a aquells interessat en maquinari, 755 00:32:49,212 --> 00:32:52,420 Resulta que vostè pot cabre una cosa així 1 un valor de 32 bits en alguna cosa o INT 756 00:32:52,420 --> 00:32:55,330 denominat un registre en un ordinador CPU, el que significa que és super, 757 00:32:55,330 --> 00:32:58,400 super ràpid, fins i tot a les més baixes nivell de maquinari de l'equip. 758 00:32:58,400 --> 00:33:00,530 Per tant, només hi ha avantatges per totes bandes. 759 00:33:00,530 --> 00:33:01,530 Així que, què vol dir això? 760 00:33:01,530 --> 00:33:04,850 De fet, quan vostè està dissenyant un taula de base de dades, gairebé tot el temps 761 00:33:04,850 --> 00:33:07,170 vas per no haver només les dades que t'importa, 762 00:33:07,170 --> 00:33:09,280 sinó també una mena un identificador únic 763 00:33:09,280 --> 00:33:11,280 perquè això es va a farem altres coses. 764 00:33:11,280 --> 00:33:13,160 I anem a ensopegar amb un problema aquí. 765 00:33:13,160 --> 00:33:15,990 >> Suposem que els usuaris no tenen només els noms d'usuari i noms, 766 00:33:15,990 --> 00:33:19,540 però també tenen coses com ciutats i els estats i codis postals, almenys 767 00:33:19,540 --> 00:33:20,432 aquí als EUA .. 768 00:33:20,432 --> 00:33:22,390 Per tant, seguiré endavant i dir ràpidament, 769 00:33:22,390 --> 00:33:26,180 dóna'm tres columnes més al final de la taula. 770 00:33:26,180 --> 00:33:28,900 I això va a ser la ciutat, això va a ser Estat, 771 00:33:28,900 --> 00:33:30,400 i això serà Zip. 772 00:33:30,400 --> 00:33:32,710 >> Ara tipus City, el dades ha de ser això, potser? 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 No sé el que el més llarg nom de la ciutat és. 776 00:33:37,780 --> 00:33:40,571 En algun lloc dels Estats Units, no hi ha Probablement alguna paraula ridículament llarg, 777 00:33:40,571 --> 00:33:43,605 així que anirem amb 255, una mica històricament o arbitràriament. 778 00:33:43,605 --> 00:33:44,730 Estat, el que vols fer? 779 00:33:44,730 --> 00:33:48,380 780 00:33:48,380 --> 00:33:50,367 Qüestió de criteri, no? 781 00:33:50,367 --> 00:33:51,700 El que és potser el més eficient? 782 00:33:51,700 --> 00:33:53,500 Quants personatges? 783 00:33:53,500 --> 00:33:55,950 Potser només dos, si podem sortir amb la seva fent precisament, 784 00:33:55,950 --> 00:33:58,250 com, MA de Massachusetts i així successivament. 785 00:33:58,250 --> 00:34:00,520 Per tant, vaig a anar a un valor CHAR de dos. 786 00:34:00,520 --> 00:34:03,080 >> Codi postal és molt interessant. 787 00:34:03,080 --> 00:34:06,679 Som aquí a 02.138, de manera que suggereix que hem d'utilitzar i què? 788 00:34:06,679 --> 00:34:07,470 És un INT, oi? 789 00:34:07,470 --> 00:34:10,030 790 00:34:10,030 --> 00:34:12,800 INT, INT, talla? 791 00:34:12,800 --> 00:34:14,521 Curt funcionaria. 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 cinc, però vull una INT. 795 00:34:20,870 --> 00:34:23,710 Per què fer retrocedir en un INT? 796 00:34:23,710 --> 00:34:26,820 Convèncer d'això. 797 00:34:26,820 --> 00:34:29,210 Quin és estúpid sobre un INT, la meva idea? 798 00:34:29,210 --> 00:34:29,871 Sí. 799 00:34:29,871 --> 00:34:31,199 >> AUDIÈNCIA: Recollir més memòria. 800 00:34:31,199 --> 00:34:32,909 >> DAVID Malan: Recollir més memòria. 801 00:34:32,909 --> 00:34:35,310 Quatre bytes, però ets proposar un codi postal 802 00:34:35,310 --> 00:34:39,000 com cinc bytes o algú era com CHAR, que se sent com eh, això no és realment 803 00:34:39,000 --> 00:34:39,620 el cas. 804 00:34:39,620 --> 00:34:40,489 >> Bé, divertida història. 805 00:34:40,489 --> 00:34:43,179 Fa anys, quan jo solia utilitzar Microsoft Outlook per a mi correu electrònic, 806 00:34:43,179 --> 00:34:45,150 Finalment em volia canviar a Gmail. 807 00:34:45,150 --> 00:34:48,949 I així, he exportat tots els de la meva contactes d'Outlook com un fitxer CSV. 808 00:34:48,949 --> 00:34:50,699 Valors separats per comes, que simplement significava que 809 00:34:50,699 --> 00:34:54,060 tenia totes les meves noms d'amics i última noms i números de telèfon i codis postals 810 00:34:54,060 --> 00:34:54,747 i tot això. 811 00:34:54,747 --> 00:34:56,580 I llavors vaig fer la error d'obrir-lo 812 00:34:56,580 --> 00:34:58,640 en Excel, que és una programa de full de càlcul que 813 00:34:58,640 --> 00:35:00,289 entén arxius CSV com hem vist. 814 00:35:00,289 --> 00:35:03,080 Però llavors, dec haver colpejat, com, Comando o control S en un punt. 815 00:35:03,080 --> 00:35:06,250 I Excel semblar en el moment tingut una característica mitjançant el qual qualsevol moment 816 00:35:06,250 --> 00:35:08,100 va veure un nombre, que va tractar de ser útil. 817 00:35:08,100 --> 00:35:11,610 I si aquest nombre es va iniciar amb zeros, només es lliurarien d'ells. 818 00:35:11,610 --> 00:35:13,420 Per què necessita líders zeros en nombres enters? 819 00:35:13,420 --> 00:35:15,140 Són sentit, matemàticament. 820 00:35:15,140 --> 00:35:17,530 No són de sentit en el sistema postal dels EUA. 821 00:35:17,530 --> 00:35:19,954 Així, he tingut durant anys, a aquest dia, encara 822 00:35:19,954 --> 00:35:22,370 tenir amics que quan el cas estrany que jo necessito algú és 823 00:35:22,370 --> 00:35:24,078 abordar aquests dies, Jo encara veig que jo 824 00:35:24,078 --> 00:35:26,767 tenir un amic a Cambridge, Massachusetts, 2.138. 825 00:35:26,767 --> 00:35:29,350 I és molest si estàs tractant d'ordenar de programació 826 00:35:29,350 --> 00:35:30,975 generar sobres o simplement apúntelo. 827 00:35:30,975 --> 00:35:33,599 I és per aquesta raó, Vaig triar el tipus de dades incorrecte. 828 00:35:33,599 --> 00:35:34,490 Així que, m'encanta la teva idea. 829 00:35:34,490 --> 00:35:35,650 Utilitzarem un camp CHAR. 830 00:35:35,650 --> 00:35:38,340 Cinc personatges, excepte hi ha un cas cantonada. 831 00:35:38,340 --> 00:35:42,220 Si encara enviar correu, de vegades codis postals en aquests dies, 832 00:35:42,220 --> 00:35:45,360 que són, com, més quatre. 833 00:35:45,360 --> 00:35:48,200 Per tant, necessitem un guió i després necessitem quatre números més. 834 00:35:48,200 --> 00:35:50,330 Així que per ser honest, podria anar moltes maneres diferents. 835 00:35:50,330 --> 00:35:52,371 >> Per ara, em vaig a seguir simple i estic 836 00:35:52,371 --> 00:35:54,780 dirà que és un cinc per valor CHAR i estem 837 00:35:54,780 --> 00:35:56,739 va saltar tot el tauler més 4. 838 00:35:56,739 --> 00:35:58,280 Però aquests són els tipus de compensacions. 839 00:35:58,280 --> 00:36:00,196 I es pot pensar en el mateixos problemes que sorgeixen 840 00:36:00,196 --> 00:36:01,860 amb números de telèfon o altres camps. 841 00:36:01,860 --> 00:36:04,350 >> I ara, això és en realitat un camí absurd baixar. 842 00:36:04,350 --> 00:36:08,000 Suposem que tant Rob i jo i Hannah i Maria i [? Davon?] I Andy 843 00:36:08,000 --> 00:36:12,820 i altres en el personal de tots viuen a Cambridge, Massachusetts, 02138. 844 00:36:12,820 --> 00:36:17,970 En realitat, això se sent estúpid que sóc afegir a la meva taula d'usuaris, ciutat, estat, 845 00:36:17,970 --> 00:36:18,630 i el codi postal. 846 00:36:18,630 --> 00:36:20,980 Per què? 847 00:36:20,980 --> 00:36:21,960 >> AUDIÈNCIA: [inaudible] 848 00:36:21,960 --> 00:36:22,918 >> DAVID Malan: Digui una altra vegada? 849 00:36:22,918 --> 00:36:24,310 AUDIÈNCIA: [inaudible] 850 00:36:24,310 --> 00:36:25,850 >> DAVID Malan: Sempre són va a anar de la mà, no? 851 00:36:25,850 --> 00:36:28,660 Quan resulta que solíem pensar aquest va ser el cas fins que taxativament 852 00:36:28,660 --> 00:36:30,570 buscat tot els EUA, i resulta que hi ha 853 00:36:30,570 --> 00:36:32,653 són algunes inconsistències on diversos pobles tenen 854 00:36:32,653 --> 00:36:35,060 la mateixa postal, la qual cosa és rar. 855 00:36:35,060 --> 00:36:40,580 Però, si vam estipular per ara que 02.138 és sempre Cambridge, Massachusetts, 856 00:36:40,580 --> 00:36:44,910 ¿Per què en el món li guardi en la seva base de dades de Cambridge i MA i 02138 857 00:36:44,910 --> 00:36:49,357 per a mi i per Hannah i per Rob i per [? Davon?] I pels altres que viuen 858 00:36:49,357 --> 00:36:51,190 aquí a Cambridge, és perfectament redundant. 859 00:36:51,190 --> 00:36:54,480 >> Hem de fugir amb només l'emmagatzematge de què? 860 00:36:54,480 --> 00:36:55,610 Només el codi postal. 861 00:36:55,610 --> 00:36:58,660 Però llavors, si emmagatzemem només la codi postal, sí vull, probablement, 862 00:36:58,660 --> 00:37:02,160 per al meu lloc web per saber on és 02.138. 863 00:37:02,160 --> 00:37:03,910 Per tant, necessito una altra taula. 864 00:37:03,910 --> 00:37:04,697 I això està bé. 865 00:37:04,697 --> 00:37:07,530 I de fet, aquesta és una de les processos de disseny de taules de disseny 866 00:37:07,530 --> 00:37:11,472 que va a fer en PSet7 així pel qual desitja factoritzar dades comunes. 867 00:37:11,472 --> 00:37:14,430 Igual que hem estat factoritzar codi comú i factoring terme comú 868 00:37:14,430 --> 00:37:17,380 estils de CSS, aquí també a la base de dades, 869 00:37:17,380 --> 00:37:21,180 si només necessito 02.138 a única identificar la ciutat natal d'algú, 870 00:37:21,180 --> 00:37:25,020 no emmagatzemi Cambridge, Mass per cada usuari de sargir a la seva taula. 871 00:37:25,020 --> 00:37:29,770 >> En el seu lloc, tenir una taula separada anomenada Cremalleres que ha de tenir el columnes? 872 00:37:29,770 --> 00:37:33,490 Probablement un camp d'ID, simplement perquè, per els principis que estan parlant ara. 873 00:37:33,490 --> 00:37:35,720 Probablement un camp postal per 02.138. 874 00:37:35,720 --> 00:37:38,400 I llavors probablement el que altres columnes? 875 00:37:38,400 --> 00:37:42,950 Ciutat i estat, però només tenen un fila de 02138, una fila per 02139, 876 00:37:42,950 --> 00:37:44,772 una fila per 90.210. 877 00:37:44,772 --> 00:37:46,730 I això és, literalment, tots els codis postals que conec. 878 00:37:46,730 --> 00:37:49,012 >> Així que ara, què pots fer? 879 00:37:49,012 --> 00:37:51,220 Això és problemàtic, perquè ara tinc dues taules. 880 00:37:51,220 --> 00:37:54,660 Per tant, els meus usuaris són majoritàriament per aquí, però la seva informació d'estat de la ciutat és 881 00:37:54,660 --> 00:37:55,390 per aquí. 882 00:37:55,390 --> 00:37:58,635 Així, resulta que amb SQL, hi ha en realitat una manera d'unir-se a la informació, 883 00:37:58,635 --> 00:38:00,470 i veurà això en el PSet. 884 00:38:00,470 --> 00:38:03,000 >> Però resulta que puguis fer alguna cosa com això. 885 00:38:03,000 --> 00:38:10,501 Estrelles SELECT FROM usuaris, UNEIX-TE cremalleres A usuaris esquitxen postal és igual cremalleres esquitxen postal. 886 00:38:10,501 --> 00:38:13,360 La qual cosa és una mica prolix, és cert, però això només 887 00:38:13,360 --> 00:38:17,590 significa seleccioneu tot, des de la procés de prendre la meva taula d'usuaris 888 00:38:17,590 --> 00:38:19,580 i la meva taula de cremalleres. 889 00:38:19,580 --> 00:38:22,120 Uneix-te a ells, per un camp que tenen en columna. 890 00:38:22,120 --> 00:38:24,780 Així que, literalment, fer alguna cosa així, i Devuélveme 891 00:38:24,780 --> 00:38:27,360 una nova taula temporal això és més ampli, que és més gran, 892 00:38:27,360 --> 00:38:29,450 que té totes les columnes de tots dos. 893 00:38:29,450 --> 00:38:33,510 I això, simplement, seria el sintaxi per a fer alguna cosa com això. 894 00:38:33,510 --> 00:38:35,540 >> Així, hi ha un futur, però no va 895 00:38:35,540 --> 00:38:38,950 ser altres decisions de disseny que vostè han de fer, no només amb índexs 896 00:38:38,950 --> 00:38:40,550 sinó que també s'executa en desafiaments. 897 00:38:40,550 --> 00:38:43,360 De fet, hi ha un desafiament en qualsevol disseny de base de dades 898 00:38:43,360 --> 00:38:47,930 pel qual a vegades dues persones podrien voler per accedir a les mateixes files de la base de dades 899 00:38:47,930 --> 00:38:48,530 taula. 900 00:38:48,530 --> 00:38:51,450 Per tant, això és una cosa que anem a trobar en PSet7 també. 901 00:38:51,450 --> 00:38:54,686 >> Però vaig pensar que em veuria en un atac que és possible en SQL. 902 00:38:54,686 --> 00:38:56,560 Quins són alguns dels problemes que poden sorgir? 903 00:38:56,560 --> 00:38:58,170 Per tant, et trobaràs això en PSet7. 904 00:38:58,170 --> 00:39:01,874 I els diem obertament el que el solució de codificació per a aquest problema és. 905 00:39:01,874 --> 00:39:04,790 Però si vostè pren una classe de nivell superior, especialment en els sistemes operatius, 906 00:39:04,790 --> 00:39:06,950 trobaràs un tema d'atomicidad, 907 00:39:06,950 --> 00:39:10,080 el problema de tractar de fer diverses coses alhora 908 00:39:10,080 --> 00:39:11,000 sense interrupció. 909 00:39:11,000 --> 00:39:14,560 >> I vaig pensar en presentar-me aquest idea per PSet7 amb una metàfora 910 00:39:14,560 --> 00:39:18,160 que he après jo en Margo Sistemes operatius CS164 de Seltzer 911 00:39:18,160 --> 00:39:18,990 Fa anys la classe. 912 00:39:18,990 --> 00:39:22,230 Suposem que vostè té una d'aquestes dormitori nevera a la seva habitació de la residència o casa, 913 00:39:22,230 --> 00:39:24,474 i vostè té una veritable afició per la llet. 914 00:39:24,474 --> 00:39:27,140 I així, s'arriba a casa després de les classes un dia, obrir la nevera. 915 00:39:27,140 --> 00:39:27,620 Oh, maleïda sigui. 916 00:39:27,620 --> 00:39:28,870 No hi ha llet a la nevera. 917 00:39:28,870 --> 00:39:32,470 Així, es tanca la nevera, tancar la porta, bloquejar seu dormitori, 918 00:39:32,470 --> 00:39:34,770 caminar al voltant de la cantonada a CVS, posar-se en fila, 919 00:39:34,770 --> 00:39:36,312 i començar a comprovar cap a fora per una mica de llet. 920 00:39:36,312 --> 00:39:38,978 I va a prendre un temps, perquè aquests maleïts autoservei 921 00:39:38,978 --> 00:39:40,570 comptadors triguen una eternitat per utilitzar de totes maneres. 922 00:39:40,570 --> 00:39:41,950 Així que mentre tant, el seu company de quart arriba a casa. 923 00:39:41,950 --> 00:39:43,470 Ell o ella realment li agrada la llet també. 924 00:39:43,470 --> 00:39:45,520 Ells entren a l'habitació de la residència, obrir la nevera, oh, maleïda sigui. 925 00:39:45,520 --> 00:39:46,490 No hi ha més llet. 926 00:39:46,490 --> 00:39:49,040 >> Per tant, ell o ella també que passa al voltant de la cantonada. 927 00:39:49,040 --> 00:39:51,670 Però ara, ja que no hi ha com dos o tres o quatre CVSes a prop, 928 00:39:51,670 --> 00:39:53,800 passen a anar a un dels diferents a la plaça. 929 00:39:53,800 --> 00:39:55,830 I ara, uns pocs minuts més tard, els dos 930 00:39:55,830 --> 00:39:58,060 tornar a casa i ugh, pitjor problema mai. 931 00:39:58,060 --> 00:40:00,967 Ara vostè té massa llet perquè va a anar agra. 932 00:40:00,967 --> 00:40:03,050 I t'agrada la llet, però no m'agrada realment la llet. 933 00:40:03,050 --> 00:40:06,730 >> Així que ara, això era un car error perquè tots dos 934 00:40:06,730 --> 00:40:09,870 pres una decisió sobre la base de la estat d'alguna variable que 935 00:40:09,870 --> 00:40:12,660 estava en el procés de ser canviat per vostè, 936 00:40:12,660 --> 00:40:14,560 l'iniciador d'anar a comprar llet. 937 00:40:14,560 --> 00:40:17,785 Per tant, el que és potser un ésser humà solució a aquest problema? 938 00:40:17,785 --> 00:40:18,660 AUDIÈNCIA: [inaudible] 939 00:40:18,660 --> 00:40:19,430 DAVID Malan: Deixa una nota, oi? 940 00:40:19,430 --> 00:40:21,850 Sempre deixi una nota, si estàs familiaritzats amb aquest programa. 941 00:40:21,850 --> 00:40:23,100 Sí, hi ha dos de nosaltres. 942 00:40:23,100 --> 00:40:25,940 Per tant, sempre deixar una nota, o bloquejar literalment la nevera 943 00:40:25,940 --> 00:40:28,602 amb algun tipus de cadenat o una mica per sobre d'això. 944 00:40:28,602 --> 00:40:31,310 Però això és en realitat serà problema clau amb el disseny de la base de dades, 945 00:40:31,310 --> 00:40:34,710 especialment quan és possible que tingui diversos navegadors, múltiples ordinadors portàtils, 946 00:40:34,710 --> 00:40:37,450 diversos usuaris intenten tot actualitzar la informació alhora. 947 00:40:37,450 --> 00:40:40,590 La informació particularment sensible com la informació financera, 948 00:40:40,590 --> 00:40:43,350 pel qual amb un comerç d'accions lloc web com vostè va a ser la construcció, 949 00:40:43,350 --> 00:40:47,270 ¿I si voleu comprovar la quantitat de diners que té i llavors, si vostè té prou, 950 00:40:47,270 --> 00:40:48,490 comprar algunes accions? 951 00:40:48,490 --> 00:40:50,899 >> Però el que si algú més que té un compte conjunt amb vostè 952 00:40:50,899 --> 00:40:52,690 és tractar de forma simultània per comprar una mica de brou? 953 00:40:52,690 --> 00:40:55,190 Per tant, ell o ella és el control de la saldo del compte, els dos 954 00:40:55,190 --> 00:40:57,540 tornar al mateix resposta, no hi ha llet. 955 00:40:57,540 --> 00:41:00,580 O tots dos a tornar la resposta, vostè té $ 100 en el compte. 956 00:41:00,580 --> 00:41:04,680 Tots dos tracten de prendre la decisió per comprar una acció d'algunes accions de la companyia. 957 00:41:04,680 --> 00:41:06,130 >> I ara, què passa? 958 00:41:06,130 --> 00:41:07,140 Vostè té dues accions? 959 00:41:07,140 --> 00:41:08,420 No té accions? 960 00:41:08,420 --> 00:41:10,320 Problemes com la que poden sorgir. 961 00:41:10,320 --> 00:41:11,755 Així que vas a trobar això. 962 00:41:11,755 --> 00:41:14,630 Atacs d'injecció SQL, per sort, són una cosa que nosaltres l'ajudarem amb, 963 00:41:14,630 --> 00:41:17,430 però aquests són atrociously comuns en aquests dies encara. 964 00:41:17,430 --> 00:41:18,680 Per tant, això és només un exemple. 965 00:41:18,680 --> 00:41:21,290 Jo no faig afirmacions que Sistema de Harvard PIN és 966 00:41:21,290 --> 00:41:23,130 vulnerables a aquest atac en particular. 967 00:41:23,130 --> 00:41:24,160 Hem intentat. 968 00:41:24,160 --> 00:41:26,120 Però, ja saps que nosaltres tenir un camp com aquest. 969 00:41:26,120 --> 00:41:29,620 I de Yale Net ID té una semblança que miri aquests dies. 970 00:41:29,620 --> 00:41:33,190 I resulta, que potser el Sistema de PIN està implementat en PHP. 971 00:41:33,190 --> 00:41:37,050 >> I si were-- és no-- que podria tenir codi que s'assembla a això. 972 00:41:37,050 --> 00:41:38,210 Tenen dues variables. 973 00:41:38,210 --> 00:41:42,495 Dóna'm el nom d'usuari i contrasenya de la variable global post súper 974 00:41:42,495 --> 00:41:43,970 que hem parlat abans. 975 00:41:43,970 --> 00:41:47,310 Potser Harvard té una consulta com l'estrella SELECT FROM usuaris 976 00:41:47,310 --> 00:41:50,005 on nom d'usuari és igual que i la contrasenya és igual que. 977 00:41:50,005 --> 00:41:51,880 I noto que estic sol endollar en l'ús de 978 00:41:51,880 --> 00:41:55,050 la notació de claudàtor de l'altra dia, el que significa que només ha de connectar un valor 979 00:41:55,050 --> 00:41:55,550 aquí. 980 00:41:55,550 --> 00:41:57,449 No estic fent servir la tècnica de signe d'interrogació. 981 00:41:57,449 --> 00:41:59,240 Jo no tinc cap segons o terceres arguments. 982 00:41:59,240 --> 00:42:02,350 Estic literalment la construcció de la cadena de mi mateix. 983 00:42:02,350 --> 00:42:04,930 >> El problema, però, és que si algú li agrada un scroob, 984 00:42:04,930 --> 00:42:09,020 que és una referència a una pel·lícula, Obre una sessió amb alguna cosa com això, 985 00:42:09,020 --> 00:42:11,250 i m'he tret els punts que sol encobrir 986 00:42:11,250 --> 00:42:14,370 contrasenyes, el que si és particularment maliciós 987 00:42:14,370 --> 00:42:18,860 i la contrasenya potser és 12345, per la pel·lícula anomenada "Spaceballs" 988 00:42:18,860 --> 00:42:21,970 però críticament els tipus A cometa simple després dels cinc, 989 00:42:21,970 --> 00:42:24,790 després, literalment, la paraula o en l'espai, i després cita, 990 00:42:24,790 --> 00:42:29,160 un sol cap de la cita és igual a la cita un, Però Recordeu que ha omès què? 991 00:42:29,160 --> 00:42:32,700 Ha omès la cita a la dreta i ha omès la cita de l'esquerra. 992 00:42:32,700 --> 00:42:35,170 >> Perquè si aquest atacant presumpció de scroob 993 00:42:35,170 --> 00:42:38,160 és que les persones que van escriure aquest codi PHP no fos tan brillant, 994 00:42:38,160 --> 00:42:42,990 potser només tenen algun sola cita a la volta de la interpolació 995 00:42:42,990 --> 00:42:45,210 d'una variable entre claus? 996 00:42:45,210 --> 00:42:48,620 I el que potser, el que va poder tipus de completar el seu pensament 997 00:42:48,620 --> 00:42:53,290 per a ells, però d'una manera que va per deixar-hackeó el sistema PIN. 998 00:42:53,290 --> 00:42:55,310 En altres paraules, suposem que aquest és el codi de 999 00:42:55,310 --> 00:42:57,140 i ara ens connectem el scroob escrit. 1000 00:42:57,140 --> 00:42:58,770 I és vermell, perquè és dolent. 1001 00:42:58,770 --> 00:43:01,310 >> I el text subjacent és el que ell escriu en, 1002 00:43:01,310 --> 00:43:05,510 scroob podria enganyar servidor de Harvard en la construcció d'una consulta SQL 1003 00:43:05,510 --> 00:43:07,440 cadena que s'assembla a això. 1004 00:43:07,440 --> 00:43:11,760 Contrasenya és igual a 12.345 o un és igual a un. 1005 00:43:11,760 --> 00:43:14,820 El resultat de tot això, lògicament, és que aquesta registrarà scroob 1006 00:43:14,820 --> 00:43:18,360 en si la seva contrasenya és 12345 o si un és igual a 1007 00:43:18,360 --> 00:43:22,660 un, que per descomptat és sempre cert, el que significa scroob sempre entra. 1008 00:43:22,660 --> 00:43:26,060 >> I així, la manera d'arreglar això, com en molts casos, 1009 00:43:26,060 --> 00:43:28,140 seria escriure més defensiu. 1010 00:43:28,140 --> 00:43:30,390 Per servir alguna cosa com la nostra funció de consulta real, que 1011 00:43:30,390 --> 00:43:33,980 veurà en PSet7, on ens connectem una mena de signes d'interrogació aquí. 1012 00:43:33,980 --> 00:43:35,980 I la bellesa de la funció de consulta que 1013 00:43:35,980 --> 00:43:40,010 et donen és que defensa contra aquests els anomenats atacs d'injecció SQL, on 1014 00:43:40,010 --> 00:43:44,260 algú està enganyant al seu codi en injectar el seu propi codi SQL. 1015 00:43:44,260 --> 00:43:47,380 Perquè el que la funció de consulta donem en realitat es va fer, 1016 00:43:47,380 --> 00:43:51,270 si utilitza la sintaxi de signe d'interrogació i un segon i un tercer argument aquí, 1017 00:43:51,270 --> 00:43:54,590 és què afegir a la d'entrada que l'usuari sempre? 1018 00:43:54,590 --> 00:43:56,060 Aquells barra invertida cita. 1019 00:43:56,060 --> 00:43:58,590 >> Per tant, escapa a qualsevol potencialment caràcters perillosos. 1020 00:43:58,590 --> 00:44:01,000 Això sembla estrany ara, però no és vulnerable 1021 00:44:01,000 --> 00:44:03,260 perquè no fa canviar la lògica ja 1022 00:44:03,260 --> 00:44:06,470 perquè tota aquesta contrasenya és Ara una sola cita que no ho és, 1023 00:44:06,470 --> 00:44:07,596 De fet, la contrasenya de l'scroob. 1024 00:44:07,596 --> 00:44:09,845 Així, hi ha hagut alguns acudits sobre això en els últims anys. 1025 00:44:09,845 --> 00:44:12,570 Per tant, es tractava d'una foto presa d'algun friki en un estacionament 1026 00:44:12,570 --> 00:44:16,620 pel que vostè pot ser que sàpiga que algunes ciutats i els estats tracten d'escanejar la seva llicència 1027 00:44:16,620 --> 00:44:19,460 placa per facturar-a vostè o al tiquet si es va per fora, com, 1028 00:44:19,460 --> 00:44:20,660 la cosa E-Z Pass. 1029 00:44:20,660 --> 00:44:24,490 Per tant, aquesta persona presumeix que potser la gent que escriu el sistema E-Z Pass 1030 00:44:24,490 --> 00:44:28,240 no eren tan brillants, i potser només concatenats junts una cadena, 1031 00:44:28,240 --> 00:44:32,190 perquè ell o ella no podia maliciosament no només completar el seu pensament, 1032 00:44:32,190 --> 00:44:35,150 però en realitat executar una ordre incorrecte, que encara no hem esmentat, 1033 00:44:35,150 --> 00:44:36,380 però és fàcil endevinar. 1034 00:44:36,380 --> 00:44:39,820 Que a més d'eliminar i inserir i actualitzar i seleccionar, 1035 00:44:39,820 --> 00:44:43,370 també hi ha una paraula clau anomenada gota, que esborra literalment tot 1036 00:44:43,370 --> 00:44:45,300 a la base de dades, la qual és particularment dolent. 1037 00:44:45,300 --> 00:44:48,760 >> Podem fer un zoom en aquest cas que és una mica difícil de veure. 1038 00:44:48,760 --> 00:44:52,300 Això, ara, és un famós dibuix animat això és meravellosament intel·ligent ara 1039 00:44:52,300 --> 00:44:53,145 i comprensible. 1040 00:44:53,145 --> 00:45:00,880 1041 00:45:00,880 --> 00:45:04,750 >> [El] 1042 00:45:04,750 --> 00:45:05,910 >> Sí, fresc. 1043 00:45:05,910 --> 00:45:06,800 Tipus d'geeking terme. 1044 00:45:06,800 --> 00:45:08,800 Així que aquests són, doncs, Atacs d'injecció SQL. 1045 00:45:08,800 --> 00:45:13,050 I són tan fàcils d'evitar mitjançant l'ús de el codi correcte o les biblioteques adequades. 1046 00:45:13,050 --> 00:45:15,947 I veuràs en PSet7, això és per això et donem la funció de consulta. 1047 00:45:15,947 --> 00:45:17,780 Així que, un parell de teasers que pensem que seria millor 1048 00:45:17,780 --> 00:45:19,930 li donarà aquí a la nostra restant minuts junts. 1049 00:45:19,930 --> 00:45:24,030 Així que, com vostè recorda de setmana zero, introduït aquests dos bombetes que 1050 00:45:24,030 --> 00:45:26,610 són agradables, no només perquè que són bastant i són colorits, 1051 00:45:26,610 --> 00:45:29,450 però perquè donen suport mica anomenat un API, un Sol·licitud 1052 00:45:29,450 --> 00:45:31,980 Interfície de programació d'I en CS50 fins al moment, no tenim 1053 00:45:31,980 --> 00:45:34,440 sobretot centrat en GET i POST, però resulta 1054 00:45:34,440 --> 00:45:37,390 hi ha altres verbs HTTP com PUT. 1055 00:45:37,390 --> 00:45:39,430 >> I de fet, això era una diapositiva de setmana zero 1056 00:45:39,430 --> 00:45:44,930 amb la qual cosa si s'escriu codi que envia a la PSet6 una petició HTTP que 1057 00:45:44,930 --> 00:45:49,647 són aquestes amb aquest tros de text a la part inferior, que es diu JSON, 1058 00:45:49,647 --> 00:45:52,230 o JavaScript Object Notation que parlarem de la propera setmana, 1059 00:45:52,230 --> 00:45:57,030 pot activar o desactivar o canviar el color de les llums com aquestes. 1060 00:45:57,030 --> 00:46:00,480 Així que si CS50 també té, a més d'alguns d'aquestes bombetes aquí a New Haven 1061 00:46:00,480 --> 00:46:02,480 si voleu demanar prestat per als projectes finals, 1062 00:46:02,480 --> 00:46:04,370 també una mica de Microsoft Bandes, que són com 1063 00:46:04,370 --> 00:46:07,619 els rellotges que utilitzeu al voltant del canell que de la mateixa manera tenir una API perquè 1064 00:46:07,619 --> 00:46:10,040 pot escriure el seu propi programari per a ells. 1065 00:46:10,040 --> 00:46:12,490 >> Tenim un compte amb Codi de iOS d'Apple fins 1066 00:46:12,490 --> 00:46:15,510 que si vostè té un rellotge d'Apple o un iPhone o un iPad o un iPod, 1067 00:46:15,510 --> 00:46:17,707 vostè pot escriure codi que en realitat s'executa en ells. 1068 00:46:17,707 --> 00:46:19,540 Tenim un munt de Arduinos, que són 1069 00:46:19,540 --> 00:46:22,010 diminuts ordinadors sense casos, en essència, 1070 00:46:22,010 --> 00:46:25,240 que es pot connectar a través d'USB, normalment al seu propi Mac o PC, 1071 00:46:25,240 --> 00:46:28,810 escriure codi que s'executa en aquests física dispositius que sovint tenen sensors en ells 1072 00:46:28,810 --> 00:46:30,790 perquè pugui interactuar amb el món real. 1073 00:46:30,790 --> 00:46:32,860 Tenim un munt de dispositius Leap Motion, 1074 00:46:32,860 --> 00:46:36,500 que són els dispositius USB per a Mac i PC, aquí i una altra vegada, a New Haven. 1075 00:46:36,500 --> 00:46:40,080 I si ho connectes al teu Mac, en realitat es pot controlar l'ordinador 1076 00:46:40,080 --> 00:46:42,550 escrivint programari que a través de raigs infrarojos, 1077 00:46:42,550 --> 00:46:46,360 s'adona on són els seus mans humanes són, fins i tot sense tocar el teclat. 1078 00:46:46,360 --> 00:46:49,135 Pensem que ens agradaria compartir una ràpida albirar en aquest, per exemple. 1079 00:46:49,135 --> 00:46:51,428 >> [REPRODUCCIÓ DE MÚSICA] 1080 00:46:51,428 --> 00:47:55,840 1081 00:47:55,840 --> 00:47:57,590 Així doncs, tenim un tot munt d'aquestes coses, 1082 00:47:57,590 --> 00:48:01,040 també, anomenat Myo braçalets que es posa sobre l'avantbraç 1083 00:48:01,040 --> 00:48:04,595 i llavors vostè pot controlar la realitat món o el món virtual com aquest. 1084 00:48:04,595 --> 00:48:06,471 >> [REPRODUCCIÓ DE MÚSICA] 1085 00:48:06,471 --> 00:49:17,580 1086 00:49:17,580 --> 00:49:20,920 O, també tenim alguns Google Cartró, que és, literalment, com, 1087 00:49:20,920 --> 00:49:24,841 una caixa de cartró es pot posar en el seu cara, però diapositiva en el seu telèfon en ell 1088 00:49:24,841 --> 00:49:27,590 de manera que es posa el got de la seva telèfon molt a prop dels seus ulls. 1089 00:49:27,590 --> 00:49:30,190 I Google és de cartró bastant barat a $ 10 o $ 20. 1090 00:49:30,190 --> 00:49:32,230 I té petits lents que una mica fora de torn 1091 00:49:32,230 --> 00:49:35,900 la imatge a la pantalla per a la seva humana ulls per donar-li una sensació de profunditat 1092 00:49:35,900 --> 00:49:39,550 pel que en realitat té un 3D medi ambient davant teu. 1093 00:49:39,550 --> 00:49:42,927 També tenim alguns Samsung Gear, que és la versió més cara d'aquest, 1094 00:49:42,927 --> 00:49:46,010 però que pot lliscar de manera similar en una Telèfon Android i li donarà la il·lusió 1095 00:49:46,010 --> 00:49:48,309 de-- o donar l'experiència de la realitat virtual. 1096 00:49:48,309 --> 00:49:50,850 I a les nostres dos minuts finals, pensem que ens agradaria provar a fer això. 1097 00:49:50,850 --> 00:49:55,250 Si puc projectar el Colton té aquí només per anar fent boca, 1098 00:49:55,250 --> 00:49:58,442 m'ho dius a mi anar per davant i tirar dalt a la pantalla gran aquí. 1099 00:49:58,442 --> 00:49:59,400 Déjame matar els llums. 1100 00:49:59,400 --> 00:50:02,290 Colton, vols anar a continuació i posar en el teu mòbil per un moment 1101 00:50:02,290 --> 00:50:05,171 i vénen de més a la mig de l'escenari? 1102 00:50:05,171 --> 00:50:07,420 I què vols project-- això és el que veu Colton. 1103 00:50:07,420 --> 00:50:10,560 >> Ara, el Wi-Fi aquí és no tan fort per a aquest dispositiu 1104 00:50:10,560 --> 00:50:13,870 que aquest és súper atractiva, però Colton és, literalment, 1105 00:50:13,870 --> 00:50:15,710 en aquest lloc futurista màgic. 1106 00:50:15,710 --> 00:50:16,796 Ell només veu una imatge. 1107 00:50:16,796 --> 00:50:19,920 Vostè està veient l'ull esquerre i el dret que el seu cervell estan cosint junts 1108 00:50:19,920 --> 00:50:22,260 en una de tres dimensions medi ambient a la cara. 1109 00:50:22,260 --> 00:50:24,319 Ell només ha seleccionat una opció de menú aquí. 1110 00:50:24,319 --> 00:50:27,360 I així, un cop més, ell està usant aquest auricular amb un telèfon Samsung a ell que és 1111 00:50:27,360 --> 00:50:29,080 sense fils projectar als nostres despeses. 1112 00:50:29,080 --> 00:50:30,349 Ara vostè està a Mart, em sembla? 1113 00:50:30,349 --> 00:50:31,140 COLTON: Crec que si. 1114 00:50:31,140 --> 00:50:32,181 No estic segur de [inaudible]. 1115 00:50:32,181 --> 00:50:34,250 [El] 1116 00:50:34,250 --> 00:50:36,374 >> DAVID Malan: Resulta Mart té aquests menús. 1117 00:50:36,374 --> 00:50:41,590 >> COLTON: [inaudible] alguns fresc llocs si volen anar A-- 1118 00:50:41,590 --> 00:50:43,330 >> DAVID Malan: Cap a on volem anar? 1119 00:50:43,330 --> 00:50:45,837 >> COLTON: [inaudible] 1120 00:50:45,837 --> 00:50:48,170 DAVID Malan: I veurem on ens Colton de prendre ara. 1121 00:50:48,170 --> 00:50:48,961 COLTON: [inaudible] 1122 00:50:48,961 --> 00:50:52,830 1123 00:50:52,830 --> 00:50:56,380 >> DAVID Malan: Per tant, hi ha tants diferents llocs als que poden prendre vostè mateix. 1124 00:50:56,380 --> 00:51:00,590 Hi ha FAPIs través del qual es pot escriure jocs o interaccions que 1125 00:51:00,590 --> 00:51:01,950 executar, en última instància, al telèfon. 1126 00:51:01,950 --> 00:51:03,908 Per tant, el que realment escriure una aplicació de telèfon mòbil. 1127 00:51:03,908 --> 00:51:06,380 Però gràcies al programari i les capacitats gràfiques, 1128 00:51:06,380 --> 00:51:08,765 Colton ara és en aquest petita caseta. 1129 00:51:08,765 --> 00:51:10,515 I en el risc de aclaparar a nosaltres mateixos, 1130 00:51:10,515 --> 00:51:13,330 Colton i jo em quedo al voltant de mentre que al final de la classe avui 1131 00:51:13,330 --> 00:51:14,300 si t'agradaria venir i jugar. 1132 00:51:14,300 --> 00:51:16,350 I anem a portar-los la setmana que ve també. 1133 00:51:16,350 --> 00:51:18,420 Sense més, ADO això és tot per avui. 1134 00:51:18,420 --> 00:51:21,990 Ens veiem la setmana que ve. 1135 00:51:21,990 --> 00:51:24,140 >> [MÚSICA - Ragga Twins, "home dolent"] 1136 00:51:24,140 --> 00:55:23,146