1 00:00:00,000 --> 00:00:02,405 >> [Música tocando] 2 00:00:02,405 --> 00:00:10,439 3 00:00:10,439 --> 00:00:11,980 DAVID Malan: Todo ben, iso é CS50. 4 00:00:11,980 --> 00:00:13,740 Este é o fin de semana oito. 5 00:00:13,740 --> 00:00:15,887 E hoxe, imos comezar para cubrir algunhas pezas 6 00:00:15,887 --> 00:00:17,720 cando se trata de construción cousas na web. 7 00:00:17,720 --> 00:00:20,020 Entón, lembre que o luns gastamos moito máis tempo 8 00:00:20,020 --> 00:00:22,530 en PHP, que é esta dinámica linguaxe de programación que 9 00:00:22,530 --> 00:00:26,872 permítenos de saída, entre outros cousas, HTML e outro tal contido 10 00:00:26,872 --> 00:00:27,830 que vai querer ver. 11 00:00:27,830 --> 00:00:30,871 Pero non temos realmente mirou como nós estamos indo a almacenar calquera información. 12 00:00:30,871 --> 00:00:34,477 De feito, case calquera de que a super- sitios interesantes que visita hoxe 13 00:00:34,477 --> 00:00:36,560 ter algún tipo de base de datos no back-end, non? 14 00:00:36,560 --> 00:00:39,540 Facebook seguramente almacena grandes cantidades de datos sobre todos e tendas Gmail todo 15 00:00:39,540 --> 00:00:40,210 dos seus correos electrónicos. 16 00:00:40,210 --> 00:00:44,150 >> E así, moitos outros sitios non son só contido estático que é informativo. 17 00:00:44,150 --> 00:00:45,640 Realmente dinámico de algunha maneira. 18 00:00:45,640 --> 00:00:48,480 Fornecer información, el actualiza as páxinas a outras persoas. 19 00:00:48,480 --> 00:00:50,620 Recibe mensaxes, envía mensaxes, e así por diante. 20 00:00:50,620 --> 00:00:54,250 Entón, hoxe, miramos máis de preto as bases dun proxecto 21 00:00:54,250 --> 00:00:57,330 que vai mergullo na próxima semana, CS50 Finanzas, que 22 00:00:57,330 --> 00:01:00,509 é, en realidade, vai ter que construír algo non en C, pero en PHP. 23 00:01:00,509 --> 00:01:02,550 Un sitio que parece un pouco algo así 24 00:01:02,550 --> 00:01:05,810 que permite mercar e vender accións que son, en realidade, 25 00:01:05,810 --> 00:01:09,044 vai basearse en tempo real datos de accións de Yahoo Finance. 26 00:01:09,044 --> 00:01:11,960 E así, en definitiva, terá a ilusión para si mesmo e para os usuarios 27 00:01:11,960 --> 00:01:14,550 que en realidade está comprando e vendendo accións e recibir case tempo real, 28 00:01:14,550 --> 00:01:16,800 actualizacións, xestión dun carteira, todos os cales 29 00:01:16,800 --> 00:01:20,310 vai esixir ter, en definitiva, unha base de datos de usuarios. 30 00:01:20,310 --> 00:01:23,330 >> Así, nas súas propias palabras, especialmente se non está 31 00:01:23,330 --> 00:01:25,670 Super familiarizado con ordenador ciencia ou bases de datos, o que 32 00:01:25,670 --> 00:01:30,790 Coñeces unha base de datos para ser agora, en termos non-técnicos? 33 00:01:30,790 --> 00:01:32,300 Que é iso? 34 00:01:32,300 --> 00:01:36,882 Como o describiría coa persoa ou un amigo? 35 00:01:36,882 --> 00:01:40,100 >> Audiencia: [inaudível] información [inaudível] 36 00:01:40,100 --> 00:01:44,430 >> DAVID Malan: Entón, unha lista de información, ou un store-- unha lista de información 37 00:01:44,430 --> 00:01:47,160 que pode querer almacenar sobre algo, como un usuario. 38 00:01:47,160 --> 00:01:50,190 E o que os usuarios teñan asociado con eles? 39 00:01:50,190 --> 00:01:53,160 Se vostede é un usuario de Facebook ou Gmail, cales son as características 40 00:01:53,160 --> 00:01:54,940 que todos os usuarios teñen? 41 00:01:54,940 --> 00:01:58,530 Como, o que podería ser algúns dos columnas na folla de cálculo para que 42 00:01:58,530 --> 00:01:59,390 aludido última vez? 43 00:01:59,390 --> 00:02:01,140 Porque unha vez, pode pensar en unha base de datos 44 00:02:01,140 --> 00:02:05,810 realmente como un arquivo Excel fantasía ou Google Folla de cálculo ou ficheiro Números Apple. 45 00:02:05,810 --> 00:02:08,280 >> Entón, o que pensas de cando pensa dun usuario? 46 00:02:08,280 --> 00:02:11,290 O que teñen? 47 00:02:11,290 --> 00:02:11,790 Que é iso? 48 00:02:11,790 --> 00:02:12,470 >> Audiencia: Un nome. 49 00:02:12,470 --> 00:02:13,303 >> DAVID Malan: Un nome. 50 00:02:13,303 --> 00:02:16,840 Entón, se o nome, tipo, David Malan sería o nome dalgún usuario. 51 00:02:16,840 --> 00:02:17,980 O que máis fai un usuario ten? 52 00:02:17,980 --> 00:02:18,770 >> Audiencia: Unha ID. 53 00:02:18,770 --> 00:02:19,561 >> DAVID Malan: Unha ID. 54 00:02:19,561 --> 00:02:23,320 Así, como un número de identificación, como o seu Harvard ID ou o seu Yale ID Net ou similares. 55 00:02:23,320 --> 00:02:24,923 O que máis pode un usuario ten? 56 00:02:24,923 --> 00:02:25,890 >> Audiencia: Contrasinal. 57 00:02:25,890 --> 00:02:29,240 >> DAVID Malan: Unha contrasinal, quizais un dirección, quizais un número de teléfono, talvez 58 00:02:29,240 --> 00:02:30,050 un enderezo de correo electrónico. 59 00:02:30,050 --> 00:02:32,640 Así, non hai acios de campos e esta podería especie de espiral fóra de control 60 00:02:32,640 --> 00:02:34,760 rapidamente, así que comezar entendendo, oh, imos gardar este 61 00:02:34,760 --> 00:02:36,190 e imos gardar isto e aquilo. 62 00:02:36,190 --> 00:02:37,657 >> Pero como é que imos realmente facer iso? 63 00:02:37,657 --> 00:02:39,740 Entón, de novo, o modelo mental ter para hoxe coma nós 64 00:02:39,740 --> 00:02:42,320 mergullo SQL real, Structured Query Language, 65 00:02:42,320 --> 00:02:44,186 é unha base de datos que se parece con isto. 66 00:02:44,186 --> 00:02:45,310 É só liñas e columnas. 67 00:02:45,310 --> 00:02:48,309 E pode imaxinar Google Spreadsheets ou calquera número de outros programas. 68 00:02:48,309 --> 00:02:52,130 Pero o que é importante sobre MySQL, que é o software de base de datos que imos usar, 69 00:02:52,130 --> 00:02:54,920 o libremente abertamente available-- usos Facebook 70 00:02:54,920 --> 00:02:59,200 isto e calquera outro número de websites-- base de datos almacena as cousas relacionalmente. 71 00:02:59,200 --> 00:03:01,770 E unha base de datos relacional Significa só que, literalmente, 72 00:03:01,770 --> 00:03:03,672 almacena os seus datos en filas e columnas. 73 00:03:03,672 --> 00:03:04,630 É tan sinxelo coma iso. 74 00:03:04,630 --> 00:03:07,230 >> Así, mesmo algo así como Oracle que pode ter oído falar de modo xeral 75 00:03:07,230 --> 00:03:08,271 é unha base de datos relacional. 76 00:03:08,271 --> 00:03:10,929 E baixo o capuz, isto almacena os datos en filas e columnas. 77 00:03:10,929 --> 00:03:12,970 E Oracle cobra unha moito diñeiro para facelo, 78 00:03:12,970 --> 00:03:15,550 tendo en conta que taxas MySQL nada para o mesmo. 79 00:03:15,550 --> 00:03:18,790 Polo tanto, SQL vai dar polo menos, catro operacións. 80 00:03:18,790 --> 00:03:23,190 A capacidade de seleccionar datos, como lectura datos, inserir, eliminar e actualizar datos. 81 00:03:23,190 --> 00:03:25,525 Noutras palabras, son os realmente as catro operacións fundamentais 82 00:03:25,525 --> 00:03:28,950 que van permitir-nos a cambiar material naquelas liñas e columnas. 83 00:03:28,950 --> 00:03:33,250 >> A ferramenta que usaremos hoxe, especialmente para aprender SQL e xogar con el 84 00:03:33,250 --> 00:03:34,627 é de novo chamado PHP MyAdmin. 85 00:03:34,627 --> 00:03:35,460 É ferramenta baseada na web é. 86 00:03:35,460 --> 00:03:38,200 Coincidencia total que está escrito en PHP. 87 00:03:38,200 --> 00:03:42,400 Pero só pode dar unha gráfica interface de usuario para que poidamos realmente 88 00:03:42,400 --> 00:03:46,054 crear esas liñas e columnas e, a continuación, falar con eles vía código. 89 00:03:46,054 --> 00:03:47,970 Entón, imos agora comezar a o que eu creo que é a verdade 90 00:03:47,970 --> 00:03:51,000 tipo do proceso de diversión a construción de back-end de sitios web, 91 00:03:51,000 --> 00:03:54,580 as partes que os usuarios non ver, pero seguro se preocupan, 92 00:03:54,580 --> 00:03:56,170 porque iso é un pouco de datos indo. 93 00:03:56,170 --> 00:03:59,570 Así, semellante a C e unha pouco menos como PHP, 94 00:03:59,570 --> 00:04:04,954 SQL ou unha base de datos que soporta SQL, ten polo menos este tipo de datos 95 00:04:04,954 --> 00:04:05,870 e acios de outros. 96 00:04:05,870 --> 00:04:08,107 CHAR, varchar, INT, BIGINT, Decimal e DATETIME. 97 00:04:08,107 --> 00:04:09,940 E non hai un todo banda de outros recursos, 98 00:04:09,940 --> 00:04:11,940 pero imos facelo Por exemplo real. 99 00:04:11,940 --> 00:04:16,450 >> Eu estou indo a ir a CS50 IDE onde, con antelación, eu sesión 100 00:04:16,450 --> 00:04:19,372 e eu tamén visitou un URL para esta ferramenta chamada PHP MyAdmin. 101 00:04:19,372 --> 00:04:22,580 E no conxunto de problemas de sete, nós imos dizer- exactamente como chegar a esta interface 102 00:04:22,580 --> 00:04:23,200 ben. 103 00:04:23,200 --> 00:04:25,640 Na esquina superior esquerda, Teña en conta que di charla. 104 00:04:25,640 --> 00:04:27,610 E iso só quere dicir que con antelación, eu creei 105 00:04:27,610 --> 00:04:31,360 unha base de datos chamado de lectura baleiro que non ten follas nel aínda. 106 00:04:31,360 --> 00:04:32,600 Non hai liñas e columnas. 107 00:04:32,600 --> 00:04:34,308 Porque o primeiro cousa que faremos 108 00:04:34,308 --> 00:04:37,100 é comezar a crear unha táboa que está indo a almacenar os nosos usuarios. 109 00:04:37,100 --> 00:04:39,100 >> Entón, literalmente sobre aquí para a dereita, son 110 00:04:39,100 --> 00:04:42,070 vai dicir a base de datos Quero unha táboa denominada Usuarios. 111 00:04:42,070 --> 00:04:44,845 Entón, iso é como o arquivo que eu quere almacenar todos os meus datos en. 112 00:04:44,845 --> 00:04:45,720 E cantas columnas? 113 00:04:45,720 --> 00:04:47,740 Ben, imos mantelo simple de momento. 114 00:04:47,740 --> 00:04:51,855 Eu só quero gardar como un nome de usuario e un nome para un usuario. 115 00:04:51,855 --> 00:04:53,020 Imos comezar pequeno. 116 00:04:53,020 --> 00:04:55,370 Entón, quero total de dúas columnas. 117 00:04:55,370 --> 00:04:57,360 E eu estou indo a ir adiante e prema en Ir. 118 00:04:57,360 --> 00:04:59,210 E entón, para estes columnas, o que eu vou 119 00:04:59,210 --> 00:05:04,576 para fazer-- este Internet cooperates-- todo ben, 120 00:05:04,576 --> 00:05:05,950 así que imos intentar iso de novo. 121 00:05:05,950 --> 00:05:09,180 Eu estou indo a crear unha táboa chamada Usuarios con dúas columnas, prema en Ir, Aceptar. 122 00:05:09,180 --> 00:05:10,520 Agora temos que ter isto moi rápido. 123 00:05:10,520 --> 00:05:12,065 Grazas, moi ben feito. 124 00:05:12,065 --> 00:05:14,440 Todo ben, entón o que queremos estas columnas chamarse? 125 00:05:14,440 --> 00:05:16,080 >> Entón, un vai ser chamado usuario. 126 00:05:16,080 --> 00:05:19,480 Entón, todo o que vexo aqui-- ea interface francamente está un pouco feo, finalmente, 127 00:05:19,480 --> 00:05:21,270 unha vez que comezar a escribir en todos estes datos. 128 00:05:21,270 --> 00:05:27,450 Pero o que é bo é que tipo de paradoxalmente, estou creando columnas, 129 00:05:27,450 --> 00:05:29,977 pero a ferramenta ten tolamente colocounos en filas 130 00:05:29,977 --> 00:05:31,560 para que eu poida configurar estas columnas. 131 00:05:31,560 --> 00:05:33,550 Entón, hai dous espazos en branco alí Nome. 132 00:05:33,550 --> 00:05:36,180 E un deses campos I quere chamado usuario, 133 00:05:36,180 --> 00:05:38,000 eo outro campo quero chamar Name. 134 00:05:38,000 --> 00:05:40,340 >> E agora eu teño que escoller tipos de datos para esas cousas. 135 00:05:40,340 --> 00:05:42,330 Así, mentres en Excel e Google Spreadsheets, 136 00:05:42,330 --> 00:05:45,531 se queres unha columna, vostede literalmente escriba Nome ou nome de usuario, prema Intro. 137 00:05:45,531 --> 00:05:48,030 Quizais fai negra só para maior claridade, pero é só iso. 138 00:05:48,030 --> 00:05:50,140 Non especificar o tipo de columnas. 139 00:05:50,140 --> 00:05:53,790 Agora en Follas de Google ou Excel, pode seleccionar a forma como os datos son procesados. 140 00:05:53,790 --> 00:05:58,120 Podería ir ao menú Formato, e Pode especificar amosar esta cifrão como, 141 00:05:58,120 --> 00:05:59,900 amosar tanto como un valor de punto flotante. 142 00:05:59,900 --> 00:06:01,990 >> Entón, é semellante en espírito á que o que estamos a piques de facer, 143 00:06:01,990 --> 00:06:04,740 pero esta é realmente obrigará os datos a ser un certo tipo. 144 00:06:04,740 --> 00:06:07,750 Agora, a pesar de un momento atrás dixo que hai só algúns tipos de datos, 145 00:06:07,750 --> 00:06:11,120 hai realmente unha lote enteiro, e son 146 00:06:11,120 --> 00:06:12,910 en diferentes graos de especificidade. 147 00:06:12,910 --> 00:06:14,970 E como un aparte, ten pode ata facer cousas extravagantes 148 00:06:14,970 --> 00:06:17,520 como xeometrías de almacenamento dentro dun banco de datos. 149 00:06:17,520 --> 00:06:19,250 Pode almacenar cousas como coordenadas GPS 150 00:06:19,250 --> 00:06:22,420 e realmente atopar, matematicamente, puntos que están preto de outros. 151 00:06:22,420 --> 00:06:24,128 Pero imos manter esta super sinxelo 152 00:06:24,128 --> 00:06:26,800 e ir ata aquí, todo os chamados tipos cadea. 153 00:06:26,800 --> 00:06:29,240 >> Entón, aquí está a lista dun todo morea de opcións. 154 00:06:29,240 --> 00:06:32,740 CHAR, varchar, TINYTEXT, MEDIUMTEXT, LONGTEXT. 155 00:06:32,740 --> 00:06:34,110 E é tipo de esmagadora. 156 00:06:34,110 --> 00:06:37,610 E, por desgraza, un pouco paradoxalmente a C, 157 00:06:37,610 --> 00:06:40,120 un CHAR non é realmente un CHAR. 158 00:06:40,120 --> 00:06:44,170 Se só se especifica en unha base de datos que o seu tipo de datos é CHAR, 159 00:06:44,170 --> 00:06:47,390 isto significa que si, é unha CHAR, pero é un ou máis chars. 160 00:06:47,390 --> 00:06:49,630 E ten que especificar cantos chars quere. 161 00:06:49,630 --> 00:06:51,636 Así, que é un típico lonxitude dun nome de usuario? 162 00:06:51,636 --> 00:06:52,760 Existe un límite tipicamente? 163 00:06:52,760 --> 00:06:53,920 >> Audiencia: [inaudível] 164 00:06:53,920 --> 00:06:55,050 >> DAVID Malan: 16 quizais? 165 00:06:55,050 --> 00:06:55,990 Algo así. 166 00:06:55,990 --> 00:06:57,948 Vostede sabe, de volta ao día, que adoitaba ser oito. 167 00:06:57,948 --> 00:07:00,289 Ás veces é 16, ás veces é aínda máis que iso. 168 00:07:00,289 --> 00:07:02,080 E así, esta non fai significa darme un CHAR. 169 00:07:02,080 --> 00:07:04,730 Isto significa que eu teño que especificar a lonxitude do campo, 170 00:07:04,730 --> 00:07:07,402 e agora eu podería dicir algo así como 16. 171 00:07:07,402 --> 00:07:08,610 E hai un trade off aquí. 172 00:07:08,610 --> 00:07:11,360 Entón, imos ver nun momento isto quere dicir que un, 173 00:07:11,360 --> 00:07:14,620 nome de usuario ten que ser 16 caracteres. 174 00:07:14,620 --> 00:07:18,720 Pero agarde un minuto, M-A-L-A-N. Se iso meu nome de usuario e eu estou usando só cinco, 175 00:07:18,720 --> 00:07:23,070 o que propón que a base de datos o que facer para os outros 11 personaxes que 176 00:07:23,070 --> 00:07:24,471 Eu reservado espazo para? 177 00:07:24,471 --> 00:07:25,220 Que farías? 178 00:07:25,220 --> 00:07:26,480 >> Audiencia: [inaudível] 179 00:07:26,480 --> 00:07:27,160 >> DAVID Malan: Si, só facelos todos nulo. 180 00:07:27,160 --> 00:07:28,290 Fai-os espazos. 181 00:07:28,290 --> 00:07:30,816 Pero, probablemente nulo, xa que logo, un chea de ceros barra invertida. 182 00:07:30,816 --> 00:07:33,190 Así, por unha banda, temos agora a certeza de que o meu nome de usuario 183 00:07:33,190 --> 00:07:34,780 pode ser non máis que 16 caracteres. 184 00:07:34,780 --> 00:07:37,590 E a outra cara da moeda é que que se eu tivese un nome moi longo 185 00:07:37,590 --> 00:07:39,940 ou quería un tempo moi longo nome de usuario como algúns de vós 186 00:07:39,940 --> 00:07:44,840 caras poden nesa facultade ou en Yale.edu, non pode ter un. 187 00:07:44,840 --> 00:07:47,177 E así, de feito, se ten xa rexistrado a un sitio web 188 00:07:47,177 --> 00:07:49,385 e obter gritou dicindo a chave é moi longa 189 00:07:49,385 --> 00:07:52,710 ou o seu nome de usuario é moi longo, é simplemente porque un programador, cando 190 00:07:52,710 --> 00:07:55,500 configurar a súa base de datos, decidiu que este campo será 191 00:07:55,500 --> 00:07:57,150 non superior a este lonxitude ser. 192 00:07:57,150 --> 00:08:00,580 >> Todo ben, entón o que se pasamos a citar? 193 00:08:00,580 --> 00:08:05,240 Canto tempo debe ser un nome típico do ser humano ser? 194 00:08:05,240 --> 00:08:07,492 Como moitos personaxes, 16? 195 00:08:07,492 --> 00:08:09,450 Estou supoñendo que puidésemos atopar alguén nesta sala 196 00:08:09,450 --> 00:08:13,210 onde á súa primeira engade última nome ten máis de 16 caracteres. 197 00:08:13,210 --> 00:08:14,850 Entón, o que é mellor do que iso, 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 Maior? 201 00:08:20,350 --> 00:08:20,980 30? 202 00:08:20,980 --> 00:08:21,855 >> Audiencia: [inaudível] 203 00:08:21,855 --> 00:08:23,700 DAVID Malan: 5.000, oh meu Deus. 204 00:08:23,700 --> 00:08:26,309 Entón, iso é probablemente un repositorio considerable límite superior, digamos así. 205 00:08:26,309 --> 00:08:28,350 E aquí nós medio que temos para facer unha chamada de xuízo. 206 00:08:28,350 --> 00:08:30,400 Como, non hai ningunha resposta correcta aquí. 207 00:08:30,400 --> 00:08:32,740 Infinito non é moi posible, porque estamos finalmente 208 00:08:32,740 --> 00:08:34,781 vai have-- estamos pode ir sen memoria. 209 00:08:34,781 --> 00:08:36,909 Entón, nós temos que facer unha xuízo nalgún momento. 210 00:08:36,909 --> 00:08:41,010 >> Moi común sería, por exemplo, para use-- e déixeme especificar CHAR aquí 211 00:08:41,010 --> 00:08:46,050 como antes-- 255 era literalmente o límite superior sobre este software de base de datos 212 00:08:46,050 --> 00:08:46,700 fai anos. 213 00:08:46,700 --> 00:08:48,575 E por iso, un gran número de seres humanos Quere só de dicir, todo ben. 214 00:08:48,575 --> 00:08:49,420 255 é o límite. 215 00:08:49,420 --> 00:08:50,620 Nós só usar o máximo. 216 00:08:50,620 --> 00:08:51,870 E iso é moi ridículo. 217 00:08:51,870 --> 00:08:55,060 Como, se está escribindo é alguén nomear a 200 caracteres máis, 218 00:08:55,060 --> 00:08:56,140 que un pouco ridículo. 219 00:08:56,140 --> 00:08:59,624 >> Pero lembre que non é ASCII o único sistema de carácteres. 220 00:08:59,624 --> 00:09:01,540 E así, especialmente nun chea de linguas asiáticas 221 00:09:01,540 --> 00:09:04,248 onde hai personaxes que non pode expresar en teclados como o meu US 222 00:09:04,248 --> 00:09:08,209 teclado, algúns personaxes realmente levar ata 16 bits en lugar de oito bits. 223 00:09:08,209 --> 00:09:10,250 E así, iso realmente non é tan irrazoável 224 00:09:10,250 --> 00:09:12,250 que necesitamos máis espazo se queremos caber 225 00:09:12,250 --> 00:09:16,252 caracteres maiores do que a propia US aqueles centrados nos tendían a discutir. 226 00:09:16,252 --> 00:09:17,460 Entón, necesitamos algún límite superior. 227 00:09:17,460 --> 00:09:21,470 Non sei o que é mellor, pero 255 é xeralmente un común. 228 00:09:21,470 --> 00:09:22,700 25 sente abaixo. 229 00:09:22,700 --> 00:09:23,857 16, 32 sentirse débil. 230 00:09:23,857 --> 00:09:25,690 Quere errar no lado de algo máis grande. 231 00:09:25,690 --> 00:09:27,330 Pero hai un trade off, como sempre. 232 00:09:27,330 --> 00:09:31,902 Cal é a quizais obvio trade off de reservar 255 caracteres 233 00:09:31,902 --> 00:09:33,360 para o nome de todos no meu base de datos? 234 00:09:33,360 --> 00:09:34,230 >> Audiencia: [inaudível] 235 00:09:34,230 --> 00:09:34,510 >> DAVID Malan: ¿Que é iso? 236 00:09:34,510 --> 00:09:35,430 >> Audiencia: [inaudível] 237 00:09:35,430 --> 00:09:37,138 >> DAVID Malan: É un gran cantidade de memoria, non? 238 00:09:37,138 --> 00:09:42,280 H-A-L-A-N. Acabo desperdiçado 250 caracteres só para almacenar o meu nome 239 00:09:42,280 --> 00:09:46,000 defensiva, só no caso de alguén na clase ten un nome moi longo. 240 00:09:46,000 --> 00:09:47,940 Isto parece unha compensación indebida. 241 00:09:47,940 --> 00:09:52,040 >> Así, verifícase que SQL, esta linguaxe de base de datos, 242 00:09:52,040 --> 00:09:55,480 realmente soporta algo chamado varchar ou CHAR variable. 243 00:09:55,480 --> 00:09:59,390 E este é o tipo de Niza, en que este permite que especifique un non fixo 244 00:09:59,390 --> 00:10:01,900 ancho, pero si, unha anchura variable. 245 00:10:01,900 --> 00:10:05,060 E máis concretamente, unha anchura máxima do campo. 246 00:10:05,060 --> 00:10:08,901 Así, isto significa que un nome pode ser non máis que 250 caracteres, 247 00:10:08,901 --> 00:10:10,150 pero certamente pode ser menor. 248 00:10:10,150 --> 00:10:11,733 E a base de datos vai ser intelixente. 249 00:10:11,733 --> 00:10:14,860 Se pór en M-A-L-A-N, iso só vai usar cinco, 250 00:10:14,860 --> 00:10:18,120 quizais seis bytes para como un carácter nulo de fuga, 251 00:10:18,120 --> 00:10:23,330 e non gastar un adicional 249 ou 250 bytes innecesariamente. 252 00:10:23,330 --> 00:10:27,380 >> Entón, iso parece que eu debería comezar con esta historia. 253 00:10:27,380 --> 00:10:29,140 Pero sempre hai un troco. 254 00:10:29,140 --> 00:10:33,024 Así, por unha banda, o nome de usuario teño especificada sendo codificado en 16, 255 00:10:33,024 --> 00:10:34,940 e quizais iso non era a chamada dereita, é posible que 256 00:10:34,940 --> 00:10:40,040 é, pero por que non usar VARCHARs para todo? 257 00:10:40,040 --> 00:10:42,020 >> Existe por unha razón. 258 00:10:42,020 --> 00:10:46,200 Por que non usar VARCHARs para cada campo cuxa lonxitude non sabe con antelación 259 00:10:46,200 --> 00:10:48,180 se parece ser unha gran cousa, non? 260 00:10:48,180 --> 00:10:50,482 Use só tanto espazo como precisa ata este límite? 261 00:10:50,482 --> 00:10:51,271 >> Audiencia: Slower. 262 00:10:51,271 --> 00:10:52,146 DAVID Malan: Speller? 263 00:10:52,146 --> 00:10:53,120 Audiencia: Faise lo máis lento? 264 00:10:53,120 --> 00:10:53,970 DAVID Malan: Ah, é máis lento. 265 00:10:53,970 --> 00:10:55,720 Bo, iso é case sempre a resposta, francamente. 266 00:10:55,720 --> 00:10:56,520 Como, cal é o intercambio? 267 00:10:56,520 --> 00:10:58,570 Quere custa máis espazo ou custa máis tempo. 268 00:10:58,570 --> 00:11:00,111 Entón, neste caso, pode ser máis lento. 269 00:11:00,111 --> 00:11:00,920 Por que? 270 00:11:00,920 --> 00:11:05,830 >> Audiencia: [inaudível] determinar [inaudível]. 271 00:11:05,830 --> 00:11:06,640 >> DAVID Malan: Good. 272 00:11:06,640 --> 00:11:09,670 Así, pode lembrar de mesmo PSED5, xogar coa súa visión 273 00:11:09,670 --> 00:11:12,750 ao dicionario, se ten que reservar memoria dinámica ou mantê- 274 00:11:12,750 --> 00:11:14,630 crecemento dun tapón, que realmente pode ser lento. 275 00:11:14,630 --> 00:11:16,963 Se ten que chamar malloc debaixo do capó e quizais 276 00:11:16,963 --> 00:11:19,610 iso é o que MySQL está facendo, entón seguramente que podería ser o caso. 277 00:11:19,610 --> 00:11:22,430 E se pensas xeito ao PSet-- ou mesmo 278 00:11:22,430 --> 00:11:26,340 Semanas dous, cando fixemos cousas como busca binaria ou mesmo busca lineal, 279 00:11:26,340 --> 00:11:30,690 unha das cousas agradables sobre cada palabra nunha base de datos ou cada palabra nunha columna 280 00:11:30,690 --> 00:11:33,690 sendo exactamente a mesma lonxitude, aínda un grupo enteiro dos personaxes 281 00:11:33,690 --> 00:11:37,390 estean en branco, é que pode usar acceso aleatorio nos seus datos, non? 282 00:11:37,390 --> 00:11:40,310 >> Se sabe que cada palabra é 16 caracteres de distancia, 283 00:11:40,310 --> 00:11:46,460 pode usar a aritmética de punteiro, por así falar, e ir en 16, 32, 48, 64, 284 00:11:46,460 --> 00:11:49,589 e pode simplemente saltar de inmediato, usando aritmética 285 00:11:49,589 --> 00:11:51,130 a calquera das palabras na súa base de datos. 286 00:11:51,130 --> 00:11:54,280 Tendo en conta que se é un varchar, o que non ten que facer? 287 00:11:54,280 --> 00:11:55,960 >> [Teléfono tocando] 288 00:11:55,960 --> 00:11:58,680 >> Se é un varchar, vostede Non pode empregar o acceso aleatorio. 289 00:11:58,680 --> 00:12:01,341 O que ten que buscar ou facer? 290 00:12:01,341 --> 00:12:01,840 Si? 291 00:12:01,840 --> 00:12:03,240 >> Audiencia: [inaudível] 292 00:12:03,240 --> 00:12:04,310 >> DAVID Malan: Olle través da liña whole-- 293 00:12:04,310 --> 00:12:06,518 por toda a lista ollando para o que, máis probable? 294 00:12:06,518 --> 00:12:08,356 Que tipo de valor especial? 295 00:12:08,356 --> 00:12:09,230 Audiencia: [inaudível] 296 00:12:09,230 --> 00:12:11,105 DAVID Malan: Mirando para os terminadores nulos 297 00:12:11,105 --> 00:12:13,637 que demarcar a separación de palabras. 298 00:12:13,637 --> 00:12:15,720 Entón, de novo, un intercambio, e non hai ningunha resposta correcta. 299 00:12:15,720 --> 00:12:18,380 Pero é aí, especialmente cando os usuarios chegan a ser moitos 300 00:12:18,380 --> 00:12:21,700 ea súa carga nos seus servidores, o número de persoas usando recibe alta, 301 00:12:21,700 --> 00:12:23,650 estas son realmente as decisións non triviais. 302 00:12:23,650 --> 00:12:26,640 Así, podemos deixar estes como este, pero imos rolar para abaixo a dereita 303 00:12:26,640 --> 00:12:27,332 aquí. 304 00:12:27,332 --> 00:12:30,290 Agora, hai un par de columnas onde temos que facer un xuízo. 305 00:12:30,290 --> 00:12:35,170 Será que ten sentido para permitir que un usuario de nome, nome de usuario dun usuario ou un usuario de 306 00:12:35,170 --> 00:12:36,370 nome, para ser nulo? 307 00:12:36,370 --> 00:12:37,610 É dicir, só en branco. 308 00:12:37,610 --> 00:12:40,360 Sente un pouco sen sentido, así que eu son non indo para comprobar as caixas. 309 00:12:40,360 --> 00:12:42,670 Pero resulta que nun base de datos, pode dicir, 310 00:12:42,670 --> 00:12:44,620 alguén pode incluso ter ese valor. 311 00:12:44,620 --> 00:12:47,180 Esta columna non teñen para realmente estar alí. 312 00:12:47,180 --> 00:12:48,570 >> Agora, hai este menú suspendido. 313 00:12:48,570 --> 00:12:50,810 E repare que eu son en primeira fila hai, 314 00:12:50,810 --> 00:12:52,520 así que eu estou falando sobre nome de usuario agora. 315 00:12:52,520 --> 00:12:56,290 E parece que unha base de datos, ao contrario dunha mera folla simple, 316 00:12:56,290 --> 00:12:58,520 ten as características poderosas chamados índices. 317 00:12:58,520 --> 00:13:02,600 E un índice é unha forma de dicir a base de datos con antelación que eu, o humano 318 00:13:02,600 --> 00:13:03,900 son máis intelixente do que. 319 00:13:03,900 --> 00:13:10,430 >> Sei que tipo de consultas, seleccione ou introducir ou eliminar ou actualización, 320 00:13:10,430 --> 00:13:13,182 que o meu código vai acabar facendo neste banco de datos. 321 00:13:13,182 --> 00:13:14,390 Quero ler unha morea de datos. 322 00:13:14,390 --> 00:13:15,681 Quero introducir unha gran cantidade de datos. 323 00:13:15,681 --> 00:13:17,530 Quero constantemente eliminar unha gran cantidade de datos. 324 00:13:17,530 --> 00:13:21,520 Se eu sei que vou ser accedendo un campo como usuario moito, 325 00:13:21,520 --> 00:13:24,770 Eu podo dicir a cautelarmente base de datos, sei máis que vostede, 326 00:13:24,770 --> 00:13:29,220 e quero decreto que ten que índice neste campo. 327 00:13:29,220 --> 00:13:33,200 Cando a indexar un campo ou unha columna significa que a base de datos de antemán 328 00:13:33,200 --> 00:13:37,040 debe pedir algunhas ideas de como, semana catro e cinco e seis do CS50 329 00:13:37,040 --> 00:13:39,240 e realmente construír-se algo así como unha busca binaria 330 00:13:39,240 --> 00:13:41,560 árbore ou algo xeralmente chamado dunha árbore B 331 00:13:41,560 --> 00:13:43,410 que ía aprender nunha clase como CS124 332 00:13:43,410 --> 00:13:46,710 en Harvard, unha clase de algoritmos, ou calquera número de outros lugares. 333 00:13:46,710 --> 00:13:49,570 >> A base de datos eo intelixente persoas que aplicaron 334 00:13:49,570 --> 00:13:53,880 Vai descubrir como almacenar que a táboa de información 335 00:13:53,880 --> 00:13:57,061 na memoria para que as investigacións e outras operacións son super rápido. 336 00:13:57,061 --> 00:13:58,060 Non ten que facelo. 337 00:13:58,060 --> 00:14:00,640 Non ten que aplicar busca lineal ou busca binaria 338 00:14:00,640 --> 00:14:03,300 ou mesturar tipo ou selección tipo, nada diso. 339 00:14:03,300 --> 00:14:06,590 A base de datos fai isto para vostede se dixo Lo cautelarmente ao índice neste campo. 340 00:14:06,590 --> 00:14:09,100 >> E podes ver tamén, hai algunhas outras características 341 00:14:09,100 --> 00:14:11,010 podemos dicir a base de datos de aplicar. 342 00:14:11,010 --> 00:14:16,431 O que isto pode significar que eu escoller Único dende este menú, só intuitivamente? 343 00:14:16,431 --> 00:14:16,930 Si? 344 00:14:16,930 --> 00:14:17,889 >> Audiencia: [inaudível] 345 00:14:17,889 --> 00:14:19,930 DAVID Malan: Si, o nome de usuario ten que ser único. 346 00:14:19,930 --> 00:14:23,330 Iso é unha cousa boa ou algo malo para unha base de datos, para un sitio cos usuarios? 347 00:14:23,330 --> 00:14:24,965 Nome de usuario debe ser único? 348 00:14:24,965 --> 00:14:25,880 Si, probablemente. 349 00:14:25,880 --> 00:14:27,800 Se é iso que o campo que usan para entrar, 350 00:14:27,800 --> 00:14:31,867 realmente non quere ter persoas a mesma sensación ou o mesmo nome de usuario. 351 00:14:31,867 --> 00:14:33,700 Así, podemos ter a base de datos de impoñer que así 352 00:14:33,700 --> 00:14:37,880 que agora no meu código PHP ou calquera idioma, Non teño para, por exemplo, comprobar 353 00:14:37,880 --> 00:14:41,490 necesariamente fai nome de usuario existe antes de deixar a alguén rexistrar-se? 354 00:14:41,490 --> 00:14:46,690 A base de datos non permitirá que dúas persoas nomeadas David ou Malans cadastre-se neste caso. 355 00:14:46,690 --> 00:14:50,030 >> E como un aparte, aínda que esta menú só permite escoller un, 356 00:14:50,030 --> 00:14:54,550 un índice único é aquel que é indexado polo desempeño super rápido, 357 00:14:54,550 --> 00:14:56,100 pero tamén reforza a singularidade. 358 00:14:56,100 --> 00:14:58,850 E nós imos volver ao que o outros dous dicir en só un momento. 359 00:14:58,850 --> 00:15:00,930 Mentres tanto, si é para miña segunda liña, que 360 00:15:00,930 --> 00:15:06,230 é o nome do usuario, eu debería especificar que o nome debe ser único? 361 00:15:06,230 --> 00:15:09,550 Non, porque podería certamente have-- non hai dúas David 362 00:15:09,550 --> 00:15:11,050 Malans nesta sala, máis probable. 363 00:15:11,050 --> 00:15:14,290 Pero escoller un nome diferente, poderiamos certamente ter colisións. 364 00:15:14,290 --> 00:15:16,130 >> Pense de novo hash táboas e similares. 365 00:15:16,130 --> 00:15:18,604 Entón, nós certamente non queremos para facer o campo nome exclusivo. 366 00:15:18,604 --> 00:15:21,270 Entón, nós só estamos indo a saír que, como trazo, trazo, trazo, nada. 367 00:15:21,270 --> 00:15:22,660 E eu vou deixar o resto só. 368 00:15:22,660 --> 00:15:25,035 Efectivamente, a maior parte destes campos non terá que preocuparse. 369 00:15:25,035 --> 00:15:27,830 E cando eu estou listo para salvar este, A Internet coopera, 370 00:15:27,830 --> 00:15:35,032 Eu prema Gardar, e moito, moito, moito lentamente que a base de datos son gardadas. 371 00:15:35,032 --> 00:15:37,240 E agora eu estou de volta a esta interfaz, que é certo que, 372 00:15:37,240 --> 00:15:38,680 é esmagadora, a primeira vista. 373 00:15:38,680 --> 00:15:42,450 Pero todo o que eu vou facer é premer na palabra Usuarios na parte superior esquerda. 374 00:15:42,450 --> 00:15:47,630 Eu estou indo a ir ata aquí, prema en Usuarios, e por defecto, 375 00:15:47,630 --> 00:15:50,180 ten executado algúns SQL, pero máis sobre iso nun momento. 376 00:15:50,180 --> 00:15:52,654 Aquí é só un resumo do que eu fixen. 377 00:15:52,654 --> 00:15:55,320 E non se preocupe que ve mencione do latín e do sueco aquí. 378 00:15:55,320 --> 00:16:00,490 Estas son só o patrón definicións, porque MySQL orixinalmente, 379 00:16:00,490 --> 00:16:04,000 ou PHP MyAdmin, un dos dous pasou a ser escrito por algunhas persoas suecas. 380 00:16:04,000 --> 00:16:06,100 Pero iso é irrelevante no noso caso aquí. 381 00:16:06,100 --> 00:16:08,280 >> Todo ben, entón por que é todo isto interesante? 382 00:16:08,280 --> 00:16:13,050 Acontece que, podo inserir datos nunha base de datos, escribindo código. 383 00:16:13,050 --> 00:16:15,940 E eu estou dalle no meu arquivo aquí, eu son 384 00:16:15,940 --> 00:16:19,000 indo a ir adiante e finxir que este está conectado a esa base de datos, que 385 00:16:19,000 --> 00:16:23,040 non é, no momento, pero vai ser cando chegamos ao problema definido sete. 386 00:16:23,040 --> 00:16:25,640 E eu estou indo a ir adiante e realizar unha función chamada de consulta, 387 00:16:25,640 --> 00:16:28,730 que dámoslle o problema definir código de distribución de sete, que 388 00:16:28,730 --> 00:16:31,490 leva polo menos un argumento, que é só unha cadea. 389 00:16:31,490 --> 00:16:33,460 A secuencia de código SQL. 390 00:16:33,460 --> 00:16:36,700 Entón, está a piques de aprender a escribir Structured Query Language. 391 00:16:36,700 --> 00:16:41,270 >> Se quero introducir unha nova liña na miña base de datos porque alguén teña presentado 392 00:16:41,270 --> 00:16:47,600 un formulario para o meu código, eu literalmente INSERT INTO usuarios escribir o seguinte 393 00:16:47,600 --> 00:16:52,800 campos: nome de usuario, coma, nome, os valores, 394 00:16:52,800 --> 00:16:57,480 e agora eu teño inserir algo así como Malan, e citas, 395 00:16:57,480 --> 00:17:01,490 unquote 'David Malan. E agora mesmo para os non familiarizados co SQL, 396 00:17:01,490 --> 00:17:07,830 por que está a usar comiñas simples dentro desa secuencia verde? 397 00:17:07,830 --> 00:17:10,790 398 00:17:10,790 --> 00:17:13,040 O que pode ser a razón aquí? 399 00:17:13,040 --> 00:17:14,609 >> Repare que eu son co-mestura dúas linguas. 400 00:17:14,609 --> 00:17:18,099 Consulta é unha función PHP pero é preciso un argumento. 401 00:17:18,099 --> 00:17:21,740 E que o argumento ten que ser el mesmo escrito noutra linguaxe chamada 402 00:17:21,740 --> 00:17:23,500 SQL, Structured Query Language. 403 00:17:23,500 --> 00:17:27,940 Entón, todo o que eu acabo de destaque aquí 404 00:17:27,940 --> 00:17:30,380 é esta linguaxe chamada SQL. 405 00:17:30,380 --> 00:17:36,290 Entón, o que hai coas comiñas simples, así como unha comprobación de sanidade rápida? 406 00:17:36,290 --> 00:17:37,324 Vai adiante. 407 00:17:37,324 --> 00:17:37,990 Son cadeas. 408 00:17:37,990 --> 00:17:41,590 Así, multimedia, unquote Malan e multimedia, unquote David Malan son cadeas. 409 00:17:41,590 --> 00:17:45,210 E só de pensar intuitivamente agora, saber o que vostede sabe sobre C e PHP, 410 00:17:45,210 --> 00:17:50,220 por que eu non facelo, o que eu costume comiñas usado para cadeas? 411 00:17:50,220 --> 00:17:52,310 Por que eu non quero facer iso? 412 00:17:52,310 --> 00:17:52,810 Si? 413 00:17:52,810 --> 00:17:53,685 >> Audiencia: [inaudível] 414 00:17:53,685 --> 00:17:56,695 415 00:17:56,695 --> 00:17:57,570 DAVID Malan: Exactamente. 416 00:17:57,570 --> 00:17:59,653 Porque eu xa estou usando comiñas no camiño 417 00:17:59,653 --> 00:18:01,929 fóra do argumento para a función de PHP, 418 00:18:01,929 --> 00:18:03,470 Quere só confundir o intérprete. 419 00:18:03,470 --> 00:18:04,860 Non vai saber que estes van xuntos? 420 00:18:04,860 --> 00:18:05,735 Será que estes andan xuntos? 421 00:18:05,735 --> 00:18:06,810 Será que estes andan xuntos? 422 00:18:06,810 --> 00:18:08,070 Entón, eu cambiar vez. 423 00:18:08,070 --> 00:18:11,784 >> Ou eu podería facer algo así, Cita barra invertida ou cita barra invertida. 424 00:18:11,784 --> 00:18:14,200 Francamente, que só comeza a ser moi lexible e feo. 425 00:18:14,200 --> 00:18:16,790 Pero iso iría conseguir o mesmo resultado que ben. 426 00:18:16,790 --> 00:18:19,760 >> Entón, se eu fose para executar este consulta agora, imos ver o que acontece. 427 00:18:19,760 --> 00:18:22,740 Eu estou indo a ir adiante agora e, en vez que executar o código PHP, que 428 00:18:22,740 --> 00:18:24,610 é o lugar onde vai xogar no conxunto de problemas de sete, 429 00:18:24,610 --> 00:18:27,200 Vou en vez de ir a PHP MyAdmin. 430 00:18:27,200 --> 00:18:29,770 E eu vou manualmente ir á pestana SQL, 431 00:18:29,770 --> 00:18:31,580 e déixeme facer zoom na interface. 432 00:18:31,580 --> 00:18:34,007 E eu vou pegar o a cousa que eu escriba. 433 00:18:34,007 --> 00:18:36,090 E o código de cores ten cambiou un pouco agora, 434 00:18:36,090 --> 00:18:38,750 só porque os formatos de programas cousas un pouco diferente. 435 00:18:38,750 --> 00:18:41,960 Pero teña en conta que todo o que eu fixen é que eu dixen, inserir en Usuarios. 436 00:18:41,960 --> 00:18:45,790 Eu xa indicado, entón, nunha coma lista separada entre parénteses os dous 437 00:18:45,790 --> 00:18:48,850 campos que desexa inserir e entón eu dixo literalmente valores 438 00:18:48,850 --> 00:18:51,510 seguido por outro paréntese, e, a continuación, os dous valores 439 00:18:51,510 --> 00:18:53,520 Quero plug-in, e agora a unha boa medida, 440 00:18:53,520 --> 00:18:55,010 Vou poñer un punto e coma ao final. 441 00:18:55,010 --> 00:18:56,570 Así, este non é C. Este non é o PHP. 442 00:18:56,570 --> 00:18:59,970 Este é agora o SQL, e eu estou colando- en esta interface baseada na web que é 443 00:18:59,970 --> 00:19:02,710 indo só para me deixar, así que eu prema en Ir, 444 00:19:02,710 --> 00:19:08,060 executar esta consulta na base de datos executar dentro do CS50 IDE. 445 00:19:08,060 --> 00:19:09,470 >> Entón, iso é bo. 446 00:19:09,470 --> 00:19:12,520 Teña en conta que dixo unha liña inserido, foi super rápido, 447 00:19:12,520 --> 00:19:15,190 0,0054 segundos para introducir os datos. 448 00:19:15,190 --> 00:19:16,610 Entón, iso soa moi saudable. 449 00:19:16,610 --> 00:19:19,350 El reflexa miña consulta para min aquí só para velo 450 00:19:19,350 --> 00:19:21,730 nunha especie de código de cores versión. 451 00:19:21,730 --> 00:19:24,540 Pero agora se eu premer Buscar, ter en conta que, aínda 452 00:19:24,540 --> 00:19:29,070 aínda que hai unha morea de lixo en a pantalla, miña mesa ten agora dúas liñas. 453 00:19:29,070 --> 00:19:30,700 >> Entón, deixe-me ir adiante e facer outra. 454 00:19:30,700 --> 00:19:33,760 Pola contra, déixeme vaia á guía SQL novo. 455 00:19:33,760 --> 00:19:40,723 E esta vez eu vou introducir algo Rob eo seu nome será Rob Bowden. 456 00:19:40,723 --> 00:19:42,330 Bowden. 457 00:19:42,330 --> 00:19:44,040 Imos prema Gardar. 458 00:19:44,040 --> 00:19:46,140 Oops, prefiro ir. 459 00:19:46,140 --> 00:19:48,890 >> Faga clic en Buscar de novo, e Agora repare en que eu teño dúas liñas. 460 00:19:48,890 --> 00:19:52,390 Entón, esa é só unha forma máis complexa forma de abrir Google Spreadsheets 461 00:19:52,390 --> 00:19:54,010 e só escribindo unha liña nunha columna. 462 00:19:54,010 --> 00:19:57,070 Pero o que é fundamental é que agora temos a sintaxe 463 00:19:57,070 --> 00:20:00,220 co cal a escribir código para que en definitiva, de feito, poderiamos 464 00:20:00,220 --> 00:20:01,790 facer algunha e iso. 465 00:20:01,790 --> 00:20:05,380 Lembre que soporte PHP Super variables globais. 466 00:20:05,380 --> 00:20:08,415 >> O que está dentro de dólar asinar subliñado GET en PHP? 467 00:20:08,415 --> 00:20:10,290 Nós demos un ollo a un ou dous exemplos simples. 468 00:20:10,290 --> 00:20:15,640 E en PSet6, lembro que ten Ola dot PHP que utiliza esa variable. 469 00:20:15,640 --> 00:20:17,870 O que pasa alí dentro? 470 00:20:17,870 --> 00:20:21,015 Ou o que é? 471 00:20:21,015 --> 00:20:22,522 Un pouco máis alto. 472 00:20:22,522 --> 00:20:23,790 >> Audiencia: [inaudível] 473 00:20:23,790 --> 00:20:25,030 >> DAVID Malan: É unha neve semente de matriz, a cal 474 00:20:25,030 --> 00:20:27,714 é só un xeito elegante de dicir unha matriz que ten pares de valores clave. 475 00:20:27,714 --> 00:20:28,880 E as teclas non son numéricos. 476 00:20:28,880 --> 00:20:30,420 Son palabras ou secuencias. 477 00:20:30,420 --> 00:20:32,750 E especialmente, o son os pares de chaves de valor? 478 00:20:32,750 --> 00:20:35,110 Onde é que veñen? 479 00:20:35,110 --> 00:20:35,620 Sentímolo? 480 00:20:35,620 --> 00:20:36,994 >> Audiencia: [inaudível] 481 00:20:36,994 --> 00:20:37,660 DAVID Malan: Non? 482 00:20:37,660 --> 00:20:40,700 Onde os clave valor pares vén? 483 00:20:40,700 --> 00:20:42,490 Diga de novo? 484 00:20:42,490 --> 00:20:44,610 Unha vez? 485 00:20:44,610 --> 00:20:46,472 Eu son o único que escoita algo? 486 00:20:46,472 --> 00:20:47,810 >> [Risas] 487 00:20:47,810 --> 00:20:49,042 >> É iso mesmo, non é? 488 00:20:49,042 --> 00:20:50,435 >> Audiencia: [inaudível] 489 00:20:50,435 --> 00:20:52,560 DAVID Malan: Si, veñen da secuencia de consulta. 490 00:20:52,560 --> 00:20:55,380 Entón, se volver o tempo para cando xoguei con Google 491 00:20:55,380 --> 00:20:59,600 e nós fomos para Google.com barra busca de interrogación q é igual a gatos, 492 00:20:59,600 --> 00:21:03,550 se eu fose para presionar Enter e Google foron aplicados en PHP, 493 00:21:03,550 --> 00:21:07,017 Código PHP que Google escribiu terían acceso ao sinal de dólar 494 00:21:07,017 --> 00:21:11,600 subliñado GET dentro do cal é unha clave chamada Q e un valor 495 00:21:11,600 --> 00:21:17,680 chamados gatos que poden ser despois usadas usado para facer unha procura real con. 496 00:21:17,680 --> 00:21:20,860 >> Entón, en realidade, o que eu vou facer agora é volver para o meu código PHP 497 00:21:20,860 --> 00:21:23,140 que de novo vai ver máis en PSet7. 498 00:21:23,140 --> 00:21:25,440 E no canto de chamar en valores codificados duros que 499 00:21:25,440 --> 00:21:27,630 non parece ser un moi website dinámico, 500 00:21:27,630 --> 00:21:30,680 Vou darlle un teaser do o código real faría. 501 00:21:30,680 --> 00:21:32,854 Vostede poñería en dous puntos de interrogación como este. 502 00:21:32,854 --> 00:21:34,270 Non sei o que é o nome de usuario. 503 00:21:34,270 --> 00:21:37,390 Non sei o que o nome vai ser, 504 00:21:37,390 --> 00:21:39,470 pero sei que podo obtelos de forma dinámica. 505 00:21:39,470 --> 00:21:43,420 >> Así, se o código que estamos escribindo agora o código en execución nos servidores de Google, 506 00:21:43,420 --> 00:21:46,940 ou se esta é Ola dot PHP, que vén con PSet6, 507 00:21:46,940 --> 00:21:48,650 Vou pasar a función de consulta 508 00:21:48,650 --> 00:21:51,450 así como printf, dous outros argumentos. 509 00:21:51,450 --> 00:21:57,120 GET, multimedia, nome de usuario pecha comiñas, e GET, multimedia, nome unquote. 510 00:21:57,120 --> 00:22:00,720 E agora, teña en conta o que o estrutura xeral é aquí. 511 00:22:00,720 --> 00:22:03,320 Teño á esquerda lado da chamada, 512 00:22:03,320 --> 00:22:05,480 esta función chamada consulta no PHP. 513 00:22:05,480 --> 00:22:08,160 Eu aínda teño como primeiro argumento, só unha secuencia de texto. 514 00:22:08,160 --> 00:22:11,000 >> Pero esa secuencia de texto escrito nunha linguaxe chamada SQL. 515 00:22:11,000 --> 00:22:12,616 E, francamente, non é unha gran lingua. 516 00:22:12,616 --> 00:22:14,990 Nós só imos falar formalmente hoxe, realmente. 517 00:22:14,990 --> 00:22:17,031 E entón, en conxunto de problemas sete, hai relativamente 518 00:22:17,031 --> 00:22:18,800 algunhas características que somos vai alavancar. 519 00:22:18,800 --> 00:22:22,530 Os puntos de interrogación, porén, significa conectar un valor aquí e plug o outro valor 520 00:22:22,530 --> 00:22:23,130 aquí. 521 00:22:23,130 --> 00:22:26,010 E observen, teño omitido o que de todo o maldito CITA-OS-- 522 00:22:26,010 --> 00:22:30,470 ele-- en torno á cotización sinala este tempo. 523 00:22:30,470 --> 00:22:34,930 Eu omitir a cotización marcas de todo o punto de interrogación, 524 00:22:34,930 --> 00:22:36,410 Sentímolo, esta vez. 525 00:22:36,410 --> 00:22:38,870 >> Entón, o que é agradable sobre este pregunta característica que marca 526 00:22:38,870 --> 00:22:42,830 PHP tende a apoiar, Ruby e Python e outras linguaxes, 527 00:22:42,830 --> 00:22:45,730 isto significa só plug nalgúns Valorados aquí e vostede sabe o que? 528 00:22:45,730 --> 00:22:48,300 Descubrir se usar comiñas simples ou dobres. 529 00:22:48,300 --> 00:22:50,966 Non me preocupar con aqueles intelectualmente detalles desinteressante. 530 00:22:50,966 --> 00:22:53,780 Pero asegúrese de que está correcto de xeito que o meu código é en definitiva, 531 00:22:53,780 --> 00:22:57,010 operativo e seguro, o que terá un significado moito tempo antes. 532 00:22:57,010 --> 00:23:00,460 >> Agora, cantos argumentos en total, só para ser claro, é a función de toma de consulta? 533 00:23:00,460 --> 00:23:05,240 534 00:23:05,240 --> 00:23:07,581 Quen queira votar en máis de dous? 535 00:23:07,581 --> 00:23:08,080 Tres? 536 00:23:08,080 --> 00:23:10,001 Claro, por que? 537 00:23:10,001 --> 00:23:10,920 Por que tres? 538 00:23:10,920 --> 00:23:12,305 >> Audiencia: [inaudível] 539 00:23:12,305 --> 00:23:13,180 DAVID Malan: Exactamente. 540 00:23:13,180 --> 00:23:14,610 A primeira parte é a cadea. 541 00:23:14,610 --> 00:23:18,640 O segundo argumento é sinal de dólar subliñado GET soporte de nome de usuario. 542 00:23:18,640 --> 00:23:21,950 E o terceiro argumento é o mesmo, pero só o nome. 543 00:23:21,950 --> 00:23:24,590 Así, noutras palabras, agora se eu tivese un formulario web 544 00:23:24,590 --> 00:23:27,149 que de campos de texto, unha para o nome do usuario, 545 00:23:27,149 --> 00:23:29,690 un para o seu nome, só como vería nunha web 546 00:23:29,690 --> 00:23:32,120 cando se rexistrar algún sitio web, que pode 547 00:23:32,120 --> 00:23:35,450 ser o código no back-end que realmente fai a inserción agora 548 00:23:35,450 --> 00:23:37,220 na base de datos. 549 00:23:37,220 --> 00:23:40,870 >> Agora pola contra, imos avanzar. 550 00:23:40,870 --> 00:23:43,840 Supoña que un usuario é agora o login e quere 551 00:23:43,840 --> 00:23:48,860 para escribir o código PHP que comprobar se a persoa que está só logueado 552 00:23:48,860 --> 00:23:52,250 é en realidade un usuario, podes usar unha sintaxe moi sinxela. 553 00:23:52,250 --> 00:23:55,832 Pode dicir SELECT, digamos Estrela, onde estrela significa todo. 554 00:23:55,832 --> 00:23:57,540 Non sei o que eu quere, entón me dea 555 00:23:57,540 --> 00:24:01,585 todas as columnas da táboa chamado de usuarios, onde, e iso é bo. 556 00:24:01,585 --> 00:24:03,710 Select soporta o que é chamado un predicado, que é 557 00:24:03,710 --> 00:24:06,630 como unha forma de cualificar o que quere. 558 00:24:06,630 --> 00:24:10,590 Onde nome de usuario é igual a Cita, unquote Malan. 559 00:24:10,590 --> 00:24:13,680 Entón, aquí tamén, eu teño incorporado dentro do argumento 560 00:24:13,680 --> 00:24:16,110 para unha función PHP, unha liña de código SQL. 561 00:24:16,110 --> 00:24:18,680 E que este código SQL tempo é, literalmente, indo 562 00:24:18,680 --> 00:24:21,790 para buscar citas, unquote Malan. 563 00:24:21,790 --> 00:24:24,420 >> Agora iso non é todo o que útil, entón eu vou saltar esa 564 00:24:24,420 --> 00:24:28,650 e eu vou aparcar esta información de Brady, e ir 565 00:24:28,650 --> 00:24:30,990 e plugin no canto un signo de interrogación aquí. 566 00:24:30,990 --> 00:24:33,290 Entón, só para quedar claro, o que debo dicir ao meu segundo argumento 567 00:24:33,290 --> 00:24:37,480 ser se alguén acaba sesión e eu querer comprobar se el ou ela é, en realidade, 568 00:24:37,480 --> 00:24:39,265 un usuario? 569 00:24:39,265 --> 00:24:40,140 Audiencia: [inaudível] 570 00:24:40,140 --> 00:24:40,890 DAVID Malan: Yeah. 571 00:24:40,890 --> 00:24:44,120 Escoito dólar signo subliñado Obter cotización, nome de usuario pecha comiñas. 572 00:24:44,120 --> 00:24:50,040 E que debe volver para min calquera das liñas no meu base de datos 573 00:24:50,040 --> 00:24:51,986 que ten un nome de Malan. 574 00:24:51,986 --> 00:24:54,860 Agora, esperamos, eu vou volver cero se non Malan estivo aquí, 575 00:24:54,860 --> 00:24:56,290 ou un, se ten. 576 00:24:56,290 --> 00:24:59,026 Non debería volver dous, tres ou catro. 577 00:24:59,026 --> 00:24:59,526 Por que? 578 00:24:59,526 --> 00:25:00,220 >> Audiencia: [inaudível] 579 00:25:00,220 --> 00:25:01,120 >> DAVID Malan: eu dixen orixinal, verdade? 580 00:25:01,120 --> 00:25:01,750 Razón simple. 581 00:25:01,750 --> 00:25:04,030 Porque eu dixen que ela ten que ser orixinal, só loxicamente, 582 00:25:04,030 --> 00:25:07,940 só se pode ter cero ou un Malans nesta táboa de base de datos particular. 583 00:25:07,940 --> 00:25:10,965 Agora, como un aparte, só para que xa viu que, a pesar de eu continuar usando GET 584 00:25:10,965 --> 00:25:14,350 e aínda PSet6 usado só GET, pode certamente ter POST. 585 00:25:14,350 --> 00:25:17,212 E lembrar que Publicar é outra técnica para a presentación de información 586 00:25:17,212 --> 00:25:19,170 dunha forma, pero non aparece na URL. 587 00:25:19,170 --> 00:25:22,690 É un pouco máis seguro, certamente, para cousas como nomes de usuarios e contrasinais, 588 00:25:22,690 --> 00:25:25,210 PSet7 que, en realidade, envolven. 589 00:25:25,210 --> 00:25:28,130 >> Entón, imos facelo en PHP MyAdmin e ver que pasa. 590 00:25:28,130 --> 00:25:30,020 Eu estou indo a ir á pestana de MySQL. 591 00:25:30,020 --> 00:25:34,450 E teña en conta que o valor por defecto para PHP MyAdmin, só para tratar de ser útil, 592 00:25:34,450 --> 00:25:37,050 é seleccionar estrela de usuarios onde un. 593 00:25:37,050 --> 00:25:39,430 Ben, un é sempre certo, así este ten o parvo eficaz 594 00:25:39,430 --> 00:25:40,400 de só seleccionar todo. 595 00:25:40,400 --> 00:25:42,691 Pero eu vou ser un pouco máis pedante e manualmente 596 00:25:42,691 --> 00:25:45,920 escribir selecciona Estrella usuarios. 597 00:25:45,920 --> 00:25:48,294 >> Agora, tecnicamente, pode citar o nome das táboas. 598 00:25:48,294 --> 00:25:50,460 É raro que ten que, pero observar esas non son 599 00:25:50,460 --> 00:25:52,240 súas citas normais do teclado estadounidense. 600 00:25:52,240 --> 00:25:54,760 Este é o chamado crase, que é xeralmente no lado superior esquerdo 601 00:25:54,760 --> 00:25:56,000 canto do teclado. 602 00:25:56,000 --> 00:25:58,500 Pero é raro que vai realmente se preocupe con iso, 603 00:25:58,500 --> 00:25:59,950 entón eu vou omitir-los de calquera maneira. 604 00:25:59,950 --> 00:26:02,280 Entón, agora, deixe-me ir adiante e bateu ir. 605 00:26:02,280 --> 00:26:06,616 E cantas liñas eu debería de volta cando selecciono estrela de usuarios? 606 00:26:06,616 --> 00:26:08,407 >> Audiencia: [inaudível] 607 00:26:08,407 --> 00:26:09,990 DAVID Malan: O número de liñas, con certeza. 608 00:26:09,990 --> 00:26:12,390 Pero como moitos nesta historia concreta agora? 609 00:26:12,390 --> 00:26:14,640 Dous, porque non había me e alí estaba Rob. 610 00:26:14,640 --> 00:26:19,370 Entón, se eu premer en Go, vexo que visualmente Recibín de volta, en realidade, dúas liñas. 611 00:26:19,370 --> 00:26:22,060 Hai unha morea de lixo no pantalla, pero eu só vexo dúas liñas. 612 00:26:22,060 --> 00:26:28,580 Por outra banda, se eu fai iso de novo e facer Seleccione Estrella usuarios, onde nome de usuario 613 00:26:28,580 --> 00:26:31,840 é igual a cita, pecha comiñas Malan, agora eu premer en Go, 614 00:26:31,840 --> 00:26:33,970 Eu só vou volver dunha liña. 615 00:26:33,970 --> 00:26:36,499 E, para rematar, se eu fai algo así, supoña 616 00:26:36,499 --> 00:26:38,290 que eu non me importa recibindo todo, 617 00:26:38,290 --> 00:26:41,020 que é tipo de sen sentido agora, porque hai só dúas columnas. 618 00:26:41,020 --> 00:26:43,103 Non é como eu estou seleccionando unha enorme cantidade de datos. 619 00:26:43,103 --> 00:26:46,720 Supoña que vai adiante e non SELECT nome DE 620 00:26:46,720 --> 00:26:51,990 usuarios, onde nome de usuario é igual Malan, o que é agradable sobre SQL honestamente, 621 00:26:51,990 --> 00:26:54,290 é que realmente só ten o que diga a el para facer. 622 00:26:54,290 --> 00:26:57,550 É moi sucinta, pero literalmente só diga a el o que quere facer. 623 00:26:57,550 --> 00:27:01,130 Seleccione o nome dos usuarios ONDE o nome de usuario é igual Malan. 624 00:27:01,130 --> 00:27:03,440 E iso realmente é que explícito. 625 00:27:03,440 --> 00:27:08,410 Entón, agora eu acertar Go, cantas liñas son eu que vou volver? 626 00:27:08,410 --> 00:27:10,770 Un, porque é só Malan, eu espero. 627 00:27:10,770 --> 00:27:13,100 Ou cero se non é Hai, pero un máximo. 628 00:27:13,100 --> 00:27:17,610 >> E cantas columnas eu vou volver? 629 00:27:17,610 --> 00:27:18,450 Cantas columnas? 630 00:27:18,450 --> 00:27:20,658 Esta vez, eu só vou para obter un, porque eu non fixen 631 00:27:20,658 --> 00:27:22,380 selecciona estrela, que é todo. 632 00:27:22,380 --> 00:27:27,900 Agora eu estou seleccionando só o nome, así que é só incorporarse de volta unha columna e unha liña. 633 00:27:27,900 --> 00:27:31,730 E parece tipo de forma adecuada ridículo, basta ollar super 634 00:27:31,730 --> 00:27:33,060 pequena como esta. 635 00:27:33,060 --> 00:27:34,290 Entón, o que está realmente a suceder? 636 00:27:34,290 --> 00:27:36,890 Cando realizar un SQL consulta usando select, 637 00:27:36,890 --> 00:27:38,700 o que está a recibir arredor da base de datos 638 00:27:38,700 --> 00:27:42,970 é como unha táboa temporal con liñas e columnas, quizais, 639 00:27:42,970 --> 00:27:46,260 pero que omitir calquera cousa que Non se realmente seleccionado por ti. 640 00:27:46,260 --> 00:27:49,010 Entón, é como se alguén tiña unha gran folla de todos os alumnos 641 00:27:49,010 --> 00:27:51,610 rexistrada para algúns grupo de estudantes, e di, 642 00:27:51,610 --> 00:27:55,097 darme todo o calouro que teño rexistrada para o noso grupo de alumnos, o que 643 00:27:55,097 --> 00:27:56,930 seu compañeiro no grupo de estudantes poden facer 644 00:27:56,930 --> 00:27:58,430 é que eles poderían só entregar lle toda a folla de cálculo. 645 00:27:58,430 --> 00:27:59,742 Isto é como dicir selecciona estrela. 646 00:27:59,742 --> 00:28:02,200 E é un pouco aburrido se só quería o calouro. 647 00:28:02,200 --> 00:28:05,640 E así, se, en vez dixo: selecciona estrela da táboa de base de datos 648 00:28:05,640 --> 00:28:08,470 onde ano é igual a Cita, calouro unquote, 649 00:28:08,470 --> 00:28:10,810 é coma se o seu amigo no grupo de estudante 650 00:28:10,810 --> 00:28:13,770 literalmente destacados e copiadas só as liñas Caloiro, 651 00:28:13,770 --> 00:28:16,780 colou-los nun novo Google Folla de cálculo ou un arquivo de Excel, 652 00:28:16,780 --> 00:28:18,860 e entregou ao o só como resultante de arquivo. 653 00:28:18,860 --> 00:28:21,710 Isto é todo o que está pasando en conceptualmente aquí. 654 00:28:21,710 --> 00:28:23,920 >> Entón, ao final, non podemos facer algunhas cousas moi extravagantes 655 00:28:23,920 --> 00:28:26,560 por almacenar cousas como nomes de usuarios e contrasinais e semellantes. 656 00:28:26,560 --> 00:28:30,310 Pero, ao parecer, hai fazê- un pouco diferente do que iso. 657 00:28:30,310 --> 00:28:34,750 Non é que intelixente só almacenar un nome de usuario e un contrasinal. 658 00:28:34,750 --> 00:28:37,790 Alguén antes, creo aquí abaixo, suxeriu un ID. 659 00:28:37,790 --> 00:28:40,787 Agora, un ID podería ser como un Harvard ID ou ID líquido de Yale, 660 00:28:40,787 --> 00:28:42,870 pero pode ser aínda máis simple no noso caso base de datos. 661 00:28:42,870 --> 00:28:45,120 E, de feito, o caso común é ter outra columna. 662 00:28:45,120 --> 00:28:46,953 E eu estou indo a ir adiante e editar a miña mesa. 663 00:28:46,953 --> 00:28:49,521 E se xogar con esta interface para PSet7, 664 00:28:49,521 --> 00:28:51,770 podes ver que podes consultar este botón aquí e engadir 665 00:28:51,770 --> 00:28:53,750 un campo no inicio da táboa. 666 00:28:53,750 --> 00:28:56,720 E agora, se eu premer en Go, que vai para me dar unha desas formas 667 00:28:56,720 --> 00:28:57,600 de antes. 668 00:28:57,600 --> 00:29:00,170 Eu estou indo a engadir un campo denominado ID. 669 00:29:00,170 --> 00:29:03,070 E eu estou indo a facelo un tipo numérico. 670 00:29:03,070 --> 00:29:05,362 >> Eu teño unha morea enteiro de valores para valores numéricos. 671 00:29:05,362 --> 00:29:08,677 Eu só vou escoller un INT e Non te preocupes cos tamaños diferentes. 672 00:29:08,677 --> 00:29:10,510 Non teño para especificar ou unha lonxitude dun valor, 673 00:29:10,510 --> 00:29:13,710 porque vai ser 32 bits, non importa o que. 674 00:29:13,710 --> 00:29:16,070 Atributos, non vimos antes. 675 00:29:16,070 --> 00:29:18,410 Calquera participación en calquera destes opcións de menú esta vez? 676 00:29:18,410 --> 00:29:21,890 677 00:29:21,890 --> 00:29:23,745 Para unha INT? 678 00:29:23,745 --> 00:29:24,620 Que propón? 679 00:29:24,620 --> 00:29:27,350 680 00:29:27,350 --> 00:29:28,445 Non? 681 00:29:28,445 --> 00:29:29,570 Algún destes ten sentido? 682 00:29:29,570 --> 00:29:30,536 Si. 683 00:29:30,536 --> 00:29:31,900 Si, sen sinatura, non? 684 00:29:31,900 --> 00:29:35,930 >> Xeralmente, se nós estamos indo dar- todos Número único, que 685 00:29:35,930 --> 00:29:38,200 é onde esta historia é indo, realmente só quere 686 00:29:38,200 --> 00:29:41,919 unha persoa a ter o número, tipo, cero e un e dous e tres e catro. 687 00:29:41,919 --> 00:29:43,710 Eu non teño que tratar con números negativos. 688 00:29:43,710 --> 00:29:45,210 Parece só unha complexidade innecesaria. 689 00:29:45,210 --> 00:29:48,470 Quero que catro millóns de valores posibles, non catro millóns valores posibles, 690 00:29:48,470 --> 00:29:50,699 entón eu só duplicou o capacidade da miña INT. 691 00:29:50,699 --> 00:29:53,490 Como un aparte, se quere relacionarse isto para algo así como Facebook, 692 00:29:53,490 --> 00:29:56,190 para atrás no tipo do meu día cando Facebook saíu primeiro, 693 00:29:56,190 --> 00:29:59,510 Eu creo que foron usando na súa base de datos MySQL 694 00:29:59,510 --> 00:30:02,856 para almacenar un usuario do identificador, era só un INT. 695 00:30:02,856 --> 00:30:05,230 Pero, claro, hai moito de persoas reais no mundo. 696 00:30:05,230 --> 00:30:07,438 Hai unha morea de teito Facebook contas no mundo. 697 00:30:07,438 --> 00:30:11,701 E por iso, finalmente, Facebook rebordou o tamaño dun INT, un catro millóns 698 00:30:11,701 --> 00:30:12,200 valor. 699 00:30:12,200 --> 00:30:15,032 É por iso que, se ollar arredor e hai sitios 700 00:30:15,032 --> 00:30:16,740 que poden dicir o que un ID único é. 701 00:30:16,740 --> 00:30:19,781 E se vostede non escolleu un nome de usuario Facebook, vai ver a súa identificación única. 702 00:30:19,781 --> 00:30:23,080 Creo que é PHP dot perfil punto de interrogação ID é igual a algo. 703 00:30:23,080 --> 00:30:27,210 Que agora é algo así como un gran INT, ou moito se quixeren, 704 00:30:27,210 --> 00:30:29,700 que é un valor de 64 bits ou algo comparable. 705 00:30:29,700 --> 00:30:33,620 >> Así, mentres que no mundo real facer estes cuestións ao final, ás veces importa. 706 00:30:33,620 --> 00:30:37,600 E pasa aquí, se eu son dando todos os meus usuarios unha identificación única, 707 00:30:37,600 --> 00:30:41,750 Quero ser super explícita e minimamente facer ese campo único. 708 00:30:41,750 --> 00:30:44,750 Pero resulta aí é unha peza de nomenclatura tamén hoxe 709 00:30:44,750 --> 00:30:46,470 que é unha chave primaria. 710 00:30:46,470 --> 00:30:49,800 Se está designado unha base de datos mesa e vostede sabe con antelación 711 00:30:49,800 --> 00:30:55,580 que unha das columnas desa táboa debe e pode identificar exclusivamente liñas 712 00:30:55,580 --> 00:30:58,500 na táboa, quere especificalo lo e dicir a base de datos, 713 00:30:58,500 --> 00:31:00,250 esta é a miña chave primaria. 714 00:31:00,250 --> 00:31:02,110 Pode haber dobre noutros campos, 715 00:31:02,110 --> 00:31:06,330 pero eu estou dicindo a base de datos que este é a miña principal, o meu campo máis importante, 716 00:31:06,330 --> 00:31:08,420 que é garantía para ser exclusivo. 717 00:31:08,420 --> 00:31:09,660 >> Agora, iso parece redundante. 718 00:31:09,660 --> 00:31:13,830 Agora estou propondo que engadir premendo Gardar aquí, 719 00:31:13,830 --> 00:31:17,210 un called-- campo e eu vou para ir adiante e prema AI, 720 00:31:17,210 --> 00:31:19,720 imos voltar a que nun momento, gardar. 721 00:31:19,720 --> 00:31:22,540 Estou propoñendo agora que miña mesa semellante a esta. 722 00:31:22,540 --> 00:31:26,305 Eu teño un campo INT chamado ID, un campo CHAR chamado usuario, 723 00:31:26,305 --> 00:31:31,100 un campo varchar denominado Nome pero ID, se é primario e, polo tanto, único, 724 00:31:31,100 --> 00:31:33,760 por que eu só residuos tempo introducindo o que 725 00:31:33,760 --> 00:31:39,140 efectivamente é unha segunda exclusiva campo chamado ID que é unha INT? 726 00:31:39,140 --> 00:31:41,980 >> Nome de usuario, recall, foi Xa único, dixo. 727 00:31:41,980 --> 00:31:45,350 Entón, só tes que loxicamente, non calquera experiencia de base de datos á razón 728 00:31:45,350 --> 00:31:47,570 por iso, por que Eu podería ter introducido 729 00:31:47,570 --> 00:31:50,065 un INT como meu identificador único ben? 730 00:31:50,065 --> 00:31:52,740 731 00:31:52,740 --> 00:31:53,930 O que está isto-- dicir de novo? 732 00:31:53,930 --> 00:31:55,580 >> Audiencia: [inaudível] 733 00:31:55,580 --> 00:31:59,534 >> DAVID Malan: Random o acceso é máis fácil, por que? 734 00:31:59,534 --> 00:32:00,410 >> Audiencia: [inaudível] 735 00:32:00,410 --> 00:32:02,367 DAVID Malan: Si, é só acceder números. 736 00:32:02,367 --> 00:32:04,750 Entón, se pensas deste verdadeiramente é unha táboa, como unha matriz, 737 00:32:04,750 --> 00:32:07,690 agora eu teño identificadores únicos que podo ir ao redor. 738 00:32:07,690 --> 00:32:11,520 E aínda mellor que iso é que quão grande é unha INT será de novo? 739 00:32:11,520 --> 00:32:14,450 740 00:32:14,450 --> 00:32:15,800 32 bits ou catro bytes. 741 00:32:15,800 --> 00:32:17,750 >> Que grande é o meu nome será? 742 00:32:17,750 --> 00:32:20,310 743 00:32:20,310 --> 00:32:21,990 Maxima? 744 00:32:21,990 --> 00:32:22,880 16 bytes. 745 00:32:22,880 --> 00:32:26,080 >> Entón, se está realmente se preocupar con o desempeño do seu código, 746 00:32:26,080 --> 00:32:31,390 creo que volta a PSet5, preferiría para buscar un valor de catro bytes ou un 16 747 00:32:31,390 --> 00:32:32,240 valor byte, non? 748 00:32:32,240 --> 00:32:33,810 É realmente tan sinxelo que iso. 749 00:32:33,810 --> 00:32:38,060 Ten que facer catro veces máis traballo para buscar nomes de usuarios porque estes 750 00:32:38,060 --> 00:32:38,830 son 16 bytes. 751 00:32:38,830 --> 00:32:41,320 Entón, ten que, literalmente, comparar os 16 bytes sendo 752 00:32:41,320 --> 00:32:43,140 Comproba se si, iso é nome de usuario que quero. 753 00:32:43,140 --> 00:32:46,610 Mentres que para unha INT, pode facelo con só catro bytes. 754 00:32:46,610 --> 00:32:49,212 >> E como un aparte para os interesado en hardware de ordenador, 755 00:32:49,212 --> 00:32:52,420 verifícase que pode caber algo un INT ou un valor de 32 bits en algo 756 00:32:52,420 --> 00:32:55,330 chamado un rexistro dun ordenador CPU, o que significa que é super, 757 00:32:55,330 --> 00:32:58,400 super rápido, mesmo co menor nivel de hardware do ordenador. 758 00:32:58,400 --> 00:33:00,530 Así, non hai só vantaxes de todo. 759 00:33:00,530 --> 00:33:01,530 Entón, o que significa isto? 760 00:33:01,530 --> 00:33:04,850 En realidade, cando está designado un base de datos de táboa, a case totalidade do tempo 761 00:33:04,850 --> 00:33:07,170 está indo a non ter só os datos que lle interesa, 762 00:33:07,170 --> 00:33:09,280 pero tamén algo un identificador único 763 00:33:09,280 --> 00:33:11,280 porque iso vai déixenos facer outras cousas. 764 00:33:11,280 --> 00:33:13,160 E imos tropezar un problema aquí. 765 00:33:13,160 --> 00:33:15,990 >> Supoña que os usuarios non teñen só nomes de usuarios e nomes, 766 00:33:15,990 --> 00:33:19,540 pero eles tamén teñen cousas como cidades e os estados e códigos postais, polo menos, 767 00:33:19,540 --> 00:33:20,432 aquí en Estados Unidos. 768 00:33:20,432 --> 00:33:22,390 Entón, eu estou indo a ir adiante e só dicir rapidamente, 769 00:33:22,390 --> 00:33:26,180 Dáme tres columnas ao final da táboa. 770 00:33:26,180 --> 00:33:28,900 E iso vai ser City, este será Estado, 771 00:33:28,900 --> 00:33:30,400 e iso vai ser Zip. 772 00:33:30,400 --> 00:33:32,710 >> Agora tipo City, que datos esta debe ser, quizais? 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 Non sei o que o cidade nome é. 776 00:33:37,780 --> 00:33:40,571 Nalgún lugar en América, hai probablemente, algúns ridiculamente palabra longa, 777 00:33:40,571 --> 00:33:43,605 entón imos só ir con 255, algo historicamente ou arbitraria. 778 00:33:43,605 --> 00:33:44,730 Estado, o que quere facer? 779 00:33:44,730 --> 00:33:48,380 780 00:33:48,380 --> 00:33:50,367 Chamada de xuízo, non? 781 00:33:50,367 --> 00:33:51,700 O que é quizais o máis eficiente? 782 00:33:51,700 --> 00:33:53,500 Cantas personaxes? 783 00:33:53,500 --> 00:33:55,950 Quizais só dúas, se pudermos se safar facendo só, 784 00:33:55,950 --> 00:33:58,250 como, MA para Massachusetts e así por diante. 785 00:33:58,250 --> 00:34:00,520 Entón, eu estou indo a ir un valor CHAR de dous. 786 00:34:00,520 --> 00:34:03,080 >> CEP é moi interesante. 787 00:34:03,080 --> 00:34:06,679 Estamos aquí en 02138, de xeito que suxire que deberiamos usar o que? 788 00:34:06,679 --> 00:34:07,470 É un INT, non? 789 00:34:07,470 --> 00:34:10,030 790 00:34:10,030 --> 00:34:12,800 INT, INT, curto? 791 00:34:12,800 --> 00:34:14,521 Curto ía funcionar. 792 00:34:14,521 --> 00:34:15,020 Non? 793 00:34:15,020 --> 00:34:18,920 794 00:34:18,920 --> 00:34:20,870 CHAR ou cinco, pero eu quero un INT. 795 00:34:20,870 --> 00:34:23,710 Por que empurrar cara atrás nun INT? 796 00:34:23,710 --> 00:34:26,820 Persuadirme deste. 797 00:34:26,820 --> 00:34:29,210 O que é parvo sobre un INT, a miña idea? 798 00:34:29,210 --> 00:34:29,871 Si. 799 00:34:29,871 --> 00:34:31,199 >> Audiencia: Tomé-se máis memoria. 800 00:34:31,199 --> 00:34:32,909 >> DAVID Malan: Tomé-se máis memoria. 801 00:34:32,909 --> 00:34:35,310 Catro bytes, pero é propoñendo un código postal 802 00:34:35,310 --> 00:34:39,000 como cinco bytes ou alguén era como un CHAR, que se sente como eh, iso non é realmente 803 00:34:39,000 --> 00:34:39,620 o caso. 804 00:34:39,620 --> 00:34:40,489 >> Ben, historia divertida. 805 00:34:40,489 --> 00:34:43,179 Anos, cando eu adoitaba usar Microsoft Outlook para o meu correo electrónico, 806 00:34:43,179 --> 00:34:45,150 Finalmente quería cambiar a Gmail. 807 00:34:45,150 --> 00:34:48,949 E así, eu exportados toda a miña contactos de Outlook como un ficheiro CSV. 808 00:34:48,949 --> 00:34:50,699 Valores separados por comas, que significaba que eu 809 00:34:50,699 --> 00:34:54,060 tiña todos os meus amigos e último nomes nomes e números de teléfono e códigos postais 810 00:34:54,060 --> 00:34:54,747 e todo iso. 811 00:34:54,747 --> 00:34:56,580 E entón eu fixen a erro de abrilo 812 00:34:56,580 --> 00:34:58,640 en Excel, que é un programa de folla de cálculo que 813 00:34:58,640 --> 00:35:00,289 entende arquivos CSV, como vimos. 814 00:35:00,289 --> 00:35:03,080 Pero entón, eu debo ter batido, como, Mando ou control S nun punto. 815 00:35:03,080 --> 00:35:06,250 E Excel, aparentemente no momento tiña unha característica en que en calquera momento se 816 00:35:06,250 --> 00:35:08,100 viu un número, tentou ser útil. 817 00:35:08,100 --> 00:35:11,610 E se ese número comezou con ceros, sería só se librar deles. 818 00:35:11,610 --> 00:35:13,420 Por que precisa de liderado ceros na enteiros? 819 00:35:13,420 --> 00:35:15,140 Son sen sentido, matematicamente. 820 00:35:15,140 --> 00:35:17,530 Eles non son sen sentido no sistema US Postal. 821 00:35:17,530 --> 00:35:19,954 Entón, eu tiven hai anos, a este día, eu 822 00:35:19,954 --> 00:35:22,370 ter amigos que, cando o caso raro que eu teño de alguén é 823 00:35:22,370 --> 00:35:24,078 abordar estes días, Eu vou ver que eu 824 00:35:24,078 --> 00:35:26,767 teño un amigo en Cambridge, Massachusetts, 2138. 825 00:35:26,767 --> 00:35:29,350 E é irritante se está tentar resolver de forma programática 826 00:35:29,350 --> 00:35:30,975 xerar sobres ou simplemente anota-a. 827 00:35:30,975 --> 00:35:33,599 E iso é por mor desta razón, Eu escollín o tipo de datos mal. 828 00:35:33,599 --> 00:35:34,490 Entón, eu amo a súa idea. 829 00:35:34,490 --> 00:35:35,650 Imos usar un campo CHAR. 830 00:35:35,650 --> 00:35:38,340 Cinco personaxes, con excepción hai un caso de canto. 831 00:35:38,340 --> 00:35:42,220 Se aínda enviar correo electrónico, ás veces, códigos postais nos días de hoxe, 832 00:35:42,220 --> 00:35:45,360 son, como, máis catro. 833 00:35:45,360 --> 00:35:48,200 Entón, necesitamos un guión e, a continuación, necesitamos máis catro números. 834 00:35:48,200 --> 00:35:50,330 Entón, para ser honesto, podería ir moitas formas diferentes. 835 00:35:50,330 --> 00:35:52,371 >> De momento, eu vou seguir o simple e eu son só 836 00:35:52,371 --> 00:35:54,780 vai dicir que é un cinco valor CHAR e estamos 837 00:35:54,780 --> 00:35:56,739 vai saltar todo o trazo máis catro. 838 00:35:56,739 --> 00:35:58,280 Pero estes son os tipos de compensacións. 839 00:35:58,280 --> 00:36:00,196 E pode pensar no mesmos problemas derivados 840 00:36:00,196 --> 00:36:01,860 con números de teléfono ou outros campos. 841 00:36:01,860 --> 00:36:04,350 >> E agora, que é, en realidade, unha estrada tola de ir para abaixo. 842 00:36:04,350 --> 00:36:08,000 Supoña que tanto Rob e eu e Hannah e María e [? Davon?] E Andy 843 00:36:08,000 --> 00:36:12,820 e outros sobre o equipo todo en directo en Cambridge, Massachusetts, 02138. 844 00:36:12,820 --> 00:36:17,970 Isto realmente me sinto idiota que eu son engadindo a miña táboa de usuarios, cidade, provincia, 845 00:36:17,970 --> 00:36:18,630 e zip. 846 00:36:18,630 --> 00:36:20,980 Por que? 847 00:36:20,980 --> 00:36:21,960 >> Audiencia: [inaudível] 848 00:36:21,960 --> 00:36:22,918 >> DAVID Malan: Diga novo? 849 00:36:22,918 --> 00:36:24,310 Audiencia: [inaudível] 850 00:36:24,310 --> 00:36:25,850 >> DAVID Malan: Son sempre indo a ir xuntos, non? 851 00:36:25,850 --> 00:36:28,660 Cando se ve, estamos afeitos a pensar este era o caso ata que exhaustivamente 852 00:36:28,660 --> 00:36:30,570 buscou todo os Estados Unidos, e botan que hai 853 00:36:30,570 --> 00:36:32,653 son algunhas inconsistencias onde varias cidades teñen 854 00:36:32,653 --> 00:36:35,060 o mesmo zip, o que é raro. 855 00:36:35,060 --> 00:36:40,580 Pero, se por agora estipulan que 02138 sempre de Cambridge, Massachusetts, 856 00:36:40,580 --> 00:36:44,910 por que no mundo que almacenar base de datos e Cambridge MA e 02138 857 00:36:44,910 --> 00:36:49,357 para min e para Hannah e para Rob e para [? Davon?] E para os outros que viven 858 00:36:49,357 --> 00:36:51,190 aquí en Cambridge, é perfectamente redundante. 859 00:36:51,190 --> 00:36:54,480 >> Debemos fuxir con só almacenar o que? 860 00:36:54,480 --> 00:36:55,610 Só o código postal. 861 00:36:55,610 --> 00:36:58,660 Pero entón, se nós gardados só o código postal, quero probablemente 862 00:36:58,660 --> 00:37:02,160 para o meu sitio para saber onde é 02138. 863 00:37:02,160 --> 00:37:03,910 Entón, eu teño outra táboa. 864 00:37:03,910 --> 00:37:04,697 E iso é OK. 865 00:37:04,697 --> 00:37:07,530 E, de feito, este é un dos procesos de proxecto de deseño de táboas 866 00:37:07,530 --> 00:37:11,472 que vai facer en PSet7 ben polo cal Quere fatorar datos comúns. 867 00:37:11,472 --> 00:37:14,430 Así como vimos fatoração código común e factoring out común 868 00:37:14,430 --> 00:37:17,380 estilos CSS, aquí tamén na base de datos, 869 00:37:17,380 --> 00:37:21,180 se eu só precisa 02.138 para singularmente identificar alguén da cidade natal, 870 00:37:21,180 --> 00:37:25,020 non garde Cambridge, Mass para cada usuario danado na súa táboa. 871 00:37:25,020 --> 00:37:29,770 >> Pola contra, ter unha táboa separada chamada Zips que debe ter o que columnas? 872 00:37:29,770 --> 00:37:33,490 Probablemente, un campo ID, só porque, para os principios que estamos a falar agora. 873 00:37:33,490 --> 00:37:35,720 Probablemente un campo zip para 02138. 874 00:37:35,720 --> 00:37:38,400 E entón, probablemente, o que os outros columnas? 875 00:37:38,400 --> 00:37:42,950 Cidade e estado, pero só ten unha liña para 02.138, unha liña para 02.139, 876 00:37:42,950 --> 00:37:44,772 unha liña para 90210. 877 00:37:44,772 --> 00:37:46,730 E iso é, literalmente, todos os códigos postais que eu coñezo. 878 00:37:46,730 --> 00:37:49,012 >> Entón, agora, o que pode facer? 879 00:37:49,012 --> 00:37:51,220 Isto é problemático, xa que agora eu teño dúas táboas. 880 00:37:51,220 --> 00:37:54,660 Entón, os meus usuarios son na súa maioría por aquí, pero a súa información de estado da cidade é 881 00:37:54,660 --> 00:37:55,390 por aquí. 882 00:37:55,390 --> 00:37:58,635 Así, verifícase co SQL, non hai de feito, unha forma de xuntar información, 883 00:37:58,635 --> 00:38:00,470 e vai ver que no PSet. 884 00:38:00,470 --> 00:38:03,000 >> Pero resulta que pode facer algo así. 885 00:38:03,000 --> 00:38:10,501 Seleccione Estrella usuarios, zips Rexistrarse ON usuarios dot zip é igual a zips dot zip. 886 00:38:10,501 --> 00:38:13,360 Que é un pouco prolixo, reconhecidamente, pero iso só 887 00:38:13,360 --> 00:38:17,590 significa seleccionar todo, dende o proceso de toma de miña táboa de usuarios 888 00:38:17,590 --> 00:38:19,580 e miña mesa zips. 889 00:38:19,580 --> 00:38:22,120 Xunto a eles por un campo que teñen en columna. 890 00:38:22,120 --> 00:38:24,780 Entón, literalmente facendo algo así, e darme de volta 891 00:38:24,780 --> 00:38:27,360 unha nova táboa temporal iso é máis amplo, que é maior, 892 00:38:27,360 --> 00:38:29,450 que ten todo o columnas de ambos. 893 00:38:29,450 --> 00:38:33,510 E que, moi simplemente, sería o sintaxe para facer algo coma isto. 894 00:38:33,510 --> 00:38:35,540 >> Entón, hai esa fronte, pero aí vai 895 00:38:35,540 --> 00:38:38,950 ser outras decisións de proxecto vai ten que facer, non só cos índices 896 00:38:38,950 --> 00:38:40,550 pero tamén executar en desafíos. 897 00:38:40,550 --> 00:38:43,360 De feito, hai un reto en calquera proxecto de base de datos 898 00:38:43,360 --> 00:38:47,930 polo que, ás veces, dúas persoas poden querer para acceder as mesmas liñas da base de datos 899 00:38:47,930 --> 00:38:48,530 táboa. 900 00:38:48,530 --> 00:38:51,450 Entón, iso é algo que imos atopar en PSet7 ben. 901 00:38:51,450 --> 00:38:54,686 >> Pero eu penso que eu ía ver un ataque que é posible en SQL. 902 00:38:54,686 --> 00:38:56,560 Cales son algunhas das problemas que poden xurdir? 903 00:38:56,560 --> 00:38:58,170 Entón, vai atopar iso en PSet7. 904 00:38:58,170 --> 00:39:01,874 E dicimos-lle abertamente o que o solución de codificación para este problema é. 905 00:39:01,874 --> 00:39:04,790 Pero se tomar unha clase de nivel superior, especialmente en sistemas operativos, 906 00:39:04,790 --> 00:39:06,950 vai atopar unha cuestión de atomicidade, 907 00:39:06,950 --> 00:39:10,080 o problema de tentar facer varias cousas á vez 908 00:39:10,080 --> 00:39:11,000 sen interrupción. 909 00:39:11,000 --> 00:39:14,560 >> E eu penso que eu ía introducir esta idea para PSet7 cunha metáfora 910 00:39:14,560 --> 00:39:18,160 que eu mesmo aprendín en Margo Sistemas operativos CS164 do Seltzer 911 00:39:18,160 --> 00:39:18,990 anos de clase atrás. 912 00:39:18,990 --> 00:39:22,230 Supoña que vostede ten un destes dormitorio frigoríficos no seu cuarto do dormitorio ou casa, 913 00:39:22,230 --> 00:39:24,474 e ten unha propensión real para leite. 914 00:39:24,474 --> 00:39:27,140 E así, chega na casa a partir de clases un día, abrir a neveira. 915 00:39:27,140 --> 00:39:27,620 Oh, droga. 916 00:39:27,620 --> 00:39:28,870 Non hai leite no frigorífico. 917 00:39:28,870 --> 00:39:32,470 Así, pechar o frigorífico, pechar a porta, bloquear o seu dormitorio, 918 00:39:32,470 --> 00:39:34,770 camiñar á volta da esquina a CVS, entrar na cola, 919 00:39:34,770 --> 00:39:36,312 e comezar a comprobar un pouco de leite. 920 00:39:36,312 --> 00:39:38,978 E iso vai levar un tempo, porque os maldita auto check-out 921 00:39:38,978 --> 00:39:40,570 contadores levar unha eternidade para usar de calquera maneira. 922 00:39:40,570 --> 00:39:41,950 Entón, mentres tanto, o seu compañeiro de cuarto chega na casa. 923 00:39:41,950 --> 00:39:43,470 El ou ela realmente lle gusta de leite tamén. 924 00:39:43,470 --> 00:39:45,520 Veñen á sala de dormitorio, abrir a neveira, oh, danado. 925 00:39:45,520 --> 00:39:46,490 Non hai máis leite. 926 00:39:46,490 --> 00:39:49,040 >> Entón, el ou ela tamén vai á volta da esquina. 927 00:39:49,040 --> 00:39:51,670 Pero agora, xa que non hai como dous ou tres ou catro CVSes preto, 928 00:39:51,670 --> 00:39:53,800 acontecen para ir a un dos diferentes persoas na praza. 929 00:39:53,800 --> 00:39:55,830 E agora, a poucos minutos máis tarde, tanto de ti 930 00:39:55,830 --> 00:39:58,060 chegar a casa e Ugh, peor problema que nunca. 931 00:39:58,060 --> 00:40:00,967 Agora tes moito leite que vai aceda. 932 00:40:00,967 --> 00:40:03,050 E lle gusta de leite, pero realmente non gusta de leite. 933 00:40:03,050 --> 00:40:06,730 >> Entón, agora, este foi un caros erro, porque tanto de ti 934 00:40:06,730 --> 00:40:09,870 tomou unha decisión sobre a base do estado de variable que algúns 935 00:40:09,870 --> 00:40:12,660 estaba no proceso de sendo cambiado por ti, 936 00:40:12,660 --> 00:40:14,560 o iniciador de ir para obter leite. 937 00:40:14,560 --> 00:40:17,785 Entón, o que é, quizais, un ser humano solución para este problema? 938 00:40:17,785 --> 00:40:18,660 Audiencia: [inaudível] 939 00:40:18,660 --> 00:40:19,430 DAVID Malan: Deixe unha nota, non? 940 00:40:19,430 --> 00:40:21,850 Sempre deixe unha nota, se está familiarizado con este show. 941 00:40:21,850 --> 00:40:23,100 Si, hai dous de nós. 942 00:40:23,100 --> 00:40:25,940 Entón, sempre deixar unha nota, ou literalmente bloquear o neveira 943 00:40:25,940 --> 00:40:28,602 con algún tipo de cadeado ou algo sobre a parte superior así. 944 00:40:28,602 --> 00:40:31,310 Pero iso realmente vai ser problema clave de deseño de base de datos, 945 00:40:31,310 --> 00:40:34,710 especialmente cando se pode ter varios navegadores, varios portátiles, 946 00:40:34,710 --> 00:40:37,450 varios usuarios todos intentando actualizar a información dunha soa vez. 947 00:40:37,450 --> 00:40:40,590 A información particularmente sensibles como información financeira, 948 00:40:40,590 --> 00:40:43,350 que cunha negociación de accións web como estará construíndo, 949 00:40:43,350 --> 00:40:47,270 E se queres comprobar canto diñeiro tes e, a continuación, se ten o suficiente, 950 00:40:47,270 --> 00:40:48,490 mercar algunhas accións? 951 00:40:48,490 --> 00:40:50,899 >> Pero e se alguén que ten unha conta conxunta con vostede 952 00:40:50,899 --> 00:40:52,690 é tentando ao mesmo tempo para mercar algunhas accións? 953 00:40:52,690 --> 00:40:55,190 Entón, el ou ela é a comprobación da Saldo da conta, tanto de ti 954 00:40:55,190 --> 00:40:57,540 recibir de volta o mesmo resposta, non hai leite. 955 00:40:57,540 --> 00:41:00,580 Ou tanto de volver a resposta, tes R $ 100 na súa conta. 956 00:41:00,580 --> 00:41:04,680 Tanto de tentar tomar a decisión para mercar un cota de preto de accións da empresa. 957 00:41:04,680 --> 00:41:06,130 >> E agora, o que pasa? 958 00:41:06,130 --> 00:41:07,140 Ten dúas partes? 959 00:41:07,140 --> 00:41:08,420 Non ten accións? 960 00:41:08,420 --> 00:41:10,320 Problemas como a que pode xurdir. 961 00:41:10,320 --> 00:41:11,755 Entón, a xente vai atopar iso. 962 00:41:11,755 --> 00:41:14,630 Ataques de inxección SQL, por sorte, son algo que vai axudar con, 963 00:41:14,630 --> 00:41:17,430 pero estes son atrozmente comúns a día de hoxe aínda. 964 00:41:17,430 --> 00:41:18,680 Entón, este é só un exemplo. 965 00:41:18,680 --> 00:41:21,290 Eu non fago ningunha reivindicación que Sistema de Harvard PIN está 966 00:41:21,290 --> 00:41:23,130 vulnerables a este ataque en particular. 967 00:41:23,130 --> 00:41:24,160 Xa tentou acceder. 968 00:41:24,160 --> 00:41:26,120 Pero vostede sabe que nós ter un campo como este. 969 00:41:26,120 --> 00:41:29,620 E Net ID de Yale ten un similar pantalla buscando estes días. 970 00:41:29,620 --> 00:41:33,190 E verifícase, que quizais o PIN do sistema é aplicado en PHP. 971 00:41:33,190 --> 00:41:37,050 >> E se were-- é não-- eles pode ter código que se parece con isto. 972 00:41:37,050 --> 00:41:38,210 Teñen dúas variables. 973 00:41:38,210 --> 00:41:42,495 Déame o nome de usuario e contrasinal desde a variable global post super- 974 00:41:42,495 --> 00:41:43,970 que falamos anteriormente. 975 00:41:43,970 --> 00:41:47,310 Quizais Harvard ten unha consulta como selecciona Estrella usuarios 976 00:41:47,310 --> 00:41:50,005 onde nome de usuario é o mesmo que o eo contrasinal é igual a iso. 977 00:41:50,005 --> 00:41:51,880 E teña en conta que eu son só liga-lo a usar 978 00:41:51,880 --> 00:41:55,050 a notación chaveta do outro día, o que significa só conectar un valor 979 00:41:55,050 --> 00:41:55,550 aquí. 980 00:41:55,550 --> 00:41:57,449 Non está a usar o cuestión técnica marca. 981 00:41:57,449 --> 00:41:59,240 Non teño ningunha segundo ou argumentos terceiros. 982 00:41:59,240 --> 00:42:02,350 Eu son só literalmente construír a cadea de min mesmo. 983 00:42:02,350 --> 00:42:04,930 >> O problema, porén, é que se alguén lle gusta un scroob, 984 00:42:04,930 --> 00:42:09,020 que é unha referencia a unha película, rexistra-se con algo coma isto, 985 00:42:09,020 --> 00:42:11,250 e eu elimina os puntos que xeralmente encubrir 986 00:42:11,250 --> 00:42:14,370 claves, e se é particularmente malicioso 987 00:42:14,370 --> 00:42:18,860 e contrasinal quizais é 12345, por película chamada "Spaceballs," 988 00:42:18,860 --> 00:42:21,970 pero criticamente tipos de apóstrofo despois do cinco, 989 00:42:21,970 --> 00:42:24,790 a continuación, literalmente, a palabra ou no espazo, e logo, multimedia, 990 00:42:24,790 --> 00:42:29,160 un unquote iguala unha cita, Pero teña en conta que omitiu o que? 991 00:42:29,160 --> 00:42:32,700 El omitiu a cita á dereita e é omitido a cita á esquerda. 992 00:42:32,700 --> 00:42:35,170 >> Porque, se esta invasor presunción de scroob 993 00:42:35,170 --> 00:42:38,160 é que a xente que escribiu este código PHP non eran tan brillantes, 994 00:42:38,160 --> 00:42:42,990 quizais eles só teñen algún único cita en torno á interpolación 995 00:42:42,990 --> 00:42:45,210 dunha variable con claves? 996 00:42:45,210 --> 00:42:48,620 E quizais por iso, que podía tipo de completar o seu pensamento 997 00:42:48,620 --> 00:42:53,290 para eles, pero dunha forma que está pasando para deixalo invadiu o sistema de PIN. 998 00:42:53,290 --> 00:42:55,310 Noutras palabras, supoña que este é o código 999 00:42:55,310 --> 00:42:57,140 e, agora, conectar o que scroob ingresaran. 1000 00:42:57,140 --> 00:42:58,770 E é vermello, porque é malo. 1001 00:42:58,770 --> 00:43:01,310 >> E o texto subxacente é o que escribiu, 1002 00:43:01,310 --> 00:43:05,510 scroob podería enganar servidor de Harvard para a construción dunha consulta SQL 1003 00:43:05,510 --> 00:43:07,440 cadea que se parece con isto. 1004 00:43:07,440 --> 00:43:11,760 Contrasinal é igual a 12345 ou un é igual a un. 1005 00:43:11,760 --> 00:43:14,820 O resultado que, loxicamente, é que este ha rexistrar scroob 1006 00:43:14,820 --> 00:43:18,360 en se o seu contrasinal é 12345 ou se un é igual a 1007 00:43:18,360 --> 00:43:22,660 un, o que é, por suposto, sempre certo, o que significa scroob sempre entra. 1008 00:43:22,660 --> 00:43:26,060 >> E así, o xeito de corrixir Neste, como en moitos casos, 1009 00:43:26,060 --> 00:43:28,140 sería escribir máis á defensiva. 1010 00:43:28,140 --> 00:43:30,390 Para usar algo como o noso función de consulta real, que 1011 00:43:30,390 --> 00:43:33,980 podes ver en PSet7, onde se conecte algo así como puntos de interrogación aquí. 1012 00:43:33,980 --> 00:43:35,980 E a beleza da función de consulta que 1013 00:43:35,980 --> 00:43:40,010 dar é que defende contra estas os chamados ataques de inxección SQL, onde 1014 00:43:40,010 --> 00:43:44,260 alguén está enganando seu código en inxectar seu propio código SQL. 1015 00:43:44,260 --> 00:43:47,380 Porque o que a función de consulta nós dámoslle realmente vai facer, 1016 00:43:47,380 --> 00:43:51,270 se usa a sintaxe de punto de interrogación e un segundo e un terceiro argumento aquí, 1017 00:43:51,270 --> 00:43:54,590 é o que engadir ao entrada que o usuario deu? 1018 00:43:54,590 --> 00:43:56,060 Aqueles barra invertida cita. 1019 00:43:56,060 --> 00:43:58,590 >> Entón, el escapa a calquera potencialmente caracteres perigosos. 1020 00:43:58,590 --> 00:44:01,000 Isto parece raro agora, pero non é vulnerable 1021 00:44:01,000 --> 00:44:03,260 porque non fai cambiar a lóxica máis 1022 00:44:03,260 --> 00:44:06,470 porque esa contrasinal é todo Agora, unha única cita que non é, 1023 00:44:06,470 --> 00:44:07,596 de feito, o contrasinal do scroob. 1024 00:44:07,596 --> 00:44:09,845 Así, houbo algunhas bromas sobre iso ao longo dos anos. 1025 00:44:09,845 --> 00:44:12,570 Entón, esa foi unha foto tomada dalgún geek en un lote de aparcamento 1026 00:44:12,570 --> 00:44:16,620 a través do cal pode saber que algunhas cidades e estados tentar dixitalizar a licenza 1027 00:44:16,620 --> 00:44:19,460 tarxeta para cobre-lo ou billete que se pasar por sen, como, 1028 00:44:19,460 --> 00:44:20,660 a cousa Correo-Z Pass. 1029 00:44:20,660 --> 00:44:24,490 Entón, esa persoa presume que quizais as persoas que escriben o sistema E-Z Pase 1030 00:44:24,490 --> 00:44:28,240 non eran tan brillantes, e quizais eles só concatenados unha corda, 1031 00:44:28,240 --> 00:44:32,190 para que el ou ela non podía maliciosamente non só completar o seu pensamento, 1032 00:44:32,190 --> 00:44:35,150 pero, en realidade, executar un comando malo, que non teña mencionado aínda, 1033 00:44:35,150 --> 00:44:36,380 pero probablemente pode adiviñar. 1034 00:44:36,380 --> 00:44:39,820 Que, ademais de eliminar e introducir e actualizar e seleccionar, 1035 00:44:39,820 --> 00:44:43,370 hai tamén a palabra chave chamada gota, que literalmente exclúe todo 1036 00:44:43,370 --> 00:44:45,300 na base de datos, que é especialmente malo. 1037 00:44:45,300 --> 00:44:48,760 >> Podemos zoom e iso é un pouco difícil de ver. 1038 00:44:48,760 --> 00:44:52,300 Iso, agora, é un famoso deseño animado que é marabillosas intelixente agora 1039 00:44:52,300 --> 00:44:53,145 e comprensible. 1040 00:44:53,145 --> 00:45:00,880 1041 00:45:00,880 --> 00:45:04,750 >> [Risas] 1042 00:45:04,750 --> 00:45:05,910 >> Si, legal. 1043 00:45:05,910 --> 00:45:06,800 Tipo de geeking fóra. 1044 00:45:06,800 --> 00:45:08,800 Entón, estas son, entón, Ataques de inxección SQL. 1045 00:45:08,800 --> 00:45:13,050 E son tan fáciles de evitar, utilizando o código de dereito ou as bibliotecas correctas. 1046 00:45:13,050 --> 00:45:15,947 E vai ver en PSet7, iso é por que nós dámoslle a función de consulta. 1047 00:45:15,947 --> 00:45:17,780 Así, un par de teasers que pensamos 1048 00:45:17,780 --> 00:45:19,930 darlle aquí na nosa remanente minutos xuntos. 1049 00:45:19,930 --> 00:45:24,030 Entón, como se lembra de semana cero, nós introduciu estas dúas lámpadas que 1050 00:45:24,030 --> 00:45:26,610 son bos, non só porque son moito e son de cores, 1051 00:45:26,610 --> 00:45:29,450 senón porque soportan algo chamada de API, unha aplicación 1052 00:45:29,450 --> 00:45:31,980 Interface de Programación de Correo en CS50, ata agora, temos 1053 00:45:31,980 --> 00:45:34,440 principalmente enfocada en Get e POST, pero verifícase se 1054 00:45:34,440 --> 00:45:37,390 hai outros verbos HTTP, como PUT. 1055 00:45:37,390 --> 00:45:39,430 >> E, de feito, este foi unha foto de semana de cero 1056 00:45:39,430 --> 00:45:44,930 polo que se escribir código que envía a la PSet6 unha solicitude HTTP que 1057 00:45:44,930 --> 00:45:49,647 mira como este con este anaco de texto no fondo, o que se chama JSON, 1058 00:45:49,647 --> 00:45:52,230 ou JavaScript Object Notation que falaremos a próxima semana, 1059 00:45:52,230 --> 00:45:57,030 podes activar ou desactivar ou cambiar a cor das luces como aqueles. 1060 00:45:57,030 --> 00:46:00,480 Polo tanto, se CS50 tamén en adición a algúns destas lámpadas aquí en New Haven 1061 00:46:00,480 --> 00:46:02,480 se desexa prestar para proxectos finais, 1062 00:46:02,480 --> 00:46:04,370 tamén algúns Microsoft Bandas, que son como 1063 00:46:04,370 --> 00:46:07,619 reloxos que utiliza ao redor do seu pulso Do mesmo xeito que ten unha API de xeito a estar 1064 00:46:07,619 --> 00:46:10,040 pode escribir o seu propio software para eles. 1065 00:46:10,040 --> 00:46:12,490 >> Temos unha conta Código IOS de Apple así 1066 00:46:12,490 --> 00:46:15,510 que se ten un reloxo Apple ou un iPhone ou un iPad ou un iPod, 1067 00:46:15,510 --> 00:46:17,707 pode escribir código que realmente funciona sobre aqueles. 1068 00:46:17,707 --> 00:46:19,540 Temos un grupo enteiro de Arduinos, que son 1069 00:46:19,540 --> 00:46:22,010 ordenadores minúsculos pequenos sen casos, esencialmente, 1070 00:46:22,010 --> 00:46:25,240 que pode conectarse vía USB, normalmente para o seu propio Mac ou PC, 1071 00:46:25,240 --> 00:46:28,810 escribir código que corre sobre estes físico dispositivos sensores que moitas veces teñen sobre eles 1072 00:46:28,810 --> 00:46:30,790 para que poida interactuar co mundo real. 1073 00:46:30,790 --> 00:46:32,860 Temos un grupo enteiro de dispositivos Leap Motion, 1074 00:46:32,860 --> 00:46:36,500 que son dispositivos USB para Mac e PCs, aquí e unha vez máis, en New Haven. 1075 00:46:36,500 --> 00:46:40,080 E se conecta-lo ao seu Mac, realmente pode controlar o seu ordenador 1076 00:46:40,080 --> 00:46:42,550 escribindo software que por medio de raios infravermellos, 1077 00:46:42,550 --> 00:46:46,360 descobre onde as mans humanas son, mesmo sen tocar no seu teclado. 1078 00:46:46,360 --> 00:46:49,135 Pensamos en compartir un rápido albiscar que, por exemplo. 1079 00:46:49,135 --> 00:46:51,428 >> [Música tocando] 1080 00:46:51,428 --> 00:47:55,840 1081 00:47:55,840 --> 00:47:57,590 Entón, nós temos un todo morea desas cousas, 1082 00:47:57,590 --> 00:48:01,040 tamén chamada abrazadeiras Myo que puxo sobre o seu antebrazo 1083 00:48:01,040 --> 00:48:04,595 e, a continuación, pode controlar o real mundo ou o mundo virtual como este. 1084 00:48:04,595 --> 00:48:06,471 >> [Música tocando] 1085 00:48:06,471 --> 00:49:17,580 1086 00:49:17,580 --> 00:49:20,920 Ou, tamén temos algúns Google Papel, que queda literalmente, como, 1087 00:49:20,920 --> 00:49:24,841 unha caixa de cartón que pode pór no seu rostro, pero de diapositivas no seu teléfono para el 1088 00:49:24,841 --> 00:49:27,590 de xeito que puxo o vaso da súa teléfono realmente preto dos seus ollos. 1089 00:49:27,590 --> 00:49:30,190 E Google é Cartón moi barato en US $ 10 ou US $ 20. 1090 00:49:30,190 --> 00:49:32,230 E ten pequenas lentes que un pouco fóra da quenda 1091 00:49:32,230 --> 00:49:35,900 a imaxe na pantalla do seu humano ollos para darlle unha sensación de profundidade 1092 00:49:35,900 --> 00:49:39,550 de xeito que realmente ten un 3D ambiente na fronte de ti. 1093 00:49:39,550 --> 00:49:42,927 Temos tamén algúns Samsung engrenaxe, que é a versión máis cara do presente, 1094 00:49:42,927 --> 00:49:46,010 pero que pode de modo semellante desprazar nunha Teléfono Android e darlle a ilusión 1095 00:49:46,010 --> 00:49:48,309 de-- ou dar a experiencia da realidade virtual. 1096 00:49:48,309 --> 00:49:50,850 E nos nosos dous minutos finais, pensamos en tentar facelo. 1097 00:49:50,850 --> 00:49:55,250 Se podo proxectar o que Colton aquí só para aguçar o apetito, 1098 00:49:55,250 --> 00:49:58,442 deixe-me ir adiante e xogue up na pantalla grande aquí. 1099 00:49:58,442 --> 00:49:59,400 Deixe-me matar as luces. 1100 00:49:59,400 --> 00:50:02,290 Colton, quere ir adiante e poñer no seu teléfono móbil por un momento 1101 00:50:02,290 --> 00:50:05,171 e veña ata o medio do escenario? 1102 00:50:05,171 --> 00:50:07,420 E quere project-- isto é o que Colton ve. 1103 00:50:07,420 --> 00:50:10,560 >> Agora, o WiFi aquí é non tan forte para este dispositivo 1104 00:50:10,560 --> 00:50:13,870 que este é super atractivo, pero é, literalmente, Colton 1105 00:50:13,870 --> 00:50:15,710 neste lugar máxico futurista. 1106 00:50:15,710 --> 00:50:16,796 El só ve unha imaxe. 1107 00:50:16,796 --> 00:50:19,920 Estás a ver a súa esquerda e dereita ollo que o seu cerebro está costurando 1108 00:50:19,920 --> 00:50:22,260 nun tridimensional ambiente no seu rostro. 1109 00:50:22,260 --> 00:50:24,319 El só está seleccionada unha opción de menú aquí. 1110 00:50:24,319 --> 00:50:27,360 E entón, de novo, está a levar posto este auricular cun teléfono Samsung nel que é 1111 00:50:27,360 --> 00:50:29,080 sen fíos designado a nosa sobrecarga. 1112 00:50:29,080 --> 00:50:30,349 Agora está en Marte, creo? 1113 00:50:30,349 --> 00:50:31,140 Colton: Eu creo que si. 1114 00:50:31,140 --> 00:50:32,181 Eu non estou seguro [inaudível]. 1115 00:50:32,181 --> 00:50:34,250 [Risas] 1116 00:50:34,250 --> 00:50:36,374 >> DAVID Malan: Acontece Marte ten estes menús. 1117 00:50:36,374 --> 00:50:41,590 >> Colton: [inaudível] algúns cool lugares, se queremos ir a-- 1118 00:50:41,590 --> 00:50:43,330 >> DAVID Malan: Onde queremos ir? 1119 00:50:43,330 --> 00:50:45,837 >> Colton: [inaudível] 1120 00:50:45,837 --> 00:50:48,170 DAVID Malan: E imos ver Colton, onde está nos levando agora. 1121 00:50:48,170 --> 00:50:48,961 Colton: [inaudível] 1122 00:50:48,961 --> 00:50:52,830 1123 00:50:52,830 --> 00:50:56,380 >> DAVID Malan: Entón, hai tantos diferentes lugares que pode tomar-se. 1124 00:50:56,380 --> 00:51:00,590 Hai FAPIs través do cal pode escribir xogos ou interaccións que 1125 00:51:00,590 --> 00:51:01,950 executar, en definitiva, no teléfono. 1126 00:51:01,950 --> 00:51:03,908 Entón, o que realmente só escribindo unha aplicación de telefonía móbil. 1127 00:51:03,908 --> 00:51:06,380 Pero grazas ao software e os recursos gráficos, 1128 00:51:06,380 --> 00:51:08,765 Colton agora neste pequena casa de campo pouco. 1129 00:51:08,765 --> 00:51:10,515 E correndo o risco de esmagadora nós mesmos, 1130 00:51:10,515 --> 00:51:13,330 Colton e eu vou ir por mentres, ao final da clase aquí hoxe 1131 00:51:13,330 --> 00:51:14,300 se desexa vir e xogar. 1132 00:51:14,300 --> 00:51:16,350 E nós imos trae-los de volta a próxima semana tamén. 1133 00:51:16,350 --> 00:51:18,420 Sen máis, o ADO iso por hoxe. 1134 00:51:18,420 --> 00:51:21,990 Imos velo a próxima semana. 1135 00:51:21,990 --> 00:51:24,140 >> [MUSIC - Ragga Twins, "home malo"] 1136 00:51:24,140 --> 00:55:23,146