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: Tudo bem, isso é CS50. 4 00:00:11,980 --> 00:00:13,740 Este é o fim de semana oito. 5 00:00:13,740 --> 00:00:15,887 E hoje, vamos começar para preencher algumas peças 6 00:00:15,887 --> 00:00:17,720 quando se trata de construção coisas na web. 7 00:00:17,720 --> 00:00:20,020 Então, lembre-se que na segunda-feira nós gastamos muito mais tempo 8 00:00:20,020 --> 00:00:22,530 em PHP, que é esta dinâmica linguagem de programação que 9 00:00:22,530 --> 00:00:26,872 permite-nos de saída, entre outros coisas, HTML e outro tal conteúdo 10 00:00:26,872 --> 00:00:27,830 que vai querer ver. 11 00:00:27,830 --> 00:00:30,871 Mas não temos realmente olhou como nós estamos indo para armazenar qualquer informação. 12 00:00:30,871 --> 00:00:34,477 De facto, quase qualquer um de que a super- sites interessantes que você visita hoje 13 00:00:34,477 --> 00:00:36,560 ter algum tipo de banco de dados no back-end, certo? 14 00:00:36,560 --> 00:00:39,540 Facebook certamente armazena grandes quantidades de dados sobre todos nós e lojas Gmail tudo 15 00:00:39,540 --> 00:00:40,210 de seus e-mails. 16 00:00:40,210 --> 00:00:44,150 >> E assim, muitos outros sites não são apenas conteúdo estático que é informativo. 17 00:00:44,150 --> 00:00:45,640 É realmente dinâmico de alguma forma. 18 00:00:45,640 --> 00:00:48,480 Você fornecer informações, ele atualiza as páginas para outras pessoas. 19 00:00:48,480 --> 00:00:50,620 Você receber mensagens, você envia mensagens, e assim por diante. 20 00:00:50,620 --> 00:00:54,250 Então, hoje, olharmos mais de perto as bases de um projeto 21 00:00:54,250 --> 00:00:57,330 que você vai mergulhar na próxima semana, CS50 Finanças, que 22 00:00:57,330 --> 00:01:00,509 é, na verdade, vai ter de construir algo não em C, mas em PHP. 23 00:01:00,509 --> 00:01:02,550 Um site que parece um pouco algo como isto 24 00:01:02,550 --> 00:01:05,810 que permite comprar e vender ações que são, na verdade, 25 00:01:05,810 --> 00:01:09,044 vai basear-se em tempo real dados de ações do Yahoo Finance. 26 00:01:09,044 --> 00:01:11,960 E assim, em última análise, você terá a ilusão para si mesmo e para os usuários 27 00:01:11,960 --> 00:01:14,550 que na verdade você está comprando e vendendo ações e recebendo quase tempo real, 28 00:01:14,550 --> 00:01:16,800 atualizações, gerenciamento de um carteira, todos os quais 29 00:01:16,800 --> 00:01:20,310 vai exigir ter, em última análise, um banco de dados de usuários. 30 00:01:20,310 --> 00:01:23,330 >> Assim, em suas próprias palavras, especialmente se você não está 31 00:01:23,330 --> 00:01:25,670 Super familiarizado com computador ciência ou bancos de dados, o que 32 00:01:25,670 --> 00:01:30,790 Você conhece um banco de dados para ser agora, em termos não-técnicos? 33 00:01:30,790 --> 00:01:32,300 O que é isso? 34 00:01:32,300 --> 00:01:36,882 Como você o descreveria com a pessoa ou um amigo? 35 00:01:36,882 --> 00:01:40,100 >> AUDIÊNCIA: [inaudível] informação [inaudível] 36 00:01:40,100 --> 00:01:44,430 >> DAVID MALAN: Então, uma lista de informações, ou um store-- uma lista de informações 37 00:01:44,430 --> 00:01:47,160 que você pode querer armazenar sobre algo, como um usuário. 38 00:01:47,160 --> 00:01:50,190 E o que os usuários tenham associado com eles? 39 00:01:50,190 --> 00:01:53,160 Se você é um usuário no Facebook ou Gmail, quais são as características 40 00:01:53,160 --> 00:01:54,940 que todos nós usuários têm? 41 00:01:54,940 --> 00:01:58,530 Como, o que poderia ser alguns dos colunas na planilha para que nós 42 00:01:58,530 --> 00:01:59,390 aludido última vez? 43 00:01:59,390 --> 00:02:01,140 Porque mais uma vez, você pode pensar em um banco de dados 44 00:02:01,140 --> 00:02:05,810 realmente como um arquivo Excel fantasia ou Google Planilha ou arquivo Números Apple. 45 00:02:05,810 --> 00:02:08,280 >> Então, o que você acha de quando você pensa de um usuário? 46 00:02:08,280 --> 00:02:11,290 O que eles têm? 47 00:02:11,290 --> 00:02:11,790 O que é isso? 48 00:02:11,790 --> 00:02:12,470 >> AUDIÊNCIA: Um nome. 49 00:02:12,470 --> 00:02:13,303 >> DAVID MALAN: Um nome. 50 00:02:13,303 --> 00:02:16,840 Então, se o nome, tipo, David Malan seria o nome de algum usuário. 51 00:02:16,840 --> 00:02:17,980 O que mais faz um usuário tem? 52 00:02:17,980 --> 00:02:18,770 >> AUDIÊNCIA: Uma ID. 53 00:02:18,770 --> 00:02:19,561 >> DAVID MALAN: Uma ID. 54 00:02:19,561 --> 00:02:23,320 Assim, como um número de identificação, como seu Harvard ID ou seu Yale ID Net ou similares. 55 00:02:23,320 --> 00:02:24,923 O que mais pode um usuário tem? 56 00:02:24,923 --> 00:02:25,890 >> AUDIÊNCIA: Password. 57 00:02:25,890 --> 00:02:29,240 >> DAVID MALAN: Uma senha, talvez um endereço, talvez um número de telefone, talvez 58 00:02:29,240 --> 00:02:30,050 um endereço de e-mail. 59 00:02:30,050 --> 00:02:32,640 Assim, não há cachos de campos e esta poderia espécie de espiral fora de controle 60 00:02:32,640 --> 00:02:34,760 rapidamente, assim que você começar percebendo, oh, vamos guardar este 61 00:02:34,760 --> 00:02:36,190 e vamos guardar isso e aquilo. 62 00:02:36,190 --> 00:02:37,657 >> Mas como é que vamos realmente fazer isso? 63 00:02:37,657 --> 00:02:39,740 Então, novamente, o modelo mental ter para hoje como nós 64 00:02:39,740 --> 00:02:42,320 mergulhar em SQL real, Structured Query Language, 65 00:02:42,320 --> 00:02:44,186 é um banco de dados que se parece com isso. 66 00:02:44,186 --> 00:02:45,310 É apenas linhas e colunas. 67 00:02:45,310 --> 00:02:48,309 E você pode imaginar Google Spreadsheets ou qualquer número de outros programas. 68 00:02:48,309 --> 00:02:52,130 Mas o que é importante sobre o MySQL, que é o software de banco de dados que vamos usar, 69 00:02:52,130 --> 00:02:54,920 o livremente abertamente available-- usos Facebook 70 00:02:54,920 --> 00:02:59,200 isto e qualquer outro número de websites-- banco de dados armazena as coisas relacionalmente. 71 00:02:59,200 --> 00:03:01,770 E um banco de dados relacional Significa apenas que, literalmente, 72 00:03:01,770 --> 00:03:03,672 armazena seus dados em linhas e colunas. 73 00:03:03,672 --> 00:03:04,630 É simples assim. 74 00:03:04,630 --> 00:03:07,230 >> Assim, mesmo algo como Oracle que você pode ter ouvido falar de modo geral 75 00:03:07,230 --> 00:03:08,271 é um banco de dados relacional. 76 00:03:08,271 --> 00:03:10,929 E sob o capuz, isto armazena os dados em linhas e colunas. 77 00:03:10,929 --> 00:03:12,970 E Oracle cobra uma monte de dinheiro para fazer isso, 78 00:03:12,970 --> 00:03:15,550 considerando que taxas MySQL nada para o mesmo. 79 00:03:15,550 --> 00:03:18,790 Portanto, SQL vai nos dar pelo menos, quatro operações. 80 00:03:18,790 --> 00:03:23,190 A capacidade de selecionar dados, como leitura dados, inserir, excluir e atualizar dados. 81 00:03:23,190 --> 00:03:25,525 Em outras palavras, são aqueles realmente as quatro operações fundamentais 82 00:03:25,525 --> 00:03:28,950 que vão permitir-nos a mudar material naquelas linhas e colunas. 83 00:03:28,950 --> 00:03:33,250 >> A ferramenta que usaremos hoje, especialmente para aprender SQL e para brincar com ele 84 00:03:33,250 --> 00:03:34,627 é novamente 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 Coincidência total que é escrito em PHP. 87 00:03:38,200 --> 00:03:42,400 Mas ele vai nos dar uma gráfica interface de usuário para que possamos realmente 88 00:03:42,400 --> 00:03:46,054 criar essas linhas e colunas e, em seguida, falar com eles via código. 89 00:03:46,054 --> 00:03:47,970 Então, vamos agora começar a o que eu acho que é francamente 90 00:03:47,970 --> 00:03:51,000 tipo do processo de diversão a construção de back-end de websites, 91 00:03:51,000 --> 00:03:54,580 as partes que os usuários não ver, mas certamente se preocupam, 92 00:03:54,580 --> 00:03:56,170 porque isso é um pouco de dados indo. 93 00:03:56,170 --> 00:03:59,570 Assim, semelhante a C e uma pouco menos como PHP, 94 00:03:59,570 --> 00:04:04,954 SQL ou um banco de dados que suporta SQL, tem pelo menos estes tipos de dados 95 00:04:04,954 --> 00:04:05,870 e cachos 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 não há um todo bando de outros recursos, 98 00:04:09,940 --> 00:04:11,940 mas vamos fazer isso título de exemplo real. 99 00:04:11,940 --> 00:04:16,450 >> Eu estou indo para ir para CS50 IDE onde, com antecedência, eu logado 100 00:04:16,450 --> 00:04:19,372 e eu também visitou uma URL para esta ferramenta chamada PHP MyAdmin. 101 00:04:19,372 --> 00:04:22,580 E no conjunto de problemas de sete, nós vamos dizer- exatamente como chegar a essa interface 102 00:04:22,580 --> 00:04:23,200 também. 103 00:04:23,200 --> 00:04:25,640 No canto superior esquerdo, Note que diz palestra. 104 00:04:25,640 --> 00:04:27,610 E isso apenas significa que com antecedência, eu criei 105 00:04:27,610 --> 00:04:31,360 um banco de dados chamado de leitura vazio que não tem planilhas nele ainda. 106 00:04:31,360 --> 00:04:32,600 Não há linhas e colunas. 107 00:04:32,600 --> 00:04:34,308 Porque o primeiro coisa que vamos fazer 108 00:04:34,308 --> 00:04:37,100 é começar a criar uma tabela que está indo para armazenar nossos usuários. 109 00:04:37,100 --> 00:04:39,100 >> Então, literalmente sobre aqui para a direita, eu sou 110 00:04:39,100 --> 00:04:42,070 vai dizer o banco de dados Eu quero uma tabela denominada Usuários. 111 00:04:42,070 --> 00:04:44,845 Então, isso é como o arquivo que eu deseja armazenar todos os meus dados em. 112 00:04:44,845 --> 00:04:45,720 E quantas colunas? 113 00:04:45,720 --> 00:04:47,740 Bem, vamos mantê-lo simples por agora. 114 00:04:47,740 --> 00:04:51,855 Eu só quero armazenar como um nome de usuário e um nome para um usuário. 115 00:04:51,855 --> 00:04:53,020 Vamos começar pequeno. 116 00:04:53,020 --> 00:04:55,370 Então, eu quero total de duas colunas. 117 00:04:55,370 --> 00:04:57,360 E eu estou indo para ir em frente e clique em Ir. 118 00:04:57,360 --> 00:04:59,210 E então, para estes colunas, o que eu vou 119 00:04:59,210 --> 00:05:04,576 para fazer-- se este Internet cooperates-- tudo bem, 120 00:05:04,576 --> 00:05:05,950 por isso vamos tentar isso de novo. 121 00:05:05,950 --> 00:05:09,180 Eu estou indo para criar uma tabela chamada Usuários com duas colunas, clique em Ir, OK. 122 00:05:09,180 --> 00:05:10,520 Agora temos que ter isso muito rápido. 123 00:05:10,520 --> 00:05:12,065 Obrigado, muito bem feito. 124 00:05:12,065 --> 00:05:14,440 Tudo bem, então o que queremos estas colunas ser chamado? 125 00:05:14,440 --> 00:05:16,080 >> Então, um vai ser chamado usuário. 126 00:05:16,080 --> 00:05:19,480 Então, tudo o que vejo aqui-- ea interface francamente fica um pouco feio, eventualmente, 127 00:05:19,480 --> 00:05:21,270 uma vez que você começar a digitar em todos esses dados. 128 00:05:21,270 --> 00:05:27,450 Mas o que é bom é que tipo de paradoxalmente, eu estou criando colunas, 129 00:05:27,450 --> 00:05:29,977 mas a ferramenta tem tolamente colocou-os em fileiras 130 00:05:29,977 --> 00:05:31,560 para que eu possa configurar essas colunas. 131 00:05:31,560 --> 00:05:33,550 Então, há dois espaços em branco lá em Nome. 132 00:05:33,550 --> 00:05:36,180 E um desses campos I quer chamado usuário, 133 00:05:36,180 --> 00:05:38,000 eo outro campo eu quero chamar Name. 134 00:05:38,000 --> 00:05:40,340 >> E agora eu tenho que escolher tipos de dados para essas coisas. 135 00:05:40,340 --> 00:05:42,330 Assim, enquanto no Excel e Google Spreadsheets, 136 00:05:42,330 --> 00:05:45,531 se você quer uma coluna, você literalmente basta digitar Nome ou nome de usuário, pressione Enter. 137 00:05:45,531 --> 00:05:48,030 Talvez você faz negrito apenas para maior clareza, mas é só isso. 138 00:05:48,030 --> 00:05:50,140 Você não especificar o tipos de colunas. 139 00:05:50,140 --> 00:05:53,790 Agora em Planilhas do Google ou Excel, pode especificar a forma como os dados são processados. 140 00:05:53,790 --> 00:05:58,120 Você poderia ir para o menu Formatar, e você pode especificar mostrar esta cifrão como, 141 00:05:58,120 --> 00:05:59,900 mostrar isso como um valor de ponto flutuante. 142 00:05:59,900 --> 00:06:01,990 >> Então, é semelhante em espírito à que o que estamos prestes a fazer, 143 00:06:01,990 --> 00:06:04,740 mas esta é realmente vai obrigar os dados a ser um certo tipo. 144 00:06:04,740 --> 00:06:07,750 Agora, apesar de um momento atrás eu disse que há apenas alguns tipos de dados, 145 00:06:07,750 --> 00:06:11,120 há realmente uma lote inteiro, e eles são 146 00:06:11,120 --> 00:06:12,910 em diferentes graus de especificidade. 147 00:06:12,910 --> 00:06:14,970 E como um aparte, você pode até fazer coisas extravagantes 148 00:06:14,970 --> 00:06:17,520 como geometrias de armazenamento dentro de um banco de dados. 149 00:06:17,520 --> 00:06:19,250 Você pode armazenar coisas como coordenadas de GPS 150 00:06:19,250 --> 00:06:22,420 e realmente encontrar, matematicamente, pontos que estão perto de outros. 151 00:06:22,420 --> 00:06:24,128 Mas vamos manter esta super simples 152 00:06:24,128 --> 00:06:26,800 e ir até aqui, todos os chamados tipos string. 153 00:06:26,800 --> 00:06:29,240 >> Então, aqui está uma lista de um todo monte de opções. 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, infelizmente, um pouco paradoxalmente a C, 157 00:06:37,610 --> 00:06:40,120 um CHAR não é realmente um CHAR. 158 00:06:40,120 --> 00:06:44,170 Se você especificar em um banco de dados que o seu tipo de dados é CHAR, 159 00:06:44,170 --> 00:06:47,390 isso significa que sim, é uma CHAR, mas é um ou mais CHARs. 160 00:06:47,390 --> 00:06:49,630 E você tem que especificar quantos CHARs você quer. 161 00:06:49,630 --> 00:06:51,636 Assim, que é um típico comprimento de um nome de usuário? 162 00:06:51,636 --> 00:06:52,760 Existe um limite tipicamente? 163 00:06:52,760 --> 00:06:53,920 >> AUDIÊNCIA: [inaudível] 164 00:06:53,920 --> 00:06:55,050 >> DAVID MALAN: 16 talvez? 165 00:06:55,050 --> 00:06:55,990 Algo como isso. 166 00:06:55,990 --> 00:06:57,948 Você sabe, de volta ao dia, que costumava ser oito. 167 00:06:57,948 --> 00:07:00,289 Às vezes é 16, às vezes é ainda mais do que isso. 168 00:07:00,289 --> 00:07:02,080 E assim, esta não faz significa dar-me um CHAR. 169 00:07:02,080 --> 00:07:04,730 Isso significa que eu tenho que especificar o comprimento do campo, 170 00:07:04,730 --> 00:07:07,402 e agora eu poderia dizer algo como 16. 171 00:07:07,402 --> 00:07:08,610 E há um trade off aqui. 172 00:07:08,610 --> 00:07:11,360 Então, vamos ver em um momento isto significa que um, 173 00:07:11,360 --> 00:07:14,620 cada nome de usuário tem que ser 16 caracteres. 174 00:07:14,620 --> 00:07:18,720 Mas espere um minuto, M-A-L-A-N. Se é isso meu nome de usuário e eu estou usando apenas cinco, 175 00:07:18,720 --> 00:07:23,070 o que você propõe que o banco de dados o que fazer para os outros 11 personagens que 176 00:07:23,070 --> 00:07:24,471 Eu reservado espaço para? 177 00:07:24,471 --> 00:07:25,220 O que você faria? 178 00:07:25,220 --> 00:07:26,480 >> AUDIÊNCIA: [inaudível] 179 00:07:26,480 --> 00:07:27,160 >> DAVID MALAN: Sim, apenas torná-los todos nulo. 180 00:07:27,160 --> 00:07:28,290 Faça-os espaços. 181 00:07:28,290 --> 00:07:30,816 Mas, provavelmente nulo, portanto, um monte de zeros barra invertida. 182 00:07:30,816 --> 00:07:33,190 Assim, por um lado, nós temos agora a certeza de que meu nome de usuário 183 00:07:33,190 --> 00:07:34,780 pode ser não mais do que 16 caracteres. 184 00:07:34,780 --> 00:07:37,590 E o outro lado da moeda é que que se eu tivesse um nome muito longo 185 00:07:37,590 --> 00:07:39,940 ou queria um tempo muito longo nome de usuário como alguns de vocês 186 00:07:39,940 --> 00:07:44,840 caras podem ter nessa faculdade ou em Yale.edu, você não pode ter um. 187 00:07:44,840 --> 00:07:47,177 E assim, de fato, se você tiver já registrado para um site 188 00:07:47,177 --> 00:07:49,385 e você obter gritou dizendo sua senha é muito longa 189 00:07:49,385 --> 00:07:52,710 ou seu nome de usuário é muito longo, é simplesmente porque um programador, quando 190 00:07:52,710 --> 00:07:55,500 configurar a sua base de dados, decidiu que este campo será 191 00:07:55,500 --> 00:07:57,150 não superior a este comprimento ser. 192 00:07:57,150 --> 00:08:00,580 >> Tudo bem, então o que se passamos a citar? 193 00:08:00,580 --> 00:08:05,240 Quanto tempo deve ser um nome típico do ser humano ser? 194 00:08:05,240 --> 00:08:07,492 Como muitos personagens, 16? 195 00:08:07,492 --> 00:08:09,450 Eu estou supondo que pudéssemos encontrar alguém nesta sala 196 00:08:09,450 --> 00:08:13,210 onde por sua primeira acrescido de última nome tiver mais de 16 caracteres. 197 00:08:13,210 --> 00:08:14,850 Então, o que é melhor do que isso, 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 >> AUDIÊNCIA: [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ão, isso é provavelmente um acervo considerável limite superior, digamos assim. 205 00:08:26,309 --> 00:08:28,350 E aqui nós meio que temos para fazer uma chamada de julgamento. 206 00:08:28,350 --> 00:08:30,400 Como, não há nenhuma resposta certa aqui. 207 00:08:30,400 --> 00:08:32,740 Infinito não é bastante possível, porque estamos finalmente 208 00:08:32,740 --> 00:08:34,781 vai have-- estamos vai ficar sem memória. 209 00:08:34,781 --> 00:08:36,909 Então, nós temos que fazer uma julgamento em algum ponto. 210 00:08:36,909 --> 00:08:41,010 >> Muito comum seria, por exemplo, para use-- e deixe-me especificar CHAR aqui 211 00:08:41,010 --> 00:08:46,050 como antes-- 255 era literalmente o limite superior sobre este software de banco de dados 212 00:08:46,050 --> 00:08:46,700 anos atrás. 213 00:08:46,700 --> 00:08:48,575 E por isso, um grande número de seres humanos Gostaria apenas de dizer, tudo bem. 214 00:08:48,575 --> 00:08:49,420 255 é o limite. 215 00:08:49,420 --> 00:08:50,620 Vamos apenas usar o máximo. 216 00:08:50,620 --> 00:08:51,870 E isso é muito ridículo. 217 00:08:51,870 --> 00:08:55,060 Como, se você está digitando é alguém nomear para 200 caracteres mais, 218 00:08:55,060 --> 00:08:56,140 que um pouco ridículo. 219 00:08:56,140 --> 00:08:59,624 >> Mas, lembre-se que não é ASCII o único sistema de caracteres. 220 00:08:59,624 --> 00:09:01,540 E assim, especialmente em um monte de línguas asiáticas 221 00:09:01,540 --> 00:09:04,248 onde há personagens que não pode expressar em teclados como o meu US 222 00:09:04,248 --> 00:09:08,209 teclado, alguns personagens realmente levar até 16 bits em vez de oito bits. 223 00:09:08,209 --> 00:09:10,250 E assim, isso realmente não é tão irrazoável 224 00:09:10,250 --> 00:09:12,250 que precisamos de mais espaço se queremos caber 225 00:09:12,250 --> 00:09:16,252 caracteres maiores do que a própria US aqueles centrados nós tendiam a discutir. 226 00:09:16,252 --> 00:09:17,460 Então, precisamos de algum limite superior. 227 00:09:17,460 --> 00:09:21,470 Eu não sei o que o melhor é, mas 255 é geralmente um comum. 228 00:09:21,470 --> 00:09:22,700 25 sente baixo. 229 00:09:22,700 --> 00:09:23,857 16, 32 se sentir fraca. 230 00:09:23,857 --> 00:09:25,690 Gostaria de errar no lado de algo maior. 231 00:09:25,690 --> 00:09:27,330 Mas há um trade off, como sempre. 232 00:09:27,330 --> 00:09:31,902 Qual é a, talvez, óbvio trade off de reservar 255 caracteres 233 00:09:31,902 --> 00:09:33,360 para o nome de todos no meu banco de dados? 234 00:09:33,360 --> 00:09:34,230 >> AUDIÊNCIA: [inaudível] 235 00:09:34,230 --> 00:09:34,510 >> DAVID MALAN: O que é isso? 236 00:09:34,510 --> 00:09:35,430 >> AUDIÊNCIA: [inaudível] 237 00:09:35,430 --> 00:09:37,138 >> DAVID MALAN: É um grande quantidade de memória, certo? 238 00:09:37,138 --> 00:09:42,280 H-A-L-A-N. Acabo desperdiçado 250 caracteres apenas para armazenar o meu nome 239 00:09:42,280 --> 00:09:46,000 defensiva, apenas no caso de alguém na classe tem um nome muito longo. 240 00:09:46,000 --> 00:09:47,940 Isso parece uma compensação indevida. 241 00:09:47,940 --> 00:09:52,040 >> Assim, verifica-se que SQL, esta linguagem de banco de dados, 242 00:09:52,040 --> 00:09:55,480 realmente suporta algo chamado VARCHAR ou CHAR variável. 243 00:09:55,480 --> 00:09:59,390 E este é o tipo de Nice, em que este permite que você especifique um não fixo 244 00:09:59,390 --> 00:10:01,900 largura, mas sim, uma largura variável. 245 00:10:01,900 --> 00:10:05,060 E mais especificamente, uma largura máxima do campo. 246 00:10:05,060 --> 00:10:08,901 Assim, isto significa que um nome pode ser não mais do que 250 caracteres, 247 00:10:08,901 --> 00:10:10,150 mas certamente pode ser menor. 248 00:10:10,150 --> 00:10:11,733 E o banco de dados vai ser inteligente. 249 00:10:11,733 --> 00:10:14,860 Se você colocar em M-A-L-A-N, isso só vai usar cinco, 250 00:10:14,860 --> 00:10:18,120 talvez seis bytes para como um caractere nulo de fuga, 251 00:10:18,120 --> 00:10:23,330 e não gastar um adicional 249 ou 250 bytes desnecessariamente. 252 00:10:23,330 --> 00:10:27,380 >> Então, isso parece que eu deveria ter começado com esta história. 253 00:10:27,380 --> 00:10:29,140 Mas há sempre uma troca. 254 00:10:29,140 --> 00:10:33,024 Assim, por um lado, um nome de usuário tenho especificada a ser codificado em 16, 255 00:10:33,024 --> 00:10:34,940 e talvez isso não era a chamada direita, talvez seja 256 00:10:34,940 --> 00:10:40,040 é, mas por que não usar VARCHARs para tudo? 257 00:10:40,040 --> 00:10:42,020 >> Ela existe por uma razão. 258 00:10:42,020 --> 00:10:46,200 Por que não usar VARCHARs para cada campo cujo comprimento você não sabe com antecedência 259 00:10:46,200 --> 00:10:48,180 se ele parece ser uma grande coisa, certo? 260 00:10:48,180 --> 00:10:50,482 Use somente tanto espaço como você precisa até este limite? 261 00:10:50,482 --> 00:10:51,271 >> AUDIÊNCIA: Slower. 262 00:10:51,271 --> 00:10:52,146 DAVID MALAN: Speller? 263 00:10:52,146 --> 00:10:53,120 AUDIÊNCIA: Torna-lo mais lento? 264 00:10:53,120 --> 00:10:53,970 DAVID MALAN: Ah, é mais lento. 265 00:10:53,970 --> 00:10:55,720 Bom, isso é quase sempre a resposta, francamente. 266 00:10:55,720 --> 00:10:56,520 Como, qual é a troca? 267 00:10:56,520 --> 00:10:58,570 Ele quer custa mais espaço ou custa mais tempo. 268 00:10:58,570 --> 00:11:00,111 Então, neste caso, pode ser mais lento. 269 00:11:00,111 --> 00:11:00,920 Por quê? 270 00:11:00,920 --> 00:11:05,830 >> AUDIÊNCIA: [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 Assim, você pode se lembrar de mesmo PSED5, brincando com a sua abordagem 273 00:11:09,670 --> 00:11:12,750 ao dicionário, se você tem que alocar memória dinamicamente ou mantê- 274 00:11:12,750 --> 00:11:14,630 crescimento de um tampão, que pode realmente ser lento. 275 00:11:14,630 --> 00:11:16,963 Se você tem que chamar malloc debaixo do capô e talvez 276 00:11:16,963 --> 00:11:19,610 isso é o que o MySQL está fazendo, então certamente que poderia ser o caso. 277 00:11:19,610 --> 00:11:22,430 E se você acha maneira de volta para PSet-- ou mesmo 278 00:11:22,430 --> 00:11:26,340 Semanas dois, quando nós fizemos coisas como busca binária ou mesmo busca linear, 279 00:11:26,340 --> 00:11:30,690 uma das coisas agradáveis ​​sobre cada palavra em um banco de dados ou cada palavra em uma coluna 280 00:11:30,690 --> 00:11:33,690 sendo exactamente o mesmo comprimento, mesmo se um grupo inteiro daqueles personagens 281 00:11:33,690 --> 00:11:37,390 estiverem em branco, é que você pode usar acesso aleatório em seus dados, certo? 282 00:11:37,390 --> 00:11:40,310 >> Se você sabe que cada palavra é 16 caracteres de distância, 283 00:11:40,310 --> 00:11:46,460 você pode usar a aritmética de ponteiro, por assim falar, e ir para nos 16, 32, 48, 64, 284 00:11:46,460 --> 00:11:49,589 e você pode simplesmente pular de imediato, usando aritmética 285 00:11:49,589 --> 00:11:51,130 a qualquer uma das palavras em seu banco de dados. 286 00:11:51,130 --> 00:11:54,280 Considerando que se é um VARCHAR, o que você não tem que fazer? 287 00:11:54,280 --> 00:11:55,960 >> [Telefone tocando] 288 00:11:55,960 --> 00:11:58,680 >> Se é um VARCHAR, você não pode utilizar o acesso aleatório. 289 00:11:58,680 --> 00:12:01,341 O que você tem que procurar ou fazer? 290 00:12:01,341 --> 00:12:01,840 Sim? 291 00:12:01,840 --> 00:12:03,240 >> AUDIÊNCIA: [inaudível] 292 00:12:03,240 --> 00:12:04,310 >> DAVID MALAN: Olhe através do traço whole-- 293 00:12:04,310 --> 00:12:06,518 por toda a lista olhando para o que, mais provável? 294 00:12:06,518 --> 00:12:08,356 Que tipo de valor especial? 295 00:12:08,356 --> 00:12:09,230 AUDIÊNCIA: [inaudível] 296 00:12:09,230 --> 00:12:11,105 DAVID MALAN: Olhando para os terminadores nulos 297 00:12:11,105 --> 00:12:13,637 que demarcar a separação de palavras. 298 00:12:13,637 --> 00:12:15,720 Então, novamente, uma troca, e não há nenhuma resposta certa. 299 00:12:15,720 --> 00:12:18,380 Mas é aí, especialmente quando os usuários chegam a ser muitos 300 00:12:18,380 --> 00:12:21,700 e sua carga em seus servidores, o número de pessoas usando ele recebe alta, 301 00:12:21,700 --> 00:12:23,650 estas são realmente as decisões não triviais. 302 00:12:23,650 --> 00:12:26,640 Assim, podemos deixar estes como este, mas vamos rolar para baixo para a direita 303 00:12:26,640 --> 00:12:27,332 Aqui. 304 00:12:27,332 --> 00:12:30,290 Agora, há um par de colunas onde temos que fazer um julgamento. 305 00:12:30,290 --> 00:12:35,170 Será que faz sentido para permitir que um usuário de nome, nome de usuário de um usuário ou um usuário de 306 00:12:35,170 --> 00:12:36,370 nome, para ser nulo? 307 00:12:36,370 --> 00:12:37,610 Ou seja, apenas em branco. 308 00:12:37,610 --> 00:12:40,360 Sente um pouco sem sentido, assim que eu sou não indo para verificar as caixas. 309 00:12:40,360 --> 00:12:42,670 Mas acontece que em um banco de dados, você pode dizer, 310 00:12:42,670 --> 00:12:44,620 alguém pode, opcionalmente, ter esse valor. 311 00:12:44,620 --> 00:12:47,180 Esta coluna não têm para realmente estar lá. 312 00:12:47,180 --> 00:12:48,570 >> Agora, há este menu suspenso. 313 00:12:48,570 --> 00:12:50,810 E repare que eu ainda sou na primeira fila há, 314 00:12:50,810 --> 00:12:52,520 assim que eu estou falando sobre nome de usuário agora. 315 00:12:52,520 --> 00:12:56,290 E verifica-se que um banco de dados, ao contrário de uma mera planilha simples, 316 00:12:56,290 --> 00:12:58,520 tem as características poderosas chamados índices. 317 00:12:58,520 --> 00:13:02,600 E um índice é uma maneira de dizer a banco de dados com antecedência que eu, o humano 318 00:13:02,600 --> 00:13:03,900 sou mais esperto do que você. 319 00:13:03,900 --> 00:13:10,430 >> Eu sei que tipos de consultas, selecione ou inserir ou excluir ou atualização, 320 00:13:10,430 --> 00:13:13,182 que meu código vai acabar fazendo neste banco de dados. 321 00:13:13,182 --> 00:13:14,390 Eu quero ler um monte de dados. 322 00:13:14,390 --> 00:13:15,681 Eu quero inserir uma grande quantidade de dados. 323 00:13:15,681 --> 00:13:17,530 Eu quero constantemente eliminar uma grande quantidade de dados. 324 00:13:17,530 --> 00:13:21,520 Se eu sei que eu vou ser acessando um campo como usuário muito, 325 00:13:21,520 --> 00:13:24,770 Eu posso dizer a preventivamente banco de dados, eu sei mais do que você, 326 00:13:24,770 --> 00:13:29,220 e eu quero decreto que você deve índice neste campo. 327 00:13:29,220 --> 00:13:33,200 Quando a indexar um campo ou uma coluna significa que a base de dados de antemão 328 00:13:33,200 --> 00:13:37,040 deve pedir algumas idéias de, como, semana quatro e cinco e seis do CS50 329 00:13:37,040 --> 00:13:39,240 e realmente construir-se algo como uma busca binária 330 00:13:39,240 --> 00:13:41,560 árvore ou algo geralmente chamado de uma árvore B 331 00:13:41,560 --> 00:13:43,410 que você iria aprender em uma classe como CS124 332 00:13:43,410 --> 00:13:46,710 em Harvard, uma classe de algoritmos, ou qualquer número de outros lugares. 333 00:13:46,710 --> 00:13:49,570 >> O banco de dados eo inteligente pessoas que implementaram 334 00:13:49,570 --> 00:13:53,880 vai descobrir como armazenar que a tabela de informações 335 00:13:53,880 --> 00:13:57,061 na memória para que as pesquisas e outras operações são super rápido. 336 00:13:57,061 --> 00:13:58,060 Você não tem que fazê-lo. 337 00:13:58,060 --> 00:14:00,640 Você não tem que implementar busca linear ou busca binária 338 00:14:00,640 --> 00:14:03,300 ou mesclar tipo ou seleção tipo, nada disso. 339 00:14:03,300 --> 00:14:06,590 O banco de dados faz isso para você se você disser -lo preventivamente para o índice neste campo. 340 00:14:06,590 --> 00:14:09,100 >> E você pode ver também, há algumas outras características 341 00:14:09,100 --> 00:14:11,010 podemos dizer o banco de dados de aplicar. 342 00:14:11,010 --> 00:14:16,431 O que isso pode significar se eu escolher Único a partir deste menu, apenas intuitivamente? 343 00:14:16,431 --> 00:14:16,930 Sim? 344 00:14:16,930 --> 00:14:17,889 >> AUDIÊNCIA: [inaudível] 345 00:14:17,889 --> 00:14:19,930 DAVID MALAN: Sim, o nome de usuário tem que ser único. 346 00:14:19,930 --> 00:14:23,330 Isso é uma coisa boa ou uma coisa ruim para um banco de dados, para um site com os usuários? 347 00:14:23,330 --> 00:14:24,965 Usernames deve ser único? 348 00:14:24,965 --> 00:14:25,880 Sim, provavelmente. 349 00:14:25,880 --> 00:14:27,800 Se é isso que o campo que usamos para entrar, 350 00:14:27,800 --> 00:14:31,867 você realmente não quer ter pessoas a mesma sensação ou o mesmo nome de usuário. 351 00:14:31,867 --> 00:14:33,700 Assim, podemos ter a banco de dados de impor que assim 352 00:14:33,700 --> 00:14:37,880 que agora no meu código PHP ou qualquer idioma, Eu não tenho para, por exemplo, verificar 353 00:14:37,880 --> 00:14:41,490 necessariamente faz isso nome de usuário existe antes de eu deixar alguém registar-se? 354 00:14:41,490 --> 00:14:46,690 O banco de dados não permitirá que duas pessoas nomeadas David ou Malans cadastre-se neste caso. 355 00:14:46,690 --> 00:14:50,030 >> E como um aparte, embora esta menu só permite que você selecione um, 356 00:14:50,030 --> 00:14:54,550 um índice exclusivo é aquele que é indexado pelo desempenho super rápido, 357 00:14:54,550 --> 00:14:56,100 mas também reforça a singularidade. 358 00:14:56,100 --> 00:14:58,850 E nós vamos voltar ao que o outros dois dizer em apenas um momento. 359 00:14:58,850 --> 00:15:00,930 Enquanto isso, se eu for para minha segunda linha, que 360 00:15:00,930 --> 00:15:06,230 é o nome do usuário, eu deveria especificar que o nome deve ser único? 361 00:15:06,230 --> 00:15:09,550 Não, porque você poderia certamente have-- não há duas David 362 00:15:09,550 --> 00:15:11,050 Malans nesta sala, mais provável. 363 00:15:11,050 --> 00:15:14,290 Mas se escolher um nome diferente, poderíamos certamente ter colisões. 364 00:15:14,290 --> 00:15:16,130 >> Pense de volta para hash tabelas e similares. 365 00:15:16,130 --> 00:15:18,604 Então, nós certamente não queremos para tornar o campo nome exclusivo. 366 00:15:18,604 --> 00:15:21,270 Então, nós apenas estamos indo para sair que, como traço, traço, traço, nada. 367 00:15:21,270 --> 00:15:22,660 E eu vou deixar tudo o resto sozinho. 368 00:15:22,660 --> 00:15:25,035 Com efeito, a maior parte destes campos nós não terá que se preocupar. 369 00:15:25,035 --> 00:15:27,830 E quando eu estou pronto para salvar este, Se a Internet coopera, 370 00:15:27,830 --> 00:15:35,032 Eu clique em Salvar, e muito, muito, muito lentamente que o banco de dados são salvos. 371 00:15:35,032 --> 00:15:37,240 E agora eu estou de volta a esta interface, que é certo que, 372 00:15:37,240 --> 00:15:38,680 é esmagadora, à primeira vista. 373 00:15:38,680 --> 00:15:42,450 Mas tudo o que eu vou fazer é clicar na palavra Usuários na parte superior esquerda. 374 00:15:42,450 --> 00:15:47,630 Eu estou indo para ir até aqui, clique em Usuários, e por padrão, ele 375 00:15:47,630 --> 00:15:50,180 tem executado alguns SQL, mas mais sobre isso em um momento. 376 00:15:50,180 --> 00:15:52,654 Aqui é apenas um resumo do que eu fiz. 377 00:15:52,654 --> 00:15:55,320 E não se preocupe que você vê mencione do latim e do sueco aqui. 378 00:15:55,320 --> 00:16:00,490 Essas são apenas o padrão definições, porque MySQL originalmente, 379 00:16:00,490 --> 00:16:04,000 ou PHP MyAdmin, um dos dois aconteceu a ser escrito por algumas pessoas suecas. 380 00:16:04,000 --> 00:16:06,100 Mas isso é irrelevante no nosso caso aqui. 381 00:16:06,100 --> 00:16:08,280 >> Tudo bem, então por que é tudo isso interessante? 382 00:16:08,280 --> 00:16:13,050 Acontece que, eu posso inserir dados em um banco de dados, escrevendo código. 383 00:16:13,050 --> 00:16:15,940 E eu estou vá em frente e no meu arquivo aqui, eu sou 384 00:16:15,940 --> 00:16:19,000 indo para ir em frente e fingir que este é ligado a essa base de dados, que 385 00:16:19,000 --> 00:16:23,040 não é, no momento, mas vai ser quando chegarmos ao problema definido sete. 386 00:16:23,040 --> 00:16:25,640 E eu estou indo para ir em frente e executar uma função chamada de consulta, 387 00:16:25,640 --> 00:16:28,730 que damos-lhe no problema definir código de distribuição de sete, que 388 00:16:28,730 --> 00:16:31,490 leva pelo menos um argumento, que é apenas uma string. 389 00:16:31,490 --> 00:16:33,460 A seqüência de código SQL. 390 00:16:33,460 --> 00:16:36,700 Então, você está prestes a aprender a escrever Structured Query Language. 391 00:16:36,700 --> 00:16:41,270 >> Se eu quero inserir uma nova linha na minha banco de dados porque alguém tenha apresentado 392 00:16:41,270 --> 00:16:47,600 um formulário para o meu código, eu literalmente INSERT INTO utilizadores escrever o seguinte 393 00:16:47,600 --> 00:16:52,800 campos: nome de usuário, vírgula, nome, os valores, 394 00:16:52,800 --> 00:16:57,480 e agora eu preciso inserir algo como Malan, e citações, 395 00:16:57,480 --> 00:17:01,490 unquote 'David Malan. E agora mesmo para aqueles não familiarizados com SQL, 396 00:17:01,490 --> 00:17:07,830 por que estou usando aspas simples dentro dessa seqüência 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ão aqui? 399 00:17:13,040 --> 00:17:14,609 >> Repare que eu sou co-mistura duas línguas. 400 00:17:14,609 --> 00:17:18,099 Consulta é uma função PHP, mas é preciso um argumento. 401 00:17:18,099 --> 00:17:21,740 E que o argumento tem de ser ele próprio escrito em outra linguagem chamada 402 00:17:21,740 --> 00:17:23,500 SQL, Structured Query Language. 403 00:17:23,500 --> 00:17:27,940 Então, tudo o que eu acabei de destaque aqui 404 00:17:27,940 --> 00:17:30,380 é esta linguagem chamada SQL. 405 00:17:30,380 --> 00:17:36,290 Então, o que há com as aspas simples, assim como uma verificação de sanidade rápida? 406 00:17:36,290 --> 00:17:37,324 Continue. 407 00:17:37,324 --> 00:17:37,990 Eles são strings. 408 00:17:37,990 --> 00:17:41,590 Assim, citações, unquote Malan e citações, unquote David Malan são strings. 409 00:17:41,590 --> 00:17:45,210 E só de pensar intuitivamente agora, saber o que você sabe sobre C e PHP, 410 00:17:45,210 --> 00:17:50,220 por que eu não fazer isso, o que eu costumo aspas usado para strings? 411 00:17:50,220 --> 00:17:52,310 Por que eu não quero fazer isso? 412 00:17:52,310 --> 00:17:52,810 Sim? 413 00:17:52,810 --> 00:17:53,685 >> AUDIÊNCIA: [inaudível] 414 00:17:53,685 --> 00:17:56,695 415 00:17:56,695 --> 00:17:57,570 DAVID MALAN: Exatamente. 416 00:17:57,570 --> 00:17:59,653 Porque eu já estou usando aspas no caminho 417 00:17:59,653 --> 00:18:01,929 fora do argumento para a função de PHP, 418 00:18:01,929 --> 00:18:03,470 Gostaria apenas confundir o intérprete. 419 00:18:03,470 --> 00:18:04,860 Ele não vai saber, que estes vão juntos? 420 00:18:04,860 --> 00:18:05,735 Será que estes andam juntos? 421 00:18:05,735 --> 00:18:06,810 Será que estes andam juntos? 422 00:18:06,810 --> 00:18:08,070 Então, eu alternar vez. 423 00:18:08,070 --> 00:18:11,784 >> Ou eu poderia fazer algo assim, Citação barra invertida ou citação barra invertida. 424 00:18:11,784 --> 00:18:14,200 Francamente, que só começa a ficar muito ilegível e feio. 425 00:18:14,200 --> 00:18:16,790 Mas isso iria conseguir o mesmo resultado que bem. 426 00:18:16,790 --> 00:18:19,760 >> Então, se eu fosse para executar este consulta agora, vamos ver o que acontece. 427 00:18:19,760 --> 00:18:22,740 Eu estou indo para ir em frente agora e, em vez do que executar o código PHP, que 428 00:18:22,740 --> 00:18:24,610 é o lugar onde você vai jogar no conjunto de problemas de sete, 429 00:18:24,610 --> 00:18:27,200 Eu estou indo em vez de ir para PHP MyAdmin. 430 00:18:27,200 --> 00:18:29,770 E eu vou manualmente ir para a aba SQL, 431 00:18:29,770 --> 00:18:31,580 e deixe-me fazer zoom na interface. 432 00:18:31,580 --> 00:18:34,007 E eu vou colar no a coisa que eu digitei. 433 00:18:34,007 --> 00:18:36,090 E o código de cores tem mudou um pouco agora, 434 00:18:36,090 --> 00:18:38,750 apenas porque os formatos de programas coisas um pouco diferente. 435 00:18:38,750 --> 00:18:41,960 Mas note que tudo que eu fiz é que eu disse, inserir em Usuários. 436 00:18:41,960 --> 00:18:45,790 Eu já especificado, então, em uma vírgula lista separada entre parênteses os dois 437 00:18:45,790 --> 00:18:48,850 campos que pretende inserir, e então eu disse literalmente valores 438 00:18:48,850 --> 00:18:51,510 seguido por outro parêntese, e, em seguida, os dois valores 439 00:18:51,510 --> 00:18:53,520 Eu quero plug-in, e agora para uma boa medida, 440 00:18:53,520 --> 00:18:55,010 Eu vou colocar um ponto e vírgula no final. 441 00:18:55,010 --> 00:18:56,570 Assim, este não é C. Este não é o PHP. 442 00:18:56,570 --> 00:18:59,970 Este é agora o SQL, e eu estou colando- em esta interface baseada na web que é 443 00:18:59,970 --> 00:19:02,710 indo só para me deixar, assim que eu clique em Ir, 444 00:19:02,710 --> 00:19:08,060 executar essa consulta no banco de dados executar dentro do CS50 IDE. 445 00:19:08,060 --> 00:19:09,470 >> Então, isso é bom. 446 00:19:09,470 --> 00:19:12,520 Observe que disse uma linha inserido, foi super rápido, 447 00:19:12,520 --> 00:19:15,190 0,0054 segundos para inserir os dados. 448 00:19:15,190 --> 00:19:16,610 Então, isso soa muito saudável. 449 00:19:16,610 --> 00:19:19,350 Ele reformatado minha consulta para mim aqui só para vê-lo 450 00:19:19,350 --> 00:19:21,730 em uma espécie de código de cores versão. 451 00:19:21,730 --> 00:19:24,540 Mas agora se eu clicar Procurar, notar que, mesmo 452 00:19:24,540 --> 00:19:29,070 embora haja um monte de lixo em a tela, minha mesa tem agora duas linhas. 453 00:19:29,070 --> 00:19:30,700 >> Então, deixe-me ir em frente e fazer outra. 454 00:19:30,700 --> 00:19:33,760 Em vez disso, deixe-me vá para a guia SQL novamente. 455 00:19:33,760 --> 00:19:40,723 E desta vez eu vou inserir algo como Rob e seu nome será Rob Bowden. 456 00:19:40,723 --> 00:19:42,330 Bowden. 457 00:19:42,330 --> 00:19:44,040 Vamos clique em Salvar. 458 00:19:44,040 --> 00:19:46,140 Oops, prefiro ir. 459 00:19:46,140 --> 00:19:48,890 >> Clique em Procurar novamente, e Agora repare que eu tenho duas linhas. 460 00:19:48,890 --> 00:19:52,390 Então, essa é apenas uma maneira mais complexa maneira de abrir o Google Spreadsheets 461 00:19:52,390 --> 00:19:54,010 e apenas digitando uma linha em uma coluna. 462 00:19:54,010 --> 00:19:57,070 Mas o que é fundamental é que agora temos a sintaxe 463 00:19:57,070 --> 00:20:00,220 com o qual a escrever código para que em última análise, na verdade, poderíamos 464 00:20:00,220 --> 00:20:01,790 fazer alguma e isso. 465 00:20:01,790 --> 00:20:05,380 Lembre-se que suporte PHP Super variáveis ​​globais. 466 00:20:05,380 --> 00:20:08,415 >> O que está dentro de dólar assinar sublinhado GET em PHP? 467 00:20:08,415 --> 00:20:10,290 Nós demos uma olhada em um ou dois exemplos simples. 468 00:20:10,290 --> 00:20:15,640 E em PSet6, lembro que você tem Olá dot PHP que utiliza essa variável. 469 00:20:15,640 --> 00:20:17,870 O que se passa lá dentro? 470 00:20:17,870 --> 00:20:21,015 Ou o que é? 471 00:20:21,015 --> 00:20:22,522 Um pouco mais alto. 472 00:20:22,522 --> 00:20:23,790 >> AUDIÊNCIA: [inaudível] 473 00:20:23,790 --> 00:20:25,030 >> DAVID MALAN: É uma neve semente de matriz, a qual 474 00:20:25,030 --> 00:20:27,714 é apenas uma maneira elegante de dizer uma matriz que tem pares de valores-chave. 475 00:20:27,714 --> 00:20:28,880 E as teclas não são numéricos. 476 00:20:28,880 --> 00:20:30,420 Eles são palavras ou seqüências. 477 00:20:30,420 --> 00:20:32,750 E especificamente, o são os pares de chaves de valor? 478 00:20:32,750 --> 00:20:35,110 De onde eles vieram? 479 00:20:35,110 --> 00:20:35,620 Desculpa? 480 00:20:35,620 --> 00:20:36,994 >> AUDIÊNCIA: [inaudível] 481 00:20:36,994 --> 00:20:37,660 DAVID MALAN: Não? 482 00:20:37,660 --> 00:20:40,700 Aonde aqueles chave valor pares vem? 483 00:20:40,700 --> 00:20:42,490 Repita? 484 00:20:42,490 --> 00:20:44,610 Mais uma vez? 485 00:20:44,610 --> 00:20:46,472 Eu sou o único que ouve alguma coisa? 486 00:20:46,472 --> 00:20:47,810 >> [Risos] 487 00:20:47,810 --> 00:20:49,042 >> É isso mesmo, não é? 488 00:20:49,042 --> 00:20:50,435 >> AUDIÊNCIA: [inaudível] 489 00:20:50,435 --> 00:20:52,560 DAVID MALAN: Sim, eles vêm da seqüência de consulta. 490 00:20:52,560 --> 00:20:55,380 Então, se você voltar no tempo para quando joguei com Google 491 00:20:55,380 --> 00:20:59,600 e nós fomos para Google.com barra busca de interrogação q é igual a gatos, 492 00:20:59,600 --> 00:21:03,550 se eu fosse para pressionar Enter e se Google foram implementados em PHP, 493 00:21:03,550 --> 00:21:07,017 Código PHP que o Google escreveu teriam acesso ao sinal de dólar 494 00:21:07,017 --> 00:21:11,600 sublinhado GET dentro do qual é uma chave chamada Q e um valor 495 00:21:11,600 --> 00:21:17,680 chamados gatos que podem ser depois usadas usado para fazer uma pesquisa real com. 496 00:21:17,680 --> 00:21:20,860 >> Então, na verdade, o que eu vou fazer agora é voltar para o meu código PHP 497 00:21:20,860 --> 00:21:23,140 que novamente vai ver mais em PSet7. 498 00:21:23,140 --> 00:21:25,440 E em vez de ligar em valores codificados duros que 499 00:21:25,440 --> 00:21:27,630 não parece ser um muito website dinâmico, 500 00:21:27,630 --> 00:21:30,680 Vou dar-lhe um teaser do o seu código real faria. 501 00:21:30,680 --> 00:21:32,854 Você colocaria em dois pontos de interrogação como este. 502 00:21:32,854 --> 00:21:34,270 Eu não sei o que é o nome de usuário. 503 00:21:34,270 --> 00:21:37,390 Eu não sei o que o nome vai ser, 504 00:21:37,390 --> 00:21:39,470 mas eu sei que eu posso obtê-los de forma dinâmica. 505 00:21:39,470 --> 00:21:43,420 >> Assim, se o código que estamos escrevendo agora é o código em execução nos servidores do Google, 506 00:21:43,420 --> 00:21:46,940 ou se esta é Olá dot PHP, que vem com PSet6, 507 00:21:46,940 --> 00:21:48,650 Vou passar para a função de consulta 508 00:21:48,650 --> 00:21:51,450 assim como printf, dois outros argumentos. 509 00:21:51,450 --> 00:21:57,120 GET, citações, nome de usuário fecha aspas, e GET, citações, nome unquote. 510 00:21:57,120 --> 00:22:00,720 E agora, observe o que o estrutura geral é aqui. 511 00:22:00,720 --> 00:22:03,320 Tenho à esquerda lado da chamada, 512 00:22:03,320 --> 00:22:05,480 esta função chamada consulta no PHP. 513 00:22:05,480 --> 00:22:08,160 Eu ainda tenho como primeiro argumento, apenas uma seqüência de texto. 514 00:22:08,160 --> 00:22:11,000 >> Mas essa seqüência de texto é escrito em uma linguagem chamada SQL. 515 00:22:11,000 --> 00:22:12,616 E, francamente, não é uma grande língua. 516 00:22:12,616 --> 00:22:14,990 Nós só vamos falar sobre formalmente hoje, realmente. 517 00:22:14,990 --> 00:22:17,031 E então, em conjunto de problemas sete, há relativamente 518 00:22:17,031 --> 00:22:18,800 algumas características que nós somos vai alavancar. 519 00:22:18,800 --> 00:22:22,530 Os pontos de interrogação, porém, significa ligar um valor aqui e plugue no outro valor 520 00:22:22,530 --> 00:22:23,130 Aqui. 521 00:22:23,130 --> 00:22:26,010 E observem, eu tenho omitido o que de todo o maldito CITA-OS-- 522 00:22:26,010 --> 00:22:30,470 ele-- em torno da cotação assinala este tempo. 523 00:22:30,470 --> 00:22:34,930 Eu omiti a cotação marcas ao redor do ponto de interrogação, 524 00:22:34,930 --> 00:22:36,410 desculpe, desta vez. 525 00:22:36,410 --> 00:22:38,870 >> Então, o que é agradável sobre este pergunta característica que marca 526 00:22:38,870 --> 00:22:42,830 PHP tende a apoiar, Ruby e Python e outras linguagens, 527 00:22:42,830 --> 00:22:45,730 isto significa apenas plugue em alguns Valorizamos aqui e você sabe o quê? 528 00:22:45,730 --> 00:22:48,300 Você descobrir se usar aspas simples ou duplas. 529 00:22:48,300 --> 00:22:50,966 Não me preocupar com aqueles intelectualmente detalhes desinteressantes. 530 00:22:50,966 --> 00:22:53,780 Mas, certifique-se que ele está correto de modo que o meu código é em última análise, 531 00:22:53,780 --> 00:22:57,010 operacional e seguro, o que terá um significado muito tempo antes. 532 00:22:57,010 --> 00:23:00,460 >> Agora, quantos argumentos no total, só para ser claro, é a função de tomada de consulta? 533 00:23:00,460 --> 00:23:05,240 534 00:23:05,240 --> 00:23:07,581 Quem quiser votar em mais de dois? 535 00:23:07,581 --> 00:23:08,080 Três? 536 00:23:08,080 --> 00:23:10,001 Claro, por que? 537 00:23:10,001 --> 00:23:10,920 Por que três? 538 00:23:10,920 --> 00:23:12,305 >> AUDIÊNCIA: [inaudível] 539 00:23:12,305 --> 00:23:13,180 DAVID MALAN: Exatamente. 540 00:23:13,180 --> 00:23:14,610 A primeira parte é a cadeia. 541 00:23:14,610 --> 00:23:18,640 O segundo argumento é sinal de dólar sublinhado GET suporte de nome de usuário. 542 00:23:18,640 --> 00:23:21,950 E o terceiro argumento é o mesma coisa, mas apenas o nome. 543 00:23:21,950 --> 00:23:24,590 Assim, em outras palavras, agora se eu tivesse um formulário web 544 00:23:24,590 --> 00:23:27,149 que tinha de campos de texto, uma para o nome do usuário, 545 00:23:27,149 --> 00:23:29,690 um para o seu nome, apenas como você veria em um site 546 00:23:29,690 --> 00:23:32,120 quando se registar algum site, isso pode 547 00:23:32,120 --> 00:23:35,450 ser o código no back-end que realmente faz a inserção agora 548 00:23:35,450 --> 00:23:37,220 na base de dados. 549 00:23:37,220 --> 00:23:40,870 >> Agora ao contrário, vamos avançar. 550 00:23:40,870 --> 00:23:43,840 Suponha que um usuário é agora o login e você quer 551 00:23:43,840 --> 00:23:48,860 para escrever o código PHP que verifica se a pessoa que está apenas logado 552 00:23:48,860 --> 00:23:52,250 é na verdade um usuário, você pode usar uma sintaxe muito simples. 553 00:23:52,250 --> 00:23:55,832 Você pode dizer SELECT, digamos Estrela, onde estrela significa tudo. 554 00:23:55,832 --> 00:23:57,540 Eu não sei o que eu quer, então me dê 555 00:23:57,540 --> 00:24:01,585 todas as colunas da tabela chamado de usuários, onde, e isso é bom. 556 00:24:01,585 --> 00:24:03,710 Select suporta o que é chamado um predicado, que é 557 00:24:03,710 --> 00:24:06,630 como uma forma de qualificar o que você quer. 558 00:24:06,630 --> 00:24:10,590 Onde nome de usuário é igual a Citação, unquote Malan. 559 00:24:10,590 --> 00:24:13,680 Então, aqui também, eu tenho incorporado dentro do argumento 560 00:24:13,680 --> 00:24:16,110 para uma função PHP, uma linha 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 procurar citações, unquote Malan. 563 00:24:21,790 --> 00:24:24,420 >> Agora isso não é tudo o que útil, então eu vou pular essa 564 00:24:24,420 --> 00:24:28,650 e eu vou arrumar esta dica de Brady, e ir 565 00:24:28,650 --> 00:24:30,990 e plug-in em vez um ponto de interrogação aqui. 566 00:24:30,990 --> 00:24:33,290 Então, só para ficar claro, o que devo dizer ao meu segundo argumento 567 00:24:33,290 --> 00:24:37,480 ser se alguém acaba logado e eu querer verificar se ele ou ela é, na verdade, 568 00:24:37,480 --> 00:24:39,265 um usuário? 569 00:24:39,265 --> 00:24:40,140 AUDIÊNCIA: [inaudível] 570 00:24:40,140 --> 00:24:40,890 DAVID MALAN: Yeah. 571 00:24:40,890 --> 00:24:44,120 Ouço dólar sinal de sublinhado Obter cotação, nome de usuário fecha aspas. 572 00:24:44,120 --> 00:24:50,040 E que deve retornar para mim qualquer uma das linhas no meu banco de dados 573 00:24:50,040 --> 00:24:51,986 que tem um nome de Malan. 574 00:24:51,986 --> 00:24:54,860 Agora, esperamos, eu vou voltar zero se não Malan esteve aqui, 575 00:24:54,860 --> 00:24:56,290 ou um, se ele tem. 576 00:24:56,290 --> 00:24:59,026 Eu não deveria voltar dois, três ou quatro. 577 00:24:59,026 --> 00:24:59,526 Por quê? 578 00:24:59,526 --> 00:25:00,220 >> AUDIÊNCIA: [inaudível] 579 00:25:00,220 --> 00:25:01,120 >> DAVID MALAN: eu disse original, certo? 580 00:25:01,120 --> 00:25:01,750 Razão simples. 581 00:25:01,750 --> 00:25:04,030 Porque eu disse que ela tem que ser original, apenas logicamente, 582 00:25:04,030 --> 00:25:07,940 você só pode ter zero ou um Malans nesta tabela de banco de dados particular. 583 00:25:07,940 --> 00:25:10,965 Agora, como um aparte, apenas para que você já viu que, apesar de eu continuar usando GET 584 00:25:10,965 --> 00:25:14,350 e embora PSet6 utilizado apenas GET, você pode certamente ter POST. 585 00:25:14,350 --> 00:25:17,212 E lembrar que Publicar é outra técnica para a apresentação de informações 586 00:25:17,212 --> 00:25:19,170 de uma forma, mas não aparece na URL. 587 00:25:19,170 --> 00:25:22,690 É um pouco mais seguro, certamente, para coisas como nomes de usuários e senhas, 588 00:25:22,690 --> 00:25:25,210 PSet7 que irá, na verdade, envolvem. 589 00:25:25,210 --> 00:25:28,130 >> Então, vamos fazer isso em PHP MyAdmin e ver o que acontece. 590 00:25:28,130 --> 00:25:30,020 Eu estou indo para ir para a aba MySQL. 591 00:25:30,020 --> 00:25:34,450 E note que o valor padrão para PHP MyAdmin, apenas para tentar ser útil, 592 00:25:34,450 --> 00:25:37,050 é selecionar estrela de usuários onde um. 593 00:25:37,050 --> 00:25:39,430 Bem, um é sempre verdadeiro, assim este tem o bobo eficaz 594 00:25:39,430 --> 00:25:40,400 de apenas selecionar tudo. 595 00:25:40,400 --> 00:25:42,691 Mas eu vou ser um pouco mais pedante e manualmente 596 00:25:42,691 --> 00:25:45,920 digitar selecione Estrela usuários. 597 00:25:45,920 --> 00:25:48,294 >> Agora, tecnicamente, você pode citar o nome das tabelas. 598 00:25:48,294 --> 00:25:50,460 É raro que você tem que, mas observar essas não são 599 00:25:50,460 --> 00:25:52,240 suas citações normais do teclado dos EUA. 600 00:25:52,240 --> 00:25:54,760 Este é o chamado crase, que é geralmente no lado superior esquerdo 601 00:25:54,760 --> 00:25:56,000 canto do seu teclado. 602 00:25:56,000 --> 00:25:58,500 Mas é raro que você vai realmente precisa se preocupar com isso, 603 00:25:58,500 --> 00:25:59,950 então eu vou omiti-los de qualquer maneira. 604 00:25:59,950 --> 00:26:02,280 Então, agora, deixe-me ir em frente e bateu ir. 605 00:26:02,280 --> 00:26:06,616 E quantas linhas eu deveria ter de volta quando eu seleciono estrela de usuários? 606 00:26:06,616 --> 00:26:08,407 >> AUDIÊNCIA: [inaudível] 607 00:26:08,407 --> 00:26:09,990 DAVID MALAN: O número de linhas, com certeza. 608 00:26:09,990 --> 00:26:12,390 Mas como muitos nesta história concreta agora? 609 00:26:12,390 --> 00:26:14,640 Dois, porque não havia me e lá estava Rob. 610 00:26:14,640 --> 00:26:19,370 Então, se eu clicar em Go, vejo que visualmente Eu recebi de volta, na verdade, duas linhas. 611 00:26:19,370 --> 00:26:22,060 Há um monte de lixo no tela, mas eu só vejo duas linhas. 612 00:26:22,060 --> 00:26:28,580 Por outro lado, se eu fizer isso de novo e fazer Selecione Estrela usuários, onde nome de usuário 613 00:26:28,580 --> 00:26:31,840 é igual a citação, fecha aspas Malan, agora se eu clicar em Go, 614 00:26:31,840 --> 00:26:33,970 Eu só vou voltar uma linha. 615 00:26:33,970 --> 00:26:36,499 E, por último, se eu fizer algo como isto, suponha 616 00:26:36,499 --> 00:26:38,290 que eu não me importo com recebendo tudo, 617 00:26:38,290 --> 00:26:41,020 que é tipo de sem sentido agora, porque há apenas duas colunas. 618 00:26:41,020 --> 00:26:43,103 Não é como eu estou selecionando uma enorme quantidade de dados. 619 00:26:43,103 --> 00:26:46,720 Suponha que eu vá em frente e não SELECT nome DE 620 00:26:46,720 --> 00:26:51,990 usuários, onde nome de usuário é igual Malan, o que é agradável sobre SQL honestamente, 621 00:26:51,990 --> 00:26:54,290 é que ele realmente só faz o que você diga a ele para fazer. 622 00:26:54,290 --> 00:26:57,550 É muito sucinta, mas você literalmente apenas diga a ele o que você quer fazer. 623 00:26:57,550 --> 00:27:01,130 Selecione o nome dos usuários ONDE o nome de usuário é igual Malan. 624 00:27:01,130 --> 00:27:03,440 E isso realmente é que explícito. 625 00:27:03,440 --> 00:27:08,410 Então, agora se eu acertar Go, quantas linhas sou eu que vou voltar? 626 00:27:08,410 --> 00:27:10,770 Um, porque é apenas Malan, eu espero. 627 00:27:10,770 --> 00:27:13,100 Ou zero se ele não é Há, mas um máximo. 628 00:27:13,100 --> 00:27:17,610 >> E quantas colunas eu vou voltar? 629 00:27:17,610 --> 00:27:18,450 Quantas colunas? 630 00:27:18,450 --> 00:27:20,658 Desta vez, eu só vou para obter um, porque eu não fiz 631 00:27:20,658 --> 00:27:22,380 selecione estrela, que é tudo. 632 00:27:22,380 --> 00:27:27,900 Agora eu estou selecionando apenas o nome, então eu é só pegar de volta uma coluna e uma linha. 633 00:27:27,900 --> 00:27:31,730 E parece tipo de forma adequada ridículo, basta olhar super 634 00:27:31,730 --> 00:27:33,060 pequena como esta. 635 00:27:33,060 --> 00:27:34,290 Então, o que está realmente acontecendo? 636 00:27:34,290 --> 00:27:36,890 Quando você executar um SQL consulta usando select, 637 00:27:36,890 --> 00:27:38,700 o que você está recebendo volta da base de dados 638 00:27:38,700 --> 00:27:42,970 é como uma tabela temporária com linhas e colunas, talvez, 639 00:27:42,970 --> 00:27:46,260 mas que omitir qualquer coisa que Não foi realmente selecionado por você. 640 00:27:46,260 --> 00:27:49,010 Então, é como se alguém tinha uma grande planilha de todos os alunos 641 00:27:49,010 --> 00:27:51,610 registada para alguns grupo de estudantes, e você diz, 642 00:27:51,610 --> 00:27:55,097 me dar todo o calouro que tenho registrada para o nosso grupo de alunos, o que 643 00:27:55,097 --> 00:27:56,930 seu colega no grupo de estudantes pode fazer 644 00:27:56,930 --> 00:27:58,430 é que eles poderiam apenas entregar lhe toda a planilha. 645 00:27:58,430 --> 00:27:59,742 Isso é como dizer selecione estrela. 646 00:27:59,742 --> 00:28:02,200 E é um pouco chato se você só queria o calouro. 647 00:28:02,200 --> 00:28:05,640 E assim, se você, em vez disse: selecione estrela da tabela de banco de dados 648 00:28:05,640 --> 00:28:08,470 onde ano é igual a Citação, calouro unquote, 649 00:28:08,470 --> 00:28:10,810 é como se seu amigo no grupo de estudante 650 00:28:10,810 --> 00:28:13,770 literalmente em destaque e copiadas apenas as linhas caloiro, 651 00:28:13,770 --> 00:28:16,780 colou-los em um novo Google Planilha ou um arquivo do Excel, 652 00:28:16,780 --> 00:28:18,860 e entregou de volta o apenas como resultante de arquivo. 653 00:28:18,860 --> 00:28:21,710 Isso é tudo o que está acontecendo em conceptualmente aqui. 654 00:28:21,710 --> 00:28:23,920 >> Então, no final, não podemos fazer algumas coisas muito extravagantes 655 00:28:23,920 --> 00:28:26,560 por armazenar coisas como nomes de usuários e senhas e semelhantes. 656 00:28:26,560 --> 00:28:30,310 Mas, ao que parece, devemos fazê- um pouco diferente do que isso. 657 00:28:30,310 --> 00:28:34,750 Não é que inteligente apenas armazenar um nome de usuário e uma senha. 658 00:28:34,750 --> 00:28:37,790 Alguém mais cedo, eu acho aqui em baixo, sugeriu um ID. 659 00:28:37,790 --> 00:28:40,787 Agora, um ID poderia ser como um Harvard ID ou ID líquido de Yale, 660 00:28:40,787 --> 00:28:42,870 mas pode ser ainda mais simples no nosso caso base de dados. 661 00:28:42,870 --> 00:28:45,120 E, de fato, o caso comum é ter uma outra coluna. 662 00:28:45,120 --> 00:28:46,953 E eu estou indo para ir em frente e editar a minha mesa. 663 00:28:46,953 --> 00:28:49,521 E se você brincar com esta interface para PSet7, 664 00:28:49,521 --> 00:28:51,770 você verá que você pode conferir este botão aqui e adicionar 665 00:28:51,770 --> 00:28:53,750 um campo no inicio da tabela. 666 00:28:53,750 --> 00:28:56,720 E agora, se eu clicar em Go, que vai para me dar uma dessas formas 667 00:28:56,720 --> 00:28:57,600 de mais cedo. 668 00:28:57,600 --> 00:29:00,170 Eu estou indo para adicionar um campo denominado ID. 669 00:29:00,170 --> 00:29:03,070 E eu estou indo para torná-lo um tipo numérico. 670 00:29:03,070 --> 00:29:05,362 >> Eu tenho um monte inteiro de valores para valores numéricos. 671 00:29:05,362 --> 00:29:08,677 Eu só vou escolher um INT e Não se preocupe com os tamanhos diferentes. 672 00:29:08,677 --> 00:29:10,510 Eu não tenho para especificar ou um comprimento de um valor, 673 00:29:10,510 --> 00:29:13,710 porque ele vai ser 32 bits, não importa o quê. 674 00:29:13,710 --> 00:29:16,070 Atributos, nós não vimos antes. 675 00:29:16,070 --> 00:29:18,410 Qualquer participação em qualquer desses opções de menu desta vez? 676 00:29:18,410 --> 00:29:21,890 677 00:29:21,890 --> 00:29:23,745 Para uma INT? 678 00:29:23,745 --> 00:29:24,620 O que você propõe? 679 00:29:24,620 --> 00:29:27,350 680 00:29:27,350 --> 00:29:28,445 Não? 681 00:29:28,445 --> 00:29:29,570 Algum destes faz sentido? 682 00:29:29,570 --> 00:29:30,536 Sim. 683 00:29:30,536 --> 00:29:31,900 Sim, sem assinatura, certo? 684 00:29:31,900 --> 00:29:35,930 >> Geralmente, se nós estamos indo dar- todos um número único, que 685 00:29:35,930 --> 00:29:38,200 é o lugar onde esta história é indo, eu realmente só quer 686 00:29:38,200 --> 00:29:41,919 uma pessoa a ter o número, tipo, zero e um e dois e três e quatro. 687 00:29:41,919 --> 00:29:43,710 Eu não preciso de lidar com números negativos. 688 00:29:43,710 --> 00:29:45,210 Parece apenas uma complexidade desnecessária. 689 00:29:45,210 --> 00:29:48,470 Eu quero que quatro bilhões de valores possíveis, não quatro bilhões valores possíveis, 690 00:29:48,470 --> 00:29:50,699 então eu só duplicou o capacidade da minha INT. 691 00:29:50,699 --> 00:29:53,490 Como um aparte, se você quiser se relacionar isso para algo como o Facebook, 692 00:29:53,490 --> 00:29:56,190 para trás no tipo do meu dia quando Facebook saiu primeiro, 693 00:29:56,190 --> 00:29:59,510 Eu acredito que eles foram usando em seu banco de dados MySQL 694 00:29:59,510 --> 00:30:02,856 para armazenar um usuário do identificador, era apenas um INT. 695 00:30:02,856 --> 00:30:05,230 Mas, claro, há muito de pessoas reais no mundo. 696 00:30:05,230 --> 00:30:07,438 Há um monte de falso Facebook contas no mundo. 697 00:30:07,438 --> 00:30:11,701 E por isso, eventualmente, Facebook transbordou o tamanho de um INT, um quatro bilhões 698 00:30:11,701 --> 00:30:12,200 valor. 699 00:30:12,200 --> 00:30:15,032 É por isso que, se você olhar ao redor e há sites 700 00:30:15,032 --> 00:30:16,740 que podem dizer o que um ID único é. 701 00:30:16,740 --> 00:30:19,781 E se você nunca escolheu um nome de usuário Facebook, você vai ver a sua identificação única. 702 00:30:19,781 --> 00:30:23,080 Eu acho que é PHP dot perfil ponto de interrogação ID é igual a alguma coisa. 703 00:30:23,080 --> 00:30:27,210 Isso agora é algo como um grande INT, ou um longo se quiserem, 704 00:30:27,210 --> 00:30:29,700 que é um valor de 64 bits ou algo comparável. 705 00:30:29,700 --> 00:30:33,620 >> Assim, mesmo no mundo real fazer estes questões em última análise, às vezes importa. 706 00:30:33,620 --> 00:30:37,600 E acontece aqui, se eu sou dando todos os meus usuários uma identificação única, 707 00:30:37,600 --> 00:30:41,750 Eu quero ser super explícita e minimamente fazer esse campo único. 708 00:30:41,750 --> 00:30:44,750 Mas acontece lá fora é uma pedaço de nomenclatura também hoje 709 00:30:44,750 --> 00:30:46,470 que é uma chave primária. 710 00:30:46,470 --> 00:30:49,800 Se você está projetando um banco de dados mesa e você sabe com antecedência 711 00:30:49,800 --> 00:30:55,580 que uma das colunas dessa tabela deve e irá identificar exclusivamente linhas 712 00:30:55,580 --> 00:30:58,500 na tabela, você quer especificá-lo e dizer o banco de dados, 713 00:30:58,500 --> 00:31:00,250 esta é a minha chave primária. 714 00:31:00,250 --> 00:31:02,110 Pode haver duplicatas em outros campos, 715 00:31:02,110 --> 00:31:06,330 mas eu estou dizendo o banco de dados que este é a minha principal, o meu campo mais importante, 716 00:31:06,330 --> 00:31:08,420 que é garantida para ser exclusivo. 717 00:31:08,420 --> 00:31:09,660 >> Agora, isso parece redundante. 718 00:31:09,660 --> 00:31:13,830 Agora estou propondo que adicionar, clicando em Salvar aqui, 719 00:31:13,830 --> 00:31:17,210 um called-- campo e eu vou para ir em frente e clique AI, 720 00:31:17,210 --> 00:31:19,720 vamos voltar para que em um momento, salvar. 721 00:31:19,720 --> 00:31:22,540 Estou propondo agora que minha mesa semelhante a este. 722 00:31:22,540 --> 00:31:26,305 Eu tenho um campo INT chamado ID, um campo CHAR chamado usuário, 723 00:31:26,305 --> 00:31:31,100 um campo VARCHAR denominado Nome, mas ID, se é primário e, portanto, único, 724 00:31:31,100 --> 00:31:33,760 por que eu apenas resíduos tempo introduzindo o que 725 00:31:33,760 --> 00:31:39,140 efetivamente é uma segunda exclusivo campo chamado ID que é uma INT? 726 00:31:39,140 --> 00:31:41,980 >> Nome de usuário, recall, foi Já único, disse. 727 00:31:41,980 --> 00:31:45,350 Então, basta logicamente, você não precisa qualquer experiência de banco de dados à razão 728 00:31:45,350 --> 00:31:47,570 por isso, por que Eu poderia ter introduzido 729 00:31:47,570 --> 00:31:50,065 um INT como meu identificador único bem? 730 00:31:50,065 --> 00:31:52,740 731 00:31:52,740 --> 00:31:53,930 O que está isto-- dizer de novo? 732 00:31:53,930 --> 00:31:55,580 >> AUDIÊNCIA: [inaudível] 733 00:31:55,580 --> 00:31:59,534 >> DAVID MALAN: Random o acesso é mais fácil, por quê? 734 00:31:59,534 --> 00:32:00,410 >> AUDIÊNCIA: [inaudível] 735 00:32:00,410 --> 00:32:02,367 DAVID MALAN: Sim, é apenas acessando números. 736 00:32:02,367 --> 00:32:04,750 Então, se você acha deste verdadeiramente é uma tabela, como uma matriz, 737 00:32:04,750 --> 00:32:07,690 agora eu tenho identificadores exclusivos que eu posso saltar ao redor. 738 00:32:07,690 --> 00:32:11,520 E ainda melhor do que isso é que quão grande é uma INT vai ser de novo? 739 00:32:11,520 --> 00:32:14,450 740 00:32:14,450 --> 00:32:15,800 32 bits ou quatro bytes. 741 00:32:15,800 --> 00:32:17,750 >> Quão grande é o meu nome vai ser? 742 00:32:17,750 --> 00:32:20,310 743 00:32:20,310 --> 00:32:21,990 Maximamente? 744 00:32:21,990 --> 00:32:22,880 16 bytes. 745 00:32:22,880 --> 00:32:26,080 >> Então, se você está realmente se preocupando com o desempenho do seu código, 746 00:32:26,080 --> 00:32:31,390 acho que volta para PSet5, você preferiria para procurar um valor de quatro bytes ou um 16 747 00:32:31,390 --> 00:32:32,240 valor byte, certo? 748 00:32:32,240 --> 00:32:33,810 É realmente tão simples quanto isso. 749 00:32:33,810 --> 00:32:38,060 Você tem que fazer quatro vezes mais trabalho para procurar nomes de usuários porque esses 750 00:32:38,060 --> 00:32:38,830 são 16 bytes. 751 00:32:38,830 --> 00:32:41,320 Então, você tem que, literalmente, comparar todos os 16 bytes a ser 752 00:32:41,320 --> 00:32:43,140 Certifique-se sim, isso é nome de usuário que eu quero. 753 00:32:43,140 --> 00:32:46,610 Enquanto que para uma INT, você pode fazê-lo com apenas quatro bytes. 754 00:32:46,610 --> 00:32:49,212 >> E como um aparte para aqueles interessado em hardware de computador, 755 00:32:49,212 --> 00:32:52,420 verifica-se que você pode caber algo como um INT ou um valor de 32 bits em algo 756 00:32:52,420 --> 00:32:55,330 chamado um registo de um computador CPU, o que significa que é super, 757 00:32:55,330 --> 00:32:58,400 super rápido, mesmo com o menor nível de hardware do computador. 758 00:32:58,400 --> 00:33:00,530 Assim, não há apenas vantagens ao redor. 759 00:33:00,530 --> 00:33:01,530 Então o que isso quer dizer? 760 00:33:01,530 --> 00:33:04,850 Na verdade, quando você está projetando um banco de dados de tabela, a quase totalidade do tempo 761 00:33:04,850 --> 00:33:07,170 você está indo para não ter apenas os dados que lhe interessa, 762 00:33:07,170 --> 00:33:09,280 mas também algo como um identificador exclusivo 763 00:33:09,280 --> 00:33:11,280 porque isso vai deixe-nos fazer outras coisas. 764 00:33:11,280 --> 00:33:13,160 E vamos tropeçar um problema aqui. 765 00:33:13,160 --> 00:33:15,990 >> Suponha que os usuários não têm apenas nomes de usuários e nomes, 766 00:33:15,990 --> 00:33:19,540 mas eles também têm coisas como cidades e os estados e códigos postais, pelo menos, 767 00:33:19,540 --> 00:33:20,432 aqui em os EUA. 768 00:33:20,432 --> 00:33:22,390 Então, eu estou indo para ir em frente e apenas dizer rapidamente, 769 00:33:22,390 --> 00:33:26,180 Dá-me mais três colunas no fim da tabela. 770 00:33:26,180 --> 00:33:28,900 E isso vai ser City, este vai ser Estado, 771 00:33:28,900 --> 00:33:30,400 e isso vai ser Zip. 772 00:33:30,400 --> 00:33:32,710 >> Agora tipos City, que dados esta deve ser, talvez? 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 Eu não sei o que o maior cidade nome é. 776 00:33:37,780 --> 00:33:40,571 Em algum lugar na América, há provavelmente, alguns ridiculamente palavra longa, 777 00:33:40,571 --> 00:33:43,605 então vamos apenas ir com 255, um pouco historicamente ou arbitrária. 778 00:33:43,605 --> 00:33:44,730 Estado, o que você quer fazer? 779 00:33:44,730 --> 00:33:48,380 780 00:33:48,380 --> 00:33:50,367 Chamada de julgamento, certo? 781 00:33:50,367 --> 00:33:51,700 O que é talvez o mais eficiente? 782 00:33:51,700 --> 00:33:53,500 Quantas personagens? 783 00:33:53,500 --> 00:33:55,950 Talvez apenas duas, se pudermos se safar fazendo apenas, 784 00:33:55,950 --> 00:33:58,250 como, MA para Massachusetts e assim por diante. 785 00:33:58,250 --> 00:34:00,520 Então, eu estou indo para ir um valor CHAR de dois. 786 00:34:00,520 --> 00:34:03,080 >> CEP é muito interessante. 787 00:34:03,080 --> 00:34:06,679 Estamos aqui em 02138, de modo que sugere que deveríamos usar o que? 788 00:34:06,679 --> 00:34:07,470 É um INT, certo? 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 iria funcionar. 792 00:34:14,521 --> 00:34:15,020 Não? 793 00:34:15,020 --> 00:34:18,920 794 00:34:18,920 --> 00:34:20,870 CHAR ou cinco, mas eu quero um INT. 795 00:34:20,870 --> 00:34:23,710 Por que empurrar para trás em um INT? 796 00:34:23,710 --> 00:34:26,820 Persuadir-me deste. 797 00:34:26,820 --> 00:34:29,210 O que é estúpido sobre um INT, a minha ideia? 798 00:34:29,210 --> 00:34:29,871 Sim. 799 00:34:29,871 --> 00:34:31,199 >> AUDIÊNCIA: Tome-se mais memória. 800 00:34:31,199 --> 00:34:32,909 >> DAVID MALAN: Tome-se mais memória. 801 00:34:32,909 --> 00:34:35,310 Quatro bytes, mas você é propondo um código postal 802 00:34:35,310 --> 00:34:39,000 como cinco bytes ou alguém era como um CHAR, que se sente como eh, isso não é realmente 803 00:34:39,000 --> 00:34:39,620 O caso. 804 00:34:39,620 --> 00:34:40,489 >> Bem, história divertida. 805 00:34:40,489 --> 00:34:43,179 Anos atrás, quando eu costumava usar Microsoft Outlook para o meu e-mail, 806 00:34:43,179 --> 00:34:45,150 Eu finalmente queria mudar para o Gmail. 807 00:34:45,150 --> 00:34:48,949 E assim, eu exportados toda a minha contatos do Outlook como um arquivo CSV. 808 00:34:48,949 --> 00:34:50,699 Valores separados por vírgulas, que apenas significava que eu 809 00:34:50,699 --> 00:34:54,060 tinha todos os meus amigos e último nomes nomes e números de telefone e códigos postais 810 00:34:54,060 --> 00:34:54,747 e tudo isso. 811 00:34:54,747 --> 00:34:56,580 E então eu fiz a erro de abri-lo 812 00:34:56,580 --> 00:34:58,640 em Excel, que é um programa de planilha que 813 00:34:58,640 --> 00:35:00,289 entende arquivos CSV, como vimos. 814 00:35:00,289 --> 00:35:03,080 Mas então, eu devo ter batido, como, Comando ou controle S em um ponto. 815 00:35:03,080 --> 00:35:06,250 E Excel, aparentemente no momento tinha uma característica em que a qualquer momento se 816 00:35:06,250 --> 00:35:08,100 viu um número, ele tentou ser útil. 817 00:35:08,100 --> 00:35:11,610 E se esse número começou com zeros, seria apenas se livrar deles. 818 00:35:11,610 --> 00:35:13,420 Por que você precisa de liderança zeros na inteiros? 819 00:35:13,420 --> 00:35:15,140 Eles são sem sentido, matematicamente. 820 00:35:15,140 --> 00:35:17,530 Eles não são sem sentido no sistema US Postal. 821 00:35:17,530 --> 00:35:19,954 Então, eu tive há anos, a este dia, eu ainda 822 00:35:19,954 --> 00:35:22,370 ter amigos que, quando o caso raro que eu preciso de alguém é 823 00:35:22,370 --> 00:35:24,078 abordar estes dias, Eu ainda vou ver que eu 824 00:35:24,078 --> 00:35:26,767 tenho um amigo em Cambridge, Massachusetts, 2138. 825 00:35:26,767 --> 00:35:29,350 E é irritante se você estiver tentar resolver de forma programática 826 00:35:29,350 --> 00:35:30,975 gerar envelopes ou simplesmente anote-a. 827 00:35:30,975 --> 00:35:33,599 E isso é por causa desta razão, Eu escolhi o tipo de dados errado. 828 00:35:33,599 --> 00:35:34,490 Então, eu amo a sua ideia. 829 00:35:34,490 --> 00:35:35,650 Vamos usar um campo CHAR. 830 00:35:35,650 --> 00:35:38,340 Cinco personagens, com exceção há um caso de canto. 831 00:35:38,340 --> 00:35:42,220 Se você ainda enviar e-mail, por vezes, códigos postais nos dias de hoje, 832 00:35:42,220 --> 00:35:45,360 eles são, como, mais quatro. 833 00:35:45,360 --> 00:35:48,200 Então, precisamos de um hífen e, em seguida, precisamos de mais quatro números. 834 00:35:48,200 --> 00:35:50,330 Então, para ser honesto, poderia ir muitas maneiras diferentes. 835 00:35:50,330 --> 00:35:52,371 >> Por agora, eu vou continuar o simples e eu sou apenas 836 00:35:52,371 --> 00:35:54,780 vai dizer que é um cinco valor CHAR e estamos 837 00:35:54,780 --> 00:35:56,739 vai pular todo o traço mais quatro. 838 00:35:56,739 --> 00:35:58,280 Mas estes são os tipos de compensações. 839 00:35:58,280 --> 00:36:00,196 E você pode pensar no mesmos problemas decorrentes 840 00:36:00,196 --> 00:36:01,860 com números de telefone ou outros campos. 841 00:36:01,860 --> 00:36:04,350 >> E agora, este é, na verdade, uma estrada tola de ir para baixo. 842 00:36:04,350 --> 00:36:08,000 Suponha que tanto Rob e eu e Hannah e Maria e [? Davon?] E Andy 843 00:36:08,000 --> 00:36:12,820 e outros sobre a equipe todos ao vivo em Cambridge, Massachusetts, 02138. 844 00:36:12,820 --> 00:36:17,970 Isso realmente me sinto idiota que eu sou adicionando a minha tabela de usuários, cidade, estado, 845 00:36:17,970 --> 00:36:18,630 e zip. 846 00:36:18,630 --> 00:36:20,980 Por quê? 847 00:36:20,980 --> 00:36:21,960 >> AUDIÊNCIA: [inaudível] 848 00:36:21,960 --> 00:36:22,918 >> DAVID MALAN: Diga outra vez? 849 00:36:22,918 --> 00:36:24,310 AUDIÊNCIA: [inaudível] 850 00:36:24,310 --> 00:36:25,850 >> DAVID MALAN: Eles são sempre indo para ir juntos, certo? 851 00:36:25,850 --> 00:36:28,660 Quando se vê, estamos acostumados a pensar este era o caso até que nós exaustivamente 852 00:36:28,660 --> 00:36:30,570 procurou todo os EUA, e despeja que há 853 00:36:30,570 --> 00:36:32,653 são algumas inconsistências onde várias cidades têm 854 00:36:32,653 --> 00:36:35,060 o mesmo zip, o que é estranho. 855 00:36:35,060 --> 00:36:40,580 Mas, se por agora estipulam que 02138 é sempre de Cambridge, Massachusetts, 856 00:36:40,580 --> 00:36:44,910 por que no mundo que você armazenar em seu banco de dados e Cambridge MA e 02138 857 00:36:44,910 --> 00:36:49,357 para mim e para Hannah e para Rob e para [? Davon?] E para os outros que vivem 858 00:36:49,357 --> 00:36:51,190 aqui em Cambridge, é perfeitamente redundante. 859 00:36:51,190 --> 00:36:54,480 >> Devemos fugir com apenas armazenar o quê? 860 00:36:54,480 --> 00:36:55,610 Apenas o código postal. 861 00:36:55,610 --> 00:36:58,660 Mas então, se nós armazenamos apenas o código postal, eu quero, provavelmente, 862 00:36:58,660 --> 00:37:02,160 para o meu site para saber onde é 02138. 863 00:37:02,160 --> 00:37:03,910 Então, eu preciso de outra tabela. 864 00:37:03,910 --> 00:37:04,697 E isso é OK. 865 00:37:04,697 --> 00:37:07,530 E, de fato, este é um dos processos de projeto de concepção de tabelas 866 00:37:07,530 --> 00:37:11,472 que você vai fazer em PSet7 bem pelo qual Você quer fatorar dados comuns. 867 00:37:11,472 --> 00:37:14,430 Assim como temos vindo a fatoração código comum e factoring out comum 868 00:37:14,430 --> 00:37:17,380 estilos de CSS, aqui também no banco de dados, 869 00:37:17,380 --> 00:37:21,180 se eu só precisa de 02.138 para singularmente identificar alguém da cidade natal, 870 00:37:21,180 --> 00:37:25,020 não guarde Cambridge, Mass para cada usuário danado na sua tabela. 871 00:37:25,020 --> 00:37:29,770 >> Em vez disso, ter uma tabela separada chamada Zips que deve ter o que colunas? 872 00:37:29,770 --> 00:37:33,490 Provavelmente, um campo ID, apenas porque, para os princípios que estamos falando agora. 873 00:37:33,490 --> 00:37:35,720 Provavelmente um campo zip para 02138. 874 00:37:35,720 --> 00:37:38,400 E então, provavelmente, o que os outros colunas? 875 00:37:38,400 --> 00:37:42,950 Cidade e estado, mas só tem uma linha para 02.138, uma linha para 02.139, 876 00:37:42,950 --> 00:37:44,772 uma linha para 90210. 877 00:37:44,772 --> 00:37:46,730 E isso é, literalmente, todos os códigos postais que eu conheço. 878 00:37:46,730 --> 00:37:49,012 >> Então, agora, o que você pode fazer? 879 00:37:49,012 --> 00:37:51,220 Isto é problemático, porque agora eu tenho duas tabelas. 880 00:37:51,220 --> 00:37:54,660 Então, meus usuários são em sua maioria por aqui, mas a sua informação de estado da cidade é 881 00:37:54,660 --> 00:37:55,390 Por aqui. 882 00:37:55,390 --> 00:37:58,635 Assim, verifica-se com o SQL, não há na verdade, uma maneira de juntar informações, 883 00:37:58,635 --> 00:38:00,470 e você vai ver isso no PSet. 884 00:38:00,470 --> 00:38:03,000 >> Mas acontece que você pode fazer algo assim. 885 00:38:03,000 --> 00:38:10,501 Selecione Estrela usuários, zips Cadastre-ON usuários dot zip é igual a zips dot zip. 886 00:38:10,501 --> 00:38:13,360 Que é um pouco prolixo, reconhecidamente, mas isso só 887 00:38:13,360 --> 00:38:17,590 significa selecionar tudo, desde o processo de tomada de minha tabela de usuários 888 00:38:17,590 --> 00:38:19,580 e minha mesa zips. 889 00:38:19,580 --> 00:38:22,120 Juntá-los por um campo que eles têm em coluna. 890 00:38:22,120 --> 00:38:24,780 Então, literalmente fazendo algo assim, e me dar de volta 891 00:38:24,780 --> 00:38:27,360 uma nova tabela temporária isso é mais amplo, que é maior, 892 00:38:27,360 --> 00:38:29,450 que tem todo o colunas de ambos. 893 00:38:29,450 --> 00:38:33,510 E que, muito simplesmente, seria o sintaxe para fazer algo parecido com isto. 894 00:38:33,510 --> 00:38:35,540 >> Então, há essa frente, mas lá vai 895 00:38:35,540 --> 00:38:38,950 ser outras decisões de projeto você vai tem de fazer, não só com os índices 896 00:38:38,950 --> 00:38:40,550 mas também correr em desafios. 897 00:38:40,550 --> 00:38:43,360 Na verdade, há um desafio em qualquer projeto de banco de dados 898 00:38:43,360 --> 00:38:47,930 pelo que, por vezes, duas pessoas podem querer para acessar as mesmas linhas do banco de dados 899 00:38:47,930 --> 00:38:48,530 mesa. 900 00:38:48,530 --> 00:38:51,450 Então, isso é algo que vamos encontrar em PSet7 bem. 901 00:38:51,450 --> 00:38:54,686 >> Mas eu pensei que eu iria olhar para um ataque que é possível em SQL. 902 00:38:54,686 --> 00:38:56,560 Quais são algumas das problemas que podem surgir? 903 00:38:56,560 --> 00:38:58,170 Então, você vai encontrar isso em PSet7. 904 00:38:58,170 --> 00:39:01,874 E nós dizemos-lhe abertamente o que o solução de codificação para esse problema é. 905 00:39:01,874 --> 00:39:04,790 Mas se você tomar uma classe de nível superior, especialmente em sistemas operacionais, 906 00:39:04,790 --> 00:39:06,950 você vai encontrar uma questão de atomicidade, 907 00:39:06,950 --> 00:39:10,080 o problema de tentar fazer várias coisas ao mesmo tempo 908 00:39:10,080 --> 00:39:11,000 sem interrupção. 909 00:39:11,000 --> 00:39:14,560 >> E eu pensei que eu iria introduzir esta idéia para PSet7 com uma metáfora 910 00:39:14,560 --> 00:39:18,160 que eu mesmo aprendi em Margo Sistemas operacionais CS164 do Seltzer 911 00:39:18,160 --> 00:39:18,990 anos de classe atrás. 912 00:39:18,990 --> 00:39:22,230 Suponha que você tem um destes dormitório frigoríficos em seu quarto do dormitório ou casa, 913 00:39:22,230 --> 00:39:24,474 e você tem uma propensão real para leite. 914 00:39:24,474 --> 00:39:27,140 E assim, você chega em casa a partir de classes um dia, você abrir a geladeira. 915 00:39:27,140 --> 00:39:27,620 Oh, droga. 916 00:39:27,620 --> 00:39:28,870 Não há leite no frigorífico. 917 00:39:28,870 --> 00:39:32,470 Assim, você fechar o frigorífico, trancar a porta, bloquear o seu dormitório, 918 00:39:32,470 --> 00:39:34,770 caminhar ao virar da esquina a CVS, entrar na fila, 919 00:39:34,770 --> 00:39:36,312 e começar a verificar um pouco de leite. 920 00:39:36,312 --> 00:39:38,978 E isso vai levar um tempo, porque aqueles maldita auto check-out 921 00:39:38,978 --> 00:39:40,570 contadores demorar uma eternidade para usar de qualquer maneira. 922 00:39:40,570 --> 00:39:41,950 Então, enquanto isso, seu companheiro de quarto chega em casa. 923 00:39:41,950 --> 00:39:43,470 Ele ou ela realmente gosta de leite também. 924 00:39:43,470 --> 00:39:45,520 Eles vêm para a sala de dormitório, abrir a geladeira, oh, danado. 925 00:39:45,520 --> 00:39:46,490 Não há mais leite. 926 00:39:46,490 --> 00:39:49,040 >> Então, ele ou ela também vai ao virar da esquina. 927 00:39:49,040 --> 00:39:51,670 Mas agora, uma vez que não há como dois ou três ou quatro CVSes nas proximidades, 928 00:39:51,670 --> 00:39:53,800 eles acontecem para ir para um dos diferentes pessoas na praça. 929 00:39:53,800 --> 00:39:55,830 E agora, a poucos minutos mais tarde, tanto de você 930 00:39:55,830 --> 00:39:58,060 chegar em casa e ugh, pior problema que nunca. 931 00:39:58,060 --> 00:40:00,967 Agora você tem muito leite porque vai azedar. 932 00:40:00,967 --> 00:40:03,050 E você gosta de leite, mas você realmente não gosta de leite. 933 00:40:03,050 --> 00:40:06,730 >> Então, agora, este foi um caros erro, porque tanto de você 934 00:40:06,730 --> 00:40:09,870 tomou uma decisão com base no estado de variável que alguns 935 00:40:09,870 --> 00:40:12,660 estava no processo de sendo mudado por você, 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ão, o que é, talvez, um ser humano solução para esse problema? 938 00:40:17,785 --> 00:40:18,660 AUDIÊNCIA: [inaudível] 939 00:40:18,660 --> 00:40:19,430 DAVID MALAN: Deixe uma nota, certo? 940 00:40:19,430 --> 00:40:21,850 Sempre deixe uma nota, se você estiver familiarizado com esse show. 941 00:40:21,850 --> 00:40:23,100 Sim, existem dois de nós. 942 00:40:23,100 --> 00:40:25,940 Então, sempre deixar uma nota, ou literalmente bloquear o refrigerador 943 00:40:25,940 --> 00:40:28,602 com algum tipo de cadeado ou algo sobre a parte superior assim. 944 00:40:28,602 --> 00:40:31,310 Mas isso realmente vai ser problema-chave com design de banco de dados, 945 00:40:31,310 --> 00:40:34,710 especialmente quando você pode ter vários navegadores, vários laptops, 946 00:40:34,710 --> 00:40:37,450 vários usuários todos tentando atualizar as informações de uma só vez. 947 00:40:37,450 --> 00:40:40,590 As informações particularmente sensíveis como informações financeiras, 948 00:40:40,590 --> 00:40:43,350 qual com uma negociação de ações site como você estará construindo, 949 00:40:43,350 --> 00:40:47,270 E se você quiser verificar quanto dinheiro você tem e, em seguida, se você tem o suficiente, 950 00:40:47,270 --> 00:40:48,490 comprar algumas ações? 951 00:40:48,490 --> 00:40:50,899 >> Mas e se alguém que tem uma conta conjunta com você 952 00:40:50,899 --> 00:40:52,690 é tentando simultaneamente para comprar algumas ações? 953 00:40:52,690 --> 00:40:55,190 Então, ele ou ela é a verificação da Saldo da conta, tanto de você 954 00:40:55,190 --> 00:40:57,540 receber de volta o mesmo resposta, não há leite. 955 00:40:57,540 --> 00:41:00,580 Ou tanto de você voltar a resposta, você tem R $ 100 em sua conta. 956 00:41:00,580 --> 00:41:04,680 Tanto de você tentar tomar a decisão para comprar um quota de cerca de ações da empresa. 957 00:41:04,680 --> 00:41:06,130 >> E agora, o que acontece? 958 00:41:06,130 --> 00:41:07,140 Você tem duas partes? 959 00:41:07,140 --> 00:41:08,420 Você não tem ações? 960 00:41:08,420 --> 00:41:10,320 Problemas como a que pode surgir. 961 00:41:10,320 --> 00:41:11,755 Então, a gente vai encontrar isso. 962 00:41:11,755 --> 00:41:14,630 Ataques de injeção SQL, felizmente, são algo que vai ajudá-lo com, 963 00:41:14,630 --> 00:41:17,430 mas estes são atrozmente comuns nos dias de hoje ainda. 964 00:41:17,430 --> 00:41:18,680 Então, este é apenas um exemplo. 965 00:41:18,680 --> 00:41:21,290 Eu não faço nenhuma reivindicação que Sistema de Harvard PIN estiver 966 00:41:21,290 --> 00:41:23,130 vulneráveis ​​a este ataque em particular. 967 00:41:23,130 --> 00:41:24,160 Nós já tentou acessar. 968 00:41:24,160 --> 00:41:26,120 Mas, você sabe que nós ter um campo como este. 969 00:41:26,120 --> 00:41:29,620 E Net ID de Yale tem um similar tela procurando estes dias. 970 00:41:29,620 --> 00:41:33,190 E verifica-se, que talvez o PIN do sistema é implementado em PHP. 971 00:41:33,190 --> 00:41:37,050 >> E se were-- é não-- eles pode ter código que se parece com isso. 972 00:41:37,050 --> 00:41:38,210 Eles têm duas variáveis. 973 00:41:38,210 --> 00:41:42,495 Dê-me o nome de usuário e senha a partir da variável global pós super- 974 00:41:42,495 --> 00:41:43,970 que falamos anteriormente. 975 00:41:43,970 --> 00:41:47,310 Talvez Harvard tem uma consulta como selecione Estrela usuários 976 00:41:47,310 --> 00:41:50,005 onde nome de usuário é igual ao ea senha é igual a isso. 977 00:41:50,005 --> 00:41:51,880 E note que eu sou apenas ligá-lo usando 978 00:41:51,880 --> 00:41:55,050 a notação chaveta do outro dia, o que significa apenas ligar um valor 979 00:41:55,050 --> 00:41:55,550 Aqui. 980 00:41:55,550 --> 00:41:57,449 Eu não estou usando o questão técnica marca. 981 00:41:57,449 --> 00:41:59,240 Eu não tenho qualquer segundo ou argumentos terceiros. 982 00:41:59,240 --> 00:42:02,350 Eu sou apenas literalmente construir a cadeia de mim mesmo. 983 00:42:02,350 --> 00:42:04,930 >> O problema, porém, é que se alguém gosta de um scroob, 984 00:42:04,930 --> 00:42:09,020 que é uma referência a uma película, registra-se com algo parecido com isto, 985 00:42:09,020 --> 00:42:11,250 e eu removi os pontos que geralmente encobrir 986 00:42:11,250 --> 00:42:14,370 senhas, e se ele é particularmente malicioso 987 00:42:14,370 --> 00:42:18,860 e sua senha talvez é 12345, por o filme chamado "Spaceballs," 988 00:42:18,860 --> 00:42:21,970 mas ele criticamente tipos de apóstrofo depois do cinco, 989 00:42:21,970 --> 00:42:24,790 em seguida, literalmente, a palavra ou no espaço, e, em seguida, citações, 990 00:42:24,790 --> 00:42:29,160 um unquote iguala uma citação, Mas note que ele omitiu o que? 991 00:42:29,160 --> 00:42:32,700 Ele omitiu a citação à direita e ele é omitido a citação à esquerda. 992 00:42:32,700 --> 00:42:35,170 >> Porque, se esta invasor presunção de scroob 993 00:42:35,170 --> 00:42:38,160 é que as pessoas que escreveu este código PHP não eram tão brilhantes, 994 00:42:38,160 --> 00:42:42,990 talvez eles só têm algum único cita em torno da interpolação 995 00:42:42,990 --> 00:42:45,210 de uma variável com chaves? 996 00:42:45,210 --> 00:42:48,620 E talvez por isso, que podia tipo de completar o seu pensamento 997 00:42:48,620 --> 00:42:53,290 para eles, mas de uma forma que está acontecendo para deixá-lo invadiu o sistema de PIN. 998 00:42:53,290 --> 00:42:55,310 Em outras palavras, suponha que este é o código 999 00:42:55,310 --> 00:42:57,140 e, agora, ligar o que scroob digitado. 1000 00:42:57,140 --> 00:42:58,770 E é vermelho, porque é ruim. 1001 00:42:58,770 --> 00:43:01,310 >> E o texto subjacente é o que ele digitou, 1002 00:43:01,310 --> 00:43:05,510 scroob poderia enganar servidor de Harvard para a construção de uma consulta SQL 1003 00:43:05,510 --> 00:43:07,440 string que se parece com isso. 1004 00:43:07,440 --> 00:43:11,760 Senha é igual a 12345 ou um é igual a um. 1005 00:43:11,760 --> 00:43:14,820 O resultado de que, logicamente, é que este irá registrar scroob 1006 00:43:14,820 --> 00:43:18,360 em se sua senha é 12345 ou se um é igual a 1007 00:43:18,360 --> 00:43:22,660 um, o que é, naturalmente, sempre verdade, o que significa scroob sempre entra. 1008 00:43:22,660 --> 00:43:26,060 >> E assim, a maneira de corrigir Neste, como em muitos casos, 1009 00:43:26,060 --> 00:43:28,140 seria escrever mais na defensiva. 1010 00:43:28,140 --> 00:43:30,390 Para usar algo como o nosso função de consulta real, que 1011 00:43:30,390 --> 00:43:33,980 você verá em PSet7, onde se conecte algo como pontos de interrogação aqui. 1012 00:43:33,980 --> 00:43:35,980 E a beleza da função de consulta que nós 1013 00:43:35,980 --> 00:43:40,010 dar é que defende contra estas os chamados ataques de injeção SQL, onde 1014 00:43:40,010 --> 00:43:44,260 alguém está enganando seu código em injetar seu próprio código SQL. 1015 00:43:44,260 --> 00:43:47,380 Porque o que a função de consulta nós damos-lhe realmente vai fazer, 1016 00:43:47,380 --> 00:43:51,270 se você usar a sintaxe de ponto de interrogação e um segundo e um terceiro argumento aqui, 1017 00:43:51,270 --> 00:43:54,590 é o que ele acrescentar ao entrada que o usuário forneceu? 1018 00:43:54,590 --> 00:43:56,060 Aqueles barra invertida cita. 1019 00:43:56,060 --> 00:43:58,590 >> Então, ele escapa a qualquer potencialmente caracteres perigosos. 1020 00:43:58,590 --> 00:44:01,000 Isso parece estranho agora, mas não é vulnerável 1021 00:44:01,000 --> 00:44:03,260 porque não faz alterar a lógica mais 1022 00:44:03,260 --> 00:44:06,470 porque essa senha é todo Agora, uma única citação que não é, 1023 00:44:06,470 --> 00:44:07,596 de fato, a senha do scroob. 1024 00:44:07,596 --> 00:44:09,845 Assim, tem havido algumas piadas sobre isso ao longo dos anos. 1025 00:44:09,845 --> 00:44:12,570 Então, essa foi uma foto tirada de algum geek em um lote de estacionamento 1026 00:44:12,570 --> 00:44:16,620 através do qual você pode saber que algumas cidades e estados tentar digitalizar a sua licença 1027 00:44:16,620 --> 00:44:19,460 placa para cobrá-lo ou bilhete você se você passar por sem, como, 1028 00:44:19,460 --> 00:44:20,660 a coisa E-Z Pass. 1029 00:44:20,660 --> 00:44:24,490 Então, essa pessoa presume que talvez as pessoas que escrevem o sistema E-Z Passe 1030 00:44:24,490 --> 00:44:28,240 não eram tão brilhantes, e talvez eles apenas concatenados uma corda, 1031 00:44:28,240 --> 00:44:32,190 para que ele ou ela não podia maliciosamente não apenas completar o seu pensamento, 1032 00:44:32,190 --> 00:44:35,150 mas, na verdade, executar um comando ruim, que não tenha mencionado ainda, 1033 00:44:35,150 --> 00:44:36,380 mas você provavelmente pode adivinhar. 1034 00:44:36,380 --> 00:44:39,820 Que, além de excluir e inserir e atualizar e selecionar, 1035 00:44:39,820 --> 00:44:43,370 há também uma palavra-chave chamada gota, que literalmente exclui tudo 1036 00:44:43,370 --> 00:44:45,300 na base de dados, que é particularmente ruim. 1037 00:44:45,300 --> 00:44:48,760 >> Podemos zoom e isso se é um pouco difícil de ver. 1038 00:44:48,760 --> 00:44:52,300 Isso, agora, é um famoso desenho animado que é maravilhosamente inteligente agora 1039 00:44:52,300 --> 00:44:53,145 e compreensível. 1040 00:44:53,145 --> 00:45:00,880 1041 00:45:00,880 --> 00:45:04,750 >> [Risos] 1042 00:45:04,750 --> 00:45:05,910 >> Sim, legal. 1043 00:45:05,910 --> 00:45:06,800 Tipo de geeking fora. 1044 00:45:06,800 --> 00:45:08,800 Então, essas são, então, Ataques de injeção SQL. 1045 00:45:08,800 --> 00:45:13,050 E eles são tão fáceis de evitar, utilizando o código de direito ou as bibliotecas certas. 1046 00:45:13,050 --> 00:45:15,947 E você vai ver em PSet7, isso é por que nós damos-lhe a função de consulta. 1047 00:45:15,947 --> 00:45:17,780 Assim, um par de teasers que nós pensamos 1048 00:45:17,780 --> 00:45:19,930 dar-lhe aqui em nossa remanescente minutos juntos. 1049 00:45:19,930 --> 00:45:24,030 Então, como você se lembra de semana zero, nós introduziu essas duas lâmpadas que 1050 00:45:24,030 --> 00:45:26,610 são bons, não só porque eles são muito e são coloridos, 1051 00:45:26,610 --> 00:45:29,450 mas porque suportam algo chamada de API, uma aplicação 1052 00:45:29,450 --> 00:45:31,980 Interface de Programação de E em CS50, até agora, nós temos 1053 00:45:31,980 --> 00:45:34,440 principalmente focada em GET e POST, mas verifica-se 1054 00:45:34,440 --> 00:45:37,390 há outros verbos de HTTP, como PUT. 1055 00:45:37,390 --> 00:45:39,430 >> E, de fato, este foi um slide de semana de zero 1056 00:45:39,430 --> 00:45:44,930 pelo que se você escrever código que envia a la PSet6 uma solicitação HTTP que 1057 00:45:44,930 --> 00:45:49,647 olha como este com este pedaço de texto na parte inferior, o que é chamado JSON, 1058 00:45:49,647 --> 00:45:52,230 ou JavaScript Object Notation que falaremos na próxima semana, 1059 00:45:52,230 --> 00:45:57,030 você pode ligar ou desligar ou mudar a cor das luzes como aqueles. 1060 00:45:57,030 --> 00:46:00,480 Portanto, se CS50 também tem em adição a alguns dessas lâmpadas aqui em New Haven 1061 00:46:00,480 --> 00:46:02,480 se você gostaria de emprestar para projetos finais, 1062 00:46:02,480 --> 00:46:04,370 também alguns Microsoft Bandas, que são como 1063 00:46:04,370 --> 00:46:07,619 relógios que você usa em torno de seu pulso Da mesma forma que tem uma API de maneira a ficar 1064 00:46:07,619 --> 00:46:10,040 pode escrever seu próprio software para eles. 1065 00:46:10,040 --> 00:46:12,490 >> Nós temos uma conta com Código iOS da Apple assim 1066 00:46:12,490 --> 00:46:15,510 que se você tiver um relógio Apple ou um iPhone ou um iPad ou um iPod, 1067 00:46:15,510 --> 00:46:17,707 você pode escrever código que realmente funciona sobre aqueles. 1068 00:46:17,707 --> 00:46:19,540 Nós temos um grupo inteiro de Arduinos, que são 1069 00:46:19,540 --> 00:46:22,010 computadores minúsculos pequenos sem casos, essencialmente, 1070 00:46:22,010 --> 00:46:25,240 que você pode se conectar via USB, normalmente para o seu próprio Mac ou PC, 1071 00:46:25,240 --> 00:46:28,810 escrever código que é executado sobre estes físico dispositivos sensores que muitas vezes têm sobre eles 1072 00:46:28,810 --> 00:46:30,790 para que você possa interagir com o mundo real. 1073 00:46:30,790 --> 00:46:32,860 Nós temos um grupo inteiro de dispositivos Leap Motion, 1074 00:46:32,860 --> 00:46:36,500 que são dispositivos USB para Macs e PCs, aqui e mais uma vez, em New Haven. 1075 00:46:36,500 --> 00:46:40,080 E se você conectá-lo ao seu Mac, você pode realmente controlar o seu computador 1076 00:46:40,080 --> 00:46:42,550 escrevendo software que por meio de raios infravermelhos, 1077 00:46:42,550 --> 00:46:46,360 descobre onde as mãos humanas são, mesmo sem tocar em seu teclado. 1078 00:46:46,360 --> 00:46:49,135 Nós pensamos em compartilhar um rápido vislumbrar isso, 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ão, nós temos um todo monte dessas coisas, 1082 00:47:57,590 --> 00:48:01,040 também, chamado braçadeiras Myo que você colocou sobre seu antebraço 1083 00:48:01,040 --> 00:48:04,595 e, em seguida, você 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, também temos alguns Google Papelão, que fica literalmente, como, 1087 00:49:20,920 --> 00:49:24,841 uma caixa de papelão que você pode colocar no seu rosto, mas de slides no seu telefone para ele 1088 00:49:24,841 --> 00:49:27,590 de modo que você colocou o copo de sua telefone realmente perto de seus olhos. 1089 00:49:27,590 --> 00:49:30,190 E o Google é Papelão muito barato em US $ 10 ou US $ 20. 1090 00:49:30,190 --> 00:49:32,230 E tem pequenas lentes que um pouco fora do turno 1091 00:49:32,230 --> 00:49:35,900 a imagem na tela para o seu humano olhos para dar-lhe uma sensação de profundidade 1092 00:49:35,900 --> 00:49:39,550 de modo que você realmente tem um 3D ambiente na frente de você. 1093 00:49:39,550 --> 00:49:42,927 Temos também alguns Samsung engrenagem, que é a versão mais caro do presente, 1094 00:49:42,927 --> 00:49:46,010 mas que pode de modo semelhante deslizar numa Telefone Android e dar-lhe a ilusão 1095 00:49:46,010 --> 00:49:48,309 de-- ou dar a experiência da realidade virtual. 1096 00:49:48,309 --> 00:49:50,850 E em nossos dois minutos finais, nós pensamos em tentar fazer isso. 1097 00:49:50,850 --> 00:49:55,250 Se eu posso projetar o que tem Colton aqui só para aguçar o apetite, 1098 00:49:55,250 --> 00:49:58,442 deixe-me ir em frente e jogue up na tela grande aqui. 1099 00:49:58,442 --> 00:49:59,400 Deixe-me matar as luzes. 1100 00:49:59,400 --> 00:50:02,290 Colton, você quer ir em frente e colocar em seu celular por um momento 1101 00:50:02,290 --> 00:50:05,171 e venha até ao meio do palco? 1102 00:50:05,171 --> 00:50:07,420 E você quer project-- isto é o que Colton vê. 1103 00:50:07,420 --> 00:50:10,560 >> Agora, o Wi-Fi aqui é não tão forte para este dispositivo 1104 00:50:10,560 --> 00:50:13,870 que este é super atraente, mas é, literalmente, Colton 1105 00:50:13,870 --> 00:50:15,710 neste lugar mágico futurista. 1106 00:50:15,710 --> 00:50:16,796 Ele só vê uma imagem. 1107 00:50:16,796 --> 00:50:19,920 Você está vendo a sua esquerda e direita olho que o seu cérebro está costurando 1108 00:50:19,920 --> 00:50:22,260 num tridimensional ambiente em seu rosto. 1109 00:50:22,260 --> 00:50:24,319 Ele só está seleccionada uma opção de menu aqui. 1110 00:50:24,319 --> 00:50:27,360 E então, novamente, ele está vestindo este auricular com um telefone Samsung nele que é 1111 00:50:27,360 --> 00:50:29,080 sem fio projetando a nossa sobrecarga. 1112 00:50:29,080 --> 00:50:30,349 Agora você está em Marte, eu acho? 1113 00:50:30,349 --> 00:50:31,140 Colton: Eu acho que sim. 1114 00:50:31,140 --> 00:50:32,181 Eu não tenho certeza [inaudível]. 1115 00:50:32,181 --> 00:50:34,250 [Risos] 1116 00:50:34,250 --> 00:50:36,374 >> DAVID MALAN: Acontece Marte tem estes menus. 1117 00:50:36,374 --> 00:50:41,590 >> Colton: [inaudível] alguns 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 vamos 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ão, há tantos lugares diferentes que você pode tomar-se. 1124 00:50:56,380 --> 00:51:00,590 Há FAPIs através do qual você pode escrever jogos ou interações que 1125 00:51:00,590 --> 00:51:01,950 executar, em última análise, no telefone. 1126 00:51:01,950 --> 00:51:03,908 Então, você realmente só escrevendo um aplicativo de telefonia móvel. 1127 00:51:03,908 --> 00:51:06,380 Mas graças 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 ficar por enquanto, ao final da aula aqui hoje 1131 00:51:13,330 --> 00:51:14,300 se você gostaria de vir e jogar. 1132 00:51:14,300 --> 00:51:16,350 E nós vamos trazê-los de volta na próxima semana também. 1133 00:51:16,350 --> 00:51:18,420 Sem mais delongas é isso por hoje. 1134 00:51:18,420 --> 00:51:21,990 Vamos vê-lo na próxima semana. 1135 00:51:21,990 --> 00:51:24,140 >> [MUSIC - Ragga Twins, "homem mau"] 1136 00:51:24,140 --> 00:55:23,146