1 00:00:00,000 --> 00:00:02,405 >> [Muziek] 2 00:00:02,405 --> 00:00:10,439 3 00:00:10,439 --> 00:00:11,980 DAVID MALAN: Oké, dit is CS50. 4 00:00:11,980 --> 00:00:13,740 Dit is het einde van week acht. 5 00:00:13,740 --> 00:00:15,887 En vandaag, we beginnen in sommige stukken in te vullen 6 00:00:15,887 --> 00:00:17,720 als het gaat om de bouw dingen op het Web. 7 00:00:17,720 --> 00:00:20,020 Dus, herinneren eraan dat op maandag We besteden veel meer tijd 8 00:00:20,020 --> 00:00:22,530 PHP, die deze dynamische programmeertaal die 9 00:00:22,530 --> 00:00:26,872 laat ons output, onder andere dingen, HTML en andere dergelijke inhoud 10 00:00:26,872 --> 00:00:27,830 dat we willen zien. 11 00:00:27,830 --> 00:00:30,871 Maar we hebben niet echt gekeken naar hoe we gaan om alle informatie op te slaan. 12 00:00:30,871 --> 00:00:34,477 Inderdaad, bijna alle van de super interessante websites die u vandaag bezoekt 13 00:00:34,477 --> 00:00:36,560 een soort database op de back-end, toch? 14 00:00:36,560 --> 00:00:39,540 Facebook slaat zeker veel data over ons allen en Gmail slaat alle 15 00:00:39,540 --> 00:00:40,210 van uw e-mails. 16 00:00:40,210 --> 00:00:44,150 >> En ja, vele andere sites zijn niet alleen statische content dat is informatief. 17 00:00:44,150 --> 00:00:45,640 Het is eigenlijk dynamisch op een bepaalde manier. 18 00:00:45,640 --> 00:00:48,480 U levert input, het bijwerken de pagina's voor andere mensen. 19 00:00:48,480 --> 00:00:50,620 Krijg je berichten, je stuur berichten, enzovoort. 20 00:00:50,620 --> 00:00:54,250 Dus vandaag, kijken we dichter bij de onderbouwing van een project 21 00:00:54,250 --> 00:00:57,330 dat je een duik nemen in de volgende week, CS50 Financiën, die 22 00:00:57,330 --> 00:01:00,509 er werkelijk gaande is om u te hebben op te bouwen iets wat niet in C, maar in PHP. 23 00:01:00,509 --> 00:01:02,550 Een website die een uitziet beetje iets als dit 24 00:01:02,550 --> 00:01:05,810 die het mogelijk maakt om te kopen en te verkopen voorraden die eigenlijk 25 00:01:05,810 --> 00:01:09,044 gaan putten uit real-time voorraadgegevens van Yahoo Finance. 26 00:01:09,044 --> 00:01:11,960 En zo uiteindelijk heb je de illusie voor jezelf en voor gebruikers 27 00:01:11,960 --> 00:01:14,550 dat je eigenlijk kopen en verkopen voorraden en het krijgen van bijna real-time 28 00:01:14,550 --> 00:01:16,800 updates, het beheren van een portfolio, allemaal 29 00:01:16,800 --> 00:01:20,310 gaat om te eisen dat, Uiteindelijk, een database van de gebruikers. 30 00:01:20,310 --> 00:01:23,330 >> Dus, in je eigen woorden, vooral als je niet 31 00:01:23,330 --> 00:01:25,670 super kennen computer wetenschap of databases, wat 32 00:01:25,670 --> 00:01:30,790 heb je een database weten te zijn nu, in niet-technische termen? 33 00:01:30,790 --> 00:01:32,300 Wat is het? 34 00:01:32,300 --> 00:01:36,882 Hoe zou je het te beschrijven een huisgenoot of een vriend? 35 00:01:36,882 --> 00:01:40,100 >> PUBLIEK: [onverstaanbaar] informatie [onverstaanbaar] 36 00:01:40,100 --> 00:01:44,430 >> DAVID MALAN: Dus, een lijst van de informatie, of een store-- een lijst met informatie 37 00:01:44,430 --> 00:01:47,160 die je zou willen op te slaan over iets, als een gebruiker. 38 00:01:47,160 --> 00:01:50,190 En wat doen de gebruikers in verband met hen? 39 00:01:50,190 --> 00:01:53,160 Als je een gebruiker op Facebook of bent Gmail, wat zijn de kenmerken 40 00:01:53,160 --> 00:01:54,940 dat ieder van ons gebruikers? 41 00:01:54,940 --> 00:01:58,530 Zoals, wat zou kunnen zijn een aantal van de kolommen in de spreadsheet waarnaar we 42 00:01:58,530 --> 00:01:59,390 zinspeelde vorige keer? 43 00:01:59,390 --> 00:02:01,140 Want nogmaals, je kunt denk aan een database 44 00:02:01,140 --> 00:02:05,810 echt als een fancy Excel-bestand of Google Spreadsheet of Apple Numbers-bestand. 45 00:02:05,810 --> 00:02:08,280 >> Dus, wat denk je van als je denkt aan een gebruiker? 46 00:02:08,280 --> 00:02:11,290 Wat hebben ze? 47 00:02:11,290 --> 00:02:11,790 Wat is dat? 48 00:02:11,790 --> 00:02:12,470 >> Publiek: Een naam. 49 00:02:12,470 --> 00:02:13,303 >> DAVID MALAN: Een naam. 50 00:02:13,303 --> 00:02:16,840 Dus als naam, zoals David Malan zou de naam van een gebruiker. 51 00:02:16,840 --> 00:02:17,980 Wat heeft een gebruiker? 52 00:02:17,980 --> 00:02:18,770 >> Publiek: Een ID. 53 00:02:18,770 --> 00:02:19,561 >> DAVID MALAN: Een ID. 54 00:02:19,561 --> 00:02:23,320 Dus, zoals een ID-nummer, zoals je Harvard ID of uw Yale Net ID of iets dergelijks. 55 00:02:23,320 --> 00:02:24,923 Wat kan een gebruiker? 56 00:02:24,923 --> 00:02:25,890 >> PUBLIEK: Wachtwoord. 57 00:02:25,890 --> 00:02:29,240 >> DAVID MALAN: Een wachtwoord, misschien een adres, misschien een telefoonnummer, misschien 58 00:02:29,240 --> 00:02:30,050 een e-mailadres. 59 00:02:30,050 --> 00:02:32,640 Dus, is er trossen van de velden en dit kan soort uit de hand 60 00:02:32,640 --> 00:02:34,760 snel zodra je begint realiseren, oh, laten we dit op te slaan 61 00:02:34,760 --> 00:02:36,190 en laten we dit en dat op te slaan. 62 00:02:36,190 --> 00:02:37,657 >> Maar hoe doen we dat eigenlijk doen? 63 00:02:37,657 --> 00:02:39,740 Dus nogmaals, het mentale model hebben we voor vandaag 64 00:02:39,740 --> 00:02:42,320 duiken in daadwerkelijke SQL, Structured Query Language, 65 00:02:42,320 --> 00:02:44,186 is een database die er zo uitziet. 66 00:02:44,186 --> 00:02:45,310 Het is gewoon rijen en kolommen. 67 00:02:45,310 --> 00:02:48,309 En je kunt je voorstellen Google Spreadsheets of een aantal andere programma's. 68 00:02:48,309 --> 00:02:52,130 Maar wat is de belangrijkste over MySQL, dat is de databasesoftware we gaan gebruiken, 69 00:02:52,130 --> 00:02:54,920 de vrij openlijk available-- Facebook toepassingen 70 00:02:54,920 --> 00:02:59,200 het en elk aantal andere websites-- databank slaat dingen relationeel. 71 00:02:59,200 --> 00:03:01,770 En een relationele database betekent gewoon een die letterlijk 72 00:03:01,770 --> 00:03:03,672 slaat gegevens op in rijen en kolommen. 73 00:03:03,672 --> 00:03:04,630 Het is zo simpel als dat. 74 00:03:04,630 --> 00:03:07,230 >> Dus, zelfs iets als Oracle dat je zou het algemeen hebben gehoord van 75 00:03:07,230 --> 00:03:08,271 is een relationele database. 76 00:03:08,271 --> 00:03:10,929 En onder de motorkap, is slaat gegevens in rijen en kolommen. 77 00:03:10,929 --> 00:03:12,970 En Oracle rekent u een veel geld om dat te doen, 78 00:03:12,970 --> 00:03:15,550 terwijl MySQL kosten u niets voor hetzelfde. 79 00:03:15,550 --> 00:03:18,790 Dus, SQL gaat ons ten minste vier bewerkingen. 80 00:03:18,790 --> 00:03:23,190 De mogelijkheid om data te selecteren, zoals read data, invoegen, verwijderen en updaten van gegevens. 81 00:03:23,190 --> 00:03:25,525 Met andere woorden, deze zijn echt de vier belangrijkste activiteiten 82 00:03:25,525 --> 00:03:28,950 die zullen ons in staat stellen om te veranderen spullen in die rijen en kolommen. 83 00:03:28,950 --> 00:03:33,250 >> Het instrument dat we zeker zullen gebruiken vandaag SQL te leren en te spelen met het 84 00:03:33,250 --> 00:03:34,627 wordt opnieuw genoemd PHP MyAdmin. 85 00:03:34,627 --> 00:03:35,460 Het is web-based tool. 86 00:03:35,460 --> 00:03:38,200 Totaal toeval dat het is geschreven in PHP. 87 00:03:38,200 --> 00:03:42,400 Maar het gaat om ons een grafische geven gebruikersinterface, zodat we kunnen eigenlijk 88 00:03:42,400 --> 00:03:46,054 maken deze rijen en kolommen en dan met ze praten via code. 89 00:03:46,054 --> 00:03:47,970 Dus, laten we nu beginnen aan wat ik denk eerlijk gezegd 90 00:03:47,970 --> 00:03:51,000 soort van het plezier proces van building de achterkant van websites, 91 00:03:51,000 --> 00:03:54,580 de onderdelen die gebruikers niet te zien, maar zeker niet de zorg over, 92 00:03:54,580 --> 00:03:56,170 want dat is nogal gegevens van gaan. 93 00:03:56,170 --> 00:03:59,570 Dus, vergelijkbaar met C en een beetje minder zoals PHP, 94 00:03:59,570 --> 00:04:04,954 SQL, of een database die ondersteuning SQL, ten minste deze gegevenstypen 95 00:04:04,954 --> 00:04:05,870 en trossen van anderen. 96 00:04:05,870 --> 00:04:08,107 CHAR, VARCHAR, INT, BIGINT, DECIMALE en DATETIME. 97 00:04:08,107 --> 00:04:09,940 En er is een hele heleboel andere functies, 98 00:04:09,940 --> 00:04:11,940 maar laten we dit doen door manier concreet voorbeeld. 99 00:04:11,940 --> 00:04:16,450 >> Ik ga in CS50 IDE te gaan waar van tevoren, ik heb ingelogd 100 00:04:16,450 --> 00:04:19,372 en ik heb ook een bezoek aan een URL Deze tool genaamd PHP MyAdmin. 101 00:04:19,372 --> 00:04:22,580 En in probleem stelde zeven, zullen we vertellen u precies hoe u deze interface krijgen 102 00:04:22,580 --> 00:04:23,200 ook. 103 00:04:23,200 --> 00:04:25,640 Op de linker bovenhoek, merkt het zegt lezing. 104 00:04:25,640 --> 00:04:27,610 En dat betekent dat op voorhand, die ik heb gemaakt 105 00:04:27,610 --> 00:04:31,360 een lege database genaamd lezing dat heeft geen spreadsheets in. 106 00:04:31,360 --> 00:04:32,600 Er is geen rijen en kolommen. 107 00:04:32,600 --> 00:04:34,308 Omdat de eerste wat we gaan doen 108 00:04:34,308 --> 00:04:37,100 is beginnen met een tabel dat gaat om onze gebruikers op te slaan. 109 00:04:37,100 --> 00:04:39,100 >> Dus, letterlijk dan hier naar rechts, ik ben 110 00:04:39,100 --> 00:04:42,070 gaan naar de database te vertellen Ik wil een tabel met de naam gebruikers. 111 00:04:42,070 --> 00:04:44,845 Dus, dit is als het bestand dat ik wil al mijn gegevens op te slaan in. 112 00:04:44,845 --> 00:04:45,720 En hoeveel kolommen? 113 00:04:45,720 --> 00:04:47,740 Nou, laten we het simpel houden voor nu. 114 00:04:47,740 --> 00:04:51,855 Ik wil alleen maar op te slaan als een gebruikersnaam en een naam voor een gebruiker. 115 00:04:51,855 --> 00:04:53,020 We beginnen klein. 116 00:04:53,020 --> 00:04:55,370 Dus, ik wil twee kolommen totaal. 117 00:04:55,370 --> 00:04:57,360 En ik ga om verder te gaan en klik op Go. 118 00:04:57,360 --> 00:04:59,210 En dan, deze kolommen, wat ik ga 119 00:04:59,210 --> 00:05:04,576 om doen-- als dit internet cooperates-- goed, 120 00:05:04,576 --> 00:05:05,950 dus we gaan weer proberen. 121 00:05:05,950 --> 00:05:09,180 Ik ga een tabel met de naam te maken Gebruikers met twee kolommen, klik op Start, OK. 122 00:05:09,180 --> 00:05:10,520 Nu hebben we het echt snel. 123 00:05:10,520 --> 00:05:12,065 Dank u, heel goed gedaan. 124 00:05:12,065 --> 00:05:14,440 Oké, dus wat willen we deze kolommen worden genoemd? 125 00:05:14,440 --> 00:05:16,080 >> Dus, een gaat heten Gebruikersnaam. 126 00:05:16,080 --> 00:05:19,480 Dus, alles wat ik zie hier-- en de interface eerlijk gezegd krijgt een beetje lelijk uiteindelijk, 127 00:05:19,480 --> 00:05:21,270 als je eenmaal begint te typen in al deze gegevens. 128 00:05:21,270 --> 00:05:27,450 Maar wat leuk is dat soort paradoxaal genoeg, ik ben het creëren van kolommen, 129 00:05:27,450 --> 00:05:29,977 maar de tool heeft dwaas legde ze uit in rijen 130 00:05:29,977 --> 00:05:31,560 zodat ik deze kolommen kunt configureren. 131 00:05:31,560 --> 00:05:33,550 Dus, is er twee blanks er onder Naam. 132 00:05:33,550 --> 00:05:36,180 En één van deze velden I willen Gebruikersnaam genoemd, 133 00:05:36,180 --> 00:05:38,000 en het andere veld wil ik Naam noemen. 134 00:05:38,000 --> 00:05:40,340 >> En nu moet ik kiezen soorten gegevens voor deze dingen. 135 00:05:40,340 --> 00:05:42,330 Dus, terwijl in Excel en Google Spreadsheets, 136 00:05:42,330 --> 00:05:45,531 Als u een kolom wilt, je letterlijk typ Naam of gebruikersnaam, drukt u op Enter. 137 00:05:45,531 --> 00:05:48,030 Misschien heb je er vetgedrukt maken gewoon voor de duidelijkheid, maar dat is het. 138 00:05:48,030 --> 00:05:50,140 Je niet opgeeft de types van de kolommen. 139 00:05:50,140 --> 00:05:53,790 Nu in Google Spreadsheets of Excel, u zou opgeven hoe de gegevens worden weergegeven. 140 00:05:53,790 --> 00:05:58,120 Je zou kunnen gaan naar het menu Opmaak en u kunt opgeven zien dit als dollarteken, 141 00:05:58,120 --> 00:05:59,900 zien dit als een floating point waarde. 142 00:05:59,900 --> 00:06:01,990 >> Dus, het is vergelijkbaar in de geest dat wat we gaan doen, 143 00:06:01,990 --> 00:06:04,740 maar dit is eigenlijk gaat dwingen de data voor een bepaald type. 144 00:06:04,740 --> 00:06:07,750 Nu, ook al even geleden I zei dat er maar een paar soorten data, 145 00:06:07,750 --> 00:06:11,120 er is eigenlijk een heel veel, en ze zijn 146 00:06:11,120 --> 00:06:12,910 in verschillende mate van specificiteit. 147 00:06:12,910 --> 00:06:14,970 En als een terzijde, u zelfs mooie dingen te doen 148 00:06:14,970 --> 00:06:17,520 zoals opslag geometrieën binnenkant van een database. 149 00:06:17,520 --> 00:06:19,250 Je kunt dingen op te slaan zoals GPS-coördinaten 150 00:06:19,250 --> 00:06:22,420 en eigenlijk vinden, wiskundig, punten die dicht bij elkaar zijn. 151 00:06:22,420 --> 00:06:24,128 Maar we gaan Houd dit super eenvoudig 152 00:06:24,128 --> 00:06:26,800 en gaan tot hier, al de zogenaamde reekstypen. 153 00:06:26,800 --> 00:06:29,240 >> Dus, hier is een lijst van een heleboel opties. 154 00:06:29,240 --> 00:06:32,740 CHAR, VARCHAR, TinyText, MEDIUMTEXT, longtext. 155 00:06:32,740 --> 00:06:34,110 En het is een soort van overweldigend. 156 00:06:34,110 --> 00:06:37,610 En helaas enigszins paradoxaal C, 157 00:06:37,610 --> 00:06:40,120 een char is niet echt een char. 158 00:06:40,120 --> 00:06:44,170 Als u opgeeft in een database dat uw gegevens type CHAR, 159 00:06:44,170 --> 00:06:47,390 dat betekent dat ja, het is een CHAR, maar het is een of meer tekens. 160 00:06:47,390 --> 00:06:49,630 En je moet opgeven hoeveel tekens je wilt. 161 00:06:49,630 --> 00:06:51,636 Dus, wat is een typische lengte voor een gebruikersnaam? 162 00:06:51,636 --> 00:06:52,760 Is er een limiet typisch? 163 00:06:52,760 --> 00:06:53,920 >> PUBLIEK: [onverstaanbaar] 164 00:06:53,920 --> 00:06:55,050 >> DAVID MALAN: 16 misschien? 165 00:06:55,050 --> 00:06:55,990 Zoiets. 166 00:06:55,990 --> 00:06:57,948 Je weet wel, terug in de dag, het vroeger acht. 167 00:06:57,948 --> 00:07:00,289 Soms is het 16 soms het is zelfs meer dan dat. 168 00:07:00,289 --> 00:07:02,080 En dus, dit niet bedoel geef me één CHAR. 169 00:07:02,080 --> 00:07:04,730 Dit betekent dat ik moet opgeven de lengte van het veld, 170 00:07:04,730 --> 00:07:07,402 en nu zou ik zoiets 16 zeggen. 171 00:07:07,402 --> 00:07:08,610 En er is een afweging hier. 172 00:07:08,610 --> 00:07:11,360 Dus, we zullen zien in een moment Dit betekent dat men, 173 00:07:11,360 --> 00:07:14,620 elke gebruikersnaam moet 16 tekens. 174 00:07:14,620 --> 00:07:18,720 Maar wacht eens even, M-A-L-A-N. Als dat mijn gebruikersnaam en ik ben alleen met behulp van vijf, 175 00:07:18,720 --> 00:07:23,070 wat zou u voorstellen dat de database te doen voor de andere 11 karakters die 176 00:07:23,070 --> 00:07:24,471 Ik heb gereserveerde ruimte voor? 177 00:07:24,471 --> 00:07:25,220 Wat zou jij doen? 178 00:07:25,220 --> 00:07:26,480 >> PUBLIEK: [onverstaanbaar] 179 00:07:26,480 --> 00:07:27,160 >> DAVID MALAN: Ja, net maken ze allemaal null. 180 00:07:27,160 --> 00:07:28,290 Maak ze ruimtes. 181 00:07:28,290 --> 00:07:30,816 Maar waarschijnlijk nul, dus een Veel backslash nullen. 182 00:07:30,816 --> 00:07:33,190 Dus aan de ene kant, we hebben nu ervoor gezorgd dat mijn gebruikersnaam 183 00:07:33,190 --> 00:07:34,780 kan niet meer dan 16 tekens. 184 00:07:34,780 --> 00:07:37,590 En de keerzijde van die dat als ik had echt een lange naam 185 00:07:37,590 --> 00:07:39,940 of wilde een hele lange gebruikersnaam zoals sommige van jullie 186 00:07:39,940 --> 00:07:44,840 jongens zou kunnen hebben in dat college of bij Yale.edu, kun je niet hebt. 187 00:07:44,840 --> 00:07:47,177 En zo in feite, als je hebt ooit geregistreerd voor een website 188 00:07:47,177 --> 00:07:49,385 en je krijgt geschreeuwd zeggen Uw wachtwoord is te lang 189 00:07:49,385 --> 00:07:52,710 of uw gebruikersnaam is te lang, het is omdat een programmeur bij 190 00:07:52,710 --> 00:07:55,500 configureren van diens database besloten dat dit gebied zal 191 00:07:55,500 --> 00:07:57,150 niet langer zijn dan deze lengte. 192 00:07:57,150 --> 00:08:00,580 >> Oké, dus wat als we overgaan tot een naam? 193 00:08:00,580 --> 00:08:05,240 Hoe lang moet een Naam typisch menselijk zijn? 194 00:08:05,240 --> 00:08:07,492 Hoeveel personages, 16? 195 00:08:07,492 --> 00:08:09,450 Ik gok dat we konden iemand vinden in deze kamer 196 00:08:09,450 --> 00:08:13,210 waar de door zijn of haar eerste plus de laatste naam langer is dan 16 tekens. 197 00:08:13,210 --> 00:08:14,850 Dus, wat is beter dan dat, 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 Groter? 201 00:08:20,350 --> 00:08:20,980 30? 202 00:08:20,980 --> 00:08:21,855 >> PUBLIEK: [onverstaanbaar] 203 00:08:21,855 --> 00:08:23,700 DAVID MALAN: 5000, oh mijn God. 204 00:08:23,700 --> 00:08:26,309 Dus, dat is waarschijnlijk een fatsoenlijke bovengrens, zullen we maar zeggen. 205 00:08:26,309 --> 00:08:28,350 En hier hebben we soort hebben om een ​​oordeel te bellen. 206 00:08:28,350 --> 00:08:30,400 Zoals, er is geen juiste antwoord hier. 207 00:08:30,400 --> 00:08:32,740 Oneindige is niet heel goed mogelijk, omdat we uiteindelijk 208 00:08:32,740 --> 00:08:34,781 gaat have-- we uit te gaan van het geheugen te lopen. 209 00:08:34,781 --> 00:08:36,909 Dus, we hebben een te maken beslissing te nemen op een bepaald punt. 210 00:08:36,909 --> 00:08:41,010 >> Zeer vaak zou zijn, bijvoorbeeld, om use-- en laat me CHAR hier opgeven 211 00:08:41,010 --> 00:08:46,050 als before-- 255 was letterlijk de bovengrens op deze database software 212 00:08:46,050 --> 00:08:46,700 jaren geleden. 213 00:08:46,700 --> 00:08:48,575 En zo, veel mensen zou gewoon zeggen, prima. 214 00:08:48,575 --> 00:08:49,420 255 is de limiet. 215 00:08:49,420 --> 00:08:50,620 Laten we gewoon het maximum te gebruiken. 216 00:08:50,620 --> 00:08:51,870 En dit is vrij belachelijk. 217 00:08:51,870 --> 00:08:55,060 Zoals, als u typt iemands naam voor 200 plus tekens, 218 00:08:55,060 --> 00:08:56,140 dat een beetje belachelijk. 219 00:08:56,140 --> 00:08:59,624 >> Maar, vergeet niet dat ASCII niet het enige systeem voor tekens. 220 00:08:59,624 --> 00:09:01,540 Dus, in het bijzonder een Veel Aziatische talen 221 00:09:01,540 --> 00:09:04,248 waar er personages die we niet kunnen uiten op keyboards zoals mijn Amerikaanse 222 00:09:04,248 --> 00:09:08,209 toetsenbord, een aantal personages eigenlijk het nemen van 16 bits in plaats van acht bits. 223 00:09:08,209 --> 00:09:10,250 En ja, dit ook daadwerkelijk is niet zo onredelijk 224 00:09:10,250 --> 00:09:12,250 dat we meer nodig hebben ruimte als we willen passen 225 00:09:12,250 --> 00:09:16,252 groter tekens dan de VS centric die we hebben de neiging om te bespreken. 226 00:09:16,252 --> 00:09:17,460 Dus moeten we een aantal bovengrens. 227 00:09:17,460 --> 00:09:21,470 Ik weet niet wat het beste is, 255 maar is over het algemeen een voorkomende. 228 00:09:21,470 --> 00:09:22,700 25 voelt laag. 229 00:09:22,700 --> 00:09:23,857 16, 32 voelen laag. 230 00:09:23,857 --> 00:09:25,690 Ik zou het zekere voor het iets hoger. 231 00:09:25,690 --> 00:09:27,330 Maar er is een afweging, zoals altijd. 232 00:09:27,330 --> 00:09:31,902 Wat is het misschien vanzelfsprekend afweging van het reserveren van 255 tekens 233 00:09:31,902 --> 00:09:33,360 voor iedereen de naam in mijn database? 234 00:09:33,360 --> 00:09:34,230 >> PUBLIEK: [onverstaanbaar] 235 00:09:34,230 --> 00:09:34,510 >> DAVID MALAN: Wat is dat? 236 00:09:34,510 --> 00:09:35,430 >> PUBLIEK: [onverstaanbaar] 237 00:09:35,430 --> 00:09:37,138 >> DAVID MALAN: Het is een veel geheugen, toch? 238 00:09:37,138 --> 00:09:42,280 M-A-L-A-N. Ik heb net verspilde 250 karakters gewoon mijn naam op te slaan 239 00:09:42,280 --> 00:09:46,000 defensief, voor het geval iemand in de klasse heeft een heel lange naam. 240 00:09:46,000 --> 00:09:47,940 Dat lijkt een onnodige afweging. 241 00:09:47,940 --> 00:09:52,040 >> Dus, het blijkt dat SQL, Deze databank taal, 242 00:09:52,040 --> 00:09:55,480 eigenlijk iets ondersteunt genaamd VARCHAR of Variable CHAR. 243 00:09:55,480 --> 00:09:59,390 En dit is een soort van mooi in dat deze hiermee kunt u geen vaste opgeven 244 00:09:59,390 --> 00:10:01,900 breedte, maar een variabele breedte. 245 00:10:01,900 --> 00:10:05,060 En meer in het bijzonder een maximale breedte van het veld. 246 00:10:05,060 --> 00:10:08,901 Dit betekent dus dat een naam niet meer dan 250 tekens, 247 00:10:08,901 --> 00:10:10,150 maar het kan zeker minder zijn. 248 00:10:10,150 --> 00:10:11,733 En de database gaat slim te zijn. 249 00:10:11,733 --> 00:10:14,860 Als je zet in M-A-L-A-N, het is alleen maar te gebruiken vijf, 250 00:10:14,860 --> 00:10:18,120 misschien zes bytes voor als een achterstand null karakter, 251 00:10:18,120 --> 00:10:23,330 en niet uitgeven een extra 249 of 250 bytes onnodig. 252 00:10:23,330 --> 00:10:27,380 >> Dus, dit lijkt alsof ik moet zijn begonnen met dit verhaal. 253 00:10:27,380 --> 00:10:29,140 Maar er is altijd een afweging. 254 00:10:29,140 --> 00:10:33,024 Dus, enerzijds, een gebruikersnaam Ik heb gespecificeerd hard gecodeerd op 16, 255 00:10:33,024 --> 00:10:34,940 en misschien was dat niet de juiste beslissing, misschien 256 00:10:34,940 --> 00:10:40,040 is, maar waarom niet gebruiken VARCHARs voor alles? 257 00:10:40,040 --> 00:10:42,020 >> Het bestaat voor een reden. 258 00:10:42,020 --> 00:10:46,200 Waarom VARCHARs niet gebruiken voor elk veld waarvan de lengte je niet weet van tevoren 259 00:10:46,200 --> 00:10:48,180 als het lijkt een goede zaak zijn, toch? 260 00:10:48,180 --> 00:10:50,482 Gebruik alleen zoveel ruimte als je nodig hebt tot deze limiet? 261 00:10:50,482 --> 00:10:51,271 >> Publiek: Langzamer. 262 00:10:51,271 --> 00:10:52,146 DAVID MALAN: Speller? 263 00:10:52,146 --> 00:10:53,120 Publiek: Maakt het langzamer? 264 00:10:53,120 --> 00:10:53,970 DAVID MALAN: Oh, het is trager. 265 00:10:53,970 --> 00:10:55,720 Goed, dat is bijna altijd het antwoord, eerlijk gezegd. 266 00:10:55,720 --> 00:10:56,520 Zoals, wat is de afweging? 267 00:10:56,520 --> 00:10:58,570 Het ofwel kost meer ruimte of het kost meer tijd. 268 00:10:58,570 --> 00:11:00,111 Dus, in dit geval langzamer verlopen. 269 00:11:00,111 --> 00:11:00,920 Waarom? 270 00:11:00,920 --> 00:11:05,830 >> PUBLIEK: [onverstaanbaar] het bepalen van [onverstaanbaar]. 271 00:11:05,830 --> 00:11:06,640 >> DAVID MALAN: Goed. 272 00:11:06,640 --> 00:11:09,670 Dus, zou je herinneren van zelfs PSED5, spelen met uw aanpak 273 00:11:09,670 --> 00:11:12,750 aan het woordenboek, als je moet geheugen toewijzen dynamisch of houden 274 00:11:12,750 --> 00:11:14,630 kweken van een buffer, die kan eigenlijk traag. 275 00:11:14,630 --> 00:11:16,963 Als je moet bellen malloc onder de motorkap en misschien 276 00:11:16,963 --> 00:11:19,610 dat is wat MySQL doet, dus dat toch het geval zou zijn. 277 00:11:19,610 --> 00:11:22,430 En als je denkt weg terug naar PSet-- of zelfs 278 00:11:22,430 --> 00:11:26,340 twee weken, toen we dingen als binary search of zelfs lineair zoeken, 279 00:11:26,340 --> 00:11:30,690 een van de leuke dingen over elk woord in een gegevensbestand of elk woord in een kolom 280 00:11:30,690 --> 00:11:33,690 waarbij exact dezelfde lengte, zelfs als er een hele hoop van die tekens 281 00:11:33,690 --> 00:11:37,390 zijn leeg, is dat je kunt gebruiken random access op uw gegevens, toch? 282 00:11:37,390 --> 00:11:40,310 >> Als u weet dat elke Het woord is 16 tekens weg, 283 00:11:40,310 --> 00:11:46,460 u kunt pointer rekenkunde gebruiken, om zo te spreken, en ga naar ons 16, 32, 48, 64, 284 00:11:46,460 --> 00:11:49,589 en je kunt gewoon springen direct met behulp van rekenkundige 285 00:11:49,589 --> 00:11:51,130 een van de woorden in uw database. 286 00:11:51,130 --> 00:11:54,280 Overwegende dat als het een VARCHAR, wat heb je in plaats daarvan moeten doen? 287 00:11:54,280 --> 00:11:55,960 >> [Telefoon rinkelen] 288 00:11:55,960 --> 00:11:58,680 >> Als het een VARCHAR, u kan geen willekeurige toegang te gebruiken. 289 00:11:58,680 --> 00:12:01,341 Wat je moet kijken naar of doen? 290 00:12:01,341 --> 00:12:01,840 Ja? 291 00:12:01,840 --> 00:12:03,240 >> PUBLIEK: [onverstaanbaar] 292 00:12:03,240 --> 00:12:04,310 >> DAVID MALAN: Kijk door de whole-- trace 293 00:12:04,310 --> 00:12:06,518 door de hele lijst zoekt wat waarschijnlijk? 294 00:12:06,518 --> 00:12:08,356 Wat voor bijzondere waarde? 295 00:12:08,356 --> 00:12:09,230 PUBLIEK: [onverstaanbaar] 296 00:12:09,230 --> 00:12:11,105 DAVID MALAN: zoek voor de null terminators 297 00:12:11,105 --> 00:12:13,637 afbakenen dat de scheiding van woorden. 298 00:12:13,637 --> 00:12:15,720 Dus nogmaals, een afweging, en er is geen juist antwoord. 299 00:12:15,720 --> 00:12:18,380 Maar dit is waar met name wanneer uw gebruikers krijgen voor velen 300 00:12:18,380 --> 00:12:21,700 en uw lading op uw servers, de aantal mensen die het gebruiken krijgt hoog, 301 00:12:21,700 --> 00:12:23,650 Deze zijn eigenlijk triviale beslissingen. 302 00:12:23,650 --> 00:12:26,640 Dus, kunnen we deze laten zoals deze, maar Laten we naar beneden scrollen naar rechts 303 00:12:26,640 --> 00:12:27,332 here. 304 00:12:27,332 --> 00:12:30,290 Nu, er is een aantal kolommen waar we een oordeel te bellen. 305 00:12:30,290 --> 00:12:35,170 Heeft het zin om een ​​gebruiker te noemen, de gebruikersnaam van een gebruiker of een gebruiker 306 00:12:35,170 --> 00:12:36,370 Naam, tot nul zijn? 307 00:12:36,370 --> 00:12:37,610 Dat is gewoon leeg. 308 00:12:37,610 --> 00:12:40,360 Voelt een beetje onzinnig, dus ik ben niet van plan om die dozen te controleren. 309 00:12:40,360 --> 00:12:42,670 Maar het blijkt in een database, kunt u zeggen: 310 00:12:42,670 --> 00:12:44,620 iemand kan optioneel hebben deze waarde. 311 00:12:44,620 --> 00:12:47,180 Deze kolom heeft geen er eigenlijk. 312 00:12:47,180 --> 00:12:48,570 >> Nu, er is deze drop down menu. 313 00:12:48,570 --> 00:12:50,810 En merk ik ben nog steeds daar de eerste rij, 314 00:12:50,810 --> 00:12:52,520 dus ik heb het over gebruikersnaam nu. 315 00:12:52,520 --> 00:12:56,290 En het blijkt dat een database, in tegenstelling tot een eenvoudige louter spreadsheet, 316 00:12:56,290 --> 00:12:58,520 heeft krachtige functies genaamd indexen. 317 00:12:58,520 --> 00:13:02,600 En een index is een manier van het vertellen van de databank op voorhand dat ik de mens 318 00:13:02,600 --> 00:13:03,900 ben slimmer dan jij. 319 00:13:03,900 --> 00:13:10,430 >> Ik weet wat voor soort vragen, selecteert of invoegen of verwijderen of bij te werken, 320 00:13:10,430 --> 00:13:13,182 dat mijn code gaat eindigen up te doen op deze databank. 321 00:13:13,182 --> 00:13:14,390 Ik wil een veel data te lezen. 322 00:13:14,390 --> 00:13:15,681 Ik wil een veel gegevens in te voegen. 323 00:13:15,681 --> 00:13:17,530 Ik wil constant verwijderen van een veel gegevens. 324 00:13:17,530 --> 00:13:21,520 Als ik weet dat ik ga worden toegang tot een veld als Gebruikersnaam veel, 325 00:13:21,520 --> 00:13:24,770 Ik kan preventief vertellen databank, ik meer dan je weet, 326 00:13:24,770 --> 00:13:29,220 en ik wil dat besluit je moet index dit gebied. 327 00:13:29,220 --> 00:13:33,200 Waar het indexeren van een veld of een kolom betekent dat de database vooraf 328 00:13:33,200 --> 00:13:37,040 moet een aantal ideeën lenen van, als, week vier en vijf en zes van CS50 329 00:13:37,040 --> 00:13:39,240 en eigenlijk opbouwen zoiets als een binaire zoekopdracht 330 00:13:39,240 --> 00:13:41,560 boom of iets algemeen genoemd een B tree 331 00:13:41,560 --> 00:13:43,410 dat je zou leren in een klasse als CS124 332 00:13:43,410 --> 00:13:46,710 aan Harvard, een algoritmen klasse, of elk aantal andere plaatsen. 333 00:13:46,710 --> 00:13:49,570 >> De database en de slimme mensen die het geïmplementeerd 334 00:13:49,570 --> 00:13:53,880 zal erachter te komen hoe om te slaan die tafel van informatie 335 00:13:53,880 --> 00:13:57,061 in het geheugen zodat zoekopdrachten andere operaties zijn super snel. 336 00:13:57,061 --> 00:13:58,060 Je hoeft niet te doen. 337 00:13:58,060 --> 00:14:00,640 Je hoeft niet te implementeren lineair zoeken of binaire zoekopdracht 338 00:14:00,640 --> 00:14:03,300 of samenvoegen sort of selectie sorteren, een van die. 339 00:14:03,300 --> 00:14:06,590 De database doet het voor je als je te vertellen Het preventief te indexeren dit gebied. 340 00:14:06,590 --> 00:14:09,100 >> En ook u kunt zien, is er andere karakteristieken 341 00:14:09,100 --> 00:14:11,010 wij kunnen vertellen de database af te dwingen. 342 00:14:11,010 --> 00:14:16,431 Wat zou het betekenen als ik ervoor kies Unique vanuit dit menu, gewoon intuïtief? 343 00:14:16,431 --> 00:14:16,930 Ja? 344 00:14:16,930 --> 00:14:17,889 >> PUBLIEK: [onverstaanbaar] 345 00:14:17,889 --> 00:14:19,930 DAVID MALAN: Ja, de gebruikersnaam moet uniek zijn. 346 00:14:19,930 --> 00:14:23,330 Is dit een goede zaak of een slechte zaak voor een database voor een website met gebruikers? 347 00:14:23,330 --> 00:14:24,965 Moeten gebruikersnamen zijn uniek? 348 00:14:24,965 --> 00:14:25,880 Ja, waarschijnlijk. 349 00:14:25,880 --> 00:14:27,800 Als dat is wat de gebied die we gebruiken om in te loggen 350 00:14:27,800 --> 00:14:31,867 je niet echt willen mensen die hetzelfde gevoel of dezelfde gebruikersnaam. 351 00:14:31,867 --> 00:14:33,700 Dus, kunnen we het hebben databank afdwingen dat zo 352 00:14:33,700 --> 00:14:37,880 die nu in mijn PHP code of een andere taal, Ik hoef niet naar, bijvoorbeeld, check 353 00:14:37,880 --> 00:14:41,490 noodzakelijkerwijs doet deze gebruikersnaam Er bestaan ​​voordat ik iemand laten registreren? 354 00:14:41,490 --> 00:14:46,690 De database zal niet toestaan ​​dat twee mensen met de naam David of Malans registreren in dit geval. 355 00:14:46,690 --> 00:14:50,030 >> En als een terzijde, ook al menu kunt u alleen een te selecteren, 356 00:14:50,030 --> 00:14:54,550 een unieke index is er een die is geïndexeerd voor supersnelle prestaties, 357 00:14:54,550 --> 00:14:56,100 maar het dwingt ook uniciteit. 358 00:14:56,100 --> 00:14:58,850 En we zullen terug te komen wat de andere twee betekenen in slechts een moment. 359 00:14:58,850 --> 00:15:00,930 Ondertussen, als ik naar mijn tweede rij, die 360 00:15:00,930 --> 00:15:06,230 is de naam van de gebruiker, moet ik opgeven dat de naam moet uniek zijn? 361 00:15:06,230 --> 00:15:09,550 Nee, want je kon zeker have-- er geen twee David 362 00:15:09,550 --> 00:15:11,050 Malans in deze kamer, het meest waarschijnlijk. 363 00:15:11,050 --> 00:15:14,290 Maar als we kiezen voor een andere naam, we zouden zeker hebben botsingen. 364 00:15:14,290 --> 00:15:16,130 >> Denk terug aan tafels en dergelijke hash. 365 00:15:16,130 --> 00:15:18,604 Dus, we zeker niet willen om het veld naam uniek te maken. 366 00:15:18,604 --> 00:15:21,270 Dus, we gewoon te vertrekken dat als dash, dash, dash, niets. 367 00:15:21,270 --> 00:15:22,660 En ik ga om te vertrekken alles alleen. 368 00:15:22,660 --> 00:15:25,035 Immers, de meeste van deze gebieden zullen we niet zorgen te maken over. 369 00:15:25,035 --> 00:15:27,830 En als ik klaar ben om dit te redden, Als internet samenwerkt, 370 00:15:27,830 --> 00:15:35,032 Ik klik op Opslaan, en zeer, zeer, zeer langzaam komt de database gered. 371 00:15:35,032 --> 00:15:37,240 En nu ben ik terug naar deze interface, die weliswaar, 372 00:15:37,240 --> 00:15:38,680 is overweldigend op het eerste gezicht. 373 00:15:38,680 --> 00:15:42,450 Maar alles wat ik ga doen is klik op het woord Gebruikers linksboven. 374 00:15:42,450 --> 00:15:47,630 Ik ga om hier te gaan, klikt u op Gebruikers en standaard is 375 00:15:47,630 --> 00:15:50,180 heeft uitgevoerd een aantal SQL, maar meer op dat in een moment. 376 00:15:50,180 --> 00:15:52,654 Hier is slechts een samenvatting van wat ik deed. 377 00:15:52,654 --> 00:15:55,320 En niet bang te zijn dat je te zien noemen Latijn en Zweedse hier. 378 00:15:55,320 --> 00:16:00,490 Dat zijn slechts de standaard instellingen omdat MySQL oorspronkelijk 379 00:16:00,490 --> 00:16:04,000 of PHP MyAdmin, één van de twee gebeurde worden geschreven door een Zweedse volk. 380 00:16:04,000 --> 00:16:06,100 Maar het is niet relevant in ons geval hier. 381 00:16:06,100 --> 00:16:08,280 >> Oké, dus waarom is dit alles interessant? 382 00:16:08,280 --> 00:16:13,050 Het blijkt, kan ik de gegevens in te voegen in een database door het schrijven van code. 383 00:16:13,050 --> 00:16:15,940 En ik ga je gang en in mijn dossier hier, ik ben 384 00:16:15,940 --> 00:16:19,000 gaat te gaan en doen alsof deze is aangesloten op dat de database, die 385 00:16:19,000 --> 00:16:23,040 is het niet op het moment, maar het zal toen we om probleem stelde zeven. 386 00:16:23,040 --> 00:16:25,640 En ik ga om verder te gaan en uitvoeren van een functie genaamd query, 387 00:16:25,640 --> 00:16:28,730 die wij u geven in problemen stelde zeven van de verdeelsleutel, die 388 00:16:28,730 --> 00:16:31,490 duurt minstens één argument, dat is gewoon een string. 389 00:16:31,490 --> 00:16:33,460 Een reeks van SQL-code. 390 00:16:33,460 --> 00:16:36,700 Dus, je gaat leren hoe je bent schrijf Structured Query Language. 391 00:16:36,700 --> 00:16:41,270 >> Als ik wil een nieuwe rij in te voegen in mijn databank omdat iemand heeft ingediend 392 00:16:41,270 --> 00:16:47,600 een formulier om mijn code, zou ik letterlijk schrijf INSERT INTO gebruikers de volgende 393 00:16:47,600 --> 00:16:52,800 velden: gebruikersnaam, komma, naam, de waarden, 394 00:16:52,800 --> 00:16:57,480 en nu moet ik invoegen zoiets als Malan en citaat, 395 00:16:57,480 --> 00:17:01,490 unquote 'David Malan.' En nu zelfs voor degenen die niet bekend met SQL, 396 00:17:01,490 --> 00:17:07,830 waarom ben ik met behulp van enkele aanhalingstekens binnenkant van deze groene draad? 397 00:17:07,830 --> 00:17:10,790 398 00:17:10,790 --> 00:17:13,040 Wat zou de reden hier te zijn? 399 00:17:13,040 --> 00:17:14,609 >> Let op, ik ben co-mingling twee talen. 400 00:17:14,609 --> 00:17:18,099 Query is een PHP-functie, maar het duurt een argument. 401 00:17:18,099 --> 00:17:21,740 En dat argument heeft om zichzelf te zijn geschreven in een andere taal genaamd 402 00:17:21,740 --> 00:17:23,500 SQL, Structured Query Language. 403 00:17:23,500 --> 00:17:27,940 Dus, alles wat ik hebben net hier uitgelicht 404 00:17:27,940 --> 00:17:30,380 Hierdoor taal genaamd SQL. 405 00:17:30,380 --> 00:17:36,290 Dus, wat is er met de enkele aanhalingstekens, net zo snel sanity check? 406 00:17:36,290 --> 00:17:37,324 Doe Maar. 407 00:17:37,324 --> 00:17:37,990 Ze zijn strings. 408 00:17:37,990 --> 00:17:41,590 Dus, citaat, unquote Malan en citaat, unquote David Malan zijn strings. 409 00:17:41,590 --> 00:17:45,210 En net te denken nu intuïtief, weten wat je weet over C en PHP, 410 00:17:45,210 --> 00:17:50,220 waarom heb ik dit niet wat ik meestal doe, gebruikte dubbele aanhalingstekens voor strings? 411 00:17:50,220 --> 00:17:52,310 Daarom wilde ik dat niet te doen? 412 00:17:52,310 --> 00:17:52,810 Ja? 413 00:17:52,810 --> 00:17:53,685 >> PUBLIEK: [onverstaanbaar] 414 00:17:53,685 --> 00:17:56,695 415 00:17:56,695 --> 00:17:57,570 DAVID MALAN: Precies. 416 00:17:57,570 --> 00:17:59,653 Omdat ik al gebruik dubbele aanhalingstekens op de weg 417 00:17:59,653 --> 00:18:01,929 buitenkant van het argument aan de PHP-functie, 418 00:18:01,929 --> 00:18:03,470 Ik zou gewoon verwarren de tolk. 419 00:18:03,470 --> 00:18:04,860 Het zal niet weten, deze samen te gaan? 420 00:18:04,860 --> 00:18:05,735 Hebben deze samen te gaan? 421 00:18:05,735 --> 00:18:06,810 Hebben deze samen te gaan? 422 00:18:06,810 --> 00:18:08,070 Dus, ik afwisselend plaats. 423 00:18:08,070 --> 00:18:11,784 >> Of ik zou zoiets als dit te doen, backslash offerte of backslash offerte. 424 00:18:11,784 --> 00:18:14,200 Eerlijk gezegd, die net begint te erg onleesbare en lelijk. 425 00:18:14,200 --> 00:18:16,790 Maar dat zou bereiken hetzelfde resultaat ook. 426 00:18:16,790 --> 00:18:19,760 >> Dus, als ik dit uit te voeren vraag nu, laten we zien wat er gebeurt. 427 00:18:19,760 --> 00:18:22,740 Ik ga nu en vrij gaan dan voert u de PHP-code, die 428 00:18:22,740 --> 00:18:24,610 is waar je spelen in probleem stelde zeven, 429 00:18:24,610 --> 00:18:27,200 Ik ga in plaats daarvan naar PHP MyAdmin. 430 00:18:27,200 --> 00:18:29,770 En ik handmatig gaan te gaan naar het tabblad SQL, 431 00:18:29,770 --> 00:18:31,580 en laat me in te zoomen op de interface. 432 00:18:31,580 --> 00:18:34,007 En ik ga om te plakken in het ding ik typte. 433 00:18:34,007 --> 00:18:36,090 En de kleurcodering heeft een beetje veranderd nu, 434 00:18:36,090 --> 00:18:38,750 gewoon omdat het programma formaten dingen een beetje anders. 435 00:18:38,750 --> 00:18:41,960 Maar merken dat alles wat ik heb gedaan is dat ik heb gezegd, invoegen in gebruikers. 436 00:18:41,960 --> 00:18:45,790 Ik heb opgegeven, vervolgens in een komma gescheiden haakjes lijst de twee 437 00:18:45,790 --> 00:18:48,850 velden die ik wil invoegen en dan heb ik letterlijk gezegd waarden 438 00:18:48,850 --> 00:18:51,510 gevolgd door een andere paren, en vervolgens de twee waarden 439 00:18:51,510 --> 00:18:53,520 Ik wil plug-in, en nu voor een goede maatregel, 440 00:18:53,520 --> 00:18:55,010 Ik zal een puntkomma te zetten aan het einde. 441 00:18:55,010 --> 00:18:56,570 Dit is dus niet C. Dit is niet PHP. 442 00:18:56,570 --> 00:18:59,970 Dit is nu SQL, en ik ben te plakken in deze web-gebaseerde interface die 443 00:18:59,970 --> 00:19:02,710 gewoon om mij te laten, zodra ik klik op Start, 444 00:19:02,710 --> 00:19:08,060 voeren deze query op de database running binnenkant van CS50 IDE. 445 00:19:08,060 --> 00:19:09,470 >> Dus dit is goed. 446 00:19:09,470 --> 00:19:12,520 Merk op dat zei een rij geplaatst, ging super snel, 447 00:19:12,520 --> 00:19:15,190 0,0054 seconden om die gegevens in te voegen. 448 00:19:15,190 --> 00:19:16,610 Zo, dat klinkt behoorlijk gezond. 449 00:19:16,610 --> 00:19:19,350 Het geformatteerd mijn vraag voor mij hier alleen maar om het te zien 450 00:19:19,350 --> 00:19:21,730 in een soort van kleurgecodeerde versie. 451 00:19:21,730 --> 00:19:24,540 Maar nu als ik klik Bladeren, merken dat, zelfs 452 00:19:24,540 --> 00:19:29,070 maar er is een hoop rommel op het scherm, mijn tafel heeft nu twee rijen. 453 00:19:29,070 --> 00:19:30,700 >> Dus, laat me gaan en een ander te doen. 454 00:19:30,700 --> 00:19:33,760 In plaats van dit, laat me ga naar het tabblad SQL opnieuw. 455 00:19:33,760 --> 00:19:40,723 En deze keer zal ik iets dergelijks plaatst Rob en zijn naam zal Rob Bowden. 456 00:19:40,723 --> 00:19:42,330 Bowden. 457 00:19:42,330 --> 00:19:44,040 Laten we klikt u op Opslaan. 458 00:19:44,040 --> 00:19:46,140 Oeps, in plaats van Go. 459 00:19:46,140 --> 00:19:48,890 >> Klik op Bladeren opnieuw, en Nu merk ik heb twee rijen. 460 00:19:48,890 --> 00:19:52,390 Dus, dit is gewoon een manier complexer weg van de openstelling van Google Spreadsheets 461 00:19:52,390 --> 00:19:54,010 en net typen van een rij in een kolom. 462 00:19:54,010 --> 00:19:57,070 Maar wat is de belangrijkste is dat hebben we nu de syntax 463 00:19:57,070 --> 00:20:00,220 waarmee om code te schrijven, zodat Uiteindelijk konden we eigenlijk 464 00:20:00,220 --> 00:20:01,790 doe wat en dit. 465 00:20:01,790 --> 00:20:05,380 Bedenk dat PHP ondersteunt super globale variabelen. 466 00:20:05,380 --> 00:20:08,415 >> Wat is de binnenkant van de dollar ondertekenen underscore GET in PHP? 467 00:20:08,415 --> 00:20:10,290 We namen een kijkje bij één of twee eenvoudige voorbeelden. 468 00:20:10,290 --> 00:20:15,640 En in PSet6, herinner je hello dot PHP die deze variabele gebruikt. 469 00:20:15,640 --> 00:20:17,870 Wat gaat er daar? 470 00:20:17,870 --> 00:20:21,015 Of wat is het? 471 00:20:21,015 --> 00:20:22,522 Een beetje luider. 472 00:20:22,522 --> 00:20:23,790 >> PUBLIEK: [onverstaanbaar] 473 00:20:23,790 --> 00:20:25,030 >> DAVID MALAN: Het is een sneeuw zaad array, waarvan 474 00:20:25,030 --> 00:20:27,714 is gewoon een mooie manier om te zeggen een array die belangrijke waarde paren heeft. 475 00:20:27,714 --> 00:20:28,880 En de toetsen zijn niet numeriek. 476 00:20:28,880 --> 00:20:30,420 Ze zijn woorden of strings. 477 00:20:30,420 --> 00:20:32,750 En bijzonder wat zijn die belangrijke waarde paren? 478 00:20:32,750 --> 00:20:35,110 Waar komen ze vandaan? 479 00:20:35,110 --> 00:20:35,620 Sorry? 480 00:20:35,620 --> 00:20:36,994 >> PUBLIEK: [onverstaanbaar] 481 00:20:36,994 --> 00:20:37,660 DAVID MALAN: Nee? 482 00:20:37,660 --> 00:20:40,700 Waar komen die sleutel waarde paren vandaan? 483 00:20:40,700 --> 00:20:42,490 Weer zeggen? 484 00:20:42,490 --> 00:20:44,610 Weer? 485 00:20:44,610 --> 00:20:46,472 Ben ik de enige die gehoor iets? 486 00:20:46,472 --> 00:20:47,810 >> [Lachen] 487 00:20:47,810 --> 00:20:49,042 >> Dat klopt, ja? 488 00:20:49,042 --> 00:20:50,435 >> PUBLIEK: [onverstaanbaar] 489 00:20:50,435 --> 00:20:52,560 DAVID MALAN: Ja, ze komen uit de query string. 490 00:20:52,560 --> 00:20:55,380 Dus, als je terugspoelen in de tijd om toen we hebben gespeeld met Google 491 00:20:55,380 --> 00:20:59,600 en we hebben naar Google.com slash gegaan zoeken vraagteken q gelijk aan katten, 492 00:20:59,600 --> 00:21:03,550 als ik druk op Enter en indien Google werd geïmplementeerd in PHP, 493 00:21:03,550 --> 00:21:07,017 PHP-code die Google schreef zou de toegang tot dollarteken hebben 494 00:21:07,017 --> 00:21:11,600 onderstrepen GET de binnenkant van die is een belangrijke zogenaamde Q en een waarde 495 00:21:11,600 --> 00:21:17,680 noemde katten die het dan kan gebruiken gebruikt om een ​​daadwerkelijke zoek met doen. 496 00:21:17,680 --> 00:21:20,860 >> Dus, in feite, wat ik ga nu doen is teruggaan naar mijn PHP-code 497 00:21:20,860 --> 00:21:23,140 dat je weer zult zien meer in PSet7. 498 00:21:23,140 --> 00:21:25,440 En in plaats van te sluiten in hard gecodeerde waarden 499 00:21:25,440 --> 00:21:27,630 lijkt niet als een zeer dynamische website, 500 00:21:27,630 --> 00:21:30,680 Ik ga u een teaser van geven wat uw eigenlijke code zou doen. 501 00:21:30,680 --> 00:21:32,854 Je zou in twee zetten vraagtekens als deze. 502 00:21:32,854 --> 00:21:34,270 Ik weet niet wat de gebruikersnaam is. 503 00:21:34,270 --> 00:21:37,390 Ik weet niet wat de naam gaat worden, 504 00:21:37,390 --> 00:21:39,470 maar ik weet dat ik kan krijgen ze dynamisch. 505 00:21:39,470 --> 00:21:43,420 >> Dus, als de code die we nu schrijven is de code die op de servers van Google, 506 00:21:43,420 --> 00:21:46,940 of als dit is hello dot PHP, die wordt geleverd met PSet6, 507 00:21:46,940 --> 00:21:48,650 Ik ga om te gaan in de query functie 508 00:21:48,650 --> 00:21:51,450 net als printf, twee andere argumenten. 509 00:21:51,450 --> 00:21:57,120 GET, citaat, unquote gebruikersnaam, en GET, citaat, unquote naam. 510 00:21:57,120 --> 00:22:00,720 En nu, let op wat de algemene structuur is hier. 511 00:22:00,720 --> 00:22:03,320 Ik heb op de linkerzijde kant van het gesprek, 512 00:22:03,320 --> 00:22:05,480 deze functie genaamd query in PHP. 513 00:22:05,480 --> 00:22:08,160 Ik heb nog steeds als een eerste argument, maar een reeks van tekst. 514 00:22:08,160 --> 00:22:11,000 >> Maar dat tekenreeks is geschreven in een taal genaamd SQL. 515 00:22:11,000 --> 00:22:12,616 En eerlijk gezegd, het is geen grote taal. 516 00:22:12,616 --> 00:22:14,990 We zijn alleen maar om te praten over het formeel vandaag, echt. 517 00:22:14,990 --> 00:22:17,031 En vervolgens in probleem stellen zeven, er is relatief 518 00:22:17,031 --> 00:22:18,800 enkele functies die we gaan benutten. 519 00:22:18,800 --> 00:22:22,530 De vraagtekens echter betekenen sluit een waarde hier en plug in een andere waarde 520 00:22:22,530 --> 00:22:23,130 here. 521 00:22:23,130 --> 00:22:26,010 En bericht, ik heb weggelaten wat van rond de quote-- verdomde 522 00:22:26,010 --> 00:22:30,470 het-- rond de offerte markeert deze tijd. 523 00:22:30,470 --> 00:22:34,930 Ik heb het citaat weggelaten markeringen rond het vraagteken, 524 00:22:34,930 --> 00:22:36,410 sorry, dit keer rond. 525 00:22:36,410 --> 00:22:38,870 >> Dus, wat is leuk over dit vraagteken functie die 526 00:22:38,870 --> 00:22:42,830 PHP heeft de neiging om te ondersteunen, Ruby en Python en andere talen, 527 00:22:42,830 --> 00:22:45,730 Dit betekent gewoon plug in sommige waardeert hier en weet je wat? 528 00:22:45,730 --> 00:22:48,300 Je erachter te komen of om te gebruiken enkele aanhalingstekens of dubbele aanhalingstekens. 529 00:22:48,300 --> 00:22:50,966 Val me niet lastig met die intellectueel oninteressant details. 530 00:22:50,966 --> 00:22:53,780 Maar zorg ervoor dat het juiste zodat mijn code is uiteindelijk 531 00:22:53,780 --> 00:22:57,010 operationele en veilig, die zal een betekenis hebben voor lang. 532 00:22:57,010 --> 00:23:00,460 >> Nu, hoeveel argumenten totaal, gewoon om duidelijk zijn, is de query functie nemen? 533 00:23:00,460 --> 00:23:05,240 534 00:23:05,240 --> 00:23:07,581 Iedereen wil om te stemmen voor meer dan twee? 535 00:23:07,581 --> 00:23:08,080 Drie? 536 00:23:08,080 --> 00:23:10,001 Tuurlijk, waarom? 537 00:23:10,001 --> 00:23:10,920 Waarom drie? 538 00:23:10,920 --> 00:23:12,305 >> PUBLIEK: [onverstaanbaar] 539 00:23:12,305 --> 00:23:13,180 DAVID MALAN: Precies. 540 00:23:13,180 --> 00:23:14,610 Het eerste deel is de string. 541 00:23:14,610 --> 00:23:18,640 Het tweede argument is dollarteken onderstrepen GET gebruikersnaam beugel. 542 00:23:18,640 --> 00:23:21,950 En het derde argument is de hetzelfde, maar alleen de naam. 543 00:23:21,950 --> 00:23:24,590 Met andere woorden, nu als ik een webformulier 544 00:23:24,590 --> 00:23:27,149 die moest tekstvelden, een voor de gebruikersnaam van de gebruiker, 545 00:23:27,149 --> 00:23:29,690 een voor zijn of haar naam, maar zoals je zou in een website te zien 546 00:23:29,690 --> 00:23:32,120 wanneer u zich registreert voor sommige website, deze macht 547 00:23:32,120 --> 00:23:35,450 wees de code op de rug opdat eigenlijk doet het inbrengen nu 548 00:23:35,450 --> 00:23:37,220 in de database. 549 00:23:37,220 --> 00:23:40,870 >> Nu daarentegen, laten we snel vooruit. 550 00:23:40,870 --> 00:23:43,840 Stel dat een gebruiker nu inloggen en je wilt 551 00:23:43,840 --> 00:23:48,860 PHP-code die controleert of schrijven de persoon die net ingelogd 552 00:23:48,860 --> 00:23:52,250 is eigenlijk een gebruiker, kunt u Gebruik vrij eenvoudige syntax. 553 00:23:52,250 --> 00:23:55,832 Je kunt zeggen SELECT, laten we zeggen ster, waar de ster betekent alles. 554 00:23:55,832 --> 00:23:57,540 Ik weet niet wat ik willen, dus geef me 555 00:23:57,540 --> 00:24:01,585 alle kolommen van de tabel genaamd, waar gebruikers, en dat is mooi. 556 00:24:01,585 --> 00:24:03,710 Selecteer ondersteunt wat is genoemd een predikaat dat 557 00:24:03,710 --> 00:24:06,630 als een manier om de kwalificatie wat je wilt. 558 00:24:06,630 --> 00:24:10,590 Waar gebruikersnaam gelijk citaat, unquote Malan. 559 00:24:10,590 --> 00:24:13,680 Dus ook hier, heb ik besloten binnen het argument 560 00:24:13,680 --> 00:24:16,110 een PHP-functie, een lijn van SQL-code. 561 00:24:16,110 --> 00:24:18,680 En dat SQL-code dit tijd letterlijk gaat 562 00:24:18,680 --> 00:24:21,790 om te zoeken naar citaat, unquote Malan. 563 00:24:21,790 --> 00:24:24,420 >> Nu is dat niet zo handig, dus ik ga om te slaan dat 564 00:24:24,420 --> 00:24:28,650 en ik ga weg te zetten Deze tip van Brady, en ga 565 00:24:28,650 --> 00:24:30,990 en plug-in in plaats een vraagteken hier. 566 00:24:30,990 --> 00:24:33,290 Dus, gewoon om duidelijk te zijn, wat moet mijn tweede argument 567 00:24:33,290 --> 00:24:37,480 worden als iemand heeft net ingelogd en ik wil om te controleren of hij of zij is eigenlijk 568 00:24:37,480 --> 00:24:39,265 een gebruiker? 569 00:24:39,265 --> 00:24:40,140 PUBLIEK: [onverstaanbaar] 570 00:24:40,140 --> 00:24:40,890 DAVID MALAN: Ja. 571 00:24:40,890 --> 00:24:44,120 Ik hoor dollarteken underscore Offerte, unquote gebruikersnaam. 572 00:24:44,120 --> 00:24:50,040 En die moeten terugkeren naar mij een van de rijen in de database 573 00:24:50,040 --> 00:24:51,986 die moeten een gebruikersnaam van Malan. 574 00:24:51,986 --> 00:24:54,860 Nu hopelijk, ik ga terug te krijgen nul als Malan's hier nooit geweest, 575 00:24:54,860 --> 00:24:56,290 of een als hij heeft. 576 00:24:56,290 --> 00:24:59,026 Ik zou niet terug twee of drie of vier. 577 00:24:59,026 --> 00:24:59,526 Waarom? 578 00:24:59,526 --> 00:25:00,220 >> PUBLIEK: [onverstaanbaar] 579 00:25:00,220 --> 00:25:01,120 >> DAVID MALAN: Ik zei uniek, toch? 580 00:25:01,120 --> 00:25:01,750 Eenvoudige reden. 581 00:25:01,750 --> 00:25:04,030 Omdat ik zei dat het moet uniek, enkel logisch, 582 00:25:04,030 --> 00:25:07,940 je kunt slechts nul of één Malans in dit specifieke database tabel. 583 00:25:07,940 --> 00:25:10,965 Nu als een terzijde, maar dat je hebt gezien het, hoewel ik blijven gebruiken GET 584 00:25:10,965 --> 00:25:14,350 en hoewel PSet6 alleen gebruikt Krijgen, kunt u zeker POST. 585 00:25:14,350 --> 00:25:17,212 En herinneren dat Post is een andere techniek voor het indienen van informatie 586 00:25:17,212 --> 00:25:19,170 een vorm, maar niet opdagen in de URL. 587 00:25:19,170 --> 00:25:22,690 Het is een beetje veiliger zeker voor dingen zoals gebruikersnamen en wachtwoorden, 588 00:25:22,690 --> 00:25:25,210 die PSet7 zal in feite betrekken. 589 00:25:25,210 --> 00:25:28,130 >> Dus, laten we dit doen in PHP MyAdmin en zie wat er gebeurt. 590 00:25:28,130 --> 00:25:30,020 Ik ga naar het tabblad MySQL. 591 00:25:30,020 --> 00:25:34,450 En merk op dat de standaardwaarde voor PHP MyAdmin, gewoon om te proberen om behulpzaam te zijn, 592 00:25:34,450 --> 00:25:37,050 is om sterren te selecteren van gebruikers waar men. 593 00:25:37,050 --> 00:25:39,430 Nou, een is altijd waar, dus Dit heeft de domme effectieve 594 00:25:39,430 --> 00:25:40,400 van selecteer gewoon alles. 595 00:25:40,400 --> 00:25:42,691 Maar ik ga een beetje te zijn meer pedant en handmatig 596 00:25:42,691 --> 00:25:45,920 uittypen SELECT ster van gebruikers. 597 00:25:45,920 --> 00:25:48,294 >> Nu technisch, kunt u citeren de naam van de tafels. 598 00:25:48,294 --> 00:25:50,460 Het is zeldzaam dat je moet, maar merken deze zijn niet 599 00:25:50,460 --> 00:25:52,240 uw normale koersen op de Amerikaanse toetsenbord. 600 00:25:52,240 --> 00:25:54,760 Dit is de zogenaamde backtick die is over het algemeen op de linker kant 601 00:25:54,760 --> 00:25:56,000 hoek van uw toetsenbord. 602 00:25:56,000 --> 00:25:58,500 Maar het is zeldzaam dat je eigenlijk moeten moeite met dat, 603 00:25:58,500 --> 00:25:59,950 dus zal ik ze gewoon weglaten toch. 604 00:25:59,950 --> 00:26:02,280 Dus nu, laat me gaan en raakte gaan. 605 00:26:02,280 --> 00:26:06,616 En hoeveel rijen moet ik krijgen toen ik ster van gebruikers te selecteren? 606 00:26:06,616 --> 00:26:08,407 >> PUBLIEK: [onverstaanbaar] 607 00:26:08,407 --> 00:26:09,990 DAVID MALAN: Het aantal rijen, zeker. 608 00:26:09,990 --> 00:26:12,390 Maar hoeveel van deze concreet verhaal nu? 609 00:26:12,390 --> 00:26:14,640 Twee, want er was mij en er was Rob. 610 00:26:14,640 --> 00:26:19,370 Dus, als ik klik op Start, zie ik dat visueel Ik ben terug gekregen, inderdaad, twee rijen. 611 00:26:19,370 --> 00:26:22,060 Er is een hoop rommel op het scherm, maar ik zie slechts twee rijen. 612 00:26:22,060 --> 00:26:28,580 Daarentegen, als ik dit opnieuw doen en doen SELECT ster van gebruikers, waar de gebruikersnaam 613 00:26:28,580 --> 00:26:31,840 evenaart citaat, unquote Malan, nu als ik klik op Start, 614 00:26:31,840 --> 00:26:33,970 Ik ga alleen naar een rij terug te krijgen. 615 00:26:33,970 --> 00:26:36,499 En tot slot, als ik dat doe zoiets als dit, veronderstel 616 00:26:36,499 --> 00:26:38,290 dat ik niet schelen het krijgen van alles, 617 00:26:38,290 --> 00:26:41,020 dat is een soort van zinloos nu, omdat er slechts twee kolommen. 618 00:26:41,020 --> 00:26:43,103 Het is niet alsof ik selecteren een enorme hoeveelheid data. 619 00:26:43,103 --> 00:26:46,720 Stel dat ik ga je gang en do SELECT naam FROM 620 00:26:46,720 --> 00:26:51,990 gebruikers, waar de gebruikersnaam gelijk Malan, Wat er leuk is aan SQL eerlijk, 621 00:26:51,990 --> 00:26:54,290 is dat het eigenlijk gewoon doet wat je hem vertelt wat te doen. 622 00:26:54,290 --> 00:26:57,550 Het is vrij beknopt, maar je letterlijk gewoon vertellen wat je wilt doen. 623 00:26:57,550 --> 00:27:01,130 Selecteer de naam van de gebruikers, waar de gebruikersnaam gelijk Malan. 624 00:27:01,130 --> 00:27:03,440 En het is echt zo expliciet. 625 00:27:03,440 --> 00:27:08,410 Zo, nu als ik raakte Go, hoeveel rijen ben ik van plan om terug te krijgen? 626 00:27:08,410 --> 00:27:10,770 Eén, want het is gewoon Malan, hopelijk. 627 00:27:10,770 --> 00:27:13,100 Of nul als hij niet daar, maar een maximaal. 628 00:27:13,100 --> 00:27:17,610 >> En hoeveel columns zal ik terug ben? 629 00:27:17,610 --> 00:27:18,450 Hoeveel kolommen? 630 00:27:18,450 --> 00:27:20,658 Deze keer, ik ben gewoon gaan een te krijgen omdat ik niet 631 00:27:20,658 --> 00:27:22,380 selecteer ster, dat is alles. 632 00:27:22,380 --> 00:27:27,900 Nu ben ik het selecteren van alleen de naam, dus ik gewoon weer één kolom en één rij. 633 00:27:27,900 --> 00:27:31,730 En het ziet er soort van adequaat belachelijk, gewoon op zoek super 634 00:27:31,730 --> 00:27:33,060 kleine als deze. 635 00:27:33,060 --> 00:27:34,290 Dus, wat er echt gebeurt? 636 00:27:34,290 --> 00:27:36,890 Wanneer u een SQL uitvoeren query met behulp van selecteren, 637 00:27:36,890 --> 00:27:38,700 wat je krijgt terug uit de database 638 00:27:38,700 --> 00:27:42,970 is als een tijdelijke tabel met rijen en kolommen, misschien, 639 00:27:42,970 --> 00:27:46,260 maar dat alles wat weglaat werd niet daadwerkelijk door u gekozen. 640 00:27:46,260 --> 00:27:49,010 Dus, het is alsof iemand had een grote spreadsheet van alle studenten 641 00:27:49,010 --> 00:27:51,610 geregistreerd voor sommige studentengroep, en je zegt, 642 00:27:51,610 --> 00:27:55,097 geef mij alle eerstejaars die hebben ingeschreven voor onze groep studenten, wat 643 00:27:55,097 --> 00:27:56,930 uw collega in de groep studenten zou kunnen doen 644 00:27:56,930 --> 00:27:58,430 is ze konden gewoon hand je de hele spreadsheet. 645 00:27:58,430 --> 00:27:59,742 Dat is hetzelfde als zeggen select ster. 646 00:27:59,742 --> 00:28:02,200 En het is een beetje vervelend als u alleen wilde de eerstejaars. 647 00:28:02,200 --> 00:28:05,640 En dus, als je in plaats daarvan zei, selecteer ster uit de database tabel 648 00:28:05,640 --> 00:28:08,470 waarbij jaar gelijk citaat, unquote eerstejaars, 649 00:28:08,470 --> 00:28:10,810 het is alsof je vriend in de studentengroep 650 00:28:10,810 --> 00:28:13,770 letterlijk gemarkeerd en gekopieerd alleen de eerstejaars rijen, 651 00:28:13,770 --> 00:28:16,780 plakte ze in een nieuwe Google Spreadsheet of een Excel-bestand, 652 00:28:16,780 --> 00:28:18,860 en gaf je terug de alleen resulterende bestand. 653 00:28:18,860 --> 00:28:21,710 Dat is alles wat er aan de hand op conceptueel here. 654 00:28:21,710 --> 00:28:23,920 >> Dus in het einde, we kunnen doen sommige vrij mooie dingen 655 00:28:23,920 --> 00:28:26,560 door dingen op te slaan, zoals gebruikersnamen en wachtwoorden en dergelijke. 656 00:28:26,560 --> 00:28:30,310 Maar, zo blijkt, moeten we doen een beetje anders dan dit. 657 00:28:30,310 --> 00:28:34,750 Het is niet zo slim om alleen slaan een gebruikersnaam en een wachtwoord. 658 00:28:34,750 --> 00:28:37,790 Iemand eerder, denk ik hier beneden, stelde een ID. 659 00:28:37,790 --> 00:28:40,787 Nu een ID kan worden als een Harvard-ID of Yale's Net ID, 660 00:28:40,787 --> 00:28:42,870 maar het kan nog eenvoudiger in onze database geval. 661 00:28:42,870 --> 00:28:45,120 En inderdaad, het voorkomende geval is een andere kolom hebben. 662 00:28:45,120 --> 00:28:46,953 En ik ga om te gaan vooruit en mijn tafel te bewerken. 663 00:28:46,953 --> 00:28:49,521 En als je spelen met Deze interface voor PSet7, 664 00:28:49,521 --> 00:28:51,770 je zult zien dat je kunt controleren deze knop hier en voeg 665 00:28:51,770 --> 00:28:53,750 een gebied bij het begin van de tabel. 666 00:28:53,750 --> 00:28:56,720 En nu als ik klik op Go, het gaat voor mij een van die vormen geven 667 00:28:56,720 --> 00:28:57,600 uit eerder. 668 00:28:57,600 --> 00:29:00,170 Ik ga naar een gebied genaamd ID toe te voegen. 669 00:29:00,170 --> 00:29:03,070 En ik ga het een numeriek type te maken. 670 00:29:03,070 --> 00:29:05,362 >> Ik heb een hele hoop waarden voor numerieke. 671 00:29:05,362 --> 00:29:08,677 Ik ga gewoon een INT te kiezen en geen zorgen over de uiteenlopende maten. 672 00:29:08,677 --> 00:29:10,510 Ik heb niet aan te geven een lengte of een waarde, 673 00:29:10,510 --> 00:29:13,710 omdat het gaat worden 32 bits maakt niet uit wat. 674 00:29:13,710 --> 00:29:16,070 Attributen, hebben we nog niet eerder te zien. 675 00:29:16,070 --> 00:29:18,410 Een belang in een van deze menuopties deze tijd? 676 00:29:18,410 --> 00:29:21,890 677 00:29:21,890 --> 00:29:23,745 Voor een INT? 678 00:29:23,745 --> 00:29:24,620 Wat heb je voor te stellen? 679 00:29:24,620 --> 00:29:27,350 680 00:29:27,350 --> 00:29:28,445 Nee? 681 00:29:28,445 --> 00:29:29,570 Heeft een van deze zin? 682 00:29:29,570 --> 00:29:30,536 Ja. 683 00:29:30,536 --> 00:29:31,900 Ja, unsigned, toch? 684 00:29:31,900 --> 00:29:35,930 >> Over het algemeen, als we gaan geven iedereen een uniek nummer, die 685 00:29:35,930 --> 00:29:38,200 is waar dit verhaal is gaan, ik wil alleen 686 00:29:38,200 --> 00:29:41,919 een persoon het getal als nul en één en twee en drie en vier. 687 00:29:41,919 --> 00:29:43,710 Ik hoef niet te gaan met negatieve getallen. 688 00:29:43,710 --> 00:29:45,210 Het lijkt net als onnodige complexiteit. 689 00:29:45,210 --> 00:29:48,470 Ik wil 4000000000 mogelijke waarden, niet 4 miljard mogelijke waarden, 690 00:29:48,470 --> 00:29:50,699 dus ik verdubbelde de capaciteit van mijn INT. 691 00:29:50,699 --> 00:29:53,490 Even terzijde, als je wilt vertellen dit om iets als Facebook, 692 00:29:53,490 --> 00:29:56,190 terug in de vorm van mijn dag wanneer Facebook kwam voor het eerst uit, 693 00:29:56,190 --> 00:29:59,510 Ik denk dat wat ze waren met behulp van in hun MySQL database 694 00:29:59,510 --> 00:30:02,856 voor het opslaan van een gebruiker identifier, was gewoon een INT. 695 00:30:02,856 --> 00:30:05,230 Maar natuurlijk, er is veel van echte mensen in de wereld. 696 00:30:05,230 --> 00:30:07,438 Er is een hoop nep Facebook rekeningen ter wereld. 697 00:30:07,438 --> 00:30:11,701 En zo uiteindelijk, Facebook overstroomde de grootte van een INT, een 4000000000 698 00:30:11,701 --> 00:30:12,200 waarde. 699 00:30:12,200 --> 00:30:15,032 Dat is waarom, als je kijkt rond en er zijn websites 700 00:30:15,032 --> 00:30:16,740 dat kan je vertellen wat uw unieke ID is. 701 00:30:16,740 --> 00:30:19,781 En als je nooit gekozen voor een gebruikersnaam Facebook, zie je een unieke ID. 702 00:30:19,781 --> 00:30:23,080 Ik denk dat het profiel dot PHP vraagteken ID is gelijk aan iets. 703 00:30:23,080 --> 00:30:27,210 Dat is nu iets als een grote INT, of een lange lange als je wil, 704 00:30:27,210 --> 00:30:29,700 die een 64-bits waarde of iets vergelijkbaars. 705 00:30:29,700 --> 00:30:33,620 >> Dus zelfs in de echte wereld doen deze kwesties uiteindelijk soms toe. 706 00:30:33,620 --> 00:30:37,600 En het blijkt hier, als ik het geven van elk van mijn gebruikers een unieke ID, 707 00:30:37,600 --> 00:30:41,750 Ik wil super expliciet te zijn en minimaal maken dit gebied uniek. 708 00:30:41,750 --> 00:30:44,750 Maar het blijkt er één stuk van de nomenclatuur ook vandaag 709 00:30:44,750 --> 00:30:46,470 dat is een primaire sleutel. 710 00:30:46,470 --> 00:30:49,800 Als u een database bent ontwerpen tafel en je weet van te voren 711 00:30:49,800 --> 00:30:55,580 dat een van de kolommen in die tabel moet en zal een unieke rijen te identificeren 712 00:30:55,580 --> 00:30:58,500 in de tabel, je wilt geef het en vertel de database, 713 00:30:58,500 --> 00:31:00,250 dit is mijn primaire sleutel. 714 00:31:00,250 --> 00:31:02,110 Er kunnen duplicaten in andere gebieden, 715 00:31:02,110 --> 00:31:06,330 maar ik vertel de database die deze is mijn eerste, mijn meest belangrijke gebied, 716 00:31:06,330 --> 00:31:08,420 dat is gegarandeerd uniek te zijn. 717 00:31:08,420 --> 00:31:09,660 >> Nu, lijkt overbodig. 718 00:31:09,660 --> 00:31:13,830 Ik ben nu te stellen dat we toe te voegen, door te klikken op Opslaan hier 719 00:31:13,830 --> 00:31:17,210 een veld called-- en ik ga om door te gaan en klik op AI, 720 00:31:17,210 --> 00:31:19,720 we zullen terug te komen dat in een moment, opslaan. 721 00:31:19,720 --> 00:31:22,540 Ik ben nu dat voorstelt mijn tafel uitzien. 722 00:31:22,540 --> 00:31:26,305 Ik heb een INT veld genaamd ID, een char veld genaamd Gebruikersnaam, 723 00:31:26,305 --> 00:31:31,100 een VARCHAR veld genaamd Naam, maar ID, als het primaire en dus uniek, 724 00:31:31,100 --> 00:31:33,760 waarom heb ik gewoon afval tijd de invoering van wat 725 00:31:33,760 --> 00:31:39,140 effectief is een tweede unieke veld genaamd ID dat is een int? 726 00:31:39,140 --> 00:31:41,980 >> Gebruikersnaam, herinneren, was al uniek, zeiden we. 727 00:31:41,980 --> 00:31:45,350 Dus gewoon logisch, heb je niet nodig een database ervaring om reden 728 00:31:45,350 --> 00:31:47,570 door middel van deze, waarom zou ik hebben ingevoerd 729 00:31:47,570 --> 00:31:50,065 een int als mijn unieke identifier ook? 730 00:31:50,065 --> 00:31:52,740 731 00:31:52,740 --> 00:31:53,930 Wat dit-- weer zeggen? 732 00:31:53,930 --> 00:31:55,580 >> PUBLIEK: [onverstaanbaar] 733 00:31:55,580 --> 00:31:59,534 >> DAVID MALAN: Random de toegang is makkelijker, waarom? 734 00:31:59,534 --> 00:32:00,410 >> PUBLIEK: [onverstaanbaar] 735 00:32:00,410 --> 00:32:02,367 DAVID MALAN: Ja, het is slechts toegang tot nummers. 736 00:32:02,367 --> 00:32:04,750 Dus, als je denkt van deze werkelijk een tafel, zoals een array, 737 00:32:04,750 --> 00:32:07,690 nu heb ik unieke identifiers dat ik kan rond springen. 738 00:32:07,690 --> 00:32:11,520 En beter dan dat nog is dat hoe groot is een INT gaat weer? 739 00:32:11,520 --> 00:32:14,450 740 00:32:14,450 --> 00:32:15,800 32 bits of vier bytes. 741 00:32:15,800 --> 00:32:17,750 >> Hoe groot is mijn gebruikersnaam gaat worden? 742 00:32:17,750 --> 00:32:20,310 743 00:32:20,310 --> 00:32:21,990 Maximaal? 744 00:32:21,990 --> 00:32:22,880 16 bytes. 745 00:32:22,880 --> 00:32:26,080 >> Dus, als je echt zorgen te maken over de prestaties van uw code, 746 00:32:26,080 --> 00:32:31,390 denk terug aan PSet5, wilt u liever zoeken naar een vier byte waarde of 16 747 00:32:31,390 --> 00:32:32,240 byte waarde, toch? 748 00:32:32,240 --> 00:32:33,810 Het is echt zo simpel als dat. 749 00:32:33,810 --> 00:32:38,060 Je moet vier keer zo veel werk te doen zoeken naar gebruikersnamen omdat deze 750 00:32:38,060 --> 00:32:38,830 zijn 16 bytes. 751 00:32:38,830 --> 00:32:41,320 Dus, heb je letterlijk vergelijken alle 16 bytes zijn 752 00:32:41,320 --> 00:32:43,140 zeker ja, dit is de gebruikersnaam die ik wil. 753 00:32:43,140 --> 00:32:46,610 Overwegende dat voor een int, kunt u doe het met slechts vier bytes. 754 00:32:46,610 --> 00:32:49,212 >> En als een opzij voor degenen geïnteresseerd in computer hardware, 755 00:32:49,212 --> 00:32:52,420 het blijkt dat je kunt zoiets past INT of een 32-bits waarde iets 756 00:32:52,420 --> 00:32:55,330 genoemd register in een computer CPU, wat betekent dat het super, 757 00:32:55,330 --> 00:32:58,400 super snel, zelfs bij de laagste het niveau van de hardware van de computer. 758 00:32:58,400 --> 00:33:00,530 Dus, er is gewoon voordelen rondom. 759 00:33:00,530 --> 00:33:01,530 Ja, wat betekent dit? 760 00:33:01,530 --> 00:33:04,850 In feite, als je het ontwerpen van een database tabel, bijna alle van de tijd 761 00:33:04,850 --> 00:33:07,170 ga je niet alleen de gegevens die u belangrijk vindt, 762 00:33:07,170 --> 00:33:09,280 maar ook iets als een unieke identificatie 763 00:33:09,280 --> 00:33:11,280 want dit gaat laten wij andere dingen doen. 764 00:33:11,280 --> 00:33:13,160 En laten we struikelen over één probleem. 765 00:33:13,160 --> 00:33:15,990 >> Stel dat gebruikers niet alleen gebruikersnamen en namen, 766 00:33:15,990 --> 00:33:19,540 maar ze hebben ook dingen zoals steden en staten en postcodes, ten minste 767 00:33:19,540 --> 00:33:20,432 hier in de VS. 768 00:33:20,432 --> 00:33:22,390 Dus, ik ga om verder te gaan en gewoon snel zeggen, 769 00:33:22,390 --> 00:33:26,180 geef me nog drie kolommen Aan het einde van de tabel. 770 00:33:26,180 --> 00:33:28,900 En dit zal de stad zijn, dit gaat Staat, 771 00:33:28,900 --> 00:33:30,400 en dit gaat Zip zijn. 772 00:33:30,400 --> 00:33:32,710 >> Nu types City, welke gegevens moet dit misschien? 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 Ik weet niet wat de langste naam van de stad is. 776 00:33:37,780 --> 00:33:40,571 Ergens in Amerika, is er waarschijnlijk een belachelijk lang woord, 777 00:33:40,571 --> 00:33:43,605 dus laten we gewoon gaan met 255, ietwat historisch of willekeurig. 778 00:33:43,605 --> 00:33:44,730 Staat, wat je wilt doen? 779 00:33:44,730 --> 00:33:48,380 780 00:33:48,380 --> 00:33:50,367 Beslissing te nemen, toch? 781 00:33:50,367 --> 00:33:51,700 Wat is misschien wel het meest efficiënt? 782 00:33:51,700 --> 00:33:53,500 Hoeveel tekens? 783 00:33:53,500 --> 00:33:55,950 Misschien gewoon twee, als we kunnen wegkomen met het doen van enkel, 784 00:33:55,950 --> 00:33:58,250 zoals, MA voor Massachusetts enzovoort. 785 00:33:58,250 --> 00:34:00,520 Dus, ik ga naar een char waarde van twee te gaan. 786 00:34:00,520 --> 00:34:03,080 >> Postcode is een interessante. 787 00:34:03,080 --> 00:34:06,679 We zijn hier in 02.138, zodat suggereert dat we wat moeten gebruiken? 788 00:34:06,679 --> 00:34:07,470 Het is een INT, toch? 789 00:34:07,470 --> 00:34:10,030 790 00:34:10,030 --> 00:34:12,800 INT, INT, kort? 791 00:34:12,800 --> 00:34:14,521 Korte zou werken. 792 00:34:14,521 --> 00:34:15,020 Nee? 793 00:34:15,020 --> 00:34:18,920 794 00:34:18,920 --> 00:34:20,870 CHAR of vijf, maar ik wil een INT. 795 00:34:20,870 --> 00:34:23,710 Waarom terug te duwen op INT? 796 00:34:23,710 --> 00:34:26,820 Overtuig me van dit. 797 00:34:26,820 --> 00:34:29,210 Wat is dom over een INT, mijn idee? 798 00:34:29,210 --> 00:34:29,871 Ja. 799 00:34:29,871 --> 00:34:31,199 >> PUBLIEK: Neem meer geheugen. 800 00:34:31,199 --> 00:34:32,909 >> DAVID MALAN: nemen meer geheugen. 801 00:34:32,909 --> 00:34:35,310 Vier bytes, maar je bent het voorstellen van een postcode 802 00:34:35,310 --> 00:34:39,000 vijf bytes of iemand was als een char, die aanvoelt als eh, dat is niet echt 803 00:34:39,000 --> 00:34:39,620 de zaak. 804 00:34:39,620 --> 00:34:40,489 >> Nou, leuk verhaal. 805 00:34:40,489 --> 00:34:43,179 Jaren geleden, toen ik gebruikt om het gebruik Microsoft Outlook voor mijn e-mail, 806 00:34:43,179 --> 00:34:45,150 Ik wilde uiteindelijk over te schakelen naar Gmail. 807 00:34:45,150 --> 00:34:48,949 En dus, geëxporteerd ik al mijn contactpersonen uit Outlook als een CSV-bestand. 808 00:34:48,949 --> 00:34:50,699 Comma separated values, die net betekende dat ik 809 00:34:50,699 --> 00:34:54,060 had al mijn vrienden namen en de laatste namen en telefoonnummers en postcodes 810 00:34:54,060 --> 00:34:54,747 en dat alles. 811 00:34:54,747 --> 00:34:56,580 En dan heb ik het fout van het open te stellen 812 00:34:56,580 --> 00:34:58,640 in Excel, die een spreadsheet-programma dat 813 00:34:58,640 --> 00:35:00,289 begrijpt CSV-bestanden zoals we hebben gezien. 814 00:35:00,289 --> 00:35:03,080 Maar dan moet ik heb geraakt, zoals, Commando of controle S op een punt. 815 00:35:03,080 --> 00:35:06,250 En Excel blijkbaar op het moment had een functie waarbij elke keer dat het 816 00:35:06,250 --> 00:35:08,100 zag een aantal, zij probeerden behulpzaam te zijn. 817 00:35:08,100 --> 00:35:11,610 En als dat nummer begon met nullen, zou het gewoon te ontdoen van hen. 818 00:35:11,610 --> 00:35:13,420 Waarom heb je nodig leidende nullen op de gehele getallen? 819 00:35:13,420 --> 00:35:15,140 Ze zijn zinloos, mathematisch. 820 00:35:15,140 --> 00:35:17,530 Ze zijn niet zinloos in de US Postal-systeem. 821 00:35:17,530 --> 00:35:19,954 Dus, heb ik al jaren, aan deze dag, ik nog steeds 822 00:35:19,954 --> 00:35:22,370 heb vrienden dat wanneer de zeldzame geval dat ik heb iemand nodig is 823 00:35:22,370 --> 00:35:24,078 aanpakken van deze dagen, Ik zal nog steeds zien dat ik 824 00:35:24,078 --> 00:35:26,767 heb een vriend in Cambridge, Massachusetts, 2138. 825 00:35:26,767 --> 00:35:29,350 En het is vervelend als je proberen om programmatisch soort 826 00:35:29,350 --> 00:35:30,975 genereren enveloppen of gewoon noteer deze. 827 00:35:30,975 --> 00:35:33,599 En dat is vanwege deze reden, Ik koos voor de verkeerde data. 828 00:35:33,599 --> 00:35:34,490 Dus, ik hou van je idee. 829 00:35:34,490 --> 00:35:35,650 Laten we gebruik maken van een char veld. 830 00:35:35,650 --> 00:35:38,340 Vijf tekens, behalve Er is een hoek case. 831 00:35:38,340 --> 00:35:42,220 Als u nog steeds e-mail te sturen, Soms postcodes deze dagen, 832 00:35:42,220 --> 00:35:45,360 zij zijn, zoals, plus vier. 833 00:35:45,360 --> 00:35:48,200 Dus, een koppelteken en dan moeten we moeten we nog vier nummers. 834 00:35:48,200 --> 00:35:50,330 Dus om eerlijk te zijn, het kon gaan veel verschillende manieren. 835 00:35:50,330 --> 00:35:52,371 >> Voor nu, ik ga om te blijven het eenvoudig en ik ben gewoon 836 00:35:52,371 --> 00:35:54,780 gaan om te zeggen dat het een vijf CHAR waarde en we zijn 837 00:35:54,780 --> 00:35:56,739 gaat het hele dashboard plus vier overslaan. 838 00:35:56,739 --> 00:35:58,280 Maar dit zijn de soorten afwegingen. 839 00:35:58,280 --> 00:36:00,196 En je kunt denken aan de Dezelfde problemen 840 00:36:00,196 --> 00:36:01,860 met telefoonnummers of andere gebieden. 841 00:36:01,860 --> 00:36:04,350 >> En nu, dit is eigenlijk een dwaze weg naar beneden te gaan. 842 00:36:04,350 --> 00:36:08,000 Stel dat zowel Rob en ik en Hannah en Maria en [? Davon?] En Andy 843 00:36:08,000 --> 00:36:12,820 en anderen op het personeel van alle leven in Cambridge, Massachusetts, 02.138. 844 00:36:12,820 --> 00:36:17,970 Dit ook daadwerkelijk het gevoel dom dat ik ben toevoegen aan mijn gebruikers tafel, stad, staat, 845 00:36:17,970 --> 00:36:18,630 en zip. 846 00:36:18,630 --> 00:36:20,980 Waarom? 847 00:36:20,980 --> 00:36:21,960 >> PUBLIEK: [onverstaanbaar] 848 00:36:21,960 --> 00:36:22,918 >> DAVID MALAN: weer zeggen? 849 00:36:22,918 --> 00:36:24,310 PUBLIEK: [onverstaanbaar] 850 00:36:24,310 --> 00:36:25,850 >> DAVID MALAN: Ze zijn altijd gaan om samen te gaan, toch? 851 00:36:25,850 --> 00:36:28,660 Als blijkt, we gebruikt om te denken dit was het geval totdat we uitputtend 852 00:36:28,660 --> 00:36:30,570 doorzocht de hele VS, en er blijkt dat 853 00:36:30,570 --> 00:36:32,653 zijn enkele tegenstrijdigheden waar meerdere steden hebben 854 00:36:32,653 --> 00:36:35,060 hetzelfde zip, dat is raar. 855 00:36:35,060 --> 00:36:40,580 Maar als wij bepalen nu dat 02.138 is altijd Cambridge, Massachusetts, 856 00:36:40,580 --> 00:36:44,910 waarom in de wereld zou u opslaat in uw database Cambridge en MA en 02.138 857 00:36:44,910 --> 00:36:49,357 voor mij en voor Hannah en Rob en voor [? Davon?] En voor anderen die leven 858 00:36:49,357 --> 00:36:51,190 Hier in Cambridge, is het perfect overbodig. 859 00:36:51,190 --> 00:36:54,480 >> We moeten weg met alleen het opslaan van wat? 860 00:36:54,480 --> 00:36:55,610 Alleen de postcode. 861 00:36:55,610 --> 00:36:58,660 Maar dan, als we slaan alleen de postcode, wil ik, waarschijnlijk, 862 00:36:58,660 --> 00:37:02,160 voor mijn website om te weten waar 02.138 is. 863 00:37:02,160 --> 00:37:03,910 Dus, ik heb een andere tafel. 864 00:37:03,910 --> 00:37:04,697 En dat is OK. 865 00:37:04,697 --> 00:37:07,530 En in feite is dit één van de ontwerpprocessen van het ontwerpen van tabellen 866 00:37:07,530 --> 00:37:11,472 dat je in PSet7 evenals waarbij je wilt factor gemeenschappelijke data. 867 00:37:11,472 --> 00:37:14,430 Net zoals we al factoring uit gemeenschappelijke code en factoring gemeenschappelijke 868 00:37:14,430 --> 00:37:17,380 stijlen van CSS, hier Ook in de database 869 00:37:17,380 --> 00:37:21,180 als ik alleen maar 02.138 tot unieke identificeren van iemand's geboorteplaats, 870 00:37:21,180 --> 00:37:25,020 niet bewaren Cambridge, Mass voor iedere darn gebruiker in uw tafel. 871 00:37:25,020 --> 00:37:29,770 >> In plaats daarvan, hebben een aparte tabel met de naam Ritsen die moet hebben wat kolommen? 872 00:37:29,770 --> 00:37:33,490 Waarschijnlijk een ID-veld, alleen maar omdat voor de principes we praten over nu. 873 00:37:33,490 --> 00:37:35,720 Waarschijnlijk een zip-veld voor de 02.138. 874 00:37:35,720 --> 00:37:38,400 En dan waarschijnlijk wat andere kolommen? 875 00:37:38,400 --> 00:37:42,950 Stad en staat, maar slechts één rij voor 02.138, een rij voor 02.139, 876 00:37:42,950 --> 00:37:44,772 één rij voor 90.210. 877 00:37:44,772 --> 00:37:46,730 En dat is letterlijk alle postcodes die ik ken. 878 00:37:46,730 --> 00:37:49,012 >> Dus nu, wat kan je doen? 879 00:37:49,012 --> 00:37:51,220 Dit is problematisch, omdat nu heb ik twee tabellen. 880 00:37:51,220 --> 00:37:54,660 Dus, mijn gebruikers zijn meestal hier, maar hun stadstaat informatie is 881 00:37:54,660 --> 00:37:55,390 hier. 882 00:37:55,390 --> 00:37:58,635 Dus, zo blijkt met SQL, is er eigenlijk een manier om informatie sluiten, 883 00:37:58,635 --> 00:38:00,470 en je zult dit zien in de Pset. 884 00:38:00,470 --> 00:38:03,000 >> Maar het blijkt dat je kunt zoiets als dit te doen. 885 00:38:03,000 --> 00:38:10,501 SELECT ster van gebruikers, JOIN ritsen ON gebruikers dot zip gelijk ritsen dot rits. 886 00:38:10,501 --> 00:38:13,360 Dat is een beetje langdradig, Toegegeven, maar dit gewoon 887 00:38:13,360 --> 00:38:17,590 betekent selecteer alles van de proces van het nemen van mijn gebruikers table 888 00:38:17,590 --> 00:38:19,580 en mijn ritsen tafel. 889 00:38:19,580 --> 00:38:22,120 Ga met ze mee aan de ene veld zij in kolom. 890 00:38:22,120 --> 00:38:24,780 Dus, letterlijk iets te doen als dit, en geef me terug 891 00:38:24,780 --> 00:38:27,360 een nieuwe tijdelijke tabel dat is breder, dat is groter, 892 00:38:27,360 --> 00:38:29,450 dat alle van de kolommen van beide. 893 00:38:29,450 --> 00:38:33,510 En dat, heel eenvoudig, zou de syntaxis voor iets als dit te doen. 894 00:38:33,510 --> 00:38:35,540 >> Dus, er is dit vooruit, maar er gaat 895 00:38:35,540 --> 00:38:38,950 andere ontwerpbeslissingen zijn je zult moeten maken, niet alleen met indexen 896 00:38:38,950 --> 00:38:40,550 maar lopen in uitdagingen. 897 00:38:40,550 --> 00:38:43,360 In feite is er een uitdaging in een database-ontwerp 898 00:38:43,360 --> 00:38:47,930 waarbij soms twee personen zou willen toegang tot dezelfde rijen van de database 899 00:38:47,930 --> 00:38:48,530 tafel. 900 00:38:48,530 --> 00:38:51,450 Dus, dit is iets dat we zullen tegenkomen in PSet7 ook. 901 00:38:51,450 --> 00:38:54,686 >> Maar ik dacht dat ik zou kijken naar een aanval die mogelijk in SQL. 902 00:38:54,686 --> 00:38:56,560 Wat zijn enkele van de problemen die kunnen ontstaan? 903 00:38:56,560 --> 00:38:58,170 Zo, zult u dit tegenkomen in PSet7. 904 00:38:58,170 --> 00:39:01,874 En wij vertellen u wat de regelrechte coderende oplossing voor dit probleem. 905 00:39:01,874 --> 00:39:04,790 Maar als je een hoger niveau les te nemen, vooral in besturingssystemen, 906 00:39:04,790 --> 00:39:06,950 je gaat tegenkomen een kwestie van atomiciteit, 907 00:39:06,950 --> 00:39:10,080 het probleem van het proberen te doen meerdere dingen tegelijk 908 00:39:10,080 --> 00:39:11,000 zonder onderbreking. 909 00:39:11,000 --> 00:39:14,560 >> En ik dacht dat ik dit te introduceren idee voor PSet7 met een metafoor 910 00:39:14,560 --> 00:39:18,160 dat heb ik geleerd mezelf in Margo Seltzer's CS164 besturingssystemen 911 00:39:18,160 --> 00:39:18,990 klasse jaar geleden. 912 00:39:18,990 --> 00:39:22,230 Stel dat u een van deze dorm koelkasten in uw dorm kamer of huis, 913 00:39:22,230 --> 00:39:24,474 en je hebt een echte voorliefde voor melk. 914 00:39:24,474 --> 00:39:27,140 En ja, je thuis komt uit de klassen een dag, je de koelkast te openen. 915 00:39:27,140 --> 00:39:27,620 Oh, verdomme. 916 00:39:27,620 --> 00:39:28,870 Er is geen melk in de koelkast. 917 00:39:28,870 --> 00:39:32,470 Dus, je de koelkast te sluiten, de deur op slot, sluit uw dorm, 918 00:39:32,470 --> 00:39:34,770 lopen om de hoek CVS, in de rij, 919 00:39:34,770 --> 00:39:36,312 en beginnen met het controleren van voor wat melk. 920 00:39:36,312 --> 00:39:38,978 En het zal een tijdje duren, omdat die verdomde zelf checkout 921 00:39:38,978 --> 00:39:40,570 tellers nemen altijd toch te gebruiken. 922 00:39:40,570 --> 00:39:41,950 Dus ondertussen, je kamergenoot komt thuis. 923 00:39:41,950 --> 00:39:43,470 Hij of zij houdt echt van melk ook. 924 00:39:43,470 --> 00:39:45,520 Ze komen in de slaapzaal, Open de koelkast, oh, verdorie. 925 00:39:45,520 --> 00:39:46,490 Er is geen melk meer. 926 00:39:46,490 --> 00:39:49,040 >> Dus, hij of zij ook gaat om de hoek. 927 00:39:49,040 --> 00:39:51,670 Maar nu, omdat er als twee of drie of vier CVSes buurt, 928 00:39:51,670 --> 00:39:53,800 ze toevallig naar een van de verschillende degenen op het plein. 929 00:39:53,800 --> 00:39:55,830 En nu, een paar minuten later, jullie beiden 930 00:39:55,830 --> 00:39:58,060 kom thuis en ugh, het ergste probleem ooit. 931 00:39:58,060 --> 00:40:00,967 Nu heb je te veel melk omdat het gaat om zure gaan. 932 00:40:00,967 --> 00:40:03,050 En je wilt melk, maar u hou niet echt melk. 933 00:40:03,050 --> 00:40:06,730 >> Dus nu, dit was een dure fout omdat jullie beiden 934 00:40:06,730 --> 00:40:09,870 een besluit genomen op basis van de staat van enkele variabele die 935 00:40:09,870 --> 00:40:12,660 werd in het proces van veranderd door u, 936 00:40:12,660 --> 00:40:14,560 de initiatiefnemer van het gaan om melk te krijgen. 937 00:40:14,560 --> 00:40:17,785 Dus, wat is misschien een mens oplossing voor dat probleem? 938 00:40:17,785 --> 00:40:18,660 PUBLIEK: [onverstaanbaar] 939 00:40:18,660 --> 00:40:19,430 DAVID MALAN: Laat een briefje, toch? 940 00:40:19,430 --> 00:40:21,850 Laat altijd een briefje, als je vertrouwd met die show. 941 00:40:21,850 --> 00:40:23,100 Ja, er zijn twee van ons. 942 00:40:23,100 --> 00:40:25,940 Dus, altijd een briefje achterlaten, of letterlijk lock de koelkast 943 00:40:25,940 --> 00:40:28,602 met een soort van hangslot of iets over de top als dat. 944 00:40:28,602 --> 00:40:31,310 Maar dat is eigenlijk gaat worden kernprobleem met database-ontwerp, 945 00:40:31,310 --> 00:40:34,710 vooral wanneer u zou kunnen hebben meerdere browsers, meerdere laptops, 946 00:40:34,710 --> 00:40:37,450 meerdere gebruikers allemaal proberen te update-informatie in een keer. 947 00:40:37,450 --> 00:40:40,590 Bijzonder gevoelige informatie zoals financiële informatie, 948 00:40:40,590 --> 00:40:43,350 waarbij met een aandelenhandel website zoals u zult bouwen, 949 00:40:43,350 --> 00:40:47,270 wat als u wilt controleren hoeveel geld je hebt en dan als je genoeg hebt, 950 00:40:47,270 --> 00:40:48,490 kopen wat voorraad? 951 00:40:48,490 --> 00:40:50,899 >> Maar wat als iemand anders die heeft een gezamenlijke rekening met u 952 00:40:50,899 --> 00:40:52,690 tegelijkertijd proberen om wat aandelen te kopen? 953 00:40:52,690 --> 00:40:55,190 Dus hij controleert de rekeningsaldo, jullie beiden 954 00:40:55,190 --> 00:40:57,540 weer het zelfde antwoord, er is geen melk. 955 00:40:57,540 --> 00:41:00,580 Of beide van je terug het antwoord, heb je $ 100 op de rekening. 956 00:41:00,580 --> 00:41:04,680 Jullie beiden proberen om de beslissing te nemen op één aandeel van een aantal aandelen van het bedrijf te kopen. 957 00:41:04,680 --> 00:41:06,130 >> En nu, wat gebeurt er? 958 00:41:06,130 --> 00:41:07,140 Je hebt twee aandelen? 959 00:41:07,140 --> 00:41:08,420 Je hebt geen aandelen? 960 00:41:08,420 --> 00:41:10,320 Problemen zoals die zich kunnen voordoen. 961 00:41:10,320 --> 00:41:11,755 Dus, zullen we tegenkomen dat. 962 00:41:11,755 --> 00:41:14,630 SQL injectie aanvallen, gelukkig, zijn iets wat we zullen u helpen met, 963 00:41:14,630 --> 00:41:17,430 maar deze zijn atrociously vaak deze dagen nog. 964 00:41:17,430 --> 00:41:18,680 Dus, dit is slechts een voorbeeld. 965 00:41:18,680 --> 00:41:21,290 Ik maak geen claims die Harvard PIN-systeem is 966 00:41:21,290 --> 00:41:23,130 kwetsbaar voor dit vallen. 967 00:41:23,130 --> 00:41:24,160 We hebben geprobeerd. 968 00:41:24,160 --> 00:41:26,120 Maar, weet je dat we een gebied als dit. 969 00:41:26,120 --> 00:41:29,620 En Yale's Net ID heeft een soortgelijk op zoek scherm deze dagen. 970 00:41:29,620 --> 00:41:33,190 En het blijkt, dat misschien de PIN-systeem is geïmplementeerd in PHP. 971 00:41:33,190 --> 00:41:37,050 >> En als het were-- het niet-- ze zou de code die eruit ziet als deze. 972 00:41:37,050 --> 00:41:38,210 Ze hebben twee variabelen. 973 00:41:38,210 --> 00:41:42,495 Geef mij de gebruikersnaam en wachtwoord uit de post super globale variabele 974 00:41:42,495 --> 00:41:43,970 dat we het eerder over had. 975 00:41:43,970 --> 00:41:47,310 Misschien Harvard heeft een query zoals SELECT ster van gebruikers 976 00:41:47,310 --> 00:41:50,005 waarbij gebruikersnaam evenaart en het wachtwoord is gelijk aan dat. 977 00:41:50,005 --> 00:41:51,880 En merk dat ik ben gewoon stekker in het gebruik 978 00:41:51,880 --> 00:41:55,050 de accolade notatie van de andere dag, wat betekent gewoon de stekker in een waarde 979 00:41:55,050 --> 00:41:55,550 here. 980 00:41:55,550 --> 00:41:57,449 Ik ben niet met behulp van de vraagteken techniek. 981 00:41:57,449 --> 00:41:59,240 Ik heb geen seconde of derde argumenten. 982 00:41:59,240 --> 00:42:02,350 Ik ben gewoon letterlijk de aanleg van de string zelf. 983 00:42:02,350 --> 00:42:04,930 >> Het probleem is echter dat als iemand graag een scroob, 984 00:42:04,930 --> 00:42:09,020 die een verwijzing naar een film, logt in met iets als dit, 985 00:42:09,020 --> 00:42:11,250 en ik heb de puntjes verwijderd die meestal bedekken 986 00:42:11,250 --> 00:42:14,370 wachtwoorden, wat als hij is in het bijzonder kwaadaardige 987 00:42:14,370 --> 00:42:18,860 en zijn wachtwoord is misschien 12.345, per de film genaamd "Spaceballs" 988 00:42:18,860 --> 00:42:21,970 maar hij kritisch types een enkele aanhalingstekens na de vijf, 989 00:42:21,970 --> 00:42:24,790 dan letterlijk het woord of in de ruimte, en dan citaat, 990 00:42:24,790 --> 00:42:29,160 unquote één gelijk een citaat, maar merkt dat hij is weggelaten wat? 991 00:42:29,160 --> 00:42:32,700 Hij is weggelaten het citaat op de juiste en hij heeft nagelaten het citaat aan de linkerkant. 992 00:42:32,700 --> 00:42:35,170 >> Want als dit aanvaller scroob's vermoeden 993 00:42:35,170 --> 00:42:38,160 is dat de mensen die schreef Deze PHP code waren niet zo helder, 994 00:42:38,160 --> 00:42:42,990 misschien hebben ze slechts enkele enkelvoudige citeert rond de interpolatie 995 00:42:42,990 --> 00:42:45,210 van een variabele in accolades? 996 00:42:45,210 --> 00:42:48,620 En dus misschien, kon hij soort voltooien van hun gedachten 997 00:42:48,620 --> 00:42:53,290 voor hen, maar op een manier dat gaat om hem te laten gehackt de PIN-systeem. 998 00:42:53,290 --> 00:42:55,310 Met andere woorden, veronderstel dat dit de code 999 00:42:55,310 --> 00:42:57,140 en we nu de stekker in wat scroob getypt. 1000 00:42:57,140 --> 00:42:58,770 En het is rood, omdat het slecht. 1001 00:42:58,770 --> 00:43:01,310 >> En de onderliggende tekst is wat hij getypt, 1002 00:43:01,310 --> 00:43:05,510 scroob kon server Harvard truc in de bouw van een SQL-query 1003 00:43:05,510 --> 00:43:07,440 string die er zo uitziet. 1004 00:43:07,440 --> 00:43:11,760 Wachtwoord gelijk aan 12.345 of één gelijk is aan één. 1005 00:43:11,760 --> 00:43:14,820 Het waardoor logischerwijze is dat dit scroob zal aanmelden 1006 00:43:14,820 --> 00:43:18,360 in als zijn wachtwoord is 12345 of als men gelijken 1007 00:43:18,360 --> 00:43:22,660 een, die natuurlijk altijd waar, wat betekent scroob krijgt altijd in. 1008 00:43:22,660 --> 00:43:26,060 >> En ja, de weg op te lossen Dit, zoals in vele gevallen, 1009 00:43:26,060 --> 00:43:28,140 zou zijn om te verdedigen schrijven. 1010 00:43:28,140 --> 00:43:30,390 Iets als het gebruik van onze werkelijke vraag functie die 1011 00:43:30,390 --> 00:43:33,980 zie je in PSet7, waar we aansluiten iets als vraagtekens hier. 1012 00:43:33,980 --> 00:43:35,980 En de schoonheid van de vraag functie die we 1013 00:43:35,980 --> 00:43:40,010 geven is hij verdedigt tegen deze zogenaamde SQL injectie aanvallen, waarbij 1014 00:43:40,010 --> 00:43:44,260 iemand tricking uw code in injecteren van zijn of haar eigen SQL-code. 1015 00:43:44,260 --> 00:43:47,380 Want wat de query functie wij geven u ook daadwerkelijk doen, 1016 00:43:47,380 --> 00:43:51,270 Als u het vraagteken syntaxis en een tweede en een derde argument hier, 1017 00:43:51,270 --> 00:43:54,590 is wat heeft deze toe te voegen aan de input die de gebruiker verstrekt? 1018 00:43:54,590 --> 00:43:56,060 Die backslash citeert. 1019 00:43:56,060 --> 00:43:58,590 >> Dus, het ontsnapt aan alle potentieel gevaarlijke karakters. 1020 00:43:58,590 --> 00:44:01,000 Dit ziet er raar nu, maar het is niet kwetsbaar 1021 00:44:01,000 --> 00:44:03,260 omdat het niet de logische meer aanpassen 1022 00:44:03,260 --> 00:44:06,470 want dat hele wachtwoord nu één citaat dat niet, 1023 00:44:06,470 --> 00:44:07,596 in feite, wachtwoord scroob's. 1024 00:44:07,596 --> 00:44:09,845 Dus, er is al een aantal grappen over de jaren. 1025 00:44:09,845 --> 00:44:12,570 Dus, dit was een foto genomen van sommige geek op een parkeerplaats 1026 00:44:12,570 --> 00:44:16,620 waarbij u wellicht weet dat sommige steden en staten proberen om je rijbewijs te scannen 1027 00:44:16,620 --> 00:44:19,460 plaat aan u of aan ticket factureren als u door te gaan zonder, als, 1028 00:44:19,460 --> 00:44:20,660 de E-Z Pass ding. 1029 00:44:20,660 --> 00:44:24,490 Dus, deze persoon vermoed dat misschien de mensen die het schrijven van de E-Z-Pass-systeem 1030 00:44:24,490 --> 00:44:28,240 waren niet zo helder, en misschien zijn ze gewoon samen aaneengeschakelde een string, 1031 00:44:28,240 --> 00:44:32,190 zodat hij of zij kon niet kwaadwillig niet alleen hun gedachten te voltooien, 1032 00:44:32,190 --> 00:44:35,150 maar eigenlijk een slechte opdracht uit te voeren, die we nog niet hebben genoemd, 1033 00:44:35,150 --> 00:44:36,380 maar je kunt wel raden. 1034 00:44:36,380 --> 00:44:39,820 Dat naast schrappen en invoegen en bijwerken en selecteer, 1035 00:44:39,820 --> 00:44:43,370 Er is ook een sleutelwoord genaamd drop, die letterlijk alles verwijdert 1036 00:44:43,370 --> 00:44:45,300 in de database, welke is bijzonder slecht. 1037 00:44:45,300 --> 00:44:48,760 >> We kunnen inzoomen op deze als het is een beetje moeilijk om te zien. 1038 00:44:48,760 --> 00:44:52,300 Dit nu, is een beroemde cartoon dat is heerlijk slim nu 1039 00:44:52,300 --> 00:44:53,145 en begrijpelijk. 1040 00:44:53,145 --> 00:45:00,880 1041 00:45:00,880 --> 00:45:04,750 >> [Lachen] 1042 00:45:04,750 --> 00:45:05,910 >> Ja, cool. 1043 00:45:05,910 --> 00:45:06,800 Soort geeking uit. 1044 00:45:06,800 --> 00:45:08,800 Dus deze zijn dus SQL injectie aanvallen. 1045 00:45:08,800 --> 00:45:13,050 En ze zijn zo makkelijk te voorkomen door het gebruik van de juiste code of rechts bibliotheken. 1046 00:45:13,050 --> 00:45:15,947 En je zult zien in PSet7, dat is Daarom geven wij u de query functie. 1047 00:45:15,947 --> 00:45:17,780 Dus, een paar teasers dat we dachten dat we zouden 1048 00:45:17,780 --> 00:45:19,930 geef u hier in onze resterende minuten samen. 1049 00:45:19,930 --> 00:45:24,030 Dus, zoals u zich herinneren van week nul, we introduceerde deze twee lampen die 1050 00:45:24,030 --> 00:45:26,610 zijn mooi, niet alleen omdat ze zijn vrij en zijn kleurrijk, 1051 00:45:26,610 --> 00:45:29,450 maar omdat ze iets ondersteunen riep een API, een Application 1052 00:45:29,450 --> 00:45:31,980 Programming Interface En in CS50 tot nu toe, we hebben 1053 00:45:31,980 --> 00:45:34,440 vooral gericht op GET en POST, maar het blijkt 1054 00:45:34,440 --> 00:45:37,390 er andere HTTP werkwoorden zoals PUT. 1055 00:45:37,390 --> 00:45:39,430 >> En in feite was een dia van week nul 1056 00:45:39,430 --> 00:45:44,930 waarbij als je schrijft code die verzendt a la PSet6 een HTTP-verzoek 1057 00:45:44,930 --> 00:45:49,647 ziet er zo met dit stuk tekst onderaan, genaamd JSON, 1058 00:45:49,647 --> 00:45:52,230 of JavaScript Object Notation dat we praten over volgende week, 1059 00:45:52,230 --> 00:45:57,030 u kunt in- of uitschakelen of wijzigen de kleur van de verlichting zoals die. 1060 00:45:57,030 --> 00:46:00,480 Als CS50 ook naast enkele van die gloeilampen hier in New Haven 1061 00:46:00,480 --> 00:46:02,480 als je wilt om te lenen ze voor de laatste projecten, 1062 00:46:02,480 --> 00:46:04,370 ook een aantal Microsoft Bands, die als 1063 00:46:04,370 --> 00:46:07,619 horloges die je draagt ​​om je pols dat op dezelfde wijze een API zodat u 1064 00:46:07,619 --> 00:46:10,040 kunt uw eigen software te schrijven voor hen. 1065 00:46:10,040 --> 00:46:12,490 >> We hebben een rekening bij Apple's iOS-code, zodat 1066 00:46:12,490 --> 00:46:15,510 dat als je een Apple Watch of een iPhone of een iPad of een iPod, 1067 00:46:15,510 --> 00:46:17,707 U kunt code schrijven dat eigenlijk draait op geven. 1068 00:46:17,707 --> 00:46:19,540 We hebben een hele hoop van Arduinos, die zijn 1069 00:46:19,540 --> 00:46:22,010 piepkleine computers zonder gevallen, in wezen, 1070 00:46:22,010 --> 00:46:25,240 dat je kunt aansluiten via USB, meestal om uw eigen Mac of pc, 1071 00:46:25,240 --> 00:46:28,810 code schrijven die op deze fysieke loopt inrichtingen die vaak sensors erop 1072 00:46:28,810 --> 00:46:30,790 zodat u kunt communiceren met de echte wereld. 1073 00:46:30,790 --> 00:46:32,860 We hebben een hele hoop van Leap Motion apparaten, 1074 00:46:32,860 --> 00:46:36,500 welke USB-apparaten voor Macs zijn en PC's, hier en opnieuw, in New Haven. 1075 00:46:36,500 --> 00:46:40,080 En als je het aansluiten op je Mac, kun je eigenlijk uw computer te bedienen 1076 00:46:40,080 --> 00:46:42,550 door het schrijven van software dat via infrarood stralen, 1077 00:46:42,550 --> 00:46:46,360 cijfers waar je menselijke handen, zelfs zonder het aanraken van je toetsenbord. 1078 00:46:46,360 --> 00:46:49,135 We dachten dat we zouden delen een snelle blik op deze, bijvoorbeeld. 1079 00:46:49,135 --> 00:46:51,428 >> [Muziek] 1080 00:46:51,428 --> 00:47:55,840 1081 00:47:55,840 --> 00:47:57,590 Dus, we hebben een hele bos van deze dingen, 1082 00:47:57,590 --> 00:48:01,040 Ook riep Myo wapenbanden die je over je onderarm 1083 00:48:01,040 --> 00:48:04,595 en dan kun je de controle van de echte wereld of de virtuele wereld als deze. 1084 00:48:04,595 --> 00:48:06,471 >> [Muziek] 1085 00:48:06,471 --> 00:49:17,580 1086 00:49:17,580 --> 00:49:20,920 Of, hebben we ook een aantal Google Karton, die letterlijk, als, 1087 00:49:20,920 --> 00:49:24,841 een kartonnen doos kon je op zet je gezicht, maar dia in uw telefoon in te 1088 00:49:24,841 --> 00:49:27,590 zodat je het glas van uw telefoon echt dicht bij uw ogen. 1089 00:49:27,590 --> 00:49:30,190 En Google Karton is vrij goedkoop op $ 10 of $ 20. 1090 00:49:30,190 --> 00:49:32,230 En het heeft weinig lenzen dat iets uit shift 1091 00:49:32,230 --> 00:49:35,900 het beeld op het scherm voor uw human ogen om u een gevoel van diepte te geven 1092 00:49:35,900 --> 00:49:39,550 zodat je eigenlijk een 3D- omgeving voor je. 1093 00:49:39,550 --> 00:49:42,927 We hebben ook een aantal Samsung Gear, die de duurdere versie hiervan, 1094 00:49:42,927 --> 00:49:46,010 maar kunnen eveneens glijden in een Android-telefoon en geven u de illusie 1095 00:49:46,010 --> 00:49:48,309 van-- of de ervaring van virtual reality. 1096 00:49:48,309 --> 00:49:50,850 En in onze laatste twee minuten, we dachten dat we zouden proberen om dit te doen. 1097 00:49:50,850 --> 00:49:55,250 Als ik kan projecteren wat Colton heeft hier gewoon om uw eetlust op te wekken, 1098 00:49:55,250 --> 00:49:58,442 laat me gaan en gooien up op het grote scherm hier. 1099 00:49:58,442 --> 00:49:59,400 Laat me de lichten vermoorden. 1100 00:49:59,400 --> 00:50:02,290 Colton, wilt u doorgaan en zet op uw mobiele voor een moment 1101 00:50:02,290 --> 00:50:05,171 en kom op over aan de midden van het podium? 1102 00:50:05,171 --> 00:50:07,420 En wilt u project-- dit is wat Colton ziet. 1103 00:50:07,420 --> 00:50:10,560 >> Nu, de Wi-Fi in hier niet zo sterk voor dit apparaat 1104 00:50:10,560 --> 00:50:13,870 dat dit super dwingend, maar Colton is letterlijk 1105 00:50:13,870 --> 00:50:15,710 in deze futuristische magische plek. 1106 00:50:15,710 --> 00:50:16,796 Hij ziet maar één afbeelding. 1107 00:50:16,796 --> 00:50:19,920 Je ziet zijn linker en rechter oog dat zijn hersenen aan elkaar stikken 1108 00:50:19,920 --> 00:50:22,260 in een driedimensionale milieu op zijn gezicht. 1109 00:50:22,260 --> 00:50:24,319 Hij is gewoon een menu-optie geselecteerd hier. 1110 00:50:24,319 --> 00:50:27,360 En dus nogmaals, hij is het dragen van deze headset met een Samsung telefoon op dat 1111 00:50:27,360 --> 00:50:29,080 draadloos projecteert overheadkosten. 1112 00:50:29,080 --> 00:50:30,349 Nu ben je op Mars, denk ik? 1113 00:50:30,349 --> 00:50:31,140 COLTON: Ik denk het wel. 1114 00:50:31,140 --> 00:50:32,181 Ik ben niet zeker [onverstaanbaar]. 1115 00:50:32,181 --> 00:50:34,250 [Lachen] 1116 00:50:34,250 --> 00:50:36,374 >> DAVID MALAN: Blijkt Mars heeft deze menu's. 1117 00:50:36,374 --> 00:50:41,590 >> COLTON: [onverstaanbaar] een aantal coole plaatsen als we willen to-- gaan 1118 00:50:41,590 --> 00:50:43,330 >> DAVID MALAN: Waar willen we heen? 1119 00:50:43,330 --> 00:50:45,837 >> COLTON: [onverstaanbaar] 1120 00:50:45,837 --> 00:50:48,170 DAVID MALAN: En laten we zien Colton, waar nu het nemen van ons. 1121 00:50:48,170 --> 00:50:48,961 COLTON: [onverstaanbaar] 1122 00:50:48,961 --> 00:50:52,830 1123 00:50:52,830 --> 00:50:56,380 >> DAVID MALAN: Dus, er is zo veel verschillende plaatsen kunt u zelf nemen. 1124 00:50:56,380 --> 00:51:00,590 Er is FAPIs via welke u kunt schrijf games of interacties die 1125 00:51:00,590 --> 00:51:01,950 werking uiteindelijk op de telefoon. 1126 00:51:01,950 --> 00:51:03,908 Dus, je echt gewoon het schrijven van een mobiele telefoon app. 1127 00:51:03,908 --> 00:51:06,380 Maar dankzij de software en grafische mogelijkheden, 1128 00:51:06,380 --> 00:51:08,765 nu Colton is in dit piepkleine huisje. 1129 00:51:08,765 --> 00:51:10,515 En risico van onszelf overweldigend, 1130 00:51:10,515 --> 00:51:13,330 Colton en ik zal rond stick voor terwijl aan het einde van de les vandaag 1131 00:51:13,330 --> 00:51:14,300 als je wilt om te komen en te spelen. 1132 00:51:14,300 --> 00:51:16,350 En we zullen ze brengen volgende week terug ook. 1133 00:51:16,350 --> 00:51:18,420 Zonder verdere ADO dat is het voor vandaag. 1134 00:51:18,420 --> 00:51:21,990 We zien je volgende week. 1135 00:51:21,990 --> 00:51:24,140 >> [MUZIEK - RAGGA TWINS, "slechte man"] 1136 00:51:24,140 --> 00:55:23,146