1 00:00:00,000 --> 00:00:02,405 >> [Přehrávání hudby] 2 00:00:02,405 --> 00:00:10,439 3 00:00:10,439 --> 00:00:11,980 DAVID Malan: Dobře, tohle je CS50. 4 00:00:11,980 --> 00:00:13,740 To je konec týdne osm. 5 00:00:13,740 --> 00:00:15,887 A dnes, začneme vyplnit v některých kusech 6 00:00:15,887 --> 00:00:17,720 pokud jde o budovy věci na webu. 7 00:00:17,720 --> 00:00:20,020 Takže, připomínají, že v pondělí trávíme mnohem více času 8 00:00:20,020 --> 00:00:22,530 na PHP, který je tento dynamický programovací jazyk, který 9 00:00:22,530 --> 00:00:26,872 nám umožňuje výstup, mimo jiné věci, HTML a další takový obsah 10 00:00:26,872 --> 00:00:27,830 že budeme chtít vidět. 11 00:00:27,830 --> 00:00:30,871 Ale my jsme opravdu podíval na to, jak budeme ukládat žádné informace. 12 00:00:30,871 --> 00:00:34,477 Ve skutečnosti, téměř nic z toho super zajímavé navštívených webových stránkách dnes 13 00:00:34,477 --> 00:00:36,560 mít nějaký druh databáze na zadní konec, že ​​jo? 14 00:00:36,560 --> 00:00:39,540 Facebook jistě ukládá velké množství dat o nás všech a prodejen Gmail vše 15 00:00:39,540 --> 00:00:40,210 z vašich e-mailů. 16 00:00:40,210 --> 00:00:44,150 >> A tak mnoho dalších stránky nejsou jen statický obsah, který je informativní. 17 00:00:44,150 --> 00:00:45,640 Je to vlastně dynamický nějakým způsobem. 18 00:00:45,640 --> 00:00:48,480 Ty poskytují vstup, aktualizuje stránky pro ostatní lidi. 19 00:00:48,480 --> 00:00:50,620 Získáte zprávy, pošlete zprávy, a tak dále. 20 00:00:50,620 --> 00:00:54,250 Takže dnes se podíváme blíže na na pilíři projektu 21 00:00:54,250 --> 00:00:57,330 že budete potápět do další týden, CS50 Finance, který 22 00:00:57,330 --> 00:01:00,509 se ve skutečnosti bude mít budete stavět něco, co není v C, ale v PHP. 23 00:01:00,509 --> 00:01:02,550 Webové stránky, které vypadá Trochu něco takového 24 00:01:02,550 --> 00:01:05,810 který umožňuje nakupovat a prodávat zásoby, které jsou ve skutečnosti 25 00:01:05,810 --> 00:01:09,044 bude čerpat v reálném čase Fotobanka data z Yahoo Finance. 26 00:01:09,044 --> 00:01:11,960 A tak nakonec, budete mít iluze pro sebe a pro uživatele 27 00:01:11,960 --> 00:01:14,550 že jste vlastně nákup a prodej zásoby a dostat téměř v reálném čase 28 00:01:14,550 --> 00:01:16,800 aktualizace, může spravovat portfolio, z nichž všechny 29 00:01:16,800 --> 00:01:20,310 bude vyžadovat s, v konečném důsledku, databáze uživatelů. 30 00:01:20,310 --> 00:01:23,330 >> Takže, vlastními slovy, zvláště pokud si nejste 31 00:01:23,330 --> 00:01:25,670 Super obeznámeni s počítačem věda nebo databáze, co 32 00:01:25,670 --> 00:01:30,790 víte, databáze, aby právě teď, v netechnických hlediska? 33 00:01:30,790 --> 00:01:32,300 Co je to? 34 00:01:32,300 --> 00:01:36,882 Jak byste popsal to na spolubydlící nebo přítele? 35 00:01:36,882 --> 00:01:40,100 >> Diváků: [Neslyšitelné] Informace [neslyšitelných] 36 00:01:40,100 --> 00:01:44,430 >> DAVID Malan: Takže, seznam informací, nebo store-- seznam informací 37 00:01:44,430 --> 00:01:47,160 které by vás mohly chtít uložit o něčem, jako uživatele. 38 00:01:47,160 --> 00:01:50,190 A to, co dělat mají uživatelé spojena s nimi? 39 00:01:50,190 --> 00:01:53,160 Jste-li uživatel na Facebooku, nebo Gmail, jaké jsou charakteristiky 40 00:01:53,160 --> 00:01:54,940 že všichni z nás mají uživatelé? 41 00:01:54,940 --> 00:01:58,530 Stejně jako to, co by mohlo být některé z sloupce v tabulce, na kterou jsme se 42 00:01:58,530 --> 00:01:59,390 zmiňoval minule? 43 00:01:59,390 --> 00:02:01,140 Vzhledem k tomu znovu, můžete myslíte, že databáze 44 00:02:01,140 --> 00:02:05,810 Opravdu jako efektní Excel souboru nebo Google Tabulkový nebo Apple Čísla souboru. 45 00:02:05,810 --> 00:02:08,280 >> Tak, co si myslíš o když si myslíte, že na uživatele? 46 00:02:08,280 --> 00:02:11,290 Co mají? 47 00:02:11,290 --> 00:02:11,790 Co je to? 48 00:02:11,790 --> 00:02:12,470 >> Diváků: Jméno. 49 00:02:12,470 --> 00:02:13,303 >> DAVID Malan: Název. 50 00:02:13,303 --> 00:02:16,840 Takže pokud název, stejně jako, David Malan by být jméno nějakého uživatele. 51 00:02:16,840 --> 00:02:17,980 Co ještě uživatel mít? 52 00:02:17,980 --> 00:02:18,770 >> Diváků: ID. 53 00:02:18,770 --> 00:02:19,561 >> DAVID Malan: ID. 54 00:02:19,561 --> 00:02:23,320 Takže, stejně jako rodné číslo, jako je vaší Harvard ID nebo vaše Yale Net ID nebo podobně. 55 00:02:23,320 --> 00:02:24,923 Co jiného může uživatel mít? 56 00:02:24,923 --> 00:02:25,890 >> Diváků: Password. 57 00:02:25,890 --> 00:02:29,240 >> DAVID Malan: Heslo, možná adresa, možná telefonní číslo, možná 58 00:02:29,240 --> 00:02:30,050 e-mailovou adresu. 59 00:02:30,050 --> 00:02:32,640 Takže, je tu trsy polí a to by mohla nějak vymkne kontrole 60 00:02:32,640 --> 00:02:34,760 Rychle jakmile začnete si uvědomil, oh, pojďme ukládat tento 61 00:02:34,760 --> 00:02:36,190 a pojďme ukládat to a to. 62 00:02:36,190 --> 00:02:37,657 >> Ale jak vlastně dělat, že? 63 00:02:37,657 --> 00:02:39,740 Takže znovu, duševní Model mít na dnešek, jak jsme 64 00:02:39,740 --> 00:02:42,320 ponořit do skutečného SQL, Structured Query Language, 65 00:02:42,320 --> 00:02:44,186 je databáze, která vypadá takto. 66 00:02:44,186 --> 00:02:45,310 Je to jen řádky a sloupce. 67 00:02:45,310 --> 00:02:48,309 A můžete si představit, Google Spreadsheets nebo libovolný počet jiných programů. 68 00:02:48,309 --> 00:02:52,130 Ale co je klíčem k MySQL, což je databázový software budeme používat, 69 00:02:52,130 --> 00:02:54,920 Volně otevřeně available-- Facebook použití 70 00:02:54,920 --> 00:02:59,200 to a libovolný počet dalších websites-- Databáze ukládá věci příbuzensky. 71 00:02:59,200 --> 00:03:01,770 A relační databáze prostě znamená, ten, který doslova 72 00:03:01,770 --> 00:03:03,672 ukládá data do řádků a sloupců. 73 00:03:03,672 --> 00:03:04,630 Je to tak jednoduché, jak to. 74 00:03:04,630 --> 00:03:07,230 >> Takže i něco jako Oracle, které jste možná slyšeli o celkově 75 00:03:07,230 --> 00:03:08,271 je relační databáze. 76 00:03:08,271 --> 00:03:10,929 A pod kapotou to, ukládá data v řádcích a sloupcích. 77 00:03:10,929 --> 00:03:12,970 A Oracle jste si účtuje hodně peněz k tomu, že, 78 00:03:12,970 --> 00:03:15,550 vzhledem k tomu, MySQL poplatků jste za stejné nic. 79 00:03:15,550 --> 00:03:18,790 Takže, SQL se chystá dát nám alespoň čtyři operace. 80 00:03:18,790 --> 00:03:23,190 Možnost vybrat data, jako přečtené Údaje, insert, delete a aktualizovat data. 81 00:03:23,190 --> 00:03:25,525 Jinými slovy, to jsou Opravdu čtyři klíčové operace 82 00:03:25,525 --> 00:03:28,950 se děje, abychom mohli změnit věci v těchto řádků a sloupců. 83 00:03:28,950 --> 00:03:33,250 >> Nástroj, který budeme používat dnes obzvláště naučit SQL a hrát s ním 84 00:03:33,250 --> 00:03:34,627 se opět nazývá PHP MyAdmin. 85 00:03:34,627 --> 00:03:35,460 Je to nástroj, založený web. 86 00:03:35,460 --> 00:03:38,200 Celkem náhoda, že je to napsaný v PHP. 87 00:03:38,200 --> 00:03:42,400 Ale to bude, aby nám grafické uživatelské rozhraní, takže můžeme vlastně 88 00:03:42,400 --> 00:03:46,054 vytvoření těchto řádků a sloupců a pak mluvit s nimi prostřednictvím kódu. 89 00:03:46,054 --> 00:03:47,970 Takže, pojďme se nyní začínají Myslím si, že to, co je řečeno 90 00:03:47,970 --> 00:03:51,000 druh zábavné procesu budování zadní část webových stránek, 91 00:03:51,000 --> 00:03:54,580 části, které uživatelé nemají vidět, ale určitě dělat stará o, 92 00:03:54,580 --> 00:03:56,170 protože to je to spíše datové děje. 93 00:03:56,170 --> 00:03:59,570 Tak, podobně jako C a přidá se trochu méně jako PHP, 94 00:03:59,570 --> 00:04:04,954 SQL, nebo databáze, která podporuje SQL, má alespoň tyto datové typy 95 00:04:04,954 --> 00:04:05,870 a svazky ostatních. 96 00:04:05,870 --> 00:04:08,107 CHAR, VARCHAR, INT, BIGINT, DECIMAL, a DATETIME. 97 00:04:08,107 --> 00:04:09,940 A je tu celá spoustu dalších funkcí, 98 00:04:09,940 --> 00:04:11,940 ale pojďme to tím, že způsob, jak aktuální příklad. 99 00:04:11,940 --> 00:04:16,450 >> Chystám se jít do CS50 IDE kde, v předstihu, jsem přihlášen 100 00:04:16,450 --> 00:04:19,372 a já jsem také navštívil URL pro tento nástroj s názvem PHP MyAdmin. 101 00:04:19,372 --> 00:04:22,580 A problém nastavit sedm, budeme vyprávět vám přesně, jak se dostat k tomuto rozhraní 102 00:04:22,580 --> 00:04:23,200 také. 103 00:04:23,200 --> 00:04:25,640 V levém horním rohu, Všimněte si, že říká, že přednášet. 104 00:04:25,640 --> 00:04:27,610 A to právě znamená, že v předstihu, I vytvořil 105 00:04:27,610 --> 00:04:31,360 prázdné databáze s názvem přednáška která má v ní žádné tabulky dosud. 106 00:04:31,360 --> 00:04:32,600 Neexistuje žádné řádky a sloupce. 107 00:04:32,600 --> 00:04:34,308 Protože první věc, kterou budeme dělat 108 00:04:34,308 --> 00:04:37,100 je začít vytvářet tabulky že to bude ukládat našim uživatelům. 109 00:04:37,100 --> 00:04:39,100 >> Takže, doslova přes Zde na pravé straně, já jsem 110 00:04:39,100 --> 00:04:42,070 ti to říct databáze Chci tabulku s názvem Uživatelé. 111 00:04:42,070 --> 00:04:44,845 Tak, to je jako soubor, který jsem chcete uložit všechny své dat. 112 00:04:44,845 --> 00:04:45,720 A kolik sloupců? 113 00:04:45,720 --> 00:04:47,740 Dobře, pojďme držet to jednoduché pro teď. 114 00:04:47,740 --> 00:04:51,855 Já jen chci, aby uložit jako když uživatelské jméno a název pro uživatele. 115 00:04:51,855 --> 00:04:53,020 Budeme začít v malém. 116 00:04:53,020 --> 00:04:55,370 Takže, chci dva sloupce celkem. 117 00:04:55,370 --> 00:04:57,360 A já jdu dál a klepněte na tlačítko Přejít. 118 00:04:57,360 --> 00:04:59,210 A pak, pro tyto sloupy, co budu 119 00:04:59,210 --> 00:05:04,576 k do-- pokud tento internet cooperates-- v pořádku, 120 00:05:04,576 --> 00:05:05,950 takže budeme se snažit, aby to znovu. 121 00:05:05,950 --> 00:05:09,180 Chystám se vytvořit tabulku s názvem Uživatelé s dvou sloupců, klepněte na tlačítko Go, na tlačítko OK. 122 00:05:09,180 --> 00:05:10,520 Nyní máme to opravdu rychle. 123 00:05:10,520 --> 00:05:12,065 Děkuji, velmi dobře udělal. 124 00:05:12,065 --> 00:05:14,440 Dobře, takže to, co chceme Tyto sloupce se jmenuje? 125 00:05:14,440 --> 00:05:16,080 >> Tak, jeden se bude jmenovat Uživatelské jméno. 126 00:05:16,080 --> 00:05:19,480 Tak, vidím here-- a rozhraní Upřímně řečeno je trochu ošklivá nakonec, 127 00:05:19,480 --> 00:05:21,270 Jakmile začnete psát do všech těchto údajů. 128 00:05:21,270 --> 00:05:27,450 Ale to, co je příjemné je, že druh paradoxně, jsem vytváření sloupců, 129 00:05:27,450 --> 00:05:29,977 ale nástroj má pošetile položili ty věci v řadách 130 00:05:29,977 --> 00:05:31,560 takže mohu nastavit tyto sloupce. 131 00:05:31,560 --> 00:05:33,550 Takže, je tu dvě prázdná místa tam pod jménem. 132 00:05:33,550 --> 00:05:36,180 A jeden z těchto oborů I Chcete volal jméno, 133 00:05:36,180 --> 00:05:38,000 a jiné oblasti chci volat jméno. 134 00:05:38,000 --> 00:05:40,340 >> A teď mám na výběr datové typy pro tyto věci. 135 00:05:40,340 --> 00:05:42,330 Takže, zatímco v Excelu a Google Spreadsheets, 136 00:05:42,330 --> 00:05:45,531 pokud chcete sloupec, můžete doslova stačí zadat název nebo jméno, stiskněte klávesu Enter. 137 00:05:45,531 --> 00:05:48,030 Možná jste to tučné obličej, aby Jen pro přehlednost, ale to je vše. 138 00:05:48,030 --> 00:05:50,140 Nemusíte specifikovat typy sloupců. 139 00:05:50,140 --> 00:05:53,790 Nyní v Google Spreadsheets nebo Excel, může určit, jak jsou data vykreslen. 140 00:05:53,790 --> 00:05:58,120 Dalo by se jít do menu Formát, a vy Můžete zadat ukažte tento jako znak dolaru, 141 00:05:58,120 --> 00:05:59,900 ukázat to jako plovoucí bodovou hodnotou. 142 00:05:59,900 --> 00:06:01,990 >> Takže, je to podobné duchem že to, co se chystáme udělat, 143 00:06:01,990 --> 00:06:04,740 ale toto je ve skutečnosti bude nutit údaje, které mají být určitý typ. 144 00:06:04,740 --> 00:06:07,750 Nyní, i když před chvílí jsem řekl, že je to jen pár datové typy, 145 00:06:07,750 --> 00:06:11,120 tam je vlastně mnohem, a jsou to 146 00:06:11,120 --> 00:06:12,910 v různém stupni specifičnosti. 147 00:06:12,910 --> 00:06:14,970 A jak stranou, vy Můžete dokonce dělat maškarní věci 148 00:06:14,970 --> 00:06:17,520 jako skladovací geometrie uvnitř databáze. 149 00:06:17,520 --> 00:06:19,250 Můžete ukládat věci jako je GPS souřadnice 150 00:06:19,250 --> 00:06:22,420 a skutečně najít, matematicky, body, které jsou v blízkosti jiné. 151 00:06:22,420 --> 00:06:24,128 Ale budeme zachovat to super jednoduché 152 00:06:24,128 --> 00:06:26,800 a jít až na tu, všichni tzv typy řetězec. 153 00:06:26,800 --> 00:06:29,240 >> Takže, tady je seznam celá řada možností. 154 00:06:29,240 --> 00:06:32,740 CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. 155 00:06:32,740 --> 00:06:34,110 A je to docela ohromující. 156 00:06:34,110 --> 00:06:37,610 A bohužel, poněkud paradoxně až C, 157 00:06:37,610 --> 00:06:40,120 CHAR není opravdu CHAR. 158 00:06:40,120 --> 00:06:44,170 Zadáte-li v databázi že vaše data typ je CHAR, 159 00:06:44,170 --> 00:06:47,390 to znamená, že ano, je to CHAR, ale je to jeden nebo více znaků. 160 00:06:47,390 --> 00:06:49,630 A musíte zadat jak mnoho připálí chcete. 161 00:06:49,630 --> 00:06:51,636 Takže, co je typický délka uživatelské jméno? 162 00:06:51,636 --> 00:06:52,760 Existuje nějaký limit obvykle? 163 00:06:52,760 --> 00:06:53,920 >> Diváků: [Neslyšitelné] 164 00:06:53,920 --> 00:06:55,050 >> DAVID Malan: 16 možná? 165 00:06:55,050 --> 00:06:55,990 Něco takového. 166 00:06:55,990 --> 00:06:57,948 Víte, zpět v den, to bylo osm. 167 00:06:57,948 --> 00:07:00,289 Někdy je to 16, někdy je to ještě víc než to. 168 00:07:00,289 --> 00:07:02,080 A tak to není znamenat, dej mi jednu CHAR. 169 00:07:02,080 --> 00:07:04,730 To znamená, že musím upřesnit délka pole, 170 00:07:04,730 --> 00:07:07,402 a teď bych mohl říci něco jako 16 let. 171 00:07:07,402 --> 00:07:08,610 A je tu kompromis tady. 172 00:07:08,610 --> 00:07:11,360 Takže, uvidíme za chvíli že to znamená, že jeden, 173 00:07:11,360 --> 00:07:14,620 každý uživatel musí být 16 znaků. 174 00:07:14,620 --> 00:07:18,720 Ale počkejte chvíli, M-A-L-A-N. Jestli je to mé jméno a já jsem pouze s využitím pěti, 175 00:07:18,720 --> 00:07:23,070 co byste navrhnout, aby databáze udělat pro dalších 11 znaků, které 176 00:07:23,070 --> 00:07:24,471 Já jsem vyhrazen prostor pro? 177 00:07:24,471 --> 00:07:25,220 Co bys dělal? 178 00:07:25,220 --> 00:07:26,480 >> Diváků: [Neslyšitelné] 179 00:07:26,480 --> 00:07:27,160 >> DAVID Malan: Jo, aby je všichni null. 180 00:07:27,160 --> 00:07:28,290 Udělat jim prostor. 181 00:07:28,290 --> 00:07:30,816 Ale pravděpodobně null, takže Hodně zpětné lomítko nul. 182 00:07:30,816 --> 00:07:33,190 Tak, na jedné straně, máme Nyní se ujistit, že se moje uživatelské jméno 183 00:07:33,190 --> 00:07:34,780 může být více než 16 znaků. 184 00:07:34,780 --> 00:07:37,590 A odvrácenou stranou, která je že kdybych měl opravdu dlouhý název 185 00:07:37,590 --> 00:07:39,940 nebo chtěl opravdu dlouhá uživatelské jméno, jako někteří z vás 186 00:07:39,940 --> 00:07:44,840 kluci mohou mít v této vysoké škole, nebo na Yale.edu, nemůžete mít jeden. 187 00:07:44,840 --> 00:07:47,177 A tak ve skutečnosti, pokud jste někdy zapsána pro webové stránky 188 00:07:47,177 --> 00:07:49,385 a dostanete zařval na rčení Vaše heslo je příliš dlouhá 189 00:07:49,385 --> 00:07:52,710 nebo vaše uživatelské jméno je příliš dlouhá, je to jednoduše proto, že programátor, když 190 00:07:52,710 --> 00:07:55,500 konfiguraci jeho nebo její databáze, rozhodl, že toto pole bude 191 00:07:55,500 --> 00:07:57,150 být delší než tato délka. 192 00:07:57,150 --> 00:08:00,580 >> Dobře, tak co když budeme pokračovat pojmenovat? 193 00:08:00,580 --> 00:08:05,240 Jak dlouho by měl Jméno typického lidského to být? 194 00:08:05,240 --> 00:08:07,492 Jak mnoho znaků, 16? 195 00:08:07,492 --> 00:08:09,450 Hádám, že bychom mohli najít někoho v této místnosti 196 00:08:09,450 --> 00:08:13,210 kde jeho nebo její první Plus poslední název je delší než 16 znaků. 197 00:08:13,210 --> 00:08:14,850 Takže, co je lepší, než to, že 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 Větší? 201 00:08:20,350 --> 00:08:20,980 30? 202 00:08:20,980 --> 00:08:21,855 >> Diváků: [Neslyšitelné] 203 00:08:21,855 --> 00:08:23,700 DAVID Malan: 5000, ach můj bože. 204 00:08:23,700 --> 00:08:26,309 Tak, to je asi slušný horní hranici, řekněme. 205 00:08:26,309 --> 00:08:28,350 A tady jsme trochu se provést úsudek volání. 206 00:08:28,350 --> 00:08:30,400 Stejně jako neexistuje správná odpověď zde. 207 00:08:30,400 --> 00:08:32,740 Infinite není dost dobře možné, proto, že jsme se nakonec 208 00:08:32,740 --> 00:08:34,781 bude have-- jsme chystá spustit z paměti. 209 00:08:34,781 --> 00:08:36,909 Takže musíme udělat úsudku v určitém okamžiku. 210 00:08:36,909 --> 00:08:41,010 >> Velmi časté by, například, na use-- a dovolte mi upřesnit CHAR zde 211 00:08:41,010 --> 00:08:46,050 jak before-- 255 byl doslovně Horní mez tohoto databázový software 212 00:08:46,050 --> 00:08:46,700 před lety. 213 00:08:46,700 --> 00:08:48,575 A tak, spousta lidí by jen říct, fajn. 214 00:08:48,575 --> 00:08:49,420 255 je limit. 215 00:08:49,420 --> 00:08:50,620 Pojďme se jen využít maximum. 216 00:08:50,620 --> 00:08:51,870 A to je docela směšné. 217 00:08:51,870 --> 00:08:55,060 Stejně jako v případě píšete je někdo jmenovat 200 plus znaky, 218 00:08:55,060 --> 00:08:56,140 to trochu směšné. 219 00:08:56,140 --> 00:08:59,624 >> Ale pamatujte, že ASCII není jediný systém pro znaky. 220 00:08:59,624 --> 00:09:01,540 A tak, a to zejména v Mnoho asijských jazyků 221 00:09:01,540 --> 00:09:04,248 tam, kde je znaky nemůžeme vyjádřit na klávesnicích, jako je můj USA 222 00:09:04,248 --> 00:09:08,209 klávesnice, některé charaktery vlastně trvat až 16 bitů namísto osmi bitů. 223 00:09:08,209 --> 00:09:10,250 A tak, to vlastně není všechno, že nepřiměřená 224 00:09:10,250 --> 00:09:12,250 že potřebujeme více space pokud chceme, aby se vešly 225 00:09:12,250 --> 00:09:16,252 větší postavy, než samotné USA centric ty jsme tendenci diskutovat. 226 00:09:16,252 --> 00:09:17,460 Takže, potřebujeme nějaký horní mez. 227 00:09:17,460 --> 00:09:21,470 Já nevím, co je nejlepší z nich je, 255, ale je obecně obyčejný. 228 00:09:21,470 --> 00:09:22,700 25. cítí nízká. 229 00:09:22,700 --> 00:09:23,857 16, 32 cítit nízká. 230 00:09:23,857 --> 00:09:25,690 Chtěl bych chybovat na straně něco vyšší. 231 00:09:25,690 --> 00:09:27,330 Ale je tu kompromis, jako vždy. 232 00:09:27,330 --> 00:09:31,902 Co je možná zřejmé, kompromis vyhradit 255 znaků 233 00:09:31,902 --> 00:09:33,360 pro jméno každého v mé databáze? 234 00:09:33,360 --> 00:09:34,230 >> Diváků: [Neslyšitelné] 235 00:09:34,230 --> 00:09:34,510 >> DAVID Malan: Co je to? 236 00:09:34,510 --> 00:09:35,430 >> Diváků: [Neslyšitelné] 237 00:09:35,430 --> 00:09:37,138 >> DAVID Malan: Je to hodně paměti, že jo? 238 00:09:37,138 --> 00:09:42,280 M-A-L-A-N. Právě jsem promarnil 250 znaky jen uložit mé jméno 239 00:09:42,280 --> 00:09:46,000 obránci jen v případě, že někdo ve třídě má opravdu dlouhý název. 240 00:09:46,000 --> 00:09:47,940 To se jeví jako nepřiměřené kompromisu. 241 00:09:47,940 --> 00:09:52,040 >> Tak to dopadá, SQL, Tato databáze jazyk, 242 00:09:52,040 --> 00:09:55,480 ve skutečnosti podporuje něco, volal VARCHAR, nebo Variable CHAR. 243 00:09:55,480 --> 00:09:59,390 A to je docela hezké, že tento umožňuje zadat není pevná 244 00:09:59,390 --> 00:10:01,900 šířka, ale spíše, proměnná šířka. 245 00:10:01,900 --> 00:10:05,060 A konkrétněji, je maximální šířka pole. 246 00:10:05,060 --> 00:10:08,901 Takže, to znamená, že může název být větší než 250 znaků, 247 00:10:08,901 --> 00:10:10,150 ale to může být určitě méně. 248 00:10:10,150 --> 00:10:11,733 A databáze bude chytrý. 249 00:10:11,733 --> 00:10:14,860 Pokud se dát do M-A-L-A-N, je to jen bude používat pět, 250 00:10:14,860 --> 00:10:18,120 možná šest bytů pro podobné vlečená znak null, 251 00:10:18,120 --> 00:10:23,330 a ne trávit další 249 nebo 250 bajtů zbytečně. 252 00:10:23,330 --> 00:10:27,380 >> Takže to vypadá, jako bych měl začali s tímto příběhem. 253 00:10:27,380 --> 00:10:29,140 Ale je tu vždy kompromis. 254 00:10:29,140 --> 00:10:33,024 Tak, na jedné straně, uživatelské jméno jsem uvedeno, že se pevný kódované na 16, 255 00:10:33,024 --> 00:10:34,940 a možná, že to není pravá výzva, možná ji 256 00:10:34,940 --> 00:10:40,040 je, ale proč nepoužít VARCHARs za všechno? 257 00:10:40,040 --> 00:10:42,020 >> To existuje z nějakého důvodu. 258 00:10:42,020 --> 00:10:46,200 Proč nevyužít VARCHARs pro každý obor jehož délka nevíte předem 259 00:10:46,200 --> 00:10:48,180 když se zdá, že je to skvělá věc, ne? 260 00:10:48,180 --> 00:10:50,482 Používejte pouze tolik prostoru, kolik musíte do tohoto limitu? 261 00:10:50,482 --> 00:10:51,271 >> Diváků: Pomalejší. 262 00:10:51,271 --> 00:10:52,146 DAVID Malan: Kontrola pravopisu? 263 00:10:52,146 --> 00:10:53,120 Diváků: Dělá to pomalejší? 264 00:10:53,120 --> 00:10:53,970 DAVID Malan: Oh, to je pomalejší. 265 00:10:53,970 --> 00:10:55,720 Dobře, to je téměř vždy odpověď, upřímně. 266 00:10:55,720 --> 00:10:56,520 Stejně jako to, co je to kompromis? 267 00:10:56,520 --> 00:10:58,570 Je to buď stojí více místa nebo to stojí více času. 268 00:10:58,570 --> 00:11:00,111 Takže v tomto případě, může být pomalejší. 269 00:11:00,111 --> 00:11:00,920 Proč? 270 00:11:00,920 --> 00:11:05,830 >> Diváků: [Neslyšitelné] stanovení [neslyšitelný]. 271 00:11:05,830 --> 00:11:06,640 >> DAVID Malan: Dobrý. 272 00:11:06,640 --> 00:11:09,670 Takže, možná si vzpomenete i od PSED5, hrát se svým přístupem 273 00:11:09,670 --> 00:11:12,750 do slovníku, pokud máte vyhradit paměť dynamicky nebo zachovat 274 00:11:12,750 --> 00:11:14,630 pěstování vyrovnávací paměť, která může být ve skutečnosti pomalé. 275 00:11:14,630 --> 00:11:16,963 Máte-li volat malloc pod pokličku a možná 276 00:11:16,963 --> 00:11:19,610 to je to, co MySQL dělá, tak jistě, že by mohl být případ. 277 00:11:19,610 --> 00:11:22,430 A pokud si myslíte, cesta zpět na PSet-- nebo dokonce 278 00:11:22,430 --> 00:11:26,340 dva týdny, když jsme udělali věci, jako je binární vyhledávání, nebo dokonce lineární vyhledávání, 279 00:11:26,340 --> 00:11:30,690 jedna z pěkné věci o každé slovo v databázi nebo každé slovo ve sloupci 280 00:11:30,690 --> 00:11:33,690 je přesně stejnou délku, a to i v případě, že celá řada těchto znaků 281 00:11:33,690 --> 00:11:37,390 jsou prázdné, je, že můžete použít s přímým přístupem na vaše data, ne? 282 00:11:37,390 --> 00:11:40,310 >> Pokud víte, že každý Slovo je 16 znaků pryč, 283 00:11:40,310 --> 00:11:46,460 můžete použít ukazatel aritmetiku, tak aby mluvit, a jít k nám 16, 32, 48, 64, 284 00:11:46,460 --> 00:11:49,589 a vy můžete jen skok okamžitě pomocí aritmetiku 285 00:11:49,589 --> 00:11:51,130 na některou ze slov v databázi. 286 00:11:51,130 --> 00:11:54,280 Vzhledem k tomu, jestli je to VARCHAR, co si místo toho musíte udělat? 287 00:11:54,280 --> 00:11:55,960 >> [Telefon vyzvání] 288 00:11:55,960 --> 00:11:58,680 >> Pokud se jedná o VARCHAR, vy nelze použít náhodný přístup. 289 00:11:58,680 --> 00:12:01,341 Co budete muset hledat nebo dělat? 290 00:12:01,341 --> 00:12:01,840 To jo? 291 00:12:01,840 --> 00:12:03,240 >> Diváků: [Neslyšitelné] 292 00:12:03,240 --> 00:12:04,310 >> DAVID Malan: Podívejte se přes whole-- stopy 293 00:12:04,310 --> 00:12:06,518 celý seznam hledá na co, s největší pravděpodobností? 294 00:12:06,518 --> 00:12:08,356 Jaké zvláštní hodnoty? 295 00:12:08,356 --> 00:12:09,230 Diváků: [Neslyšitelné] 296 00:12:09,230 --> 00:12:11,105 DAVID Malan: Hledám pro null terminátorů 297 00:12:11,105 --> 00:12:13,637 které vymezují oddělení slov. 298 00:12:13,637 --> 00:12:15,720 Takže znovu, kompromis, a neexistuje správná odpověď. 299 00:12:15,720 --> 00:12:18,380 Ale to je místo, kde, zvláště když vaši uživatelé si, že je mnoho 300 00:12:18,380 --> 00:12:21,700 a váš náklad na svých serverů, Počet lidí, kteří používají to bude vysoká, 301 00:12:21,700 --> 00:12:23,650 jedná se vlastně netriviální rozhodnutí. 302 00:12:23,650 --> 00:12:26,640 Takže, můžeme nechat tyto jako to, ale pojďme přejděte dolů přes doprava 303 00:12:26,640 --> 00:12:27,332 sem. 304 00:12:27,332 --> 00:12:30,290 Nyní, tam je několik sloupců kde musíme udělat úsudek volání. 305 00:12:30,290 --> 00:12:35,170 Má smysl povolit uživatele jméno, uživatelské jméno uživatele, nebo uživatele 306 00:12:35,170 --> 00:12:36,370 jméno, být null? 307 00:12:36,370 --> 00:12:37,610 To znamená, že jen prázdný. 308 00:12:37,610 --> 00:12:40,360 Pocit trochu nesmyslné, takže jsem nebude kontrolovat těchto boxů. 309 00:12:40,360 --> 00:12:42,670 Ale ukazuje se, v databázi, můžete říci, 310 00:12:42,670 --> 00:12:44,620 někdo může volitelně mít tuto hodnotu. 311 00:12:44,620 --> 00:12:47,180 Tento sloupec nemá k vlastně být tam. 312 00:12:47,180 --> 00:12:48,570 >> Nyní, tam je to rozbalovacího menu. 313 00:12:48,570 --> 00:12:50,810 A všimněte si, že jsem pořád tam první řadě, 314 00:12:50,810 --> 00:12:52,520 takže Mluvím o uživatelské jméno teď. 315 00:12:52,520 --> 00:12:56,290 A ukázalo se, že v databázi, na rozdíl od jednoduchého pouhé tabulky, 316 00:12:56,290 --> 00:12:58,520 má výkonné funkce zvané indexy. 317 00:12:58,520 --> 00:13:02,600 A index je způsob vyprávění Databáze předem, že já, lidského 318 00:13:02,600 --> 00:13:03,900 jsem chytřejší než ty. 319 00:13:03,900 --> 00:13:10,430 >> Vím, jaké druhy dotazů, vyberte nebo vložit nebo odstranit, nebo aktualizovat, 320 00:13:10,430 --> 00:13:13,182 že můj kód skončí up dělá v této databázi. 321 00:13:13,182 --> 00:13:14,390 Chci si přečíst velké množství dat. 322 00:13:14,390 --> 00:13:15,681 Chci vložit velké množství dat. 323 00:13:15,681 --> 00:13:17,530 Chci se neustále odstranit velké množství dat. 324 00:13:17,530 --> 00:13:21,520 Pokud já vím, že já budu přístup pole jako uživatelské jméno a hodně, 325 00:13:21,520 --> 00:13:24,770 Můžu říct, preventivně databáze, vím víc než vy, 326 00:13:24,770 --> 00:13:29,220 a já chci, aby vyhlášky měli byste index toto pole. 327 00:13:29,220 --> 00:13:33,200 V případě, indexování pole nebo sloupce znamená, že databáze předem 328 00:13:33,200 --> 00:13:37,040 by měla půjčit nějaké nápady z, stejně jako, čtyři týden a pět a šest z CS50 329 00:13:37,040 --> 00:13:39,240 a vlastně vybudovat něco jako binární vyhledávání 330 00:13:39,240 --> 00:13:41,560 strom nebo něco obecně nazývá B strom 331 00:13:41,560 --> 00:13:43,410 že byste se naučit, ve třídě, jako CS124 332 00:13:43,410 --> 00:13:46,710 na Harvardu je třída algoritmy, nebo libovolný počet dalších místech. 333 00:13:46,710 --> 00:13:49,570 >> Databáze a inteligentní Lidé, kteří ji realizované 334 00:13:49,570 --> 00:13:53,880 se přijít na to, jak uložit že tabulka informací 335 00:13:53,880 --> 00:13:57,061 v paměti tak, že vyhledávání a ostatní operace jsou velmi rychlé. 336 00:13:57,061 --> 00:13:58,060 Nemusíte to dělat. 337 00:13:58,060 --> 00:14:00,640 Nemusíte realizovat lineární vyhledávání nebo binární vyhledávání 338 00:14:00,640 --> 00:14:03,300 nebo sloučit druh nebo výběr druh, nic z toho. 339 00:14:03,300 --> 00:14:06,590 Databáze to udělá za vás, pokud řeknete to preventivně index toto pole. 340 00:14:06,590 --> 00:14:09,100 >> A můžete vidět taky, je tu některé jiné charakteristiky 341 00:14:09,100 --> 00:14:11,010 můžeme říci, databáze prosadit. 342 00:14:11,010 --> 00:14:16,431 Co by mohlo to znamená, když vybrat Unique z tohoto menu, jen intuitivně? 343 00:14:16,431 --> 00:14:16,930 To jo? 344 00:14:16,930 --> 00:14:17,889 >> Diváků: [Neslyšitelné] 345 00:14:17,889 --> 00:14:19,930 DAVID Malan: Jo, ten uživatelské jméno musí být unikátní. 346 00:14:19,930 --> 00:14:23,330 Je to dobrá věc, nebo špatná věc pro databáze, pro webové stránky s uživateli? 347 00:14:23,330 --> 00:14:24,965 Měl by být unikátní uživatelská jména? 348 00:14:24,965 --> 00:14:25,880 Jo, pravděpodobně. 349 00:14:25,880 --> 00:14:27,800 Pokud to je to, co pole používáme k přihlášení, 350 00:14:27,800 --> 00:14:31,867 nemáte opravdu chcete lidí, kteří mají stejný pocit nebo stejné uživatelské jméno. 351 00:14:31,867 --> 00:14:33,700 Takže můžeme mít Databáze prosadit, že tak 352 00:14:33,700 --> 00:14:37,880 že nyní v mém PHP kódu nebo jakéhokoli jazyka, Já nemusím, například, zkontrolujte 353 00:14:37,880 --> 00:14:41,490 nutně dělá toto uživatelské jméno existovat předtím, než jsem nechat někoho registrovat? 354 00:14:41,490 --> 00:14:46,690 Databáze nenechá dva lidé s názvem David nebo Malans registrovat v tomto případě. 355 00:14:46,690 --> 00:14:50,030 >> A jako stranou, ačkoli toto Menu pouze umožňuje vybrat jeden, 356 00:14:50,030 --> 00:14:54,550 jedinečný index je ten, který je indexovány za super rychlý výkon, 357 00:14:54,550 --> 00:14:56,100 ale také vynucuje jedinečnost. 358 00:14:56,100 --> 00:14:58,850 A vrátíme se na to, co Další dva na mysli jen na chvíli. 359 00:14:58,850 --> 00:15:00,930 Mezitím, když půjdu do Můj druhý řádek, který 360 00:15:00,930 --> 00:15:06,230 je uživatelské jméno, měl bych upřesnit že název by měl být jedinečný? 361 00:15:06,230 --> 00:15:09,550 Ne, protože byste mohli určitě have-- není dvěma David 362 00:15:09,550 --> 00:15:11,050 Malans v této místnosti, s největší pravděpodobností. 363 00:15:11,050 --> 00:15:14,290 Ale pokud se zvolit jiný název, bychom mohli jistě mít kolize. 364 00:15:14,290 --> 00:15:16,130 >> Vzpomeňte si na hash tabulky a podobně. 365 00:15:16,130 --> 00:15:18,604 Takže jsme určitě nechceme aby se název pole jedinečný. 366 00:15:18,604 --> 00:15:21,270 Takže, jsme jen tak odejít že jako pomlčka, pomlčka, pomlčka, nic. 367 00:15:21,270 --> 00:15:22,660 A já neodejdu všechno ostatní sám. 368 00:15:22,660 --> 00:15:25,035 Ve skutečnosti většina z těchto polí nebudeme muset starat o. 369 00:15:25,035 --> 00:15:27,830 A když jsem připraven zachránit to, v případě, že internet spolupracuje, 370 00:15:27,830 --> 00:15:35,032 I klepněte na tlačítko Uložit, a velmi, velmi, velmi Pomalu se databáze spasen. 371 00:15:35,032 --> 00:15:37,240 A teď jsem zpátky k tomu rozhraní, které sice, 372 00:15:37,240 --> 00:15:38,680 je ohromující na první pohled. 373 00:15:38,680 --> 00:15:42,450 Ale všechno, co budu dělat, je kliknout na slovo Uživatelé vlevo nahoře. 374 00:15:42,450 --> 00:15:47,630 Chystám se jít sem, klikněte na tlačítko Uživatelé, a ve výchozím nastavení, je 375 00:15:47,630 --> 00:15:50,180 popravil nějakou SQL, ale více o tom za chvíli. 376 00:15:50,180 --> 00:15:52,654 Zde je jen souhrn toho, co jsem udělal. 377 00:15:52,654 --> 00:15:55,320 A ne se bát, že vidíte zmínit latiny a švédštině zde. 378 00:15:55,320 --> 00:16:00,490 To jsou jen výchozí nastavení, protože MySQL původně, 379 00:16:00,490 --> 00:16:04,000 nebo PHP MyAdmin, jeden z nich se stalo být napsán některými švédskými lidí. 380 00:16:04,000 --> 00:16:06,100 Ale je to irelevantní, v našem případě zde. 381 00:16:06,100 --> 00:16:08,280 >> Dobře, tak proč je to zajímavé? 382 00:16:08,280 --> 00:16:13,050 Ukázalo se, že mohu vložit data do databáze od psaní kódu. 383 00:16:13,050 --> 00:16:15,940 A já jsem do toho pusťte a v mém souboru tady, já jsem 384 00:16:15,940 --> 00:16:19,000 jít dál a předstírat, toto je zapojen do této databáze, která 385 00:16:19,000 --> 00:16:23,040 to není v tuto chvíli, ale bude být, když se dostaneme do problémů nastavit sedm. 386 00:16:23,040 --> 00:16:25,640 A já jdu dál a vykonávat funkci nazvanou dotaz, 387 00:16:25,640 --> 00:16:28,730 které dáme vás problém nastavit Sedmá distribuce kód, který 388 00:16:28,730 --> 00:16:31,490 trvá nejméně jeden argument, což je jen řetězec. 389 00:16:31,490 --> 00:16:33,460 Řetězec SQL kódu. 390 00:16:33,460 --> 00:16:36,700 Takže, vy jste o tom naučit se napsat Structured Query Language. 391 00:16:36,700 --> 00:16:41,270 >> Chci-li vložit nový řádek do mého Databáze proto, že někdo podal 392 00:16:41,270 --> 00:16:47,600 forma na mém kódu, udělal bych to doslova napsat INSERT INTO uživatelů následující 393 00:16:47,600 --> 00:16:52,800 pole: username, čárka, název, hodnoty, 394 00:16:52,800 --> 00:16:57,480 a teď musím vložit něco jako Malan a citací, 395 00:16:57,480 --> 00:17:01,490 konec citátu "David Malan." A nyní a to i pro ty neobeznámený s SQL, 396 00:17:01,490 --> 00:17:07,830 proč jsem s použitím jednoduchých uvozovek uvnitř této zelené řetězce? 397 00:17:07,830 --> 00:17:10,790 398 00:17:10,790 --> 00:17:13,040 Co se tady může být důvod? 399 00:17:13,040 --> 00:17:14,609 >> Všimněte si, že jsem co-mísit dva jazyky. 400 00:17:14,609 --> 00:17:18,099 Dotaz je funkce PHP, ale to trvá argument. 401 00:17:18,099 --> 00:17:21,740 A že tento argument musí být samo o sobě napsaný v jiném jazyce zvaném 402 00:17:21,740 --> 00:17:23,500 SQL, Structured Query Language. 403 00:17:23,500 --> 00:17:27,940 Takže všechno, co jsem se tu právě zvýrazněny 404 00:17:27,940 --> 00:17:30,380 je tento jazyk nazývá SQL. 405 00:17:30,380 --> 00:17:36,290 Takže, co je s jednoduchých uvozovkách, stejně jako rychlou kontrolu sanitačního? 406 00:17:36,290 --> 00:17:37,324 Pokračuj. 407 00:17:37,324 --> 00:17:37,990 Jsou řetězce. 408 00:17:37,990 --> 00:17:41,590 Takže, cituji, konec citátu Malan a citovat, konec citátu David Malan jsou řetězce. 409 00:17:41,590 --> 00:17:45,210 A jen přemýšlet intuitivně teď, věděl, co víte o C a PHP, 410 00:17:45,210 --> 00:17:50,220 Proč jsem to neudělal, což jsem většinou ojeté uvozovky pro smyčce? 411 00:17:50,220 --> 00:17:52,310 Proč jsem nechtěl dělat, že? 412 00:17:52,310 --> 00:17:52,810 To jo? 413 00:17:52,810 --> 00:17:53,685 >> Diváků: [Neslyšitelné] 414 00:17:53,685 --> 00:17:56,695 415 00:17:56,695 --> 00:17:57,570 DAVID Malan: Přesně tak. 416 00:17:57,570 --> 00:17:59,653 Protože už jsem s použitím dvojité uvozovky na cestě 417 00:17:59,653 --> 00:18:01,929 mimo argumentu do funkce PHP, 418 00:18:01,929 --> 00:18:03,470 Jen bych zmást tlumočníka. 419 00:18:03,470 --> 00:18:04,860 Nebude vědět, že to jde dohromady? 420 00:18:04,860 --> 00:18:05,735 Nikdy to jde dohromady? 421 00:18:05,735 --> 00:18:06,810 Nikdy to jde dohromady? 422 00:18:06,810 --> 00:18:08,070 Tak jsem střídat místo. 423 00:18:08,070 --> 00:18:11,784 >> Nebo bych mohl udělat něco takového, zpětné lomítko citát nebo zpětné lomítko citát. 424 00:18:11,784 --> 00:18:14,200 Upřímně řečeno, že právě začíná dostat velmi nečitelné a ošklivé. 425 00:18:14,200 --> 00:18:16,790 Ale to by dosáhl stejného výsledku stejně. 426 00:18:16,790 --> 00:18:19,760 >> Takže, kdybych spustit tento dotaz teď, pojďme se podívat, co se stane. 427 00:18:19,760 --> 00:18:22,740 Chystám se jít dopředu a hned spíše než spustit PHP kód, který 428 00:18:22,740 --> 00:18:24,610 je místo, kde budete hrát v problému set sedm, 429 00:18:24,610 --> 00:18:27,200 Chystám se místo toho jít do PHP MyAdmin. 430 00:18:27,200 --> 00:18:29,770 A já jsem se ručně jít na kartu SQL, 431 00:18:29,770 --> 00:18:31,580 a dovolte mi, abych přiblížit na rozhraní. 432 00:18:31,580 --> 00:18:34,007 A já vložit do ta věc jsem napsal. 433 00:18:34,007 --> 00:18:36,090 A barevné kódování má změnil trochu teď, 434 00:18:36,090 --> 00:18:38,750 jen proto, že programové formáty věci trochu jinak. 435 00:18:38,750 --> 00:18:41,960 Ale všimněte si, že všechno, co jsem udělal je, že jsem řekl, vložte do uživatele. 436 00:18:41,960 --> 00:18:45,790 Já jsem je uvedeno, pak v čárkou oddělený závorkách seznam dva 437 00:18:45,790 --> 00:18:48,850 Pole, které chci vložit, a Pak jsem se doslova řekl hodnoty 438 00:18:48,850 --> 00:18:51,510 následovala další závorka, a pak se tyto dvě hodnoty 439 00:18:51,510 --> 00:18:53,520 Chci, aby plug-in, a Nyní na správnou míru, 440 00:18:53,520 --> 00:18:55,010 Dám středník na konci. 441 00:18:55,010 --> 00:18:56,570 Tak, to není C. To není PHP. 442 00:18:56,570 --> 00:18:59,970 To je nyní SQL, a já jsem ho vložit do tohoto webového rozhraní, která je 443 00:18:59,970 --> 00:19:02,710 Jen mě nech, jakmile jsem na tlačítko Přejít, 444 00:19:02,710 --> 00:19:08,060 provedení tohoto dotazu v databázi běžící uvnitř CS50 IDE. 445 00:19:08,060 --> 00:19:09,470 >> Tak to je dobré. 446 00:19:09,470 --> 00:19:12,520 Všimněte si, že řekl jeden řádek vloženo, šel super rychlý, 447 00:19:12,520 --> 00:19:15,190 0,0054 sekund vložit tato data. 448 00:19:15,190 --> 00:19:16,610 Tak, to zní docela zdravé. 449 00:19:16,610 --> 00:19:19,350 To reformatted můj dotaz pro mě tu jen proto, aby to vidět 450 00:19:19,350 --> 00:19:21,730 v jakési barevné kódované verze. 451 00:19:21,730 --> 00:19:24,540 Ale teď, když kliknu Procházet, Všimněte si, že i 452 00:19:24,540 --> 00:19:29,070 i když je tu spousta nepořádku na obrazovka, můj stůl má nyní dva řádky. 453 00:19:29,070 --> 00:19:30,700 >> Takže, nech mě jít dál a dělat jinou. 454 00:19:30,700 --> 00:19:33,760 Místo toho, dovolte mi, abych přejděte na záložku SQL znovu. 455 00:19:33,760 --> 00:19:40,723 A tentokrát budu vložit něco jako Rob a jeho jméno bude Rob Bowden. 456 00:19:40,723 --> 00:19:42,330 Bowden. 457 00:19:42,330 --> 00:19:44,040 Pojďme na tlačítko Uložit. 458 00:19:44,040 --> 00:19:46,140 Jejda, spíše Go. 459 00:19:46,140 --> 00:19:48,890 >> Znovu klepněte na tlačítko Procházet a Všimněte si, teď mám dva řádky. 460 00:19:48,890 --> 00:19:52,390 Takže, je to jen způsob, jak složitější způsob otevírání Google Spreadsheets 461 00:19:52,390 --> 00:19:54,010 a jen psát řádek do sloupce. 462 00:19:54,010 --> 00:19:57,070 Ale co je klíč je, že máme nyní syntaxe 463 00:19:57,070 --> 00:20:00,220 s níž psát kód tak, aby nakonec, mohli jsme vlastně 464 00:20:00,220 --> 00:20:01,790 udělat nějaké to a. 465 00:20:01,790 --> 00:20:05,380 Připomeňme si, že PHP podporuje Super globální proměnné. 466 00:20:05,380 --> 00:20:08,415 >> To, co je uvnitř dolaru přihlásit podtržení GET v PHP? 467 00:20:08,415 --> 00:20:10,290 Vzali jsme se podívat na jeden nebo dva jednoduché příklady. 468 00:20:10,290 --> 00:20:15,640 A v PSet6, vzpomínám máte ahoj dot PHP, který používá tuto proměnnou. 469 00:20:15,640 --> 00:20:17,870 Co se děje tam? 470 00:20:17,870 --> 00:20:21,015 Nebo co je to? 471 00:20:21,015 --> 00:20:22,522 Trochu hlasitěji. 472 00:20:22,522 --> 00:20:23,790 >> Diváků: [Neslyšitelné] 473 00:20:23,790 --> 00:20:25,030 >> DAVID Malan: Je to sníh semeno z pole, což 474 00:20:25,030 --> 00:20:27,714 je jen fantazie způsob, jak říkat matice, která má klíče a hodnoty. 475 00:20:27,714 --> 00:20:28,880 A klíče nejsou číselné. 476 00:20:28,880 --> 00:20:30,420 Jsou to slova nebo řetězce. 477 00:20:30,420 --> 00:20:32,750 A konkrétně, co jsou ty páry klíč hodnota? 478 00:20:32,750 --> 00:20:35,110 Odkud pochází? 479 00:20:35,110 --> 00:20:35,620 Litovat? 480 00:20:35,620 --> 00:20:36,994 >> Diváků: [Neslyšitelné] 481 00:20:36,994 --> 00:20:37,660 DAVID Malan: Ne? 482 00:20:37,660 --> 00:20:40,700 Kam ty klíče párů hodnota pochází? 483 00:20:40,700 --> 00:20:42,490 Opakujte? 484 00:20:42,490 --> 00:20:44,610 Už zase? 485 00:20:44,610 --> 00:20:46,472 Jsem jediný, kdo něco sluch? 486 00:20:46,472 --> 00:20:47,810 >> [SMÍCH] 487 00:20:47,810 --> 00:20:49,042 >> To je v pořádku, ano? 488 00:20:49,042 --> 00:20:50,435 >> Diváků: [Neslyšitelné] 489 00:20:50,435 --> 00:20:52,560 DAVID Malan: Jo, pocházejí z řetězce dotazu. 490 00:20:52,560 --> 00:20:55,380 Takže, pokud jste vzad v čase když jsme hráli s pomocí Google 491 00:20:55,380 --> 00:20:59,600 a my jsme šli do Google.com lomítko Hledání otazník q rovná kočky, 492 00:20:59,600 --> 00:21:03,550 kdybych stiskněte klávesu Enter, a pokud Google byly realizovány v PHP, 493 00:21:03,550 --> 00:21:07,017 PHP kód, který Google napsal by měla přístup k dolaru 494 00:21:07,017 --> 00:21:11,600 podtrhnout dovnitř, z nichž je klíčovým nazývá Q a hodnota 495 00:21:11,600 --> 00:21:17,680 tzv kočky, které to může pak použít dělával aktuální vyhledávání s. 496 00:21:17,680 --> 00:21:20,860 >> Takže ve skutečnosti to, co budu udělat, je jít zpátky do svého PHP kód 497 00:21:20,860 --> 00:21:23,140 že budete zase vidět víc v PSet7. 498 00:21:23,140 --> 00:21:25,440 A místo ucpávání v tvrdých kódovaných hodnoty, které 499 00:21:25,440 --> 00:21:27,630 nezdá se jako velmi dynamický web, 500 00:21:27,630 --> 00:21:30,680 Chystám se vám ukázku z co váš skutečný kód bude dělat. 501 00:21:30,680 --> 00:21:32,854 Ty by se dal ve dvou otazníky takhle. 502 00:21:32,854 --> 00:21:34,270 Já nevím, co je uživatelské jméno. 503 00:21:34,270 --> 00:21:37,390 Já nevím, co se Název bude, 504 00:21:37,390 --> 00:21:39,470 ale já vím, že můžu si je dynamicky. 505 00:21:39,470 --> 00:21:43,420 >> Takže, pokud kód jsme teď Psaní je kód běží na serverech Google, 506 00:21:43,420 --> 00:21:46,940 nebo je-li to ahoj tečka PHP, který je dodáván s PSet6, 507 00:21:46,940 --> 00:21:48,650 Chystám se projít do Funkce dotaz 508 00:21:48,650 --> 00:21:51,450 stejně jako printf, dva další argumenty. 509 00:21:51,450 --> 00:21:57,120 GET, cituji, konec citátu uživatelské jméno, a GET, cituji, konec citátu jméno. 510 00:21:57,120 --> 00:22:00,720 A teď, co si všimnete obecná struktura je tady. 511 00:22:00,720 --> 00:22:03,320 Mám na levé straně straně hovoru, 512 00:22:03,320 --> 00:22:05,480 Tato funkce s názvem dotazu v PHP. 513 00:22:05,480 --> 00:22:08,160 Stále mám jako první Argument, jen řetězec textu. 514 00:22:08,160 --> 00:22:11,000 >> Ale to řetězec textu napsaný v jazyce s názvem SQL. 515 00:22:11,000 --> 00:22:12,616 A upřímně řečeno, není to velký jazyk. 516 00:22:12,616 --> 00:22:14,990 Jsme jen mluvit o formálně dnes, opravdu. 517 00:22:14,990 --> 00:22:17,031 A pak se v problému set sedm, tam je poměrně 518 00:22:17,031 --> 00:22:18,800 Několik funkcí, které jsme jít využít. 519 00:22:18,800 --> 00:22:22,530 Otazníky však znamenat zapojte je hodnota, tady a plug-in jinou hodnotu 520 00:22:22,530 --> 00:22:23,130 sem. 521 00:22:23,130 --> 00:22:26,010 A upozornění, já jsem vynechal, co z celého quote-- zatraceně 522 00:22:26,010 --> 00:22:30,470 to-- kolem citaci označí tentokrát. 523 00:22:30,470 --> 00:22:34,930 Já jsem vynechal citát značky kolem otazník, 524 00:22:34,930 --> 00:22:36,410 Omlouvám se, tentokrát. 525 00:22:36,410 --> 00:22:38,870 >> Takže, co je hezké o tom Otázka funkce ochranná známka, která 526 00:22:38,870 --> 00:22:42,830 PHP má tendenci podporovat, Ruby a Python a jiné jazyky, 527 00:22:42,830 --> 00:22:45,730 to jen znamená, že konektor v některých Hodnota zde a víte, co? 528 00:22:45,730 --> 00:22:48,300 Můžete přijít na to, zda se má používat jednoduché uvozovky nebo dvojité uvozovky. 529 00:22:48,300 --> 00:22:50,966 Neobtěžujte mě s těmi, intelektuálně nezajímavé detaily. 530 00:22:50,966 --> 00:22:53,780 Ale ujistěte se, že je správné takže můj kód je nakonec 531 00:22:53,780 --> 00:22:57,010 funkční a bezpečné, což bude mít význam zanedlouho. 532 00:22:57,010 --> 00:23:00,460 >> A teď, kolik celkem argumenty, jen proto, aby být jasné, je dotaz funkce přijímání? 533 00:23:00,460 --> 00:23:05,240 534 00:23:05,240 --> 00:23:07,581 Každý, kdo chtějí hlasovat pro více než dva? 535 00:23:07,581 --> 00:23:08,080 Tři? 536 00:23:08,080 --> 00:23:10,001 Jistě, proč? 537 00:23:10,001 --> 00:23:10,920 Proč tři? 538 00:23:10,920 --> 00:23:12,305 >> Diváků: [Neslyšitelné] 539 00:23:12,305 --> 00:23:13,180 DAVID Malan: Přesně tak. 540 00:23:13,180 --> 00:23:14,610 První část je řetězec. 541 00:23:14,610 --> 00:23:18,640 Druhý argument je znak dolaru podtrhnout GET držáku uživatelské jméno. 542 00:23:18,640 --> 00:23:21,950 A třetí argument je to samé, ale jen jméno. 543 00:23:21,950 --> 00:23:24,590 Takže jinými slovy, nyní kdybych měl webový formulář 544 00:23:24,590 --> 00:23:27,149 že musel textových polí, jeden pro uživatelské jméno uživatele, 545 00:23:27,149 --> 00:23:29,690 jeden pro jeho nebo její jméno, jen jako byste vidět na internetových stránkách 546 00:23:29,690 --> 00:23:32,120 při registraci některé webové stránky, může to 547 00:23:32,120 --> 00:23:35,450 bude kód na zadním konci, který vlastně dělá vložení nyní 548 00:23:35,450 --> 00:23:37,220 do databáze. 549 00:23:37,220 --> 00:23:40,870 >> Nyní naopak, pojďme rychle dopředu. 550 00:23:40,870 --> 00:23:43,840 Předpokládejme, že uživatel je nyní přihlášení a chcete 551 00:23:43,840 --> 00:23:48,860 psát PHP kód, který kontroluje, zda osoba, která je právě přihlášen 552 00:23:48,860 --> 00:23:52,250 je vlastně uživatel, můžete používat docela jednoduchou syntaxi. 553 00:23:52,250 --> 00:23:55,832 Můžete říci SELECT, řekněme Star, kde hvězda znamená všechno. 554 00:23:55,832 --> 00:23:57,540 Nevím, co mám chceš, tak dej mi 555 00:23:57,540 --> 00:24:01,585 všechny sloupce z tabulky volal uživatelé kde, a to je pěkné. 556 00:24:01,585 --> 00:24:03,710 Zvolte podporuje to, co je volal predikát, který je 557 00:24:03,710 --> 00:24:06,630 jako způsob, jak kvalifikaci, co chcete. 558 00:24:06,630 --> 00:24:10,590 Tam, kde uživatelské jméno odpovídá citát, konec citátu Malan. 559 00:24:10,590 --> 00:24:13,680 Takže i zde, jsem vložený uvnitř argumentu 560 00:24:13,680 --> 00:24:16,110 na funkci PHP, řádku kódu SQL. 561 00:24:16,110 --> 00:24:18,680 A že tento kód SQL čas je doslova děje 562 00:24:18,680 --> 00:24:21,790 hledat citaci, konec citátu Malan. 563 00:24:21,790 --> 00:24:24,420 >> Teď to není všechno, že užitečné, takže budu přeskočit, že 564 00:24:24,420 --> 00:24:28,650 a já hodlám dát pryč Tento tip od Brady, a jít 565 00:24:28,650 --> 00:24:30,990 a místo toho plug-in otazník zde. 566 00:24:30,990 --> 00:24:33,290 Takže, jen aby bylo jasno, co by můj druhý argument, 567 00:24:33,290 --> 00:24:37,480 bude-li někdo právě přihlášen a I chcete zkontrolovat, zda on nebo ona je ve skutečnosti 568 00:24:37,480 --> 00:24:39,265 uživatel? 569 00:24:39,265 --> 00:24:40,140 Diváků: [Neslyšitelné] 570 00:24:40,140 --> 00:24:40,890 DAVID Malan: Jo. 571 00:24:40,890 --> 00:24:44,120 Slyšel jsem, že znak dolaru podtržení Si nabidku, konec citátu uživatelské jméno. 572 00:24:44,120 --> 00:24:50,040 A to by měl vrátit ke mně některý z řádků ve své databázi 573 00:24:50,040 --> 00:24:51,986 které mají uživatelské jméno Malan. 574 00:24:51,986 --> 00:24:54,860 Nyní doufejme, budu se dostat zpět nula, pokud Malan je tady nikdy nebyl, 575 00:24:54,860 --> 00:24:56,290 nebo jeden když má. 576 00:24:56,290 --> 00:24:59,026 Neměla bych se vrátit dva nebo tři nebo čtyři. 577 00:24:59,026 --> 00:24:59,526 Proč? 578 00:24:59,526 --> 00:25:00,220 >> Diváků: [Neslyšitelné] 579 00:25:00,220 --> 00:25:01,120 >> DAVID Malan: Řekl jsem unikátní, že jo? 580 00:25:01,120 --> 00:25:01,750 Jednoduchý důvod. 581 00:25:01,750 --> 00:25:04,030 Protože jsem řekl, že to musí být jedinečný, právě logicky, 582 00:25:04,030 --> 00:25:07,940 můžete mít pouze žádný nebo jeden Malans v tomto konkrétním tabulce databáze. 583 00:25:07,940 --> 00:25:10,965 Nyní jako stranou, jen aby jste viděli to, i když jsem stále používat GET 584 00:25:10,965 --> 00:25:14,350 a přestože používá pouze PSet6 GET, můžete samozřejmě mít POST. 585 00:25:14,350 --> 00:25:17,212 A připomínají, že příspěvek je jiný technika pro předávání informací 586 00:25:17,212 --> 00:25:19,170 z formuláře, ale nezobrazuje v URL. 587 00:25:19,170 --> 00:25:22,690 Je to trochu bezpečnější jistě pro věci jako uživatelská jména a hesla, 588 00:25:22,690 --> 00:25:25,210 které PSet7 bude ve skutečnosti, zahrnují. 589 00:25:25,210 --> 00:25:28,130 >> Takže, pojďme to udělat v PHP MyAdmin a uvidíme, co se stane. 590 00:25:28,130 --> 00:25:30,020 Chystám se jít na záložku MySQL. 591 00:25:30,020 --> 00:25:34,450 A všimněte si, že výchozí hodnotu pro PHP MyAdmin, jen aby se snaží být užitečný, 592 00:25:34,450 --> 00:25:37,050 je vybrat hvězdičku od uživatelů, kde jedna. 593 00:25:37,050 --> 00:25:39,430 No, jeden je vždy pravdivý, tak To má hloupé efektivní 594 00:25:39,430 --> 00:25:40,400 ze jen vybrat všechno. 595 00:25:40,400 --> 00:25:42,691 Ale já budu trochu více pedantský a ručně 596 00:25:42,691 --> 00:25:45,920 zadejte out SELECT hvězdu od uživatelů. 597 00:25:45,920 --> 00:25:48,294 >> Teď technicky, můžete citovat jména tabulek. 598 00:25:48,294 --> 00:25:50,460 Je to vzácné, že je to nutné, nevšimnout tyto nejsou 599 00:25:50,460 --> 00:25:52,240 Vaše normální citáty na klávesnici USA. 600 00:25:52,240 --> 00:25:54,760 Jedná se o tzv backtick, který je obvykle na horní levé ruce 601 00:25:54,760 --> 00:25:56,000 rohu klávesnice. 602 00:25:56,000 --> 00:25:58,500 Ale to je vzácné, že budete skutečně potřebují obtěžovat s tím, 603 00:25:58,500 --> 00:25:59,950 tak jsem si jen vynechat je tak jako tak. 604 00:25:59,950 --> 00:26:02,280 Takže teď, nech mě jít napřed a hit jít. 605 00:26:02,280 --> 00:26:06,616 A kolik řádků bych měl dostat zpět, když jsem se vybrat hvězdičku od uživatelů? 606 00:26:06,616 --> 00:26:08,407 >> Diváků: [Neslyšitelné] 607 00:26:08,407 --> 00:26:09,990 DAVID Malan: počet řádků, jistě. 608 00:26:09,990 --> 00:26:12,390 Ale kolik v tomto beton příběh právě teď? 609 00:26:12,390 --> 00:26:14,640 Za druhé, protože tam byl já a tam byl Rob. 610 00:26:14,640 --> 00:26:19,370 Takže, když jsem klepněte na tlačítko Přejít, vidím, že vizuálně Jsem se dostal zpátky, opravdu, dva řádky. 611 00:26:19,370 --> 00:26:22,060 Je tu spousta nepořádku na obrazovka, ale vidím jen dvě řádky. 612 00:26:22,060 --> 00:26:28,580 Naproti tomu, když jsem to znovu a dělat SELECT hvězda od uživatelů, kde jméno_uživatele 613 00:26:28,580 --> 00:26:31,840 rovná citace konec citátu Malan, teď když jsem na tlačítko Přejít, 614 00:26:31,840 --> 00:26:33,970 Já jsem jen se vrátit jeden řádek. 615 00:26:33,970 --> 00:26:36,499 A konečně, když to udělám něco takového, předpokládám 616 00:26:36,499 --> 00:26:38,290 že nemám starat o dostat všechno, 617 00:26:38,290 --> 00:26:41,020 což je tak trochu smysl teď, protože tam je jen dva sloupce. 618 00:26:41,020 --> 00:26:43,103 Není to, jako jsem výběru obrovské množství dat. 619 00:26:43,103 --> 00:26:46,720 Dejme tomu, že jsem se do toho pusťte a se SELECT jméno FROM 620 00:26:46,720 --> 00:26:51,990 Uživatelé, kde username rovná Malan, co je hezké o SQL upřímně, 621 00:26:51,990 --> 00:26:54,290 je, že to opravdu jen dělá co jste to říct dělat. 622 00:26:54,290 --> 00:26:57,550 Je to docela stručně, ale doslova jen říct, že to, co chcete dělat. 623 00:26:57,550 --> 00:27:01,130 Vyberte název od uživatelů případně uživatelské jméno rovná Malan. 624 00:27:01,130 --> 00:27:03,440 A opravdu je to tak jasné. 625 00:27:03,440 --> 00:27:08,410 Tak, teď, když jsem trefil Go, kolik řádky jsem se dostat zpátky? 626 00:27:08,410 --> 00:27:10,770 Za prvé, protože je to jen Malan, doufejme. 627 00:27:10,770 --> 00:27:13,100 Nebo nula v případě, že to není tam, ale maximálně. 628 00:27:13,100 --> 00:27:17,610 >> A kolik sloupců dostanu zpátky? 629 00:27:17,610 --> 00:27:18,450 Kolik sloupců? 630 00:27:18,450 --> 00:27:20,658 Tentokrát, já jsem prostě jít aby si jeden, protože jsem neměl 631 00:27:20,658 --> 00:27:22,380 vyberte hvězdu, což je všechno. 632 00:27:22,380 --> 00:27:27,900 Teď jsem jen vyberete jméno, takže jsem jen dostat zpět jeden sloupec a jeden řádek. 633 00:27:27,900 --> 00:27:31,730 A vypadá to tak nějak vhodně směšné, jen při pohledu výborný 634 00:27:31,730 --> 00:27:33,060 malá takhle. 635 00:27:33,060 --> 00:27:34,290 Takže, co se skutečně děje? 636 00:27:34,290 --> 00:27:36,890 Po spuštění SQL dotaz pomocí select, 637 00:27:36,890 --> 00:27:38,700 co jste se dostal zpět z databáze 638 00:27:38,700 --> 00:27:42,970 je jako dočasné tabulky s řádky a sloupce, možná, 639 00:27:42,970 --> 00:27:46,260 ale že vynechat nic, co by nebyl vlastně zvolen vámi. 640 00:27:46,260 --> 00:27:49,010 Takže, je to jako kdyby někdo měl velký tabulku všech studentů 641 00:27:49,010 --> 00:27:51,610 registrované pro některé Skupina studentů, a vy říkáte, 642 00:27:51,610 --> 00:27:55,097 dej mi všechny nováček, kteří si registrovány pro naši studentská skupina, co 643 00:27:55,097 --> 00:27:56,930 váš kolega v Skupina studentů by mohl dělat 644 00:27:56,930 --> 00:27:58,430 je mohli jen předat jste celý tabulky. 645 00:27:58,430 --> 00:27:59,742 To je jako říkat vyberte hvězdu. 646 00:27:59,742 --> 00:28:02,200 A je to trochu nepříjemné, pokud jste chtěl pouze prváku. 647 00:28:02,200 --> 00:28:05,640 A tak, když se místo toho řekl: vyberte hvězda z databázové tabulky 648 00:28:05,640 --> 00:28:08,470 kde rok rovná citát, konec citátu prvák, 649 00:28:08,470 --> 00:28:10,810 je to jako kdyby váš přítel ve studentské skupiny 650 00:28:10,810 --> 00:28:13,770 doslova zvýrazní a kopírovat pouze prvák řádky, 651 00:28:13,770 --> 00:28:16,780 vložit je do nového Googlu Tabulkový nebo soubor aplikace Excel, 652 00:28:16,780 --> 00:28:18,860 a podal uhodnete Výsledný jediný soubor. 653 00:28:18,860 --> 00:28:21,710 To je vše, co se děje Na koncepčně zde. 654 00:28:21,710 --> 00:28:23,920 >> Takže nakonec, můžeme to udělat některé docela efektní věci 655 00:28:23,920 --> 00:28:26,560 skladováním, jako jsou uživatelská jména věcí a hesla a podobně. 656 00:28:26,560 --> 00:28:30,310 Ale, to dopadá, budeme dělat trochu jinak, než je tato. 657 00:28:30,310 --> 00:28:34,750 To neznamená, že chytré pouze uložit uživatelské jméno a heslo. 658 00:28:34,750 --> 00:28:37,790 Někdo dříve, myslím, tady, navrhl ID. 659 00:28:37,790 --> 00:28:40,787 Nyní ID by mohlo být jako Harvard ID nebo Yaleův Net ID, 660 00:28:40,787 --> 00:28:42,870 ale může to být i jednodušší v naší databázi případě. 661 00:28:42,870 --> 00:28:45,120 A opravdu, běžný případ je mít další sloupec. 662 00:28:45,120 --> 00:28:46,953 A já jdu vpřed a upravit tabulku. 663 00:28:46,953 --> 00:28:49,521 A pokud budete hrát si s toto rozhraní pro PSet7, 664 00:28:49,521 --> 00:28:51,770 uvidíte, že můžete zkontrolovat toto tlačítko tady a přidat 665 00:28:51,770 --> 00:28:53,750 pole na začátku tabulky. 666 00:28:53,750 --> 00:28:56,720 A teď, když jsem klepněte na tlačítko Přejít, bude to aby mi dal jeden z těch forem 667 00:28:56,720 --> 00:28:57,600 z dřívějška. 668 00:28:57,600 --> 00:29:00,170 Chystám se přidat pole s názvem ID. 669 00:29:00,170 --> 00:29:03,070 A já, aby to číselný typ. 670 00:29:03,070 --> 00:29:05,362 >> Mám spoustu hodnot pro numerics. 671 00:29:05,362 --> 00:29:08,677 Já jsem prostě jít vybrat INT a nemusíte starat o různorodých velikostí. 672 00:29:08,677 --> 00:29:10,510 Nemám specifikovat délka nebo hodnotu, 673 00:29:10,510 --> 00:29:13,710 protože to bude 32 bitů bez ohledu na to, co. 674 00:29:13,710 --> 00:29:16,070 Atributy, jsme neviděli předtím. 675 00:29:16,070 --> 00:29:18,410 Veškeré úroky v některé z těchto Možnosti nabídky této době? 676 00:29:18,410 --> 00:29:21,890 677 00:29:21,890 --> 00:29:23,745 Pro INT? 678 00:29:23,745 --> 00:29:24,620 Co navrhujete? 679 00:29:24,620 --> 00:29:27,350 680 00:29:27,350 --> 00:29:28,445 Ne? 681 00:29:28,445 --> 00:29:29,570 Proveďte libovolný z nich smysl? 682 00:29:29,570 --> 00:29:30,536 To jo. 683 00:29:30,536 --> 00:29:31,900 Jo, nepodepsané, že jo? 684 00:29:31,900 --> 00:29:35,930 >> Obecně platí, že pokud budeme dávat všichni jedinečné číslo, které 685 00:29:35,930 --> 00:29:38,200 je místo, kde tento příběh je děje, jsem se opravdu jen chci 686 00:29:38,200 --> 00:29:41,919 osobu mít číslo jako nula a jedna a dvě a tři a čtyři. 687 00:29:41,919 --> 00:29:43,710 Nepotřebuji se zabývat se zápornými čísly. 688 00:29:43,710 --> 00:29:45,210 Prostě to vypadá jako zbytečného složitosti. 689 00:29:45,210 --> 00:29:48,470 Chci čtyři miliardy možných hodnot, ne čtyři miliardy možných hodnot, 690 00:29:48,470 --> 00:29:50,699 tak jsem zdvojnásobil Kapacita mého INT. 691 00:29:50,699 --> 00:29:53,490 Jako stranou, pokud chcete, aby se týkají to něco jako Facebook, 692 00:29:53,490 --> 00:29:56,190 zpět do jakési můj den, kdy Facebook vyšel první, 693 00:29:56,190 --> 00:29:59,510 Věřím, že to, co oni byli použití v jejich databázi MySQL 694 00:29:59,510 --> 00:30:02,856 pro uložení uživatele identifikátor, byl jen INT. 695 00:30:02,856 --> 00:30:05,230 Ale samozřejmě, je tu spousta reálných lidí na světě. 696 00:30:05,230 --> 00:30:07,438 Je tu spousta falešných Facebook účtů ve světě. 697 00:30:07,438 --> 00:30:11,701 A tak nakonec, Facebook přetekl velikost INT, čtyři miliard 698 00:30:11,701 --> 00:30:12,200 hodnotu. 699 00:30:12,200 --> 00:30:15,032 Což je důvod, proč, když se podíváte kolem a je tu webové stránky 700 00:30:15,032 --> 00:30:16,740 který vám poradí, jaké jedinečné identifikační číslo je. 701 00:30:16,740 --> 00:30:19,781 A pokud jste nikdy zvolili uživatelské jméno Facebook, uvidíte jedinečný identifikátor. 702 00:30:19,781 --> 00:30:23,080 Myslím, že je profil tečka PHP otazník ID rovná něco. 703 00:30:23,080 --> 00:30:27,210 To je dnes něco jako velký INT, nebo dlouho dlouho chcete-li, 704 00:30:27,210 --> 00:30:29,700 což je 64-bitová hodnota nebo něco srovnatelné. 705 00:30:29,700 --> 00:30:33,620 >> Takže i v reálném světě se tyto Problémy nakonec někdy nezáleží. 706 00:30:33,620 --> 00:30:37,600 A ukázalo se tady, když jsem dávat všechny mé uživatelům jedinečné ID, 707 00:30:37,600 --> 00:30:41,750 Chci být super explicitní a minimálně, aby toto pole jedinečný. 708 00:30:41,750 --> 00:30:44,750 Ale ukazuje se, je tu ještě jedna kus nomenklatury i dnes 709 00:30:44,750 --> 00:30:46,470 to je primární klíč. 710 00:30:46,470 --> 00:30:49,800 Pokud jste navrhování databáze stůl a předem víte, 711 00:30:49,800 --> 00:30:55,580 že jeden ze sloupců v této tabulce měl a bude jednoznačně identifikují řádky 712 00:30:55,580 --> 00:30:58,500 v tabulce, které chcete zadejte jej a říci databázi, 713 00:30:58,500 --> 00:31:00,250 toto je můj primární klíč. 714 00:31:00,250 --> 00:31:02,110 Tam by mohlo být duplikáty v jiných oblastech, 715 00:31:02,110 --> 00:31:06,330 ale já vám říkám, že tato databáze je můj primární, můj nejdůležitější oblastí, 716 00:31:06,330 --> 00:31:08,420 že je zaručena jedinečnost. 717 00:31:08,420 --> 00:31:09,660 >> Teď se to zdá nadbytečný. 718 00:31:09,660 --> 00:31:13,830 Já jsem nyní navrhuje, že bychom přidat, klepnutím na tlačítko Uložit tady, 719 00:31:13,830 --> 00:31:17,210 pole called-- a jdu jít do toho a klikněte na AI, 720 00:31:17,210 --> 00:31:19,720 vrátíme do že ve chvíli, zachránit. 721 00:31:19,720 --> 00:31:22,540 Já jsem teď, že navrhuje můj stůl vypadat takto. 722 00:31:22,540 --> 00:31:26,305 Mám INT pole s názvem ID, CHAR pole s názvem Uživatelské jméno, 723 00:31:26,305 --> 00:31:31,100 VARCHAR pole s názvem Name, ale ID, pokud je to primární a proto jedinečný, 724 00:31:31,100 --> 00:31:33,760 proč jsem jen odpad Doba zavedení co 725 00:31:33,760 --> 00:31:39,140 účinně je druhý jedinečný pole s názvem ID to je INT? 726 00:31:39,140 --> 00:31:41,980 >> Uživatelské jméno, odvolání, byl Již jedinečná, řekli jsme. 727 00:31:41,980 --> 00:31:45,350 Takže jen logicky, nemusíte žádné databázi zkušenosti k rozumu 728 00:31:45,350 --> 00:31:47,570 přes to, proč Možná jsem si představil 729 00:31:47,570 --> 00:31:50,065 INT jako můj jedinečný identifikační kód, stejně? 730 00:31:50,065 --> 00:31:52,740 731 00:31:52,740 --> 00:31:53,930 Co je tohle-- zase říkají? 732 00:31:53,930 --> 00:31:55,580 >> Diváků: [Neslyšitelné] 733 00:31:55,580 --> 00:31:59,534 >> DAVID Malan: Náhodný přístup je jednodušší, proč? 734 00:31:59,534 --> 00:32:00,410 >> Diváků: [Neslyšitelné] 735 00:32:00,410 --> 00:32:02,367 DAVID Malan: Jo, to je Jen přístup čísla. 736 00:32:02,367 --> 00:32:04,750 Takže, pokud si myslíte, že to opravdu je tabulka, jako je pole, 737 00:32:04,750 --> 00:32:07,690 teď mám jedinečné identifikátory že mohu skákat kolem. 738 00:32:07,690 --> 00:32:11,520 A lepší než dosud, je, že jak velký je INT bude znovu? 739 00:32:11,520 --> 00:32:14,450 740 00:32:14,450 --> 00:32:15,800 32 bitů nebo čtyři byty. 741 00:32:15,800 --> 00:32:17,750 >> Jak velká je moje uživatelské jméno bude? 742 00:32:17,750 --> 00:32:20,310 743 00:32:20,310 --> 00:32:21,990 Maximálně? 744 00:32:21,990 --> 00:32:22,880 16 bytů. 745 00:32:22,880 --> 00:32:26,080 >> Takže, pokud jste opravdu starat o výkon vašeho kódu, 746 00:32:26,080 --> 00:32:31,390 Vzpomeňte si na PSet5, dáváte přednost hledat čtyři bajt hodnoty nebo 16 747 00:32:31,390 --> 00:32:32,240 byte hodnota, je to tak? 748 00:32:32,240 --> 00:32:33,810 Je to opravdu tak jednoduché. 749 00:32:33,810 --> 00:32:38,060 Co musíte udělat, čtyřikrát tolik práce vyhledat uživatelská jména, protože ti, 750 00:32:38,060 --> 00:32:38,830 16 bajtů. 751 00:32:38,830 --> 00:32:41,320 Takže, budete muset doslova porovnat všech 16 bajtů být 752 00:32:41,320 --> 00:32:43,140 jisti, že ano, je to uživatelské jméno chci. 753 00:32:43,140 --> 00:32:46,610 Zatímco pro INT, můžete to se jen čtyři byty. 754 00:32:46,610 --> 00:32:49,212 >> A jak stranou pro ty, zájem počítačového hardware, 755 00:32:49,212 --> 00:32:52,420 to dopadá se vejde něco jako INT nebo 32-bitová hodnota v něčem 756 00:32:52,420 --> 00:32:55,330 volal registr v počítači CPU, což znamená, že je super, 757 00:32:55,330 --> 00:32:58,400 super rychlý, i při nejnižších Úroveň hardwaru počítače. 758 00:32:58,400 --> 00:33:00,530 Takže, je tu jen výhody všude kolem. 759 00:33:00,530 --> 00:33:01,530 Takže, co to znamená? 760 00:33:01,530 --> 00:33:04,850 Ve skutečnosti, když jste navrhování databázové tabulky, téměř po celou dobu 761 00:33:04,850 --> 00:33:07,170 budete mít ne pouze data vám záleží, 762 00:33:07,170 --> 00:33:09,280 ale také něco jako jedinečný identifikátor 763 00:33:09,280 --> 00:33:11,280 protože to bude pojďme dělat jiné věci. 764 00:33:11,280 --> 00:33:13,160 A pojďme zakopnout jeden problém zde. 765 00:33:13,160 --> 00:33:15,990 >> Předpokládejme, že uživatelé nemají jen uživatelská jména a názvy, 766 00:33:15,990 --> 00:33:19,540 ale mají také věci jako měst a státy a poštovní směrovací čísla, přinejmenším 767 00:33:19,540 --> 00:33:20,432 tady v USA. 768 00:33:20,432 --> 00:33:22,390 Takže budu pokračovat a jen rychle říct, 769 00:33:22,390 --> 00:33:26,180 dej mi tři více sloupců na konci tabulky. 770 00:33:26,180 --> 00:33:28,900 A to bude City, to bude stát, 771 00:33:28,900 --> 00:33:30,400 a to bude Zip. 772 00:33:30,400 --> 00:33:32,710 >> Nyní město, jaké typy dat by to mělo být, snad? 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 Já nevím, co se Nejdelší název města. 776 00:33:37,780 --> 00:33:40,571 Někde v Americe, tam je pravděpodobně nějaký směšně dlouhé slovo, 777 00:33:40,571 --> 00:33:43,605 takže pojďme prostě jít s 255, poněkud historicky nebo se mohou libovolně. 778 00:33:43,605 --> 00:33:44,730 Stát, co chcete dělat? 779 00:33:44,730 --> 00:33:48,380 780 00:33:48,380 --> 00:33:50,367 Rozsudek volání, že jo? 781 00:33:50,367 --> 00:33:51,700 Co je možná nejúčinnější? 782 00:33:51,700 --> 00:33:53,500 Kolik znaků? 783 00:33:53,500 --> 00:33:55,950 Možná jen dva, pokud můžeme dostat pryč s tím jen, 784 00:33:55,950 --> 00:33:58,250 jako je, MA Massachusetts, a tak dále. 785 00:33:58,250 --> 00:34:00,520 Takže, já jdu char hodnotu dva. 786 00:34:00,520 --> 00:34:03,080 >> PSČ to zajímavý člověk. 787 00:34:03,080 --> 00:34:06,679 Jsme tady na 02138, takže navrhuje, bychom měli používat co? 788 00:34:06,679 --> 00:34:07,470 Je to INT, že jo? 789 00:34:07,470 --> 00:34:10,030 790 00:34:10,030 --> 00:34:12,800 INT, INT, krátké? 791 00:34:12,800 --> 00:34:14,521 Krátká bude fungovat. 792 00:34:14,521 --> 00:34:15,020 Ne? 793 00:34:15,020 --> 00:34:18,920 794 00:34:18,920 --> 00:34:20,870 CHAR nebo pět, ale Chci INT. 795 00:34:20,870 --> 00:34:23,710 Proč zatlačte na INT? 796 00:34:23,710 --> 00:34:26,820 Přesvědčit mě z toho. 797 00:34:26,820 --> 00:34:29,210 Co je to hloupé asi INT, můj nápad? 798 00:34:29,210 --> 00:34:29,871 To jo. 799 00:34:29,871 --> 00:34:31,199 >> Diváků: zabírá v paměti více. 800 00:34:31,199 --> 00:34:32,909 >> DAVID Malan: zabírá v paměti více. 801 00:34:32,909 --> 00:34:35,310 Čtyři bajty, ale ty jsi navrhuje poštovní směrovací číslo 802 00:34:35,310 --> 00:34:39,000 jako pět bajtů, nebo někdo jako Char, který se cítí jako eh, ve skutečnosti to není 803 00:34:39,000 --> 00:34:39,620 pouzdro. 804 00:34:39,620 --> 00:34:40,489 >> No, zábava příběh. 805 00:34:40,489 --> 00:34:43,179 Před lety, když jsem používal Microsoft Outlook na můj e-mail, 806 00:34:43,179 --> 00:34:45,150 Nakonec jsem chtěl přejít ke službě Gmail. 807 00:34:45,150 --> 00:34:48,949 A tak jsem se vyváží všechny mé kontakty z Outlooku jako soubor CSV. 808 00:34:48,949 --> 00:34:50,699 Oddělené čárkou hodnoty, což znamenalo, že jsem právě 809 00:34:50,699 --> 00:34:54,060 měli všichni moji přátelé jména a poslední Jména a telefonní čísla a poštovní směrovací čísla 810 00:34:54,060 --> 00:34:54,747 a všechny, které. 811 00:34:54,747 --> 00:34:56,580 A pak jsem dělal chyba, že se otevře 812 00:34:56,580 --> 00:34:58,640 v Excelu, což je tabulkový program, který 813 00:34:58,640 --> 00:35:00,289 chápe soubory CSV, jak jsme viděli. 814 00:35:00,289 --> 00:35:03,080 Ale pak jsem musel zasáhnout, jako je, Velení a řízení S na jednom místě. 815 00:35:03,080 --> 00:35:06,250 A Excel zřejmě v té době měl funkci, podle nějž se kdykoli to 816 00:35:06,250 --> 00:35:08,100 viděl číslo, to se snažil být užitečný. 817 00:35:08,100 --> 00:35:11,610 A pokud toto číslo začala nuly, to by jen se jich zbavit. 818 00:35:11,610 --> 00:35:13,420 Proč potřebujete vedoucí nuly na celá čísla? 819 00:35:13,420 --> 00:35:15,140 Jsou to nesmyslné, matematicky. 820 00:35:15,140 --> 00:35:17,530 Jsou to nesmyslné v USA poštovní systém. 821 00:35:17,530 --> 00:35:19,954 Takže jsem měl po celá léta, k tomuto dni, pořád 822 00:35:19,954 --> 00:35:22,370 mít přátele, že když vzácný případ, že musím je někdo 823 00:35:22,370 --> 00:35:24,078 řešit v těchto dnech, Budu stále vidět, že já 824 00:35:24,078 --> 00:35:26,767 mít přítele v Cambridge, Massachusetts, 2.138. 825 00:35:26,767 --> 00:35:29,350 A je to nepříjemné, pokud jste se snaží tak nějak programově 826 00:35:29,350 --> 00:35:30,975 generovat obálky nebo jen zapisovat dolů. 827 00:35:30,975 --> 00:35:33,599 A to je z tohoto důvodu, Vybral jsem si špatný typ dat. 828 00:35:33,599 --> 00:35:34,490 Tak jsem rád váš nápad. 829 00:35:34,490 --> 00:35:35,650 Využijme char pole. 830 00:35:35,650 --> 00:35:38,340 Pět znaků, s výjimkou je rohová případ. 831 00:35:38,340 --> 00:35:42,220 Pokud si přesto odesílat poštu, někdy zip kódy v těchto dnech, 832 00:35:42,220 --> 00:35:45,360 jsou, stejně jako plus čtyři. 833 00:35:45,360 --> 00:35:48,200 Takže potřebujeme pomlčku a pak potřebujeme další čtyři čísla. 834 00:35:48,200 --> 00:35:50,330 Takže abych byl upřímný, mohlo by to go mnoha různými způsoby. 835 00:35:50,330 --> 00:35:52,371 >> Pro tuto chvíli, budu držet to jednoduché, a já jsem jen 836 00:35:52,371 --> 00:35:54,780 chtěl říct, že je to Pět CHAR hodnotu a my jsme 837 00:35:54,780 --> 00:35:56,739 chystá přeskočit celou pomlčka a čtyři. 838 00:35:56,739 --> 00:35:58,280 Ale to jsou druhy kompromisy. 839 00:35:58,280 --> 00:36:00,196 A můžete myslet na Stejné problémy plynoucí 840 00:36:00,196 --> 00:36:01,860 s telefonními čísly nebo jiných oblastech. 841 00:36:01,860 --> 00:36:04,350 >> A teď, je to vlastně pošetilé silnice jít dolů. 842 00:36:04,350 --> 00:36:08,000 Předpokládejme, jak Rob a já a Hannah a Maria a [? Davon?] A Andy 843 00:36:08,000 --> 00:36:12,820 a jiní na zaměstnance všichni žít v Cambridge, Massachusetts, 02138. 844 00:36:12,820 --> 00:36:17,970 To skutečně cítit hloupé, že jsem přidat do mého uživatelů tabulky, město, stát, 845 00:36:17,970 --> 00:36:18,630 a zip. 846 00:36:18,630 --> 00:36:20,980 Proč? 847 00:36:20,980 --> 00:36:21,960 >> Diváků: [Neslyšitelné] 848 00:36:21,960 --> 00:36:22,918 >> DAVID Malan: znovu, řekni? 849 00:36:22,918 --> 00:36:24,310 Diváků: [Neslyšitelné] 850 00:36:24,310 --> 00:36:25,850 >> DAVID Malan: Jsou to vždy jít spolu, ne? 851 00:36:25,850 --> 00:36:28,660 Když se ukázalo, jsme si myslet, toto byl případ, dokud jsme vyčerpávajícím 852 00:36:28,660 --> 00:36:30,570 prohledali celé USA, a tam se ukáže, že 853 00:36:30,570 --> 00:36:32,653 jsou některé nesrovnalosti kde více měst má 854 00:36:32,653 --> 00:36:35,060 stejný zip, což je trochu divné. 855 00:36:35,060 --> 00:36:40,580 Ale pokud budeme stanoví, že pro tuto chvíli 02138 je vždy Cambridge, Massachusetts, 856 00:36:40,580 --> 00:36:44,910 proč na světě byste uložit do databáze Cambridge a MA a 02138 857 00:36:44,910 --> 00:36:49,357 pro mě a pro Hannah a pro Rob a pro [? Davon?], A pro ostatní, kteří žijí 858 00:36:49,357 --> 00:36:51,190 tady v Cambridge, je to naprosto zbytečná. 859 00:36:51,190 --> 00:36:54,480 >> Měli bychom dostat pryč jen s uložením co? 860 00:36:54,480 --> 00:36:55,610 Jen poštovní směrovací číslo. 861 00:36:55,610 --> 00:36:58,660 Ale pak, pokud budeme uchovávat jen poštovní směrovací číslo, já chci, pravděpodobně, 862 00:36:58,660 --> 00:37:02,160 na mých webových stránkách, aby věděli, kde je 02.138. 863 00:37:02,160 --> 00:37:03,910 Tak jsem potřebovat další tabulky. 864 00:37:03,910 --> 00:37:04,697 A to je v pořádku. 865 00:37:04,697 --> 00:37:07,530 A ve skutečnosti, to je jedna z konstrukční procesy navrhování tabulek 866 00:37:07,530 --> 00:37:11,472 že budete dělat v PSet7 stejně, přičemž Chcete-li faktor společná data. 867 00:37:11,472 --> 00:37:14,430 Stejně jako jsme se vytknutí společný kód a factoring ven obyčejný 868 00:37:14,430 --> 00:37:17,380 styly od CSS, zde také v databázi, 869 00:37:17,380 --> 00:37:21,180 pokud potřebuji jen 02138 jednoznačně identifikovat něčí rodné město, 870 00:37:21,180 --> 00:37:25,020 neskladujte Cambridge, MA pro každý látat uživatel v tabulce. 871 00:37:25,020 --> 00:37:29,770 >> Namísto toho mají samostatné tabulky s názvem Zipy, která by měla mít co sloupcích? 872 00:37:29,770 --> 00:37:33,490 Pravděpodobně ID pole, jen proto, že pro zásady mluvíme teď. 873 00:37:33,490 --> 00:37:35,720 Pravděpodobně zip pole pro 02138. 874 00:37:35,720 --> 00:37:38,400 A pak asi to, co ostatní sloupce? 875 00:37:38,400 --> 00:37:42,950 Město a stát, ale jen mít jeden Řádek pro 02138, jeden řádek pro 02139, 876 00:37:42,950 --> 00:37:44,772 jeden řádek pro 90210. 877 00:37:44,772 --> 00:37:46,730 A to je doslova všechny zip kódy, které znám. 878 00:37:46,730 --> 00:37:49,012 >> Takže teď, co můžete dělat? 879 00:37:49,012 --> 00:37:51,220 To je problematické, protože teď mám dvě tabulky. 880 00:37:51,220 --> 00:37:54,660 Takže, moji uživatelé jsou většinou tady, ale jejich městský stát informace je 881 00:37:54,660 --> 00:37:55,390 tady. 882 00:37:55,390 --> 00:37:58,635 Tak to dopadá s SQL, je tu ve skutečnosti způsob, jak připojit informace, 883 00:37:58,635 --> 00:38:00,470 a uvidíte to v pset. 884 00:38:00,470 --> 00:38:03,000 >> Ale ukazuje se, je to možné něco takového. 885 00:38:03,000 --> 00:38:10,501 SELECT hvězda od uživatelů, JOIN zipy ON Uživatelé dot zip rovná zipy dot zip. 886 00:38:10,501 --> 00:38:13,360 Což je trochu rozvláčný, pravda, ale to jen 887 00:38:13,360 --> 00:38:17,590 znamená vyberte vše od Proces vzal mě uživatelů tabulku 888 00:38:17,590 --> 00:38:19,580 a můj zipy stůl. 889 00:38:19,580 --> 00:38:22,120 Přidejte se k nim na jedné Pole mají ve sloupci. 890 00:38:22,120 --> 00:38:24,780 Takže, doslova dělat něco takhle, a dej mi zpátky 891 00:38:24,780 --> 00:38:27,360 nové dočasné tabulky To je širší, je to větší, 892 00:38:27,360 --> 00:38:29,450 že má všechny sloupce z obou z nich. 893 00:38:29,450 --> 00:38:33,510 A to zcela jednoduše, by syntax dělat něco takového. 894 00:38:33,510 --> 00:38:35,540 >> Takže, tam je to dopředu, ale tam se děje 895 00:38:35,540 --> 00:38:38,950 být další rozhodnutí týkající se návrhu, budete muset učinit, a to nejen s indexy 896 00:38:38,950 --> 00:38:40,550 ale také běh do problémů. 897 00:38:40,550 --> 00:38:43,360 Ve skutečnosti, tam je výzva v každém návrhu databáze 898 00:38:43,360 --> 00:38:47,930 přičemž někdy dva lidé chtít přístup ke stejným řady databáze 899 00:38:47,930 --> 00:38:48,530 stůl. 900 00:38:48,530 --> 00:38:51,450 Takže, je to něco, že budeme setkávají v PSet7 stejně. 901 00:38:51,450 --> 00:38:54,686 >> Ale já jsem myslel, že bych se na jednom útok, který je možné v SQL. 902 00:38:54,686 --> 00:38:56,560 Jaké jsou některé z problémy, které mohou nastat? 903 00:38:56,560 --> 00:38:58,170 Takže, narazíte na tuto PSet7. 904 00:38:58,170 --> 00:39:01,874 A my vám říct rovnou, co kódování řešení tohoto problému je. 905 00:39:01,874 --> 00:39:04,790 Ale pokud budete mít vyšší úroveň tříd, zejména v operačních systémech, 906 00:39:04,790 --> 00:39:06,950 budete se setkat otázka atomicity, 907 00:39:06,950 --> 00:39:10,080 problém se snaží dělat více věcí najednou 908 00:39:10,080 --> 00:39:11,000 bez přerušení. 909 00:39:11,000 --> 00:39:14,560 >> A myslel jsem si, že zavedení tohoto Nápad na PSet7 s metaforou 910 00:39:14,560 --> 00:39:18,160 že jsem se naučil sám v Margo Operační systémy CS164 Seltzer se 911 00:39:18,160 --> 00:39:18,990 třída lety. 912 00:39:18,990 --> 00:39:22,230 Předpokládejme, že máte jeden z těchto koleji ledničky ve vaší kolejním pokoji nebo domě, 913 00:39:22,230 --> 00:39:24,474 a máte skutečný slabost pro mléko. 914 00:39:24,474 --> 00:39:27,140 A tak, přijdete domů z tříd jeden den, otevřete ledničku. 915 00:39:27,140 --> 00:39:27,620 Oh, sakra. 916 00:39:27,620 --> 00:39:28,870 Není mléko v lednici. 917 00:39:28,870 --> 00:39:32,470 Takže, zavřete ledničku, zamknout dveře, zamknout koleji, 918 00:39:32,470 --> 00:39:34,770 chodit za rohem na CVS, dostat do souladu, 919 00:39:34,770 --> 00:39:36,312 a začít odhlašování nějaké mléko. 920 00:39:36,312 --> 00:39:38,978 A že to bude chvíli trvat, protože ty zatracené samoobslužných pokladen 921 00:39:38,978 --> 00:39:40,570 čítače trvat věčnost tak jako tak použít. 922 00:39:40,570 --> 00:39:41,950 Takže zatím, váš spolubydlící přijde domů. 923 00:39:41,950 --> 00:39:43,470 On nebo ona má opravdu ráda mléko stejně. 924 00:39:43,470 --> 00:39:45,520 Přicházejí do pokoje na kolejích, otevřete ledničku, ach, zatraceně to. 925 00:39:45,520 --> 00:39:46,490 Není víc mléka. 926 00:39:46,490 --> 00:39:49,040 >> Tak, on nebo ona také jde za rohem. 927 00:39:49,040 --> 00:39:51,670 Ale teď, protože tam je jako dvě nebo tři nebo čtyři CVSes blízkosti, 928 00:39:51,670 --> 00:39:53,800 oni náhodou zajít do jedné z různé ty na náměstí. 929 00:39:53,800 --> 00:39:55,830 A tak teď, pár minut později, oba 930 00:39:55,830 --> 00:39:58,060 přijít domů a fuj, nejhorší problém vůbec. 931 00:39:58,060 --> 00:40:00,967 Nyní máte příliš mnoho mléka protože to bude jít kyselé. 932 00:40:00,967 --> 00:40:03,050 A vy jako mléko, ale vy nemají opravdu rád mléko. 933 00:40:03,050 --> 00:40:06,730 >> Takže teď, to byl drahý chyba, protože oba 934 00:40:06,730 --> 00:40:09,870 učinil rozhodnutí na základě stav nějaké proměnné 935 00:40:09,870 --> 00:40:12,660 byl v procesu měněn vámi, 936 00:40:12,660 --> 00:40:14,560 iniciátorem dostane mléko. 937 00:40:14,560 --> 00:40:17,785 Takže, co je možná člověk řešení tohoto problému? 938 00:40:17,785 --> 00:40:18,660 Diváků: [Neslyšitelné] 939 00:40:18,660 --> 00:40:19,430 DAVID Malan: zanechat vzkaz, že jo? 940 00:40:19,430 --> 00:40:21,850 Vždy nechat vzkaz, pokud jste seznámit s touto show. 941 00:40:21,850 --> 00:40:23,100 Ano, jsou tam dva z nás. 942 00:40:23,100 --> 00:40:25,940 Takže, vždy nechat vzkaz nebo doslova zámek chladničky 943 00:40:25,940 --> 00:40:28,602 s nějakou visacím zámkem nebo něco přes vrchol takhle. 944 00:40:28,602 --> 00:40:31,310 Ale to ve skutečnosti bude Klíčovým problémem návrhu databáze, 945 00:40:31,310 --> 00:40:34,710 zvláště když byste mohli mít více prohlížečů, více notebooky, 946 00:40:34,710 --> 00:40:37,450 více uživatelů všichni snaží aktualizujte informace najednou. 947 00:40:37,450 --> 00:40:40,590 Zvláště citlivé informace stejně jako finanční informace, 948 00:40:40,590 --> 00:40:43,350 čímž se obchodování na burze webové stránky, jako jste vy budete stavět, 949 00:40:43,350 --> 00:40:47,270 co když chcete zkontrolovat, kolik peněz máte, a pak, pokud máte dost, 950 00:40:47,270 --> 00:40:48,490 koupit nějaké akcie? 951 00:40:48,490 --> 00:40:50,899 >> Ale co když někdo jiný, kdo má společný účet s vámi 952 00:40:50,899 --> 00:40:52,690 je zároveň snaží koupit nějaké akcie? 953 00:40:52,690 --> 00:40:55,190 Tak, on nebo ona je zaškrtnutím zůstatek na účtu, a to jak z vás 954 00:40:55,190 --> 00:40:57,540 dostat zpět stejná odpověď, není mléko. 955 00:40:57,540 --> 00:41:00,580 Nebo vás oba dostat zpět odpověď, Máte $ 100 na účtu. 956 00:41:00,580 --> 00:41:04,680 Oba jste se snažit, aby rozhodnutí koupit jeden podíl na nějakou společnost skladě. 957 00:41:04,680 --> 00:41:06,130 >> A teď, co se stane? 958 00:41:06,130 --> 00:41:07,140 Máte dvě akcie? 959 00:41:07,140 --> 00:41:08,420 Nemáte žádné akcie? 960 00:41:08,420 --> 00:41:10,320 Problémy, jako je, že mohou nastat. 961 00:41:10,320 --> 00:41:11,755 Takže, budeme setkat to. 962 00:41:11,755 --> 00:41:14,630 SQL injection útoky, naštěstí, jsou něco, co ti pomůže s, 963 00:41:14,630 --> 00:41:17,430 ale to jsou ukrutně časté v těchto dnech v klidu. 964 00:41:17,430 --> 00:41:18,680 Tak, tohle je jen příklad. 965 00:41:18,680 --> 00:41:21,290 Dělám, že žádné nároky Systém Harvard PIN je 966 00:41:21,290 --> 00:41:23,130 náchylné k této konkrétní útoku. 967 00:41:23,130 --> 00:41:24,160 My jsme se snažili. 968 00:41:24,160 --> 00:41:26,120 Ale, víte, že my mají pole, jako je tento. 969 00:41:26,120 --> 00:41:29,620 A Yaleův Net ID je podobný se obrazovky v těchto dnech. 970 00:41:29,620 --> 00:41:33,190 A ukázalo se, že možná Systémový kód PIN je implementován v jazyce PHP. 971 00:41:33,190 --> 00:41:37,050 >> A pokud to were-- to ne-- oni může mít kód, který vypadá takto. 972 00:41:37,050 --> 00:41:38,210 Mají dvě proměnné. 973 00:41:38,210 --> 00:41:42,495 Dej mi uživatelské jméno a heslo od Odeslat Super globální proměnné 974 00:41:42,495 --> 00:41:43,970 že jsme mluvili o dříve. 975 00:41:43,970 --> 00:41:47,310 Možná, že Harvard má dotaz jako SELECT hvězda od uživatelů 976 00:41:47,310 --> 00:41:50,005 kde username rovná a heslo, které se rovná. 977 00:41:50,005 --> 00:41:51,880 A všimněte si, že jsem jen zapojení do zásuvky s použitím 978 00:41:51,880 --> 00:41:55,050 Kudrnatý ortéza zápis z druhého den, což znamená, že stačí připojit k hodnotě 979 00:41:55,050 --> 00:41:55,550 sem. 980 00:41:55,550 --> 00:41:57,449 Nejsem pomocí otazník technika. 981 00:41:57,449 --> 00:41:59,240 Nemám žádnou vteřinu nebo třetí argument. 982 00:41:59,240 --> 00:42:02,350 Jsem doslova konstrukci řetězec sám. 983 00:42:02,350 --> 00:42:04,930 >> Problémem však je, že pokud někdo líbí scroob, 984 00:42:04,930 --> 00:42:09,020 což je odkaz na film, přihlásí s něčím, jako je toto, 985 00:42:09,020 --> 00:42:11,250 a já jsem odstranil tečky které obvykle zakrýt 986 00:42:11,250 --> 00:42:14,370 hesla, co když je zvláště škodlivý 987 00:42:14,370 --> 00:42:18,860 a jeho heslo možná je 12345, na filmu s názvem "Spaceballs," 988 00:42:18,860 --> 00:42:21,970 ale kriticky Typy A apostrof po pěti, 989 00:42:21,970 --> 00:42:24,790 pak doslova slovo nebo v prostoru, a pak citovat, 990 00:42:24,790 --> 00:42:29,160 konec citátu jedna rovná se citovat, ale všimnete, že je vynechána, co? 991 00:42:29,160 --> 00:42:32,700 On vynechal citát na pravé straně a on vynechal cenovou nabídku na levé straně. 992 00:42:32,700 --> 00:42:35,170 >> Protože pokud to útočník scroob je domněnka 993 00:42:35,170 --> 00:42:38,160 je to, že lidé, kteří psali tento PHP kód tak nebylo jasné, 994 00:42:38,160 --> 00:42:42,990 Možná, že prostě mají nějaké single cituje kolem interpolace 995 00:42:42,990 --> 00:42:45,210 proměnné do složených závorek? 996 00:42:45,210 --> 00:42:48,620 A tak možná, dokázal laskavý z dokončit své myšlenky 997 00:42:48,620 --> 00:42:53,290 pro ně, ale takovým způsobem, že se děje ho nechat naboural do systému PIN. 998 00:42:53,290 --> 00:42:55,310 Jinými slovy, předpokládejme, že že se jedná o kód 999 00:42:55,310 --> 00:42:57,140 a my se teď připojit, co scroob zadali. 1000 00:42:57,140 --> 00:42:58,770 A je to červené, protože je to špatné. 1001 00:42:58,770 --> 00:43:01,310 >> A základní znění je to, co napsal v, 1002 00:43:01,310 --> 00:43:05,510 scroob mohla oklamat serveru Harvardu do budování SQL dotazu 1003 00:43:05,510 --> 00:43:07,440 řetězec, který vypadá takto. 1004 00:43:07,440 --> 00:43:11,760 Heslo se rovná 12345 nebo jeden roven jedné. 1005 00:43:11,760 --> 00:43:14,820 Výsledek, který logicky, je, že tento se přihlásí scroob 1006 00:43:14,820 --> 00:43:18,360 V pokud je jeho heslo 12345 nebo pokud jedna rovná 1007 00:43:18,360 --> 00:43:22,660 jednou, což je samozřejmě vždy pravdivé, což znamená, že scroob vždy dostane. 1008 00:43:22,660 --> 00:43:26,060 >> A tak, jak opravit to, jak je v mnoha případech, 1009 00:43:26,060 --> 00:43:28,140 by bylo psát více defenzivně. 1010 00:43:28,140 --> 00:43:30,390 Chcete-li použít něco jako naše Skutečná funkce dotazu, který 1011 00:43:30,390 --> 00:43:33,980 uvidíte v PSet7, kde jsme Plug In něco jako otazníky zde. 1012 00:43:33,980 --> 00:43:35,980 A krása Funkce dotaz, který jsme 1013 00:43:35,980 --> 00:43:40,010 dát, je, že brání proti nim tzv SQL injection útoky, kde 1014 00:43:40,010 --> 00:43:44,260 někdo podvádět kód do vstřikování svůj vlastní kód SQL. 1015 00:43:44,260 --> 00:43:47,380 Protože to, co funkce dotazu dáme vám bude vlastně dělat, 1016 00:43:47,380 --> 00:43:51,270 pokud použijete syntaxi otazník a druhý a třetí argument zde, 1017 00:43:51,270 --> 00:43:54,590 je to, co se to přidat do vstup, který uživatel poskytovány? 1018 00:43:54,590 --> 00:43:56,060 Ti, zpětné lomítko cituje. 1019 00:43:56,060 --> 00:43:58,590 >> Takže, je to uniká jakýkoli potenciálně nebezpečné znaky. 1020 00:43:58,590 --> 00:44:01,000 To teď vypadá divně, ale není to zranitelný 1021 00:44:01,000 --> 00:44:03,260 protože to není změnit logiku už 1022 00:44:03,260 --> 00:44:06,470 protože to je celé heslo Nyní jediný citát, že to není, 1023 00:44:06,470 --> 00:44:07,596 ve skutečnosti, scroob heslo. 1024 00:44:07,596 --> 00:44:09,845 Takže, tam bylo nějaké vtipy o tom v průběhu let. 1025 00:44:09,845 --> 00:44:12,570 Takže to byla fotografie pořízena některých poleno na parkovišti 1026 00:44:12,570 --> 00:44:16,620 kdy byste mohli vědět, že některá města a státy snaží skenovat licence 1027 00:44:16,620 --> 00:44:19,460 deska se vám nebo jízdenky účtovat vám Projdete-li bez, stejně jako, 1028 00:44:19,460 --> 00:44:20,660 věc E-Z průsmyk. 1029 00:44:20,660 --> 00:44:24,490 Takže, tento člověk předpokládal, že možná lidé psaní systém E-Z pass 1030 00:44:24,490 --> 00:44:28,240 nebyly tak jasné, a možná, že Jen spojení společně řetězec, 1031 00:44:28,240 --> 00:44:32,190 tak, že on nebo ona nemohla zlomyslně ne jen dokončit jejich myšlení, 1032 00:44:32,190 --> 00:44:35,150 ale ve skutečnosti spustit špatný příkaz, které jsme dosud není uvedeno, 1033 00:44:35,150 --> 00:44:36,380 ale asi tušíte. 1034 00:44:36,380 --> 00:44:39,820 Že kromě odstranit, a vložit a aktualizovat a vyberte, 1035 00:44:39,820 --> 00:44:43,370 tam je také klíčové slovo volal pokles, což doslova vymaže vše 1036 00:44:43,370 --> 00:44:45,300 v databázi, která je zvláště špatné. 1037 00:44:45,300 --> 00:44:48,760 >> Můžeme se přiblížit, pokud je to trochu těžké vidět. 1038 00:44:48,760 --> 00:44:52,300 To teď, je slavný karikatura to je nyní úžasně chytrý 1039 00:44:52,300 --> 00:44:53,145 a srozumitelné. 1040 00:44:53,145 --> 00:45:00,880 1041 00:45:00,880 --> 00:45:04,750 >> [SMÍCH] 1042 00:45:04,750 --> 00:45:05,910 >> Jo, v pohodě. 1043 00:45:05,910 --> 00:45:06,800 Druh geeking ven. 1044 00:45:06,800 --> 00:45:08,800 Takže tyto jsou tedy SQL injection útoky. 1045 00:45:08,800 --> 00:45:13,050 A oni jsou tak jednoduché, vyhnout použitím správný kód nebo právo knihovny. 1046 00:45:13,050 --> 00:45:15,947 A uvidíte v PSet7, to je Proto jsme vám funkci dotazu. 1047 00:45:15,947 --> 00:45:17,780 Takže, pár oříšky že jsme si mysleli bychom se 1048 00:45:17,780 --> 00:45:19,930 dát tady v naší Zbývající minuty dohromady. 1049 00:45:19,930 --> 00:45:24,030 Takže, jak si pamatujete z týdne nula, my představil tyto dvě žárovky, které 1050 00:45:24,030 --> 00:45:26,610 jsou pěkné, nejen proto, že jsou to docela a jsou barevné, 1051 00:45:26,610 --> 00:45:29,450 ale proto, že podporují něco volal API, aplikace, 1052 00:45:29,450 --> 00:45:31,980 Programming Interface A v CS50 tak daleko, máme 1053 00:45:31,980 --> 00:45:34,440 zaměřující se především na GET a POST, ale ukázalo se, 1054 00:45:34,440 --> 00:45:37,390 je tu další akce protokolu HTTP, jako jsou PUT. 1055 00:45:37,390 --> 00:45:39,430 >> A ve skutečnosti, to bylo snímek z týdne nula 1056 00:45:39,430 --> 00:45:44,930 přičemž když píšete kód, který pošle a la PSet6 požadavek HTTP, který 1057 00:45:44,930 --> 00:45:49,647 vypadá to s tímto kusem textu ve spodní části, která se nazývá JSON, 1058 00:45:49,647 --> 00:45:52,230 nebo JavaScript Object Notation že budeme mluvit o příští týden, 1059 00:45:52,230 --> 00:45:57,030 můžete zapnout nebo vypnout nebo změnit barva světla, jako jsou ty. 1060 00:45:57,030 --> 00:46:00,480 Takže v případě, CS50 má také kromě některých z těchto žárovek tady v New Haven 1061 00:46:00,480 --> 00:46:02,480 pokud byste chtěli půjčit je pro finální projekty, 1062 00:46:02,480 --> 00:46:04,370 i některé Microsoft Kapely, které jsou jako 1063 00:46:04,370 --> 00:46:07,619 hodinky, které budete nosit kolem zápěstí že podobně mají tak, že jste API 1064 00:46:07,619 --> 00:46:10,040 můžete napsat svůj vlastní software pro ně. 1065 00:46:10,040 --> 00:46:12,490 >> Máme účet Apple iOS kód tak, 1066 00:46:12,490 --> 00:46:15,510 že pokud máte Apple Watch nebo iPhone nebo iPad nebo iPod, 1067 00:46:15,510 --> 00:46:17,707 můžete psát kód, který ve skutečnosti běží na nich. 1068 00:46:17,707 --> 00:46:19,540 Máme spoustu z Arduinos, které jsou 1069 00:46:19,540 --> 00:46:22,010 malinké počítače bez případech, v podstatě, 1070 00:46:22,010 --> 00:46:25,240 že můžete připojit přes USB port, typicky do svého PC nebo Mac, 1071 00:46:25,240 --> 00:46:28,810 napsat kód, který běží na tyto fyzické zařízení, která mají často senzory na nich 1072 00:46:28,810 --> 00:46:30,790 takže můžete komunikovat s reálným světem. 1073 00:46:30,790 --> 00:46:32,860 Máme spoustu z Leap Motion zařízení, 1074 00:46:32,860 --> 00:46:36,500 které jsou USB zařízení pro Macy a PC, tady a opět v New Haven. 1075 00:46:36,500 --> 00:46:40,080 A když jej připojíte k počítači Mac, můžete skutečně ovládat svůj počítač 1076 00:46:40,080 --> 00:46:42,550 psaním software že prostřednictvím infračervených paprsků, 1077 00:46:42,550 --> 00:46:46,360 zjistí, kde se vaše lidské ruce, a to i bez dotyku klávesnice. 1078 00:46:46,360 --> 00:46:49,135 Mysleli jsme, že podělit rychlý zahlédneme na to, například. 1079 00:46:49,135 --> 00:46:51,428 >> [Přehrávání hudby] 1080 00:46:51,428 --> 00:47:55,840 1081 00:47:55,840 --> 00:47:57,590 Takže, máme celou banda z těchto věcí, 1082 00:47:57,590 --> 00:48:01,040 Také volal Myo rameno kapely který jste dal přes předloktí 1083 00:48:01,040 --> 00:48:04,595 a pak můžete kontrolovat skutečný world nebo virtuální svět, jako je tento. 1084 00:48:04,595 --> 00:48:06,471 >> [Přehrávání hudby] 1085 00:48:06,471 --> 00:49:17,580 1086 00:49:17,580 --> 00:49:20,920 Nebo, máme také nějaké Google Karton, který je doslova, jako, 1087 00:49:20,920 --> 00:49:24,841 lepenková krabice byste mohli dát na vašem tvář, ale snímek ve vašem telefonu do ní 1088 00:49:24,841 --> 00:49:27,590 takže si dal sklenici vašeho telefon opravdu blízko očí. 1089 00:49:27,590 --> 00:49:30,190 A Google je karton docela levné na $ 10 nebo $. 20 1090 00:49:30,190 --> 00:49:32,230 A to má jen málo čočky že mírně mimo směnu 1091 00:49:32,230 --> 00:49:35,900 obraz na obrazovce vašeho člověka oči, aby vám pocit hloubky 1092 00:49:35,900 --> 00:49:39,550 takže jste skutečně 3D prostředí před vámi. 1093 00:49:39,550 --> 00:49:42,927 Máme také nějaké Samsung Gear, který je dražší verze tohoto, 1094 00:49:42,927 --> 00:49:46,010 ale že mohou klouzat obdobně An Android telefon a dá vám iluzi 1095 00:49:46,010 --> 00:49:48,309 of-- nebo dát zážitek virtuální reality. 1096 00:49:48,309 --> 00:49:50,850 A v našich konečných dvou minut, jsme si mysleli, že jsme si vyzkoušet, jak to udělat. 1097 00:49:50,850 --> 00:49:55,250 Když se mi podaří promítnout to, co má Colton tu jen proto, aby povzbudit chuť k jídlu, 1098 00:49:55,250 --> 00:49:58,442 nech mě jít dopředu a házet up na velké obrazovce zde. 1099 00:49:58,442 --> 00:49:59,400 Dovolte mi, abych zabil světla. 1100 00:49:59,400 --> 00:50:02,290 Colton, chcete pokračovat a dát na své cely na chvíli 1101 00:50:02,290 --> 00:50:05,171 a přijít na více než na uprostřed jeviště? 1102 00:50:05,171 --> 00:50:07,420 A chcete project-- to je to, co vidí Colton. 1103 00:50:07,420 --> 00:50:10,560 >> Nyní, Wi-Fi zde je ne tak silný pro toto zařízení 1104 00:50:10,560 --> 00:50:13,870 že to je super přesvědčivé, ale Colton je doslova 1105 00:50:13,870 --> 00:50:15,710 V tomto magickém futuristické místě. 1106 00:50:15,710 --> 00:50:16,796 On vidí pouze jeden obrázek. 1107 00:50:16,796 --> 00:50:19,920 Ty jsou vidět jeho levé a pravé oko že jeho mozek se sflikovanou 1108 00:50:19,920 --> 00:50:22,260 v trojrozměrný prostředí na tváři. 1109 00:50:22,260 --> 00:50:24,319 Jenom vybrána možnost nabídky zde. 1110 00:50:24,319 --> 00:50:27,360 A tak znovu, má na sobě tato sluchátka s telefonem Samsung na to, že je 1111 00:50:27,360 --> 00:50:29,080 bezdrátově vyčnívající do naší režii. 1112 00:50:29,080 --> 00:50:30,349 Nyní jste na Marsu, myslím, že? 1113 00:50:30,349 --> 00:50:31,140 COLTON: Myslím, že ano. 1114 00:50:31,140 --> 00:50:32,181 Nejsem si jistý, [neslyšitelných]. 1115 00:50:32,181 --> 00:50:34,250 [SMÍCH] 1116 00:50:34,250 --> 00:50:36,374 >> DAVID Malan: Ukázalo se, že Mars má těchto nabídek. 1117 00:50:36,374 --> 00:50:41,590 >> COLTON: [Neslyšitelné] nějaké chladné místa, pokud chceme jít to-- 1118 00:50:41,590 --> 00:50:43,330 >> DAVID Malan: Kam chceš jít? 1119 00:50:43,330 --> 00:50:45,837 >> COLTON: [Neslyšitelné] 1120 00:50:45,837 --> 00:50:48,170 DAVID Malan: A pojďme se podívat kde Colton se nám při teď. 1121 00:50:48,170 --> 00:50:48,961 COLTON: [Neslyšitelné] 1122 00:50:48,961 --> 00:50:52,830 1123 00:50:52,830 --> 00:50:56,380 >> DAVID Malan: Takže, je tu tolik různých místech si můžete vzít sami. 1124 00:50:56,380 --> 00:51:00,590 Je tu FAPIs, přes které si můžete psát hry nebo interakce, které 1125 00:51:00,590 --> 00:51:01,950 běh, v konečném důsledku, na telefonu. 1126 00:51:01,950 --> 00:51:03,908 Takže jste opravdu jen psaní telefonní aplikace mobilní. 1127 00:51:03,908 --> 00:51:06,380 Ale díky softwaru a schopnosti grafika, 1128 00:51:06,380 --> 00:51:08,765 Nyní Colton je v tomto maličký chata. 1129 00:51:08,765 --> 00:51:10,515 A na riziko ohromující sami, 1130 00:51:10,515 --> 00:51:13,330 Colton a budu držet kolem pro zatímco na konci třídy zde dnes 1131 00:51:13,330 --> 00:51:14,300 pokud byste chtěli přijít a hrát. 1132 00:51:14,300 --> 00:51:16,350 A budeme přivést zpět příští týden stejně. 1133 00:51:16,350 --> 00:51:18,420 Bez dalšího, ado to je pro dnešek vše. 1134 00:51:18,420 --> 00:51:21,990 Uvidíme se příští týden. 1135 00:51:21,990 --> 00:51:24,140 >> [MUSIC - ragga TWINS, "BAD MAN"] 1136 00:51:24,140 --> 00:55:23,146