1 00:00:00,000 --> 00:00:02,405 >> [REPRODUCCIÓN DE MÚSICA] 2 00:00:02,405 --> 00:00:10,439 3 00:00:10,439 --> 00:00:11,980 DAVID MALAN: Muy bien, esto es CS50. 4 00:00:11,980 --> 00:00:13,740 Este es el fin de semana ocho. 5 00:00:13,740 --> 00:00:15,887 Y hoy, empezamos para rellenar algunas piezas 6 00:00:15,887 --> 00:00:17,720 cuando se trata de la construcción cosas en la web. 7 00:00:17,720 --> 00:00:20,020 Por lo tanto, recordar que el lunes pasamos mucho más tiempo 8 00:00:20,020 --> 00:00:22,530 en PHP, que es esta dinámica lenguaje de programación que 9 00:00:22,530 --> 00:00:26,872 nos vamos de salida, entre otros cosas, HTML y otros tal contenido 10 00:00:26,872 --> 00:00:27,830 que vamos a querer ver. 11 00:00:27,830 --> 00:00:30,871 Pero en realidad no hemos visto cómo vamos a almacenar cualquier información. 12 00:00:30,871 --> 00:00:34,477 De hecho, casi cualquiera de que el súper páginas web interesantes que visita hoy 13 00:00:34,477 --> 00:00:36,560 tener algún tipo de base de datos en la parte final, ¿no? 14 00:00:36,560 --> 00:00:39,540 Facebook duda almacena gran cantidad de datos sobre todos nosotros y tiendas de Gmail de todo 15 00:00:39,540 --> 00:00:40,210 de sus correos electrónicos. 16 00:00:40,210 --> 00:00:44,150 >> Y así, muchos otros sitios no son sólo contenido estático que es informativo. 17 00:00:44,150 --> 00:00:45,640 En realidad es dinámica de alguna manera. 18 00:00:45,640 --> 00:00:48,480 Usted proporciona la entrada, se actualiza las páginas de otras personas. 19 00:00:48,480 --> 00:00:50,620 Usted recibe mensajes, envía mensajes, y así sucesivamente. 20 00:00:50,620 --> 00:00:54,250 Así que hoy, miramos más de cerca las bases de un proyecto 21 00:00:54,250 --> 00:00:57,330 que usted va a sumergirse en la próxima semana, CS50 Finanzas, que 22 00:00:57,330 --> 00:01:00,509 es en realidad va a tener que construir algo que no es en C, pero en PHP. 23 00:01:00,509 --> 00:01:02,550 Un sitio web que se ve un poco algo como esto 24 00:01:02,550 --> 00:01:05,810 que permite comprar y vender acciones que son en realidad 25 00:01:05,810 --> 00:01:09,044 va a recurrir a tiempo real los datos de saldos de Yahoo Finanzas. 26 00:01:09,044 --> 00:01:11,960 Y así, en última instancia, usted tendrá la ilusión para ti y para los usuarios 27 00:01:11,960 --> 00:01:14,550 que en realidad estás comprando y vendiendo acciones y conseguir el tiempo casi real, 28 00:01:14,550 --> 00:01:16,800 actualizaciones, la gestión de una cartera, todos los cuales 29 00:01:16,800 --> 00:01:20,310 va a requerir tener, en última instancia, una base de datos de los usuarios. 30 00:01:20,310 --> 00:01:23,330 >> Así, en sus propias palabras, especialmente si no estás 31 00:01:23,330 --> 00:01:25,670 muy familiarizados con el ordenador ciencia o bases de datos, lo que 32 00:01:25,670 --> 00:01:30,790 sabes una base de datos para ser en este momento, en términos no técnicos? 33 00:01:30,790 --> 00:01:32,300 ¿Qué es? 34 00:01:32,300 --> 00:01:36,882 Cómo lo describirías a un compañero de cuarto o un amigo? 35 00:01:36,882 --> 00:01:40,100 >> AUDIENCIA: [inaudible] información [inaudible] 36 00:01:40,100 --> 00:01:44,430 >> DAVID MALAN: Así, una lista de la información, o una almacén-- una lista de información 37 00:01:44,430 --> 00:01:47,160 que es posible que desee almacenar por algo, como un usuario. 38 00:01:47,160 --> 00:01:50,190 ¿Y qué usuarios tienen asociado con ellos? 39 00:01:50,190 --> 00:01:53,160 Si usted es un usuario en Facebook o Gmail, ¿cuáles son las características 40 00:01:53,160 --> 00:01:54,940 que todos los usuarios tienen? 41 00:01:54,940 --> 00:01:58,530 Al igual que, lo que podría ser parte de la columnas en la hoja de cálculo a la que nos 42 00:01:58,530 --> 00:01:59,390 aludido última vez? 43 00:01:59,390 --> 00:02:01,140 Porque de nuevo, usted puede pensar en una base de datos 44 00:02:01,140 --> 00:02:05,810 realmente como un archivo de Excel de lujo o Google Hoja de cálculo o archivo de los números de Apple. 45 00:02:05,810 --> 00:02:08,280 >> Entonces, ¿qué piensa usted de cuando se piensa en un usuario? 46 00:02:08,280 --> 00:02:11,290 ¿Que tienen ellos? 47 00:02:11,290 --> 00:02:11,790 ¿Que es eso? 48 00:02:11,790 --> 00:02:12,470 >> AUDIENCIA: Un nombre. 49 00:02:12,470 --> 00:02:13,303 >> DAVID MALAN: Un nombre. 50 00:02:13,303 --> 00:02:16,840 Así que si el nombre, como, David Malan sería el nombre de algún usuario. 51 00:02:16,840 --> 00:02:17,980 ¿Qué más tiene un usuario? 52 00:02:17,980 --> 00:02:18,770 >> AUDIENCIA: Un ID. 53 00:02:18,770 --> 00:02:19,561 >> DAVID MALAN: Un ID. 54 00:02:19,561 --> 00:02:23,320 Así que, como un número de identificación, como el Harvard DNI o tu Yale Net ID o similares. 55 00:02:23,320 --> 00:02:24,923 ¿Qué otra cosa podría tener un usuario? 56 00:02:24,923 --> 00:02:25,890 >> AUDIENCIA: Contraseña. 57 00:02:25,890 --> 00:02:29,240 >> DAVID MALAN: Una contraseña, tal vez una dirección, tal vez un número de teléfono, tal vez 58 00:02:29,240 --> 00:02:30,050 una dirección de correo electrónico. 59 00:02:30,050 --> 00:02:32,640 Así, hay montones de campos y este podría especie de espiral fuera de control 60 00:02:32,640 --> 00:02:34,760 rápidamente tan pronto como empiece darse cuenta, oh, vamos a almacenar este 61 00:02:34,760 --> 00:02:36,190 y vamos a guardar esto y aquello. 62 00:02:36,190 --> 00:02:37,657 >> Pero ¿cómo podemos realmente hacer eso? 63 00:02:37,657 --> 00:02:39,740 Así que de nuevo, el modelo mental tener por hoy, ya que 64 00:02:39,740 --> 00:02:42,320 sumergirse en SQL real, Lenguaje de consulta estructurado, 65 00:02:42,320 --> 00:02:44,186 es una base de datos que tiene este aspecto. 66 00:02:44,186 --> 00:02:45,310 Son sólo las filas y columnas. 67 00:02:45,310 --> 00:02:48,309 Y usted puede imaginar Google Spreadsheets o cualquier número de otros programas. 68 00:02:48,309 --> 00:02:52,130 Pero lo que es clave sobre MySQL, que es el software de base de datos que vamos a utilizar, 69 00:02:52,130 --> 00:02:54,920 la libertad abiertamente disponible-- usos de Facebook 70 00:02:54,920 --> 00:02:59,200 y cualquier número de otros websites-- base de datos almacena cosas relacional. 71 00:02:59,200 --> 00:03:01,770 Y una base de datos relacional sólo significa que, literalmente, 72 00:03:01,770 --> 00:03:03,672 almacena sus datos en filas y columnas. 73 00:03:03,672 --> 00:03:04,630 Es tan simple como eso. 74 00:03:04,630 --> 00:03:07,230 >> Así que, incluso algo como Oracle que usted puede haber oído general de 75 00:03:07,230 --> 00:03:08,271 es una base de datos relacional. 76 00:03:08,271 --> 00:03:10,929 Y debajo de la campana, que almacena los datos en filas y columnas. 77 00:03:10,929 --> 00:03:12,970 Y Oracle que una cobra mucho dinero para hacer eso, 78 00:03:12,970 --> 00:03:15,550 mientras que los cargos de MySQL que nada para el mismo. 79 00:03:15,550 --> 00:03:18,790 Por lo tanto, SQL se nos va a dar al menos cuatro operaciones. 80 00:03:18,790 --> 00:03:23,190 La capacidad de seleccionar los datos, como lectura datos, insertar, eliminar y actualizar datos. 81 00:03:23,190 --> 00:03:25,525 En otras palabras, esas son realmente las cuatro operaciones fundamentales 82 00:03:25,525 --> 00:03:28,950 que van a permitir que cambiemos cosas en esas filas y columnas. 83 00:03:28,950 --> 00:03:33,250 >> La herramienta que utilizaremos hoy especialmente aprender SQL y jugar con ella 84 00:03:33,250 --> 00:03:34,627 de nuevo se llama PHP MyAdmin. 85 00:03:34,627 --> 00:03:35,460 Es herramienta basada en web. 86 00:03:35,460 --> 00:03:38,200 Coincidencia total que está escrito en PHP. 87 00:03:38,200 --> 00:03:42,400 Pero va a darnos una gráfica interfaz de usuario para que podamos realmente 88 00:03:42,400 --> 00:03:46,054 crear estas filas y columnas y luego hablar con ellos a través de código. 89 00:03:46,054 --> 00:03:47,970 Así que, ahora vamos a empezar a lo que creo que es francamente 90 00:03:47,970 --> 00:03:51,000 tipo de proceso de la diversión de la construcción de la parte de atrás de los sitios web, 91 00:03:51,000 --> 00:03:54,580 las partes que los usuarios no lo hacen ver, pero sin duda se preocupan, 92 00:03:54,580 --> 00:03:56,170 porque eso es más bien de datos va. 93 00:03:56,170 --> 00:03:59,570 Por lo tanto, similar a C y una poco menos como PHP, 94 00:03:59,570 --> 00:04:04,954 SQL o una base de datos que soporta SQL, tiene al menos estos tipos de datos 95 00:04:04,954 --> 00:04:05,870 y racimos de otros. 96 00:04:05,870 --> 00:04:08,107 CHAR, VARCHAR, INT, BIGINT, DECIMAL y DATETIME. 97 00:04:08,107 --> 00:04:09,940 Y hay un todo montón de otras características, 98 00:04:09,940 --> 00:04:11,940 pero vamos a hacer esto por A modo de ejemplo real. 99 00:04:11,940 --> 00:04:16,450 >> Voy a ir a CS50 IDE en el que, de antemano, me he inscrito 100 00:04:16,450 --> 00:04:19,372 y yo también he visitado una URL para esta herramienta llamada PHP MyAdmin. 101 00:04:19,372 --> 00:04:22,580 Y en el problema establecido siete, te diremos exactamente cómo llegar a esta interfaz 102 00:04:22,580 --> 00:04:23,200 así como. 103 00:04:23,200 --> 00:04:25,640 En la esquina superior izquierda, notarlo dice conferencia. 104 00:04:25,640 --> 00:04:27,610 Y eso sólo significa que de antemano, he creado 105 00:04:27,610 --> 00:04:31,360 una base de datos llamada de conferencia vacío que no tiene hojas de cálculo en ella todavía. 106 00:04:31,360 --> 00:04:32,600 No hay filas y columnas. 107 00:04:32,600 --> 00:04:34,308 Debido a que la primera Lo vamos a hacer 108 00:04:34,308 --> 00:04:37,100 se empezará a crear una tabla eso va a almacenar nuestros usuarios. 109 00:04:37,100 --> 00:04:39,100 >> Así que, literalmente sobre aquí a la derecha, yo soy 110 00:04:39,100 --> 00:04:42,070 va a decir a la base de datos Quiero una tabla llamada Usuarios. 111 00:04:42,070 --> 00:04:44,845 Por lo tanto, esto es como el archivo que yo desea almacenar todos mis datos. 112 00:04:44,845 --> 00:04:45,720 ¿Y cuántas columnas? 113 00:04:45,720 --> 00:04:47,740 Bueno, vamos a mantenerlo simple por ahora. 114 00:04:47,740 --> 00:04:51,855 Sólo quiero guardar como un nombre de usuario y un nombre para un usuario. 115 00:04:51,855 --> 00:04:53,020 Empezaremos pequeña. 116 00:04:53,020 --> 00:04:55,370 Por lo tanto, quiero dos columnas totales. 117 00:04:55,370 --> 00:04:57,360 Y yo voy a seguir adelante y haga clic en Ir. 118 00:04:57,360 --> 00:04:59,210 Y luego, para éstos columnas, lo que voy 119 00:04:59,210 --> 00:05:04,576 a hacer-- si esto internet cooperates-- bien, 120 00:05:04,576 --> 00:05:05,950 así que vamos a intentarlo de nuevo. 121 00:05:05,950 --> 00:05:09,180 Voy a crear una tabla llamada Los usuarios con dos columnas, haga clic en Ir, OK. 122 00:05:09,180 --> 00:05:10,520 Ahora lo tenemos muy rápido. 123 00:05:10,520 --> 00:05:12,065 Gracias, muy bien hecho. 124 00:05:12,065 --> 00:05:14,440 Muy bien, ¿y qué es lo que queremos estas columnas que se llaman? 125 00:05:14,440 --> 00:05:16,080 >> Así, uno va a ser llamado nombre de usuario. 126 00:05:16,080 --> 00:05:19,480 Por lo tanto, todo lo que veo aquí-- y la interfaz francamente pone un poco feo, finalmente, 127 00:05:19,480 --> 00:05:21,270 una vez que se empieza a escribir en todos estos datos. 128 00:05:21,270 --> 00:05:27,450 Pero lo que es interesante es que tipo de paradójicamente, estoy creando columnas, 129 00:05:27,450 --> 00:05:29,977 pero la herramienta tiene tontamente lo ponían en filas 130 00:05:29,977 --> 00:05:31,560 de modo que pueda configurar estas columnas. 131 00:05:31,560 --> 00:05:33,550 Así, hay dos espacios en blanco que hay en Nombre. 132 00:05:33,550 --> 00:05:36,180 Y uno de estos campos I querer llamado nombre de usuario, 133 00:05:36,180 --> 00:05:38,000 y el otro campo Quiero llamar Nombre. 134 00:05:38,000 --> 00:05:40,340 >> Y ahora tengo que elegir tipos de datos para estas cosas. 135 00:05:40,340 --> 00:05:42,330 Así, mientras que en Excel y Google Spreadsheets, 136 00:05:42,330 --> 00:05:45,531 si quieres una columna, que, literalmente, sólo tienes que escribir el nombre o nombre de usuario, pulse Enter. 137 00:05:45,531 --> 00:05:48,030 Tal vez lo haces negrita sólo por la claridad, pero eso es todo. 138 00:05:48,030 --> 00:05:50,140 No se especifica la tipos de las columnas. 139 00:05:50,140 --> 00:05:53,790 Ahora en Google Spreadsheets o Excel, podría especificar cómo se procesa los datos. 140 00:05:53,790 --> 00:05:58,120 Usted podría ir al menú Formato, y usted puede especificar mostrar este signo dólar como, 141 00:05:58,120 --> 00:05:59,900 mostrar esto como un valor de punto flotante. 142 00:05:59,900 --> 00:06:01,990 >> Así, es similar en espíritu a que lo que estamos a punto de hacer, 143 00:06:01,990 --> 00:06:04,740 pero esto es en realidad va a la fuerza que los datos sean un cierto tipo. 144 00:06:04,740 --> 00:06:07,750 Ahora, a pesar de que hace un momento me dijo que hay sólo unos pocos tipos de datos, 145 00:06:07,750 --> 00:06:11,120 hay realmente una mucho, y son 146 00:06:11,120 --> 00:06:12,910 en diversos grados de especificidad. 147 00:06:12,910 --> 00:06:14,970 Y como un aparte, que incluso puede hacer cosas de lujo 148 00:06:14,970 --> 00:06:17,520 como geometrías de almacenamiento dentro de una base de datos. 149 00:06:17,520 --> 00:06:19,250 Puede almacenar cosas como coordenadas GPS 150 00:06:19,250 --> 00:06:22,420 y, de hecho encontrar, matemáticamente, puntos que están cerca de otros. 151 00:06:22,420 --> 00:06:24,128 Pero vamos a mantener esta super simple 152 00:06:24,128 --> 00:06:26,800 y llegan hasta aquí, todos los llamados tipos de cadenas. 153 00:06:26,800 --> 00:06:29,240 >> Así que, aquí tienes una lista de un toda montón de opciones. 154 00:06:29,240 --> 00:06:32,740 CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. 155 00:06:32,740 --> 00:06:34,110 Y es un poco abrumador. 156 00:06:34,110 --> 00:06:37,610 Y, por desgracia, un poco paradójicamente a C, 157 00:06:37,610 --> 00:06:40,120 CHAR no es realmente un CHAR. 158 00:06:40,120 --> 00:06:44,170 Si especifica en una base de datos que su tipo de datos es CHAR, 159 00:06:44,170 --> 00:06:47,390 eso quiere decir que sí, que es un CHAR, pero es uno o más caracteres. 160 00:06:47,390 --> 00:06:49,630 Y usted tiene que especificar cuántos CHAR desea. 161 00:06:49,630 --> 00:06:51,636 Así que, ¿qué es una típica longitud de un nombre de usuario? 162 00:06:51,636 --> 00:06:52,760 ¿Hay un límite por lo general? 163 00:06:52,760 --> 00:06:53,920 >> AUDIENCIA: [inaudible] 164 00:06:53,920 --> 00:06:55,050 >> DAVID MALAN: 16 tal vez? 165 00:06:55,050 --> 00:06:55,990 Algo así. 166 00:06:55,990 --> 00:06:57,948 Ya sabes, de vuelta en el día, lo que solía ser ocho. 167 00:06:57,948 --> 00:07:00,289 A veces es 16 veces es aún más que eso. 168 00:07:00,289 --> 00:07:02,080 Y así, esto no lo hace significa dame una CHAR. 169 00:07:02,080 --> 00:07:04,730 Esto significa que tengo que especificar la longitud del campo, 170 00:07:04,730 --> 00:07:07,402 y ahora yo podría decir algo así como 16. 171 00:07:07,402 --> 00:07:08,610 Y no hay una solución de compromiso aquí. 172 00:07:08,610 --> 00:07:11,360 Por lo tanto, vamos a ver en un momento esto significa que uno, 173 00:07:11,360 --> 00:07:14,620 cada nombre de usuario tiene que ser de 16 caracteres. 174 00:07:14,620 --> 00:07:18,720 Pero espere un minuto, M-A-L-A-N. Si eso es mi nombre de usuario y yo sólo estoy usando cinco, 175 00:07:18,720 --> 00:07:23,070 ¿qué le propondrá que la base de datos de hacer por los otros 11 personajes que 176 00:07:23,070 --> 00:07:24,471 Me he reservado espacio para? 177 00:07:24,471 --> 00:07:25,220 ¿Qué harías? 178 00:07:25,220 --> 00:07:26,480 >> AUDIENCIA: [inaudible] 179 00:07:26,480 --> 00:07:27,160 >> DAVID MALAN: Sí, sólo hacer que todos nulo. 180 00:07:27,160 --> 00:07:28,290 Hacerlos espacios. 181 00:07:28,290 --> 00:07:30,816 Pero probablemente nulo, por lo que un gran cantidad de ceros como nombre. 182 00:07:30,816 --> 00:07:33,190 Así, por un lado, tenemos ahora asegurado de que mi nombre de usuario 183 00:07:33,190 --> 00:07:34,780 puede ser no más de 16 caracteres. 184 00:07:34,780 --> 00:07:37,590 Y la otra cara de esto es que si tenía un nombre muy largo 185 00:07:37,590 --> 00:07:39,940 o quería un tiempo muy largo username como algunos de ustedes 186 00:07:39,940 --> 00:07:44,840 chicos puedan tener en ese colegio o en Yale.edu, no se puede tener uno. 187 00:07:44,840 --> 00:07:47,177 Y así, de hecho, si usted tiene jamás registrada para un sitio web 188 00:07:47,177 --> 00:07:49,385 y te gritaste diciendo la contraseña es demasiado larga 189 00:07:49,385 --> 00:07:52,710 o su nombre de usuario es demasiado largo, es simplemente porque un programador, cuando 190 00:07:52,710 --> 00:07:55,500 la configuración de su base de datos, decidido que este campo 191 00:07:55,500 --> 00:07:57,150 no más de esta longitud ser. 192 00:07:57,150 --> 00:08:00,580 >> Muy bien, ¿y qué si se procede a nombrar? 193 00:08:00,580 --> 00:08:05,240 ¿Por cuánto tiempo debe un nombre del ser humano típico? 194 00:08:05,240 --> 00:08:07,492 ¿Cuántos personajes, 16? 195 00:08:07,492 --> 00:08:09,450 Supongo que pudimos encontrar a alguien en esta sala 196 00:08:09,450 --> 00:08:13,210 donde por su primera plus última nombre tiene más de 16 caracteres. 197 00:08:13,210 --> 00:08:14,850 Así que, lo que es mejor que eso, 17? 198 00:08:14,850 --> 00:08:17,040 18? 199 00:08:17,040 --> 00:08:18,830 25? 200 00:08:18,830 --> 00:08:20,350 ¿Más grande? 201 00:08:20,350 --> 00:08:20,980 30? 202 00:08:20,980 --> 00:08:21,855 >> AUDIENCIA: [inaudible] 203 00:08:21,855 --> 00:08:23,700 DAVID MALAN: 5000, oh mi Dios. 204 00:08:23,700 --> 00:08:26,309 Entonces, eso es probablemente una decente límite superior, por así decirlo. 205 00:08:26,309 --> 00:08:28,350 Y aquí tenemos la clase de para hacer un juicio. 206 00:08:28,350 --> 00:08:30,400 Al igual, no hay una respuesta aquí. 207 00:08:30,400 --> 00:08:32,740 Infinito no es muy posible, porque somos el tiempo 208 00:08:32,740 --> 00:08:34,781 va a tener-- estamos va a quedarse sin memoria. 209 00:08:34,781 --> 00:08:36,909 Por lo tanto, tenemos que hacer una llamada de juicio en algún momento. 210 00:08:36,909 --> 00:08:41,010 >> Muy común sería, por ejemplo, de servicio- y Permitir especificar CHAR aquí 211 00:08:41,010 --> 00:08:46,050 como antes-- 255 era, literalmente, la límite superior de este software de base de datos 212 00:08:46,050 --> 00:08:46,700 años atrás. 213 00:08:46,700 --> 00:08:48,575 Y así, una gran cantidad de seres humanos acaba de decir, está bien. 214 00:08:48,575 --> 00:08:49,420 255 es el límite. 215 00:08:49,420 --> 00:08:50,620 Vamos a utilizar el máximo. 216 00:08:50,620 --> 00:08:51,870 Y esto es bastante ridículo. 217 00:08:51,870 --> 00:08:55,060 Al igual que, si usted está escribiendo a alguien es nombre de 200 caracteres, además, 218 00:08:55,060 --> 00:08:56,140 que un poco ridículo. 219 00:08:56,140 --> 00:08:59,624 >> Pero, recuerde que no es ASCII el único sistema para los personajes. 220 00:08:59,624 --> 00:09:01,540 Y así, especialmente en una gran cantidad de idiomas asiáticos 221 00:09:01,540 --> 00:09:04,248 donde hay personajes que no pueden expresar en los teclados como mi Unidos 222 00:09:04,248 --> 00:09:08,209 teclado, algunos personajes en realidad tomar hasta 16 bits en lugar de ocho bits. 223 00:09:08,209 --> 00:09:10,250 Y así, en realidad esto no es tan irrazonable 224 00:09:10,250 --> 00:09:12,250 que necesitamos más espacio si queremos encajar 225 00:09:12,250 --> 00:09:16,252 personajes más grandes que el de EE.UU. las céntricas hemos tendido a discutir. 226 00:09:16,252 --> 00:09:17,460 Por lo tanto, necesitamos un poco de límite superior. 227 00:09:17,460 --> 00:09:21,470 No sé lo que el mejor es, pero 255 es generalmente muy común. 228 00:09:21,470 --> 00:09:22,700 25 se siente bajo. 229 00:09:22,700 --> 00:09:23,857 16, 32 se sienten bajo. 230 00:09:23,857 --> 00:09:25,690 Me gustaría errar por el lado de algo superior. 231 00:09:25,690 --> 00:09:27,330 Pero hay una solución de compromiso, como siempre. 232 00:09:27,330 --> 00:09:31,902 ¿Cuál es el, tal vez, obvio comercio fuera de la reserva de 255 caracteres 233 00:09:31,902 --> 00:09:33,360 para el nombre de todos los miembros de mi base de datos? 234 00:09:33,360 --> 00:09:34,230 >> AUDIENCIA: [inaudible] 235 00:09:34,230 --> 00:09:34,510 >> DAVID MALAN: ¿Qué es eso? 236 00:09:34,510 --> 00:09:35,430 >> AUDIENCIA: [inaudible] 237 00:09:35,430 --> 00:09:37,138 >> DAVID MALAN: Es un gran cantidad de memoria, ¿no? 238 00:09:37,138 --> 00:09:42,280 M-A-L-A-N. Acabo perdido 250 personajes sólo para almacenar mi nombre 239 00:09:42,280 --> 00:09:46,000 defensiva en caso de que alguien en la clase tiene un nombre muy largo. 240 00:09:46,000 --> 00:09:47,940 Eso parece como una compensación excesiva. 241 00:09:47,940 --> 00:09:52,040 >> Así, resulta que SQL, este lenguaje de base de datos, 242 00:09:52,040 --> 00:09:55,480 en realidad apoya algo llamados VARCHAR o CHAR variable. 243 00:09:55,480 --> 00:09:59,390 Y esto es una especie de bonito en que esta permite especificar no es una fija 244 00:09:59,390 --> 00:10:01,900 anchura, sino más bien, una anchura variable. 245 00:10:01,900 --> 00:10:05,060 Y más específicamente, una anchura máxima del campo. 246 00:10:05,060 --> 00:10:08,901 Por lo tanto, esto significa que un nombre puede ser no más de 250 caracteres, 247 00:10:08,901 --> 00:10:10,150 pero sí puede ser inferior. 248 00:10:10,150 --> 00:10:11,733 Y la base de datos va a ser inteligente. 249 00:10:11,733 --> 00:10:14,860 Si pones en M-A-L-A-N, sólo va a utilizar cinco, 250 00:10:14,860 --> 00:10:18,120 tal vez seis bytes para como un carácter nulo de salida, 251 00:10:18,120 --> 00:10:23,330 y no gastar un adicional 249 o 250 bytes innecesariamente. 252 00:10:23,330 --> 00:10:27,380 >> Por lo tanto, esto parece como debería han comenzado con esta historia. 253 00:10:27,380 --> 00:10:29,140 Pero siempre hay una solución de compromiso. 254 00:10:29,140 --> 00:10:33,024 Así, por un lado, un nombre de usuario He especificada para ser codificado en 16, 255 00:10:33,024 --> 00:10:34,940 y tal vez eso no era la decisión correcta, tal vez 256 00:10:34,940 --> 00:10:40,040 es, pero ¿por qué no usar Varchars para todo? 257 00:10:40,040 --> 00:10:42,020 >> Existe por una razón. 258 00:10:42,020 --> 00:10:46,200 ¿Por qué no utilizar VARCHAR para cada campo cuya longitud no sabes de antemano 259 00:10:46,200 --> 00:10:48,180 si parece ser una gran cosa, ¿no? 260 00:10:48,180 --> 00:10:50,482 Utilice sólo tanto espacio como que necesita hasta este límite? 261 00:10:50,482 --> 00:10:51,271 >> AUDIENCIA: Más lento. 262 00:10:51,271 --> 00:10:52,146 DAVID MALAN: corrector ortográfico? 263 00:10:52,146 --> 00:10:53,120 AUDIENCIA: Hace que sea más lento? 264 00:10:53,120 --> 00:10:53,970 DAVID MALAN: Oh, es más lento. 265 00:10:53,970 --> 00:10:55,720 Bueno, eso es casi siempre la respuesta, francamente. 266 00:10:55,720 --> 00:10:56,520 Al igual que, ¿cuál es el equilibrio? 267 00:10:56,520 --> 00:10:58,570 Es bien cuesta más espacio o cuesta más tiempo. 268 00:10:58,570 --> 00:11:00,111 Así, en este caso, podría ser más lento. 269 00:11:00,111 --> 00:11:00,920 ¿Por qué? 270 00:11:00,920 --> 00:11:05,830 >> AUDIENCIA: [inaudible] la determinación de [inaudible]. 271 00:11:05,830 --> 00:11:06,640 >> DAVID MALAN: Good. 272 00:11:06,640 --> 00:11:09,670 Así, se puede recordar incluso de PSED5, jugando con su enfoque 273 00:11:09,670 --> 00:11:12,750 el diccionario, si usted tiene que asignar memoria dinámicamente o mantener 274 00:11:12,750 --> 00:11:14,630 el crecimiento de un tampón, que en realidad puede ser lento. 275 00:11:14,630 --> 00:11:16,963 Si usted tiene que llamar a malloc debajo de la campana y quizás 276 00:11:16,963 --> 00:11:19,610 eso es lo que MySQL está haciendo, por lo que sin duda que podría ser el caso. 277 00:11:19,610 --> 00:11:22,430 Y si usted piensa manera volver a PSet-- o incluso 278 00:11:22,430 --> 00:11:26,340 semanas, dos cosas cuando nos gustó búsqueda binaria o incluso búsqueda lineal, 279 00:11:26,340 --> 00:11:30,690 una de las cosas buenas de cada palabra en una base de datos o cada palabra en una columna 280 00:11:30,690 --> 00:11:33,690 siendo exactamente la misma longitud, incluso si un montón de esos personajes 281 00:11:33,690 --> 00:11:37,390 están en blanco, es que se puede utilizar acceso aleatorio en sus datos, ¿no? 282 00:11:37,390 --> 00:11:40,310 >> Si usted sabe que cada palabra es 16 caracteres de distancia, 283 00:11:40,310 --> 00:11:46,460 puede utilizar la aritmética de punteros, por lo que hablar, y vaya que nos 16, 32, 48, 64, 284 00:11:46,460 --> 00:11:49,589 y usted puede saltar al instante utilizando la aritmética 285 00:11:49,589 --> 00:11:51,130 cualquiera de las palabras en su base de datos. 286 00:11:51,130 --> 00:11:54,280 Mientras que si se trata de un VARCHAR, ¿qué lugar tiene que hacer? 287 00:11:54,280 --> 00:11:55,960 >> [TELÉFONO SONANDO] 288 00:11:55,960 --> 00:11:58,680 >> Si es un VARCHAR, que no pueden utilizar el acceso aleatorio. 289 00:11:58,680 --> 00:12:01,341 Lo que tienes que buscar o hacer? 290 00:12:01,341 --> 00:12:01,840 ¿Sí? 291 00:12:01,840 --> 00:12:03,240 >> AUDIENCIA: [inaudible] 292 00:12:03,240 --> 00:12:04,310 >> DAVID MALAN: Mire a través de la traza whole-- 293 00:12:04,310 --> 00:12:06,518 a través de toda la lista buscando lo que, lo más probable? 294 00:12:06,518 --> 00:12:08,356 ¿Qué tipo de valor especial? 295 00:12:08,356 --> 00:12:09,230 AUDIENCIA: [inaudible] 296 00:12:09,230 --> 00:12:11,105 DAVID MALAN: Buscando para los terminadores nulos 297 00:12:11,105 --> 00:12:13,637 que demarcan la separación de palabras. 298 00:12:13,637 --> 00:12:15,720 Así que de nuevo, una solución de compromiso, y no hay una respuesta correcta. 299 00:12:15,720 --> 00:12:18,380 Pero aquí es donde, especialmente cuando los usuarios llegan a ser muchos 300 00:12:18,380 --> 00:12:21,700 y su carga en sus servidores, la número de personas que lo utilizan se eleva, 301 00:12:21,700 --> 00:12:23,650 estos son en realidad las decisiones no triviales. 302 00:12:23,650 --> 00:12:26,640 Así, podemos dejar esto como esto, pero vamos a desplácese hacia abajo a la derecha 303 00:12:26,640 --> 00:12:27,332 Aquí. 304 00:12:27,332 --> 00:12:30,290 Ahora, hay un par de columnas donde tenemos que hacer un juicio. 305 00:12:30,290 --> 00:12:35,170 ¿Tiene sentido para permitir que un usuario de nombre, nombre de usuario de un usuario o un usuario de 306 00:12:35,170 --> 00:12:36,370 nombre, al ser nulo? 307 00:12:36,370 --> 00:12:37,610 Es decir, solo en blanco. 308 00:12:37,610 --> 00:12:40,360 Se siente un poco sin sentido, así que estoy no va a revisar esas cajas. 309 00:12:40,360 --> 00:12:42,670 Pero resulta que en un base de datos, se puede decir, 310 00:12:42,670 --> 00:12:44,620 alguien puede tener opcionalmente este valor. 311 00:12:44,620 --> 00:12:47,180 Esta columna no tiene estar realmente allí. 312 00:12:47,180 --> 00:12:48,570 >> Ahora, hay un menú desplegable. 313 00:12:48,570 --> 00:12:50,810 Y noto que todavía estoy en la primera fila allí, 314 00:12:50,810 --> 00:12:52,520 por lo que estoy hablando nombre de usuario ahora. 315 00:12:52,520 --> 00:12:56,290 Y resulta que una base de datos, A diferencia de una mera sencilla hoja de cálculo, 316 00:12:56,290 --> 00:12:58,520 tiene características de gran alcance llamados índices. 317 00:12:58,520 --> 00:13:02,600 Y un índice es una manera de decir la base de datos de antemano que la I humana 318 00:13:02,600 --> 00:13:03,900 soy más inteligente que tú. 319 00:13:03,900 --> 00:13:10,430 >> Sé qué tipo de consultas, seleccione o insertar o eliminar o actualizar, 320 00:13:10,430 --> 00:13:13,182 que mi código se va a acabar haciendo de esta base de datos. 321 00:13:13,182 --> 00:13:14,390 Quiero leer una gran cantidad de datos. 322 00:13:14,390 --> 00:13:15,681 Quiero insertar una gran cantidad de datos. 323 00:13:15,681 --> 00:13:17,530 Quiero constantemente eliminar una gran cantidad de datos. 324 00:13:17,530 --> 00:13:21,520 Si sé que voy a ser acceder a un campo como el nombre de usuario mucho, 325 00:13:21,520 --> 00:13:24,770 Preventivamente puedo decir la base de datos, yo sé más que tú, 326 00:13:24,770 --> 00:13:29,220 y quiero decreto que usted debe índice de este campo. 327 00:13:29,220 --> 00:13:33,200 Cuando la indexación de un campo o una columna significa que la base de datos con antelación 328 00:13:33,200 --> 00:13:37,040 debe pedir prestado algunas ideas de como, semana cuatro y cinco y seis de CS50 329 00:13:37,040 --> 00:13:39,240 y de hecho construir algo así como una búsqueda binaria 330 00:13:39,240 --> 00:13:41,560 árbol o algo generalmente se llama un árbol B 331 00:13:41,560 --> 00:13:43,410 que usted aprenderá en una clase como cs124 332 00:13:43,410 --> 00:13:46,710 en Harvard, una clase de algoritmos, o cualquier número de otros lugares. 333 00:13:46,710 --> 00:13:49,570 >> La base de datos y de la inteligente personas que implementaron 334 00:13:49,570 --> 00:13:53,880 será encontrar la manera de almacenar esa mesa de la información 335 00:13:53,880 --> 00:13:57,061 en la memoria para que las búsquedas y otras operaciones son super rápido. 336 00:13:57,061 --> 00:13:58,060 Usted no tiene que hacerlo. 337 00:13:58,060 --> 00:14:00,640 Usted no tiene que poner en práctica búsqueda lineal o búsqueda binaria 338 00:14:00,640 --> 00:14:03,300 o fusionar especie o la selección clase, nada de eso. 339 00:14:03,300 --> 00:14:06,590 La base de datos lo hace por usted si le dices que de forma preventiva para indexar este campo. 340 00:14:06,590 --> 00:14:09,100 >> Y se puede ver también, que hay algunas otras características 341 00:14:09,100 --> 00:14:11,010 podemos decirle a la base de datos para hacer cumplir. 342 00:14:11,010 --> 00:14:16,431 ¿Qué podría significar si elijo Steam de este menú, sólo intuitivamente? 343 00:14:16,431 --> 00:14:16,930 ¿Sí? 344 00:14:16,930 --> 00:14:17,889 >> AUDIENCIA: [inaudible] 345 00:14:17,889 --> 00:14:19,930 DAVID MALAN: Sí, la nombre de usuario tiene que ser único. 346 00:14:19,930 --> 00:14:23,330 ¿Es esto algo bueno o algo malo para una base de datos, para un sitio web con los usuarios? 347 00:14:23,330 --> 00:14:24,965 En caso de nombres de usuario sea único? 348 00:14:24,965 --> 00:14:25,880 Si, probablemente. 349 00:14:25,880 --> 00:14:27,800 Si eso es lo que el campo que utiliza para conectarse, 350 00:14:27,800 --> 00:14:31,867 usted realmente no quiere la gente que tiene la misma sensación o el mismo nombre de usuario. 351 00:14:31,867 --> 00:14:33,700 Así, podemos tener la base de datos de hacer cumplir lo que 352 00:14:33,700 --> 00:14:37,880 que ahora en mi código PHP o cualquier otro idioma, Yo no tengo que, por ejemplo, comprobar 353 00:14:37,880 --> 00:14:41,490 necesariamente tiene este nombre de usuario existo antes de dejar que alguien se registra? 354 00:14:41,490 --> 00:14:46,690 La base de datos no permitirá que dos personas nombradas David o Malans registran en este caso. 355 00:14:46,690 --> 00:14:50,030 >> Y como un aparte, a pesar de que este menú sólo le permite seleccionar uno, 356 00:14:50,030 --> 00:14:54,550 un índice único es uno que es indexados para un rendimiento súper rápido, 357 00:14:54,550 --> 00:14:56,100 pero también hace cumplir singularidad. 358 00:14:56,100 --> 00:14:58,850 Y vamos a volver a lo que el otros dos significar en un momento. 359 00:14:58,850 --> 00:15:00,930 Mientras tanto, si voy a mi segunda fila, que 360 00:15:00,930 --> 00:15:06,230 es el nombre del usuario, debería especificar que el nombre debe ser único? 361 00:15:06,230 --> 00:15:09,550 No, porque ciertamente se podría tener-- no hay de dos David 362 00:15:09,550 --> 00:15:11,050 Malans en esta sala, lo más probable. 363 00:15:11,050 --> 00:15:14,290 Pero si elegimos un nombre diferente, podríamos seguramente tendrá colisiones. 364 00:15:14,290 --> 00:15:16,130 >> Piense de nuevo para discutir mesas y similares. 365 00:15:16,130 --> 00:15:18,604 Así que, ciertamente no queremos para hacer el campo de nombre único. 366 00:15:18,604 --> 00:15:21,270 Por lo tanto, sólo vamos a salir que, como el tablero, tablero, tablero, nada. 367 00:15:21,270 --> 00:15:22,660 Y yo voy a dejar todo lo demás solo. 368 00:15:22,660 --> 00:15:25,035 De hecho, la mayoría de estos campos no vamos a tener que preocuparse. 369 00:15:25,035 --> 00:15:27,830 Y cuando esté listo para guardar esta, si el internet coopera, 370 00:15:27,830 --> 00:15:35,032 Hago clic en Guardar, y muy, muy, muy poco a poco la base de datos no ser salvo. 371 00:15:35,032 --> 00:15:37,240 Y ahora estoy de vuelta a este interfaz, que es cierto, 372 00:15:37,240 --> 00:15:38,680 es abrumadora a primera vista. 373 00:15:38,680 --> 00:15:42,450 Pero todo lo que voy a hacer es clic en la palabra de Usuarios en la parte superior izquierda. 374 00:15:42,450 --> 00:15:47,630 Voy a ir por aquí, haga clic en Los usuarios y, por defecto, 375 00:15:47,630 --> 00:15:50,180 ha ejecutado alguna SQL, pero Más sobre esto en un momento. 376 00:15:50,180 --> 00:15:52,654 Esto es sólo un resumen de lo que hice. 377 00:15:52,654 --> 00:15:55,320 Y que no se preocupara que ves hablar de América y sueco aquí. 378 00:15:55,320 --> 00:16:00,490 Estas son sólo el predeterminado ajustes, ya que MySQL originalmente, 379 00:16:00,490 --> 00:16:04,000 o PHP MyAdmin, uno de los dos pasó a ser escrito por algunas personas suecas. 380 00:16:04,000 --> 00:16:06,100 Pero es irrelevante en nuestro caso aquí. 381 00:16:06,100 --> 00:16:08,280 >> Muy bien, así que ¿por qué es todo esto interesante? 382 00:16:08,280 --> 00:16:13,050 Resulta, puedo insertar datos en una base de datos mediante la escritura de código. 383 00:16:13,050 --> 00:16:15,940 Y estoy a seguir adelante y en mi archivo de aquí, estoy 384 00:16:15,940 --> 00:16:19,000 va a seguir adelante y fingir este está conectado a dicha base de datos, la cual 385 00:16:19,000 --> 00:16:23,040 no es en este momento, pero lo hará será cuando lleguemos al problema pusimos siete. 386 00:16:23,040 --> 00:16:25,640 Y yo voy a seguir adelante y ejecutar una función llamada de consulta, 387 00:16:25,640 --> 00:16:28,730 que le daremos en el problema establecer código de distribución de siete, que 388 00:16:28,730 --> 00:16:31,490 tiene al menos un argumento, que es sólo una cadena. 389 00:16:31,490 --> 00:16:33,460 Una cadena de código SQL. 390 00:16:33,460 --> 00:16:36,700 Por lo tanto, estás a punto de aprender a escribir Structured Query Language. 391 00:16:36,700 --> 00:16:41,270 >> Si quiero insertar una nueva fila en mi base de datos porque alguien ha presentado 392 00:16:41,270 --> 00:16:47,600 una forma de mi código, lo haría, literalmente, escribir INSERT INTO usuarios la siguiente 393 00:16:47,600 --> 00:16:52,800 campos: nombre de usuario, coma, el nombre, los valores, 394 00:16:52,800 --> 00:16:57,480 y ahora tengo que insertar algo así como Malan, y cita, 395 00:16:57,480 --> 00:17:01,490 fin de la cita 'David Malan. Y ahora incluso para quienes no están familiarizados con SQL, 396 00:17:01,490 --> 00:17:07,830 ¿por qué estoy usando comillas simples dentro de esta cadena verde? 397 00:17:07,830 --> 00:17:10,790 398 00:17:10,790 --> 00:17:13,040 ¿Cuál podría ser la razón aquí? 399 00:17:13,040 --> 00:17:14,609 >> Note que soy co-mezcla dos idiomas. 400 00:17:14,609 --> 00:17:18,099 Consulta es una función PHP, pero se necesita un argumento. 401 00:17:18,099 --> 00:17:21,740 Y ese argumento tiene que ser en sí mismo escrito en otro lenguaje llamado 402 00:17:21,740 --> 00:17:23,500 SQL, Structured Query Language. 403 00:17:23,500 --> 00:17:27,940 Por lo tanto, todo lo que yo simplemente han puesto de relieve aquí 404 00:17:27,940 --> 00:17:30,380 es este lenguaje denominado SQL. 405 00:17:30,380 --> 00:17:36,290 Entonces, ¿qué pasa con las comillas simples, al igual que una comprobación de validez rápida? 406 00:17:36,290 --> 00:17:37,324 Adelante. 407 00:17:37,324 --> 00:17:37,990 Son cadenas. 408 00:17:37,990 --> 00:17:41,590 Así, cita, fin de la cita Malan y presupuesto, Lo dijeron ellos David Malan son cadenas. 409 00:17:41,590 --> 00:17:45,210 Y sólo pensar intuitivamente ahora, sabiendo lo que sabes sobre C y PHP, 410 00:17:45,210 --> 00:17:50,220 ¿por qué no hago esto, que por lo general comillas dobles usadas para cuerdas? 411 00:17:50,220 --> 00:17:52,310 ¿Por qué yo no quiero hacer eso? 412 00:17:52,310 --> 00:17:52,810 ¿Sí? 413 00:17:52,810 --> 00:17:53,685 >> AUDIENCIA: [inaudible] 414 00:17:53,685 --> 00:17:56,695 415 00:17:56,695 --> 00:17:57,570 DAVID MALAN: Exactamente. 416 00:17:57,570 --> 00:17:59,653 Porque yo ya estoy usando comillas dobles en el camino 417 00:17:59,653 --> 00:18:01,929 fuera de la discusión a la función de PHP, 418 00:18:01,929 --> 00:18:03,470 Sólo quiero confundir al intérprete. 419 00:18:03,470 --> 00:18:04,860 No se sabe, no éstas van de la mano? 420 00:18:04,860 --> 00:18:05,735 ¿Éstos van de la mano? 421 00:18:05,735 --> 00:18:06,810 ¿Éstos van de la mano? 422 00:18:06,810 --> 00:18:08,070 Así que en lugar alterno. 423 00:18:08,070 --> 00:18:11,784 >> O podría hacer algo como esto, cita barra invertida o una cita barra invertida. 424 00:18:11,784 --> 00:18:14,200 Francamente, eso empieza a llegar muy ilegible y feo. 425 00:18:14,200 --> 00:18:16,790 Pero eso sería lograr el mismo resultado también. 426 00:18:16,790 --> 00:18:19,760 >> Así que, si tuviera que ejecutar este consulta ahora, vamos a ver qué pasa. 427 00:18:19,760 --> 00:18:22,740 Voy a seguir adelante ahora y bastante de ejecutar el código PHP, que 428 00:18:22,740 --> 00:18:24,610 es donde se va a jugar en el problema de establecer siete, 429 00:18:24,610 --> 00:18:27,200 Voy a ir a su lugar de PHP MyAdmin. 430 00:18:27,200 --> 00:18:29,770 Y voy manualmente para ir a la pestaña SQL, 431 00:18:29,770 --> 00:18:31,580 y que me haga zoom en la interfaz. 432 00:18:31,580 --> 00:18:34,007 Y me voy a pegar en lo que acaba de escribir. 433 00:18:34,007 --> 00:18:36,090 Y el código de colores tiene cambiado un poco ahora, 434 00:18:36,090 --> 00:18:38,750 sólo porque los formatos de programas cosas un poco diferente. 435 00:18:38,750 --> 00:18:41,960 Pero noto que todo lo que he hecho es lo que he dicho, insertar en Usuarios. 436 00:18:41,960 --> 00:18:45,790 He especificado, entonces, en una coma separados lista entre paréntesis los dos 437 00:18:45,790 --> 00:18:48,850 campos que quiero insertar, y entonces yo he dicho, literalmente, los valores 438 00:18:48,850 --> 00:18:51,510 seguido de otro paren, y luego los dos valores 439 00:18:51,510 --> 00:18:53,520 Quiero plug-in, y ahora para la buena medida, 440 00:18:53,520 --> 00:18:55,010 Voy a poner un punto y coma al final. 441 00:18:55,010 --> 00:18:56,570 Por lo tanto, esto no es C. Esto no es PHP. 442 00:18:56,570 --> 00:18:59,970 Se trata ahora de SQL, y estoy pegándolo en esta interfaz basada en la web que es 443 00:18:59,970 --> 00:19:02,710 sólo va a dejarme, tan pronto como haga clic en Ir, 444 00:19:02,710 --> 00:19:08,060 ejecutar esta consulta en la base de datos se ejecuta dentro del IDE CS50. 445 00:19:08,060 --> 00:19:09,470 >> Así que esto es bueno. 446 00:19:09,470 --> 00:19:12,520 Tenga en cuenta que dijo una fila insertado, fue súper rápido, 447 00:19:12,520 --> 00:19:15,190 0.0054 segundos para insertar esos datos. 448 00:19:15,190 --> 00:19:16,610 Así que, eso suena bastante saludable. 449 00:19:16,610 --> 00:19:19,350 Se vuelve a formatear mi consulta para mí aquí sólo para verlo 450 00:19:19,350 --> 00:19:21,730 en una especie de código de color de versiones. 451 00:19:21,730 --> 00:19:24,540 Pero ahora si hago clic Navegar, notar que, incluso 452 00:19:24,540 --> 00:19:29,070 aunque hay una gran cantidad de desorden en la pantalla, mi mesa ahora tiene dos filas. 453 00:19:29,070 --> 00:19:30,700 >> Así que, déjame seguir adelante y hacer otra. 454 00:19:30,700 --> 00:19:33,760 En lugar de esto, me dejó vaya a la pestaña SQL nuevo. 455 00:19:33,760 --> 00:19:40,723 Y esta vez voy a insertar algo así Rob y su nombre estará Rob Bowden. 456 00:19:40,723 --> 00:19:42,330 Bowden. 457 00:19:42,330 --> 00:19:44,040 Vamos clic en Guardar. 458 00:19:44,040 --> 00:19:46,140 Vaya, en lugar Go. 459 00:19:46,140 --> 00:19:48,890 >> Haga clic en Examinar de nuevo, y Ahora notar Tengo dos filas. 460 00:19:48,890 --> 00:19:52,390 Por lo tanto, esto es sólo una forma más compleja manera de abrir Google Spreadsheets 461 00:19:52,390 --> 00:19:54,010 y solo teclear una fila en una columna. 462 00:19:54,010 --> 00:19:57,070 Pero lo que es fundamental es que ahora tenemos la sintaxis 463 00:19:57,070 --> 00:20:00,220 con el que escribir código para que en última instancia, podríamos realidad 464 00:20:00,220 --> 00:20:01,790 hacer algo y esto. 465 00:20:01,790 --> 00:20:05,380 Recordemos que soporte PHP Variables súper globales. 466 00:20:05,380 --> 00:20:08,415 >> ¿Qué hay dentro de dólar firmar subrayado GET en PHP? 467 00:20:08,415 --> 00:20:10,290 Tomamos un vistazo a uno o dos ejemplos sencillos. 468 00:20:10,290 --> 00:20:15,640 Y en PSet6, Recall tiene hola dot PHP que utiliza esta variable. 469 00:20:15,640 --> 00:20:17,870 ¿Qué pasa ahí? 470 00:20:17,870 --> 00:20:21,015 O lo que es? 471 00:20:21,015 --> 00:20:22,522 Un poco más fuerte. 472 00:20:22,522 --> 00:20:23,790 >> AUDIENCIA: [inaudible] 473 00:20:23,790 --> 00:20:25,030 >> DAVID MALAN: Es una nieve semilla de la matriz, que 474 00:20:25,030 --> 00:20:27,714 es sólo una forma elegante de decir una matriz que tiene pares de valores clave. 475 00:20:27,714 --> 00:20:28,880 Y las claves no son numéricos. 476 00:20:28,880 --> 00:20:30,420 Son palabras o cadenas. 477 00:20:30,420 --> 00:20:32,750 Y en concreto, lo que son aquellos pares de valores clave? 478 00:20:32,750 --> 00:20:35,110 ¿De dónde vienen? 479 00:20:35,110 --> 00:20:35,620 ¿Apenado? 480 00:20:35,620 --> 00:20:36,994 >> AUDIENCIA: [inaudible] 481 00:20:36,994 --> 00:20:37,660 DAVID MALAN: No? 482 00:20:37,660 --> 00:20:40,700 ¿De dónde vienen las claves pares de valores vienen? 483 00:20:40,700 --> 00:20:42,490 ¿Decir de nuevo? 484 00:20:42,490 --> 00:20:44,610 ¿De nuevo? 485 00:20:44,610 --> 00:20:46,472 ¿Soy el único audiencia algo? 486 00:20:46,472 --> 00:20:47,810 >> [Risas] 487 00:20:47,810 --> 00:20:49,042 >> Eso es correcto, ¿no? 488 00:20:49,042 --> 00:20:50,435 >> AUDIENCIA: [inaudible] 489 00:20:50,435 --> 00:20:52,560 DAVID MALAN: Sí, provienen de la cadena de consulta. 490 00:20:52,560 --> 00:20:55,380 Así pues, si se rebobina en el tiempo para cuando hemos jugado con Google 491 00:20:55,380 --> 00:20:59,600 y nos hemos ido a Google.com slash Búsqueda signo de interrogación q es igual a los gatos, 492 00:20:59,600 --> 00:21:03,550 si tuviera que pulsa Intro y si Google se implementaron en PHP, 493 00:21:03,550 --> 00:21:07,017 Código PHP que Google escribió tendrían acceso a la muestra de dólar 494 00:21:07,017 --> 00:21:11,600 resaltar GET dentro de los cuales es una clave llamada Q y un valor 495 00:21:11,600 --> 00:21:17,680 llamados gatos que a continuación, puede utilizar se utiliza para hacer una búsqueda real con. 496 00:21:17,680 --> 00:21:20,860 >> Así que, de hecho, lo que voy a hacer ahora es volver a mi código PHP 497 00:21:20,860 --> 00:21:23,140 que usted va a volver a ver más de en PSet7. 498 00:21:23,140 --> 00:21:25,440 Y en vez de enchufar en valores codificados duras que 499 00:21:25,440 --> 00:21:27,630 no parece como un muy sitio web dinámico, 500 00:21:27,630 --> 00:21:30,680 Voy a darle un teaser de lo que haría su código real. 501 00:21:30,680 --> 00:21:32,854 Se podría poner en dos, signos de interrogación como este. 502 00:21:32,854 --> 00:21:34,270 No sé lo que el nombre de usuario es. 503 00:21:34,270 --> 00:21:37,390 No sé lo que el nombre va a ser, 504 00:21:37,390 --> 00:21:39,470 pero sí sé que puedo conseguirlos de forma dinámica. 505 00:21:39,470 --> 00:21:43,420 >> Así que, si el código que estamos escribiendo ahora es el código que se ejecuta en los servidores de Google, 506 00:21:43,420 --> 00:21:46,940 o si se trata hola dot PHP, que viene con PSet6, 507 00:21:46,940 --> 00:21:48,650 Voy a pasar a la función de consulta 508 00:21:48,650 --> 00:21:51,450 al igual que printf, otros dos argumentos. 509 00:21:51,450 --> 00:21:57,120 GET, cita, nombre de usuario unquote, y GET, cita, el nombre del fin de la cita. 510 00:21:57,120 --> 00:22:00,720 Y ahora, observe lo que el estructura general está aquí. 511 00:22:00,720 --> 00:22:03,320 Tengo a la izquierda parte de la llamada, 512 00:22:03,320 --> 00:22:05,480 esta función llama consulta en PHP. 513 00:22:05,480 --> 00:22:08,160 Todavía tengo como primera argumento, sólo una cadena de texto. 514 00:22:08,160 --> 00:22:11,000 >> Pero esa cadena de texto es escrito en un lenguaje denominado SQL. 515 00:22:11,000 --> 00:22:12,616 Y, francamente, no es una lengua grande. 516 00:22:12,616 --> 00:22:14,990 Sólo vamos a hablar de formalmente hoy, de verdad. 517 00:22:14,990 --> 00:22:17,031 Y luego en el conjunto de problemas siete, hay relativamente 518 00:22:17,031 --> 00:22:18,800 algunas características que estamos va a aprovechar. 519 00:22:18,800 --> 00:22:22,530 Los signos de interrogación, sin embargo, significan que conectar un valor aquí y tapón en otro valor 520 00:22:22,530 --> 00:22:23,130 Aquí. 521 00:22:23,130 --> 00:22:26,010 Y fíjense, he omitido lo de todo el maldito quote-- 522 00:22:26,010 --> 00:22:30,470 it-- alrededor de la cita marca este momento. 523 00:22:30,470 --> 00:22:34,930 He omitido la cita marcas de todo el signo de interrogación, 524 00:22:34,930 --> 00:22:36,410 Lo sentimos, pero en esta ocasión. 525 00:22:36,410 --> 00:22:38,870 >> Así que, ¿cuál es bueno de esto función del signo de interrogación que 526 00:22:38,870 --> 00:22:42,830 PHP tiende a apoyar, Ruby y Python y otros lenguajes, 527 00:22:42,830 --> 00:22:45,730 esto sólo significa el enchufe de alguna valora aquí y ¿sabes qué? 528 00:22:45,730 --> 00:22:48,300 A determinar si se debe utilizar comillas simples o dobles. 529 00:22:48,300 --> 00:22:50,966 No me molestes con los detalles intelectualmente poco interesantes. 530 00:22:50,966 --> 00:22:53,780 Pero, asegúrese de que es correcta para que mi código es en última instancia, 531 00:22:53,780 --> 00:22:57,010 operativa y segura, lo cual tendrá un significado en poco tiempo. 532 00:22:57,010 --> 00:23:00,460 >> Ahora, ¿cuántos argumentos en total, sólo para ser claro, es la función de toma de consulta? 533 00:23:00,460 --> 00:23:05,240 534 00:23:05,240 --> 00:23:07,581 ¿Alguien quiere votar por más de dos? 535 00:23:07,581 --> 00:23:08,080 Tres? 536 00:23:08,080 --> 00:23:10,001 Claro, ¿por qué? 537 00:23:10,001 --> 00:23:10,920 ¿Por qué tres? 538 00:23:10,920 --> 00:23:12,305 >> AUDIENCIA: [inaudible] 539 00:23:12,305 --> 00:23:13,180 DAVID MALAN: Exactamente. 540 00:23:13,180 --> 00:23:14,610 La primera parte es la cadena. 541 00:23:14,610 --> 00:23:18,640 El segundo argumento es el signo de dólar resaltar GET soporte de nombre de usuario. 542 00:23:18,640 --> 00:23:21,950 Y el tercer argumento es el lo mismo, pero sólo el nombre. 543 00:23:21,950 --> 00:23:24,590 Así, en otras palabras, ahora si yo tuviera un formulario web 544 00:23:24,590 --> 00:23:27,149 que tenían a los campos de texto, uno para el nombre de usuario, 545 00:23:27,149 --> 00:23:29,690 uno por su nombre, al igual como puedes ver en una página web 546 00:23:29,690 --> 00:23:32,120 cuando se registra para algún sitio web, esto podría 547 00:23:32,120 --> 00:23:35,450 ser el código en la parte final que realmente hace la inserción ahora 548 00:23:35,450 --> 00:23:37,220 en la base de datos. 549 00:23:37,220 --> 00:23:40,870 >> Ahora por el contrario, vamos a avanzar rápidamente. 550 00:23:40,870 --> 00:23:43,840 Supongamos que un usuario es ahora ingresar y desea 551 00:23:43,840 --> 00:23:48,860 escribir código PHP que comprueba si la persona que acaba de iniciar sesión 552 00:23:48,860 --> 00:23:52,250 es en realidad un usuario, puede utilizar la sintaxis muy simple. 553 00:23:52,250 --> 00:23:55,832 Se puede decir SELECT, digamos estrella, donde significa estrella todo. 554 00:23:55,832 --> 00:23:57,540 No sé lo que quiero quieren, así que simplemente dame 555 00:23:57,540 --> 00:24:01,585 todas las columnas de la tabla llama a los usuarios en los que, y esto es bueno. 556 00:24:01,585 --> 00:24:03,710 Seleccione apoya lo que es llamado un predicado, que es 557 00:24:03,710 --> 00:24:06,630 como una manera de calificar lo que quieres. 558 00:24:06,630 --> 00:24:10,590 Donde nombre de usuario es igual Lo dijeron ellos Malan. 559 00:24:10,590 --> 00:24:13,680 Así que aquí también, que he incrustado dentro del argumento 560 00:24:13,680 --> 00:24:16,110 a una función de PHP, una línea de código SQL. 561 00:24:16,110 --> 00:24:18,680 Y ese código SQL esta vez que se va, literalmente, 562 00:24:18,680 --> 00:24:21,790 para buscar Lo dijeron ellos Malan. 563 00:24:21,790 --> 00:24:24,420 >> Ahora eso no es del todo útil, así que me voy a saltar esa 564 00:24:24,420 --> 00:24:28,650 y yo voy a poner distancia este consejo de Brady, y vaya 565 00:24:28,650 --> 00:24:30,990 y plug-in en su lugar un signo de interrogación aquí. 566 00:24:30,990 --> 00:24:33,290 Por lo tanto, sólo para que quede claro, lo que debo informar a mi segundo argumento 567 00:24:33,290 --> 00:24:37,480 se si alguien acaba de iniciar sesión y yo que desee comprobar si él o ella es en realidad 568 00:24:37,480 --> 00:24:39,265 ¿un usuario? 569 00:24:39,265 --> 00:24:40,140 AUDIENCIA: [inaudible] 570 00:24:40,140 --> 00:24:40,890 DAVID MALAN: Sí. 571 00:24:40,890 --> 00:24:44,120 Oigo dólar signo de subrayado Obtener cotización, nombre de usuario unquote. 572 00:24:44,120 --> 00:24:50,040 Y eso debería volver a mí cualquiera de las filas en mi base de datos 573 00:24:50,040 --> 00:24:51,986 que tienen un nombre de usuario de Malan. 574 00:24:51,986 --> 00:24:54,860 Ahora con suerte, voy a volver cero si no Malan ha estado aquí, 575 00:24:54,860 --> 00:24:56,290 o uno si él tiene. 576 00:24:56,290 --> 00:24:59,026 No debería volver dos o tres o cuatro. 577 00:24:59,026 --> 00:24:59,526 ¿Por qué? 578 00:24:59,526 --> 00:25:00,220 >> AUDIENCIA: [inaudible] 579 00:25:00,220 --> 00:25:01,120 >> DAVID MALAN: Dije único, ¿verdad? 580 00:25:01,120 --> 00:25:01,750 Razón simple. 581 00:25:01,750 --> 00:25:04,030 Porque le dije que tiene que ser único, simplemente lógicamente, 582 00:25:04,030 --> 00:25:07,940 sólo se puede tener cero o uno Malans en esta tabla de base de datos en particular. 583 00:25:07,940 --> 00:25:10,965 Ahora como un aparte, para que lo has visto que, a pesar de que sigo usando GET 584 00:25:10,965 --> 00:25:14,350 y aunque PSet6 sólo se utilizan GET, que sin duda puede tener POST. 585 00:25:14,350 --> 00:25:17,212 Y recordemos que Post es otra técnica para la presentación de la información 586 00:25:17,212 --> 00:25:19,170 de una forma, pero no aparece en la URL. 587 00:25:19,170 --> 00:25:22,690 Es un poco más seguro sin duda para cosas como nombres de usuario y contraseñas, 588 00:25:22,690 --> 00:25:25,210 PSet7 que, de hecho, implican. 589 00:25:25,210 --> 00:25:28,130 >> Por lo tanto, vamos a hacer esto en PHP MyAdmin y ver qué pasa. 590 00:25:28,130 --> 00:25:30,020 Voy a ir a la pestaña de MySQL. 591 00:25:30,020 --> 00:25:34,450 Y cuenta que el valor predeterminado para PHP MyAdmin, sólo para tratar de ser útil, 592 00:25:34,450 --> 00:25:37,050 es seleccionar la estrella de los usuarios donde uno. 593 00:25:37,050 --> 00:25:39,430 Bueno, uno siempre es cierto, por lo esto tiene la tonta efectiva 594 00:25:39,430 --> 00:25:40,400 de sólo tienes que seleccionar todo. 595 00:25:40,400 --> 00:25:42,691 Pero yo voy a ser un poco más pedante y manual 596 00:25:42,691 --> 00:25:45,920 escriba a cabo estrella SELECT FROM usuarios. 597 00:25:45,920 --> 00:25:48,294 >> Ahora técnicamente, puede citar el nombre de las tablas. 598 00:25:48,294 --> 00:25:50,460 Es raro que usted tiene que, pero notan estos no son 599 00:25:50,460 --> 00:25:52,240 sus presupuestos normales en el teclado de Estados Unidos. 600 00:25:52,240 --> 00:25:54,760 Este es el backtick llamada, que generalmente en la parte superior izquierda 601 00:25:54,760 --> 00:25:56,000 esquina de su teclado. 602 00:25:56,000 --> 00:25:58,500 Pero es raro que Tú en realidad tiene que molestarse con eso, 603 00:25:58,500 --> 00:25:59,950 así que voy a omitir todos modos. 604 00:25:59,950 --> 00:26:02,280 Así que ahora, déjame ir adelante y golpeó ir. 605 00:26:02,280 --> 00:26:06,616 ¿Y cuántas filas debo obtener volver cuando selecciono la estrella de los usuarios? 606 00:26:06,616 --> 00:26:08,407 >> AUDIENCIA: [inaudible] 607 00:26:08,407 --> 00:26:09,990 DAVID MALAN: El número de filas, seguro. 608 00:26:09,990 --> 00:26:12,390 Pero, ¿cuántos en este pisos de concreto en este momento? 609 00:26:12,390 --> 00:26:14,640 Dos, porque no había mí y no había Rob. 610 00:26:14,640 --> 00:26:19,370 Por lo tanto, si hago clic en Ir, veo visualmente que He conseguido volver, de hecho, dos filas. 611 00:26:19,370 --> 00:26:22,060 Hay una gran cantidad de desorden en la pantalla, pero sólo veo dos filas. 612 00:26:22,060 --> 00:26:28,580 Por el contrario, si lo hago de nuevo y hacer Estrellas SELECT FROM usuarios, en su nombre de usuario 613 00:26:28,580 --> 00:26:31,840 es igual a la cita, fin de la cita Malan, ahora si me haga clic en Ir, 614 00:26:31,840 --> 00:26:33,970 Yo sólo voy a volver una fila. 615 00:26:33,970 --> 00:26:36,499 Y por último, si lo hago algo como esto, supongamos 616 00:26:36,499 --> 00:26:38,290 que no me importa conseguir todo, 617 00:26:38,290 --> 00:26:41,020 que es una especie de sentido ahora, porque hay sólo dos columnas. 618 00:26:41,020 --> 00:26:43,103 No es como que estoy seleccionando una enorme cantidad de datos. 619 00:26:43,103 --> 00:26:46,720 Supongamos que seguir adelante y no seleccione el nombre desde 620 00:26:46,720 --> 00:26:51,990 usuarios, donde nombre de usuario es igual a Malan, lo bueno de SQL con honestidad, 621 00:26:51,990 --> 00:26:54,290 es que en realidad sólo hace lo que le dices que haga. 622 00:26:54,290 --> 00:26:57,550 Es bastante sucinta, pero que, literalmente, simplemente decirle lo que quieres hacer. 623 00:26:57,550 --> 00:27:01,130 Seleccione el nombre de los usuarios donde el nombre de usuario es igual a Malan. 624 00:27:01,130 --> 00:27:03,440 Y realmente es así de explícito. 625 00:27:03,440 --> 00:27:08,410 Así que, ahora si me golpeó Go, cuántos filas voy a volver? 626 00:27:08,410 --> 00:27:10,770 Uno, porque es sólo Malan, es de esperar. 627 00:27:10,770 --> 00:27:13,100 O cero si no está allí, pero uno al máximo. 628 00:27:13,100 --> 00:27:17,610 >> ¿Y cuántas columnas voy a volver? 629 00:27:17,610 --> 00:27:18,450 ¿Cuántas columnas? 630 00:27:18,450 --> 00:27:20,658 Esta vez, sólo voy para conseguir uno porque yo no hice 631 00:27:20,658 --> 00:27:22,380 seleccione estrella, que es todo. 632 00:27:22,380 --> 00:27:27,900 Ahora estoy seleccionando solo nombre, así que simplemente volver a una columna y una fila. 633 00:27:27,900 --> 00:27:31,730 Y parece una especie de forma adecuada ridículo, super mirando 634 00:27:31,730 --> 00:27:33,060 pequeño como este. 635 00:27:33,060 --> 00:27:34,290 Por lo tanto, lo que realmente está pasando? 636 00:27:34,290 --> 00:27:36,890 Al ejecutar un SQL consulta mediante selección, 637 00:27:36,890 --> 00:27:38,700 lo que está recibiendo de vuelta de la base de datos 638 00:27:38,700 --> 00:27:42,970 es como una tabla temporal con filas y columnas, tal vez, 639 00:27:42,970 --> 00:27:46,260 pero que omite nada que No fue realmente elegido por usted. 640 00:27:46,260 --> 00:27:49,010 Así, es como si alguien tenía una gran hoja de cálculo de todos los estudiantes 641 00:27:49,010 --> 00:27:51,610 registrada por alguna grupo de estudiantes, y dices: 642 00:27:51,610 --> 00:27:55,097 dame todo el primer año que han registrada para nuestro grupo de alumnos, lo que 643 00:27:55,097 --> 00:27:56,930 su colega en el grupo de estudiantes podría hacer 644 00:27:56,930 --> 00:27:58,430 es que sólo se podían entregar que toda la hoja de cálculo. 645 00:27:58,430 --> 00:27:59,742 Eso es como decir que seleccione estrellas. 646 00:27:59,742 --> 00:28:02,200 Y que es un poco molesto si sólo quería que el estudiante de primer año. 647 00:28:02,200 --> 00:28:05,640 Y así, si en vez de decir, seleccione la estrella de la mesa de base de datos 648 00:28:05,640 --> 00:28:08,470 donde el año es igual a cita, estudiante de primer año fin de la cita, 649 00:28:08,470 --> 00:28:10,810 es como si tu amigo en el grupo de estudiantes 650 00:28:10,810 --> 00:28:13,770 literalmente resaltado y copiados sólo las filas de primer año, 651 00:28:13,770 --> 00:28:16,780 les pega en un nuevo Google Hoja de cálculo o un archivo de Excel, 652 00:28:16,780 --> 00:28:18,860 y devolvió el resultante sólo archivo. 653 00:28:18,860 --> 00:28:21,710 Eso es todo lo que está pasando en conceptualmente aquí. 654 00:28:21,710 --> 00:28:23,920 >> Así que al final, lo que podemos hacer algunas cosas bastante lujo 655 00:28:23,920 --> 00:28:26,560 almacenando cosas como nombres de usuario y contraseñas y similares. 656 00:28:26,560 --> 00:28:30,310 Pero, resulta que debemos hacer un poco diferente a esto. 657 00:28:30,310 --> 00:28:34,750 No es tan inteligente como para solamente almacenar un nombre de usuario y una contraseña. 658 00:28:34,750 --> 00:28:37,790 Alguien anterior, creo que aquí abajo, se sugiere una identificación. 659 00:28:37,790 --> 00:28:40,787 Ahora una identificación podría ser como un Harvard identificación o de Yale Net ID, 660 00:28:40,787 --> 00:28:42,870 pero podría ser incluso más simple en nuestro caso la base de datos. 661 00:28:42,870 --> 00:28:45,120 Y, en efecto, el caso común es tener otra columna. 662 00:28:45,120 --> 00:28:46,953 Y yo voy a ir adelante y editar mi mesa. 663 00:28:46,953 --> 00:28:49,521 Y si juegas un poco con esta interfaz para PSet7, 664 00:28:49,521 --> 00:28:51,770 verás que se puede comprobar este botón aquí y añadir 665 00:28:51,770 --> 00:28:53,750 un campo al comienzo de la tabla. 666 00:28:53,750 --> 00:28:56,720 Y ahora si hago clic en Ir, va que me diera una de esas formas 667 00:28:56,720 --> 00:28:57,600 de antes. 668 00:28:57,600 --> 00:29:00,170 Voy a añadir un campo llamado ID. 669 00:29:00,170 --> 00:29:03,070 Y yo voy a hacer que sea un tipo numérico. 670 00:29:03,070 --> 00:29:05,362 >> Tengo un montón de valores para los valores numéricos. 671 00:29:05,362 --> 00:29:08,677 Yo sólo voy a elegir un INT y No te preocupes por los tamaños dispares. 672 00:29:08,677 --> 00:29:10,510 Yo no tengo que especificar una longitud o un valor, 673 00:29:10,510 --> 00:29:13,710 porque va a ser 32 bits no importa qué. 674 00:29:13,710 --> 00:29:16,070 Atributos, no vimos antes. 675 00:29:16,070 --> 00:29:18,410 Cualquier interés en cualquiera de estos opciones de menú en esta ocasión? 676 00:29:18,410 --> 00:29:21,890 677 00:29:21,890 --> 00:29:23,745 Para una INT? 678 00:29:23,745 --> 00:29:24,620 ¿Qué propones? 679 00:29:24,620 --> 00:29:27,350 680 00:29:27,350 --> 00:29:28,445 ¿No? 681 00:29:28,445 --> 00:29:29,570 ¿Alguno de ellos tiene sentido? 682 00:29:29,570 --> 00:29:30,536 Sí. 683 00:29:30,536 --> 00:29:31,900 Sí, sin firmar, ¿verdad? 684 00:29:31,900 --> 00:29:35,930 >> Generalmente, si vamos a dar cada uno un número único, que 685 00:29:35,930 --> 00:29:38,200 es donde esta historia es va, yo en realidad sólo quiero 686 00:29:38,200 --> 00:29:41,919 que una persona tenga el número como cero y uno y dos y tres y cuatro. 687 00:29:41,919 --> 00:29:43,710 Yo no necesito para hacer frente con números negativos. 688 00:29:43,710 --> 00:29:45,210 Simplemente parece que la complejidad excesiva. 689 00:29:45,210 --> 00:29:48,470 Quiero cuatro mil millones de valores posibles, no cuatro mil millones de valores posibles, 690 00:29:48,470 --> 00:29:50,699 así que sólo duplicando la capacidad de mi INT. 691 00:29:50,699 --> 00:29:53,490 Como acotación al margen, si quieres relacionar esto a algo como Facebook, 692 00:29:53,490 --> 00:29:56,190 vuelta en clase de mi día en que Facebook salió por primera vez, 693 00:29:56,190 --> 00:29:59,510 Creo que lo que eran utilizando en su base de datos MySQL 694 00:29:59,510 --> 00:30:02,856 para almacenar un usuario de identificador, era sólo un INT. 695 00:30:02,856 --> 00:30:05,230 Pero, por supuesto, hay mucho de gente real en el mundo. 696 00:30:05,230 --> 00:30:07,438 Hay una gran cantidad de falsos Facebook cuentas en el mundo. 697 00:30:07,438 --> 00:30:11,701 Y por lo que finalmente, Facebook desbordó el tamaño de un INT, una de cuatro mil millones 698 00:30:11,701 --> 00:30:12,200 valor. 699 00:30:12,200 --> 00:30:15,032 Razón por la cual, si nos fijamos alrededor y hay sitios web 700 00:30:15,032 --> 00:30:16,740 que puede decirle lo que su identificador único es. 701 00:30:16,740 --> 00:30:19,781 Y si nunca elige un nombre de usuario en Facebook, verás tu ID único. 702 00:30:19,781 --> 00:30:23,080 Creo que es el perfil PHP dot signo de interrogación ID es igual a algo. 703 00:30:23,080 --> 00:30:27,210 Eso es ahora algo así como un gran INT, o un largo tiempo si se quiere, 704 00:30:27,210 --> 00:30:29,700 que es un valor de 64 bits o algo similar. 705 00:30:29,700 --> 00:30:33,620 >> Así que, incluso en el mundo real hacer esto cuestiones en última instancia, a veces importan. 706 00:30:33,620 --> 00:30:37,600 Y resulta que aquí, si soy dando a todos mis usuarios un identificador único, 707 00:30:37,600 --> 00:30:41,750 Quiero ser super explícita y mínimamente hacer de este campo único. 708 00:30:41,750 --> 00:30:44,750 Pero resulta que hay una pedazo de nomenclatura también hoy 709 00:30:44,750 --> 00:30:46,470 eso es una clave principal. 710 00:30:46,470 --> 00:30:49,800 Si usted está diseñando una base de datos mesa y usted sabe de antemano 711 00:30:49,800 --> 00:30:55,580 que una de las columnas de esa tabla debe y va a identificar de forma exclusiva las filas 712 00:30:55,580 --> 00:30:58,500 en la tabla, que desea especificarlo y decirle a la base de datos, 713 00:30:58,500 --> 00:31:00,250 este es mi clave principal. 714 00:31:00,250 --> 00:31:02,110 Puede haber duplicados en otros campos, 715 00:31:02,110 --> 00:31:06,330 pero yo estoy diciendo la base de datos que esta es mi primaria, mi campo más importante, 716 00:31:06,330 --> 00:31:08,420 eso garantiza que sea único. 717 00:31:08,420 --> 00:31:09,660 >> Ahora, esto parece redundante. 718 00:31:09,660 --> 00:31:13,830 Ahora estoy proponiendo que nos agregar, haciendo clic en Guardar aquí, 719 00:31:13,830 --> 00:31:17,210 un called-- campo y voy seguir adelante y haga clic en la IA, 720 00:31:17,210 --> 00:31:19,720 volveremos a que en un momento, Save. 721 00:31:19,720 --> 00:31:22,540 Estoy proponiendo ahora que mi mesa este aspecto. 722 00:31:22,540 --> 00:31:26,305 Tengo un campo INT llamada ID, un campo CHAR llamado nombre de usuario, 723 00:31:26,305 --> 00:31:31,100 un campo VARCHAR llamado Nombre, pero ID, si es primario y por lo tanto, único, 724 00:31:31,100 --> 00:31:33,760 ¿por qué me acaba de perder el tiempo de la introducción de lo 725 00:31:33,760 --> 00:31:39,140 efectivamente es un segundo única campo llamado ID que es un INT? 726 00:31:39,140 --> 00:31:41,980 >> Nombre de usuario, recuerdo, era Ya único, dijimos. 727 00:31:41,980 --> 00:31:45,350 Así que, lógicamente, no es necesario ninguna experiencia de base de datos a la razón 728 00:31:45,350 --> 00:31:47,570 a través de este, ¿por qué puede ser que he introducido 729 00:31:47,570 --> 00:31:50,065 un INT como mi identificador único también? 730 00:31:50,065 --> 00:31:52,740 731 00:31:52,740 --> 00:31:53,930 ¿Qué tiene esto-- dicen otra vez? 732 00:31:53,930 --> 00:31:55,580 >> AUDIENCIA: [inaudible] 733 00:31:55,580 --> 00:31:59,534 >> DAVID MALAN: Random el acceso es más fácil, ¿por qué? 734 00:31:59,534 --> 00:32:00,410 >> AUDIENCIA: [inaudible] 735 00:32:00,410 --> 00:32:02,367 DAVID MALAN: Sí, es simplemente acceder a los números. 736 00:32:02,367 --> 00:32:04,750 Por lo tanto, si usted piensa de esta verdad es una tabla, como una matriz, 737 00:32:04,750 --> 00:32:07,690 Ahora tengo identificadores únicos que puedo saltar. 738 00:32:07,690 --> 00:32:11,520 Y aún mejor que la que es ¿Cuán grande es un INT va a ser otra vez? 739 00:32:11,520 --> 00:32:14,450 740 00:32:14,450 --> 00:32:15,800 32 bits o cuatro bytes. 741 00:32:15,800 --> 00:32:17,750 >> ¿Qué tan grande es mi nombre de usuario va a ser? 742 00:32:17,750 --> 00:32:20,310 743 00:32:20,310 --> 00:32:21,990 Al máximo? 744 00:32:21,990 --> 00:32:22,880 16 bytes. 745 00:32:22,880 --> 00:32:26,080 >> Por lo tanto, si usted está realmente preocuparse por el rendimiento de su código, 746 00:32:26,080 --> 00:32:31,390 piensa de nuevo a PSet5, preferiria para buscar un valor de cuatro bytes o una 16 747 00:32:31,390 --> 00:32:32,240 valor de byte, ¿verdad? 748 00:32:32,240 --> 00:32:33,810 Es tan simple como eso. 749 00:32:33,810 --> 00:32:38,060 Usted tiene que hacer cuatro veces más cantidad de trabajo para buscar nombres de usuario porque esos 750 00:32:38,060 --> 00:32:38,830 son 16 bytes. 751 00:32:38,830 --> 00:32:41,320 Por lo tanto, usted tiene que, literalmente, comparar los 16 bytes para ser 752 00:32:41,320 --> 00:32:43,140 Seguro que sí, esto es nombre de usuario que quiero. 753 00:32:43,140 --> 00:32:46,610 Mientras que para un INT, puede hacerlo con sólo cuatro bytes. 754 00:32:46,610 --> 00:32:49,212 >> Y como un aparte para aquellos interesado en hardware, 755 00:32:49,212 --> 00:32:52,420 Resulta que usted puede caber algo así una un valor de 32 bits en algo o INT 756 00:32:52,420 --> 00:32:55,330 denominado un registro en un ordenador CPU, lo que significa que es super, 757 00:32:55,330 --> 00:32:58,400 super rápido, incluso a las más bajas nivel de hardware del equipo. 758 00:32:58,400 --> 00:33:00,530 Por lo tanto, sólo hay ventajas por todos lados. 759 00:33:00,530 --> 00:33:01,530 ¿Entonces, qué significa esto? 760 00:33:01,530 --> 00:33:04,850 De hecho, cuando usted está diseñando un tabla de base de datos, casi todo el tiempo 761 00:33:04,850 --> 00:33:07,170 vas para no tener sólo los datos que te importa, 762 00:33:07,170 --> 00:33:09,280 sino también algo así como un identificador único 763 00:33:09,280 --> 00:33:11,280 porque esto se va a vamos a hacer otras cosas. 764 00:33:11,280 --> 00:33:13,160 Y vamos a tropezar con un problema aquí. 765 00:33:13,160 --> 00:33:15,990 >> Supongamos que los usuarios no tienen solo los nombres de usuario y nombres, 766 00:33:15,990 --> 00:33:19,540 pero también tienen cosas como ciudades y los estados y códigos postales, por lo menos 767 00:33:19,540 --> 00:33:20,432 aquí en los EE.UU.. 768 00:33:20,432 --> 00:33:22,390 Por lo tanto, voy a seguir adelante y decir rápidamente, 769 00:33:22,390 --> 00:33:26,180 dame tres columnas más al final de la tabla. 770 00:33:26,180 --> 00:33:28,900 Y esto va a ser la ciudad, esto va a ser Estado, 771 00:33:28,900 --> 00:33:30,400 y esto va a ser Zip. 772 00:33:30,400 --> 00:33:32,710 >> Ahora tipos City, lo datos debe ser esto, tal vez? 773 00:33:32,710 --> 00:33:35,460 774 00:33:35,460 --> 00:33:35,989 VARCHAR? 775 00:33:35,989 --> 00:33:37,780 No sé lo que el más largo nombre de la ciudad es. 776 00:33:37,780 --> 00:33:40,571 En algún lugar de los Estados Unidos, no hay Probablemente alguna palabra ridículamente largo, 777 00:33:40,571 --> 00:33:43,605 así que vamos a ir con 255, un poco históricamente o arbitrariamente. 778 00:33:43,605 --> 00:33:44,730 Estado, lo que quieres hacer? 779 00:33:44,730 --> 00:33:48,380 780 00:33:48,380 --> 00:33:50,367 Cuestión de criterio, ¿no? 781 00:33:50,367 --> 00:33:51,700 Lo que es tal vez el más eficiente? 782 00:33:51,700 --> 00:33:53,500 ¿Cuántos personajes? 783 00:33:53,500 --> 00:33:55,950 Tal vez sólo dos, si podemos salirse con la suya haciendo precisamente, 784 00:33:55,950 --> 00:33:58,250 como, MA de Massachusetts y así sucesivamente. 785 00:33:58,250 --> 00:34:00,520 Por lo tanto, voy a ir a un valor CHAR de dos. 786 00:34:00,520 --> 00:34:03,080 >> Código postal es muy interesante. 787 00:34:03,080 --> 00:34:06,679 Estamos aquí en 02.138, por lo que sugiere que debemos utilizar y qué? 788 00:34:06,679 --> 00:34:07,470 Es un INT, ¿verdad? 789 00:34:07,470 --> 00:34:10,030 790 00:34:10,030 --> 00:34:12,800 INT, INT, corta? 791 00:34:12,800 --> 00:34:14,521 Corto funcionaría. 792 00:34:14,521 --> 00:34:15,020 ¿No? 793 00:34:15,020 --> 00:34:18,920 794 00:34:18,920 --> 00:34:20,870 CHAR o cinco, pero quiero una INT. 795 00:34:20,870 --> 00:34:23,710 ¿Por qué hacer retroceder en un INT? 796 00:34:23,710 --> 00:34:26,820 Convencerme de esto. 797 00:34:26,820 --> 00:34:29,210 ¿Cuál es estúpido sobre un INT, mi idea? 798 00:34:29,210 --> 00:34:29,871 Sí. 799 00:34:29,871 --> 00:34:31,199 >> AUDIENCIA: Recoger más memoria. 800 00:34:31,199 --> 00:34:32,909 >> DAVID MALAN: Recoger más memoria. 801 00:34:32,909 --> 00:34:35,310 Cuatro bytes, pero eres proponer un código postal 802 00:34:35,310 --> 00:34:39,000 como cinco bytes o alguien era como CHAR, que se siente como eh, eso no es realmente 803 00:34:39,000 --> 00:34:39,620 el caso. 804 00:34:39,620 --> 00:34:40,489 >> Bueno, divertida historia. 805 00:34:40,489 --> 00:34:43,179 Hace años, cuando yo solía utilizar Microsoft Outlook para mi correo electrónico, 806 00:34:43,179 --> 00:34:45,150 Finalmente me quería cambiar a Gmail. 807 00:34:45,150 --> 00:34:48,949 Y así, he exportado todos los de mi contactos de Outlook como un archivo CSV. 808 00:34:48,949 --> 00:34:50,699 Valores Separados por Comas, que simplemente significaba que 809 00:34:50,699 --> 00:34:54,060 tenía todas mis nombres de amigos y última nombres y números de teléfono y códigos postales 810 00:34:54,060 --> 00:34:54,747 y todo eso. 811 00:34:54,747 --> 00:34:56,580 Y entonces hice la error de abrirlo 812 00:34:56,580 --> 00:34:58,640 en Excel, que es una programa de hoja de cálculo que 813 00:34:58,640 --> 00:35:00,289 entiende archivos CSV como hemos visto. 814 00:35:00,289 --> 00:35:03,080 Pero entonces, debo haber golpeado, como, Comando o Control S en un punto. 815 00:35:03,080 --> 00:35:06,250 Y Excel parecer en el momento tenido una característica mediante el cual cualquier momento 816 00:35:06,250 --> 00:35:08,100 vio un número, que trató de ser útil. 817 00:35:08,100 --> 00:35:11,610 Y si ese número se inició con ceros, sólo se librarían de ellos. 818 00:35:11,610 --> 00:35:13,420 ¿Por qué necesita líderes ceros en números enteros? 819 00:35:13,420 --> 00:35:15,140 Son sentido, matemáticamente. 820 00:35:15,140 --> 00:35:17,530 No son de sentido en el sistema postal de los EEUU. 821 00:35:17,530 --> 00:35:19,954 Así, he tenido durante años, a este día, todavía 822 00:35:19,954 --> 00:35:22,370 tener amigos que cuando el caso raro que yo necesito a alguien es 823 00:35:22,370 --> 00:35:24,078 abordar estos días, Yo todavía veo que yo 824 00:35:24,078 --> 00:35:26,767 tener un amigo en Cambridge, Massachusetts, 2.138. 825 00:35:26,767 --> 00:35:29,350 Y es molesto si estás tratando de ordenar de programación 826 00:35:29,350 --> 00:35:30,975 generar sobres o simplemente apúntelo. 827 00:35:30,975 --> 00:35:33,599 Y es por esta razón, Elegí el tipo de datos incorrecto. 828 00:35:33,599 --> 00:35:34,490 Así que, me encanta tu idea. 829 00:35:34,490 --> 00:35:35,650 Vamos a utilizar un campo CHAR. 830 00:35:35,650 --> 00:35:38,340 Cinco personajes, excepto hay un caso esquina. 831 00:35:38,340 --> 00:35:42,220 Si todavía enviar correo, a veces códigos postales en estos días, 832 00:35:42,220 --> 00:35:45,360 que son, como, más cuatro. 833 00:35:45,360 --> 00:35:48,200 Por lo tanto, necesitamos un guión y después necesitamos cuatro números más. 834 00:35:48,200 --> 00:35:50,330 Así que para ser honesto, podría ir muchas maneras diferentes. 835 00:35:50,330 --> 00:35:52,371 >> Por ahora, me voy a seguir simple y estoy 836 00:35:52,371 --> 00:35:54,780 va a decir que es un cinco por valor CHAR y estamos 837 00:35:54,780 --> 00:35:56,739 va a saltar todo el tablero más cuatro. 838 00:35:56,739 --> 00:35:58,280 Pero estos son los tipos de compensaciones. 839 00:35:58,280 --> 00:36:00,196 Y se puede pensar en el mismos problemas que surgen 840 00:36:00,196 --> 00:36:01,860 con números de teléfono u otros campos. 841 00:36:01,860 --> 00:36:04,350 >> Y ahora, esto es en realidad un camino absurdo bajar. 842 00:36:04,350 --> 00:36:08,000 Supongamos que tanto Rob y yo y Hannah y María y [? Davon?] Y Andy 843 00:36:08,000 --> 00:36:12,820 y otros en el personal de todos viven en Cambridge, Massachusetts, 02138. 844 00:36:12,820 --> 00:36:17,970 En realidad, esto se siente estúpido que soy añadir a mi tabla de usuarios, ciudad, estado, 845 00:36:17,970 --> 00:36:18,630 y el código postal. 846 00:36:18,630 --> 00:36:20,980 ¿Por qué? 847 00:36:20,980 --> 00:36:21,960 >> AUDIENCIA: [inaudible] 848 00:36:21,960 --> 00:36:22,918 >> DAVID MALAN: Diga otra vez? 849 00:36:22,918 --> 00:36:24,310 AUDIENCIA: [inaudible] 850 00:36:24,310 --> 00:36:25,850 >> DAVID MALAN: Siempre son va a ir de la mano, ¿no? 851 00:36:25,850 --> 00:36:28,660 Cuando resulta que solíamos pensar este fue el caso hasta que taxativamente 852 00:36:28,660 --> 00:36:30,570 buscado todo los EE.UU., y resulta que hay 853 00:36:30,570 --> 00:36:32,653 son algunas inconsistencias donde varios pueblos tienen 854 00:36:32,653 --> 00:36:35,060 la misma postal, lo cual es raro. 855 00:36:35,060 --> 00:36:40,580 Pero, si estipulamos por ahora que 02.138 es siempre Cambridge, Massachusetts, 856 00:36:40,580 --> 00:36:44,910 ¿por qué en el mundo le guarde en su base de datos de Cambridge y MA y 02138 857 00:36:44,910 --> 00:36:49,357 para mí y para Hannah y para Rob y para [? Davon?] Y para los demás que viven 858 00:36:49,357 --> 00:36:51,190 aquí en Cambridge, es perfectamente redundante. 859 00:36:51,190 --> 00:36:54,480 >> Debemos huir con sólo el almacenamiento de qué? 860 00:36:54,480 --> 00:36:55,610 Sólo el código postal. 861 00:36:55,610 --> 00:36:58,660 Pero entonces, si almacenamos sólo la código postal, sí quiero, probablemente, 862 00:36:58,660 --> 00:37:02,160 para mi sitio web para saber dónde es 02.138. 863 00:37:02,160 --> 00:37:03,910 Por lo tanto, necesito otra mesa. 864 00:37:03,910 --> 00:37:04,697 Y eso está bien. 865 00:37:04,697 --> 00:37:07,530 Y de hecho, esta es una de las procesos de diseño de tablas de diseño 866 00:37:07,530 --> 00:37:11,472 que va a hacer en PSet7 así por el cual desea factorizar datos comunes. 867 00:37:11,472 --> 00:37:14,430 Al igual que hemos estado factorizar código común y factoring cabo común 868 00:37:14,430 --> 00:37:17,380 estilos de CSS, aquí también en la base de datos, 869 00:37:17,380 --> 00:37:21,180 si sólo necesito 02.138 a única identificar la ciudad natal de alguien, 870 00:37:21,180 --> 00:37:25,020 no almacene Cambridge, Mass para cada usuario de zurcir en su mesa. 871 00:37:25,020 --> 00:37:29,770 >> En su lugar, tener una tabla separada llamada Cremalleras que debe tener lo columnas? 872 00:37:29,770 --> 00:37:33,490 Probablemente un campo de ID, simplemente porque, por los principios que están hablando ahora. 873 00:37:33,490 --> 00:37:35,720 Probablemente un campo postal para 02.138. 874 00:37:35,720 --> 00:37:38,400 Y entonces probablemente lo que otros columnas? 875 00:37:38,400 --> 00:37:42,950 Ciudad y estado, pero sólo tienen un fila de 02138, una fila para 02139, 876 00:37:42,950 --> 00:37:44,772 una fila por 90.210. 877 00:37:44,772 --> 00:37:46,730 Y eso es, literalmente, todos los códigos postales que conozco. 878 00:37:46,730 --> 00:37:49,012 >> Así que ahora, ¿qué puedes hacer? 879 00:37:49,012 --> 00:37:51,220 Esto es problemático, porque ahora tengo dos tablas. 880 00:37:51,220 --> 00:37:54,660 Por lo tanto, mis usuarios son en su mayoría por aquí, pero su información de estado de la ciudad es 881 00:37:54,660 --> 00:37:55,390 aqui. 882 00:37:55,390 --> 00:37:58,635 Así, resulta que con SQL, hay en realidad una manera de unirse a la información, 883 00:37:58,635 --> 00:38:00,470 y verá esto en el PSet. 884 00:38:00,470 --> 00:38:03,000 >> Pero resulta que puedas hacer algo como esto. 885 00:38:03,000 --> 00:38:10,501 Estrellas SELECT FROM usuarios, ÚNETE cremalleras EN usuarios salpican postal es igual cremalleras salpican postal. 886 00:38:10,501 --> 00:38:13,360 Lo cual es un poco prolijo, es cierto, pero esto sólo 887 00:38:13,360 --> 00:38:17,590 significa seleccione todo, desde la proceso de tomar mi tabla de usuarios 888 00:38:17,590 --> 00:38:19,580 y mi mesa de cremalleras. 889 00:38:19,580 --> 00:38:22,120 Únete a ellos, por un campo que tienen en columna. 890 00:38:22,120 --> 00:38:24,780 Así que, literalmente, hacer algo así, y devuélveme 891 00:38:24,780 --> 00:38:27,360 una nueva tabla temporal eso es más amplio, que es más grande, 892 00:38:27,360 --> 00:38:29,450 que tiene todas las columnas de ambos. 893 00:38:29,450 --> 00:38:33,510 Y eso, simplemente, sería el sintaxis para hacer algo como esto. 894 00:38:33,510 --> 00:38:35,540 >> Así, hay un futuro, pero no va 895 00:38:35,540 --> 00:38:38,950 ser otras decisiones de diseño que usted tienen que hacer, no sólo con índices 896 00:38:38,950 --> 00:38:40,550 sino que también se ejecuta en desafíos. 897 00:38:40,550 --> 00:38:43,360 De hecho, hay un desafío en cualquier diseño de base de datos 898 00:38:43,360 --> 00:38:47,930 por el cual a veces dos personas podrían querer para acceder a las mismas filas de la base de datos 899 00:38:47,930 --> 00:38:48,530 mesa. 900 00:38:48,530 --> 00:38:51,450 Por lo tanto, esto es algo que vamos a encontrar en PSet7 también. 901 00:38:51,450 --> 00:38:54,686 >> Pero pensé que me vería en un ataque que es posible en SQL. 902 00:38:54,686 --> 00:38:56,560 ¿Cuáles son algunos de los problemas que pueden surgir? 903 00:38:56,560 --> 00:38:58,170 Por lo tanto, te vas a encontrar esto en PSet7. 904 00:38:58,170 --> 00:39:01,874 Y les decimos abiertamente lo que el solución de codificación para este problema es. 905 00:39:01,874 --> 00:39:04,790 Pero si usted toma una clase de nivel superior, especialmente en los sistemas operativos, 906 00:39:04,790 --> 00:39:06,950 vas a encontrar un tema de atomicidad, 907 00:39:06,950 --> 00:39:10,080 el problema de tratar de hacer varias cosas a la vez 908 00:39:10,080 --> 00:39:11,000 sin interrupción. 909 00:39:11,000 --> 00:39:14,560 >> Y pensé en presentarme este idea para PSet7 con una metáfora 910 00:39:14,560 --> 00:39:18,160 que he aprendido yo en Margo Sistemas operativos CS164 de Seltzer 911 00:39:18,160 --> 00:39:18,990 Hace años la clase. 912 00:39:18,990 --> 00:39:22,230 Supongamos que usted tiene una de estas dormitorio nevera en su habitación de la residencia o casa, 913 00:39:22,230 --> 00:39:24,474 y usted tiene una verdadera afición por la leche. 914 00:39:24,474 --> 00:39:27,140 Y así, se llega a casa después de las clases un día, abrir la nevera. 915 00:39:27,140 --> 00:39:27,620 Oh, maldita sea. 916 00:39:27,620 --> 00:39:28,870 No hay leche en la nevera. 917 00:39:28,870 --> 00:39:32,470 Así, se cierra la nevera, cerrar la puerta, bloquear su dormitorio, 918 00:39:32,470 --> 00:39:34,770 caminar alrededor de la esquina a CVS, ponerse en fila, 919 00:39:34,770 --> 00:39:36,312 y empezar a comprobar hacia fuera para un poco de leche. 920 00:39:36,312 --> 00:39:38,978 Y va a tomar un tiempo, porque esos malditos autoservicio 921 00:39:38,978 --> 00:39:40,570 contadores tardan una eternidad para utilizar de todos modos. 922 00:39:40,570 --> 00:39:41,950 Así que mientras tanto, su compañero de cuarto llega a casa. 923 00:39:41,950 --> 00:39:43,470 Él o ella realmente le gusta la leche también. 924 00:39:43,470 --> 00:39:45,520 Ellos entran en la habitación de la residencia, abrir la nevera, oh, maldita sea. 925 00:39:45,520 --> 00:39:46,490 No hay más leche. 926 00:39:46,490 --> 00:39:49,040 >> Por lo tanto, él o ella también que pasa alrededor de la esquina. 927 00:39:49,040 --> 00:39:51,670 Pero ahora, ya que no hay como dos o tres o cuatro CVSes cerca, 928 00:39:51,670 --> 00:39:53,800 pasan a ir a uno de los diferentes en la plaza. 929 00:39:53,800 --> 00:39:55,830 Y ahora, unos pocos minutos más tarde, los dos 930 00:39:55,830 --> 00:39:58,060 volver a casa y ugh, peor problema nunca. 931 00:39:58,060 --> 00:40:00,967 Ahora usted tiene demasiada leche porque va a ir agria. 932 00:40:00,967 --> 00:40:03,050 Y te gusta la leche, pero no me gusta realmente la leche. 933 00:40:03,050 --> 00:40:06,730 >> Así que ahora, esto era un caro error porque ambos 934 00:40:06,730 --> 00:40:09,870 tomado una decisión en base a la estado de alguna variable que 935 00:40:09,870 --> 00:40:12,660 estaba en el proceso de ser cambiado por usted, 936 00:40:12,660 --> 00:40:14,560 el iniciador de ir a comprar leche. 937 00:40:14,560 --> 00:40:17,785 Por lo tanto, lo que es tal vez un ser humano solución a ese problema? 938 00:40:17,785 --> 00:40:18,660 AUDIENCIA: [inaudible] 939 00:40:18,660 --> 00:40:19,430 DAVID MALAN: Deja una nota, ¿verdad? 940 00:40:19,430 --> 00:40:21,850 Siempre deje una nota, si estás familiarizados con ese programa. 941 00:40:21,850 --> 00:40:23,100 Sí, hay dos de nosotros. 942 00:40:23,100 --> 00:40:25,940 Por lo tanto, siempre dejar una nota, o bloquear literalmente el refrigerador 943 00:40:25,940 --> 00:40:28,602 con algún tipo de candado o algo por encima de eso. 944 00:40:28,602 --> 00:40:31,310 Pero eso es en realidad va a ser problema clave con el diseño de la base de datos, 945 00:40:31,310 --> 00:40:34,710 especialmente cuando es posible que tenga varios navegadores, múltiples ordenadores portátiles, 946 00:40:34,710 --> 00:40:37,450 varios usuarios intentan todo actualizar la información a la vez. 947 00:40:37,450 --> 00:40:40,590 La información particularmente sensible como la información financiera, 948 00:40:40,590 --> 00:40:43,350 por el que con un comercio de acciones sitio web como usted va a ser la construcción, 949 00:40:43,350 --> 00:40:47,270 ¿y si desea comprobar la cantidad de dinero que tiene y entonces, si usted tiene suficiente, 950 00:40:47,270 --> 00:40:48,490 comprar algunas acciones? 951 00:40:48,490 --> 00:40:50,899 >> Pero lo que si alguien más que tiene una cuenta conjunta con usted 952 00:40:50,899 --> 00:40:52,690 es tratar de forma simultánea para comprar un poco de caldo? 953 00:40:52,690 --> 00:40:55,190 Por lo tanto, él o ella es el control de la saldo de la cuenta, los dos 954 00:40:55,190 --> 00:40:57,540 volver al mismo respuesta, no hay leche. 955 00:40:57,540 --> 00:41:00,580 O ambos a volver la respuesta, usted tiene $ 100 en la cuenta. 956 00:41:00,580 --> 00:41:04,680 Ambos tratan de tomar la decisión para comprar una acción de algunas acciones de la compañía. 957 00:41:04,680 --> 00:41:06,130 >> Y ahora, ¿qué sucede? 958 00:41:06,130 --> 00:41:07,140 Usted tiene dos acciones? 959 00:41:07,140 --> 00:41:08,420 No tiene acciones? 960 00:41:08,420 --> 00:41:10,320 Problemas como la que pueden surgir. 961 00:41:10,320 --> 00:41:11,755 Así que vas a encontrar eso. 962 00:41:11,755 --> 00:41:14,630 Ataques de inyección SQL, por suerte, son algo que nosotros le ayudaremos con, 963 00:41:14,630 --> 00:41:17,430 pero estos son atrociously comunes en estos días todavía. 964 00:41:17,430 --> 00:41:18,680 Por lo tanto, esto es sólo un ejemplo. 965 00:41:18,680 --> 00:41:21,290 Yo no hago afirmaciones de que Sistema de Harvard PIN es 966 00:41:21,290 --> 00:41:23,130 vulnerables a este ataque en particular. 967 00:41:23,130 --> 00:41:24,160 Hemos intentado. 968 00:41:24,160 --> 00:41:26,120 Pero, ya sabes que nosotros tener un campo como este. 969 00:41:26,120 --> 00:41:29,620 Y de Yale Net ID tiene un parecido pantalla mirando estos días. 970 00:41:29,620 --> 00:41:33,190 Y resulta, que tal vez el Sistema de PIN está implementado en PHP. 971 00:41:33,190 --> 00:41:37,050 >> Y si were-- es no-- que podría tener código que se parece a esto. 972 00:41:37,050 --> 00:41:38,210 Tienen dos variables. 973 00:41:38,210 --> 00:41:42,495 Dame el nombre de usuario y contraseña de la variable global post súper 974 00:41:42,495 --> 00:41:43,970 que hemos hablado antes. 975 00:41:43,970 --> 00:41:47,310 Quizás Harvard tiene una consulta como la estrella SELECT FROM usuarios 976 00:41:47,310 --> 00:41:50,005 donde nombre de usuario es igual que y la contraseña es igual que. 977 00:41:50,005 --> 00:41:51,880 Y noto que estoy solo enchufarlo en el uso de 978 00:41:51,880 --> 00:41:55,050 la notación de corchete de la otra día, lo que significa que sólo tiene que conectar un valor 979 00:41:55,050 --> 00:41:55,550 Aquí. 980 00:41:55,550 --> 00:41:57,449 No estoy usando la técnica de signo de interrogación. 981 00:41:57,449 --> 00:41:59,240 Yo no tengo ninguna segundos o terceras argumentos. 982 00:41:59,240 --> 00:42:02,350 Estoy literalmente la construcción de la cadena de mí mismo. 983 00:42:02,350 --> 00:42:04,930 >> El problema, sin embargo, es que si alguien le gusta un scroob, 984 00:42:04,930 --> 00:42:09,020 que es una referencia a una película, Abre una sesión con algo como esto, 985 00:42:09,020 --> 00:42:11,250 y me he quitado los puntos que suele encubrir 986 00:42:11,250 --> 00:42:14,370 contraseñas, lo que si es particularmente malicioso 987 00:42:14,370 --> 00:42:18,860 y su contraseña quizá es 12345, por la película llamada "Spaceballs" 988 00:42:18,860 --> 00:42:21,970 pero críticamente los tipos A comilla simple después de los cinco, 989 00:42:21,970 --> 00:42:24,790 luego, literalmente, la palabra o en el espacio, y luego cita, 990 00:42:24,790 --> 00:42:29,160 un solo fin de la cita es igual a la cita uno, Pero Tenga en cuenta que ha omitido qué? 991 00:42:29,160 --> 00:42:32,700 Ha omitido la cita a la derecha y ha omitido la cita de la izquierda. 992 00:42:32,700 --> 00:42:35,170 >> Porque si este atacante presunción de scroob 993 00:42:35,170 --> 00:42:38,160 es que las personas que escribieron este código PHP no fuera tan brillante, 994 00:42:38,160 --> 00:42:42,990 tal vez sólo tienen algún sola cita a la vuelta de la interpolación 995 00:42:42,990 --> 00:42:45,210 de una variable entre llaves? 996 00:42:45,210 --> 00:42:48,620 Y lo que tal vez, lo que pudo tipo de completar su pensamiento 997 00:42:48,620 --> 00:42:53,290 para ellos, pero de una manera que va para dejarle hackeó el sistema PIN. 998 00:42:53,290 --> 00:42:55,310 En otras palabras, supongamos que este es el código de 999 00:42:55,310 --> 00:42:57,140 y ahora nos conectamos lo scroob escrito. 1000 00:42:57,140 --> 00:42:58,770 Y es rojo, porque es malo. 1001 00:42:58,770 --> 00:43:01,310 >> Y el texto subyacente es lo que él escribe en, 1002 00:43:01,310 --> 00:43:05,510 scroob podría engañar servidor de Harvard en la construcción de una consulta SQL 1003 00:43:05,510 --> 00:43:07,440 cadena que se parece a esto. 1004 00:43:07,440 --> 00:43:11,760 Contraseña es igual a 12 345 o uno es igual a uno. 1005 00:43:11,760 --> 00:43:14,820 El resultado de lo cual, lógicamente, es que esta registrará scroob 1006 00:43:14,820 --> 00:43:18,360 en si su contraseña es 12345 o si uno es igual a 1007 00:43:18,360 --> 00:43:22,660 uno, que por supuesto es siempre cierto, lo que significa scroob siempre entra. 1008 00:43:22,660 --> 00:43:26,060 >> Y así, la manera de arreglar esto, como en muchos casos, 1009 00:43:26,060 --> 00:43:28,140 sería escribir más defensivo. 1010 00:43:28,140 --> 00:43:30,390 Para usar algo como nuestra función de consulta real, que 1011 00:43:30,390 --> 00:43:33,980 verá en PSet7, donde nos conectamos algo así como signos de interrogación aquí. 1012 00:43:33,980 --> 00:43:35,980 Y la belleza de la función de consulta que 1013 00:43:35,980 --> 00:43:40,010 te dan es que defiende contra éstos los llamados ataques de inyección SQL, donde 1014 00:43:40,010 --> 00:43:44,260 alguien está engañando a su código en inyectar su propio código SQL. 1015 00:43:44,260 --> 00:43:47,380 Porque lo que la función de consulta damos en realidad se va hacer, 1016 00:43:47,380 --> 00:43:51,270 si utiliza la sintaxis de signo de interrogación y un segundo y un tercer argumento aquí, 1017 00:43:51,270 --> 00:43:54,590 es ¿qué añadir a la de entrada que el usuario siempre? 1018 00:43:54,590 --> 00:43:56,060 Aquellos barra invertida cita. 1019 00:43:56,060 --> 00:43:58,590 >> Por lo tanto, escapa a cualquier potencialmente caracteres peligrosos. 1020 00:43:58,590 --> 00:44:01,000 Esto parece extraño ahora, pero no es vulnerable 1021 00:44:01,000 --> 00:44:03,260 porque no hace cambiar la lógica ya 1022 00:44:03,260 --> 00:44:06,470 porque toda esa contraseña es Ahora una sola cita que no lo es, 1023 00:44:06,470 --> 00:44:07,596 De hecho, la contraseña del scroob. 1024 00:44:07,596 --> 00:44:09,845 Así, ha habido algunos chistes sobre esto en los últimos años. 1025 00:44:09,845 --> 00:44:12,570 Por lo tanto, se trataba de una foto tomada de algún friki en un estacionamiento 1026 00:44:12,570 --> 00:44:16,620 por el que usted puede ser que sepa que algunas ciudades y los estados tratan de escanear su licencia 1027 00:44:16,620 --> 00:44:19,460 placa para facturarle a usted o al ticket si se va por fuera, como, 1028 00:44:19,460 --> 00:44:20,660 la cosa E-Z Pass. 1029 00:44:20,660 --> 00:44:24,490 Por lo tanto, esta persona presume que tal vez la gente que escribe el sistema E-Z Pass 1030 00:44:24,490 --> 00:44:28,240 no eran tan brillantes, y tal vez solo concatenados juntos una cadena, 1031 00:44:28,240 --> 00:44:32,190 para que él o ella no podía maliciosamente no sólo completar su pensamiento, 1032 00:44:32,190 --> 00:44:35,150 pero en realidad ejecutar un comando incorrecto, que todavía no hemos mencionado, 1033 00:44:35,150 --> 00:44:36,380 pero es fácil adivinar. 1034 00:44:36,380 --> 00:44:39,820 Que además de eliminar y insertar y actualizar y seleccionar, 1035 00:44:39,820 --> 00:44:43,370 también hay una palabra clave llamada gota, que borra literalmente todo 1036 00:44:43,370 --> 00:44:45,300 en la base de datos, la cual es particularmente malo. 1037 00:44:45,300 --> 00:44:48,760 >> Podemos hacer un zoom en este caso que es un poco difícil de ver. 1038 00:44:48,760 --> 00:44:52,300 Esto, ahora, es un famoso dibujo animado eso es maravillosamente inteligente ahora 1039 00:44:52,300 --> 00:44:53,145 y comprensible. 1040 00:44:53,145 --> 00:45:00,880 1041 00:45:00,880 --> 00:45:04,750 >> [Risas] 1042 00:45:04,750 --> 00:45:05,910 >> Sí, fresco. 1043 00:45:05,910 --> 00:45:06,800 Tipo de geeking cabo. 1044 00:45:06,800 --> 00:45:08,800 Así que estos son, pues, Ataques de inyección SQL. 1045 00:45:08,800 --> 00:45:13,050 Y son tan fáciles de evitar mediante el uso de el código correcto o las bibliotecas adecuadas. 1046 00:45:13,050 --> 00:45:15,947 Y verás en PSet7, eso es por eso te damos la función de consulta. 1047 00:45:15,947 --> 00:45:17,780 Así que, un par de teasers que pensamos que sería mejor 1048 00:45:17,780 --> 00:45:19,930 le dará aquí en nuestra restante minutos juntos. 1049 00:45:19,930 --> 00:45:24,030 Así que, como usted recuerda de semana cero, introducido estos dos bombillas que 1050 00:45:24,030 --> 00:45:26,610 son agradables, no sólo porque que son bastante y son coloridos, 1051 00:45:26,610 --> 00:45:29,450 pero porque apoyan algo llamado un API, una Solicitud 1052 00:45:29,450 --> 00:45:31,980 Interfaz de programación de Y en CS50 hasta el momento, no tenemos 1053 00:45:31,980 --> 00:45:34,440 sobre todo centrado en GET y POST, pero resulta 1054 00:45:34,440 --> 00:45:37,390 hay otros verbos HTTP como PUT. 1055 00:45:37,390 --> 00:45:39,430 >> Y de hecho, esto era una diapositiva de semana cero 1056 00:45:39,430 --> 00:45:44,930 con lo cual si se escribe código que envía a la PSet6 una petición HTTP que 1057 00:45:44,930 --> 00:45:49,647 se parece a esto con este trozo de texto en la parte inferior, que se llama JSON, 1058 00:45:49,647 --> 00:45:52,230 o JavaScript Object Notation que vamos a hablar de la próxima semana, 1059 00:45:52,230 --> 00:45:57,030 puede activar o desactivar o cambiar el color de las luces como esas. 1060 00:45:57,030 --> 00:46:00,480 Así que si CS50 también tiene, además de algunos de esas bombillas aquí en New Haven 1061 00:46:00,480 --> 00:46:02,480 si desea pedir prestado para los proyectos finales, 1062 00:46:02,480 --> 00:46:04,370 también algo de Microsoft Bandas, que son como 1063 00:46:04,370 --> 00:46:07,619 los relojes que usted usa alrededor de la muñeca que de igual forma tener una API para que 1064 00:46:07,619 --> 00:46:10,040 puede escribir su propio software para ellos. 1065 00:46:10,040 --> 00:46:12,490 >> Tenemos una cuenta con Código de iOS de Apple hasta 1066 00:46:12,490 --> 00:46:15,510 que si usted tiene un reloj de Apple o un iPhone o un iPad o un iPod, 1067 00:46:15,510 --> 00:46:17,707 usted puede escribir código que en realidad se ejecuta en ellos. 1068 00:46:17,707 --> 00:46:19,540 Tenemos un montón de Arduinos, que son 1069 00:46:19,540 --> 00:46:22,010 diminutos ordenadores sin casos, en esencia, 1070 00:46:22,010 --> 00:46:25,240 que se puede conectar a través de USB, normalmente a su propio Mac o PC, 1071 00:46:25,240 --> 00:46:28,810 escribir código que se ejecuta en estos física dispositivos que a menudo tienen sensores en ellos 1072 00:46:28,810 --> 00:46:30,790 para que pueda interactuar con el mundo real. 1073 00:46:30,790 --> 00:46:32,860 Tenemos un montón de dispositivos Leap Motion, 1074 00:46:32,860 --> 00:46:36,500 que son los dispositivos USB para Mac y PC, aquí y otra vez, en New Haven. 1075 00:46:36,500 --> 00:46:40,080 Y si lo conectas a tu Mac, en realidad se puede controlar el ordenador 1076 00:46:40,080 --> 00:46:42,550 escribiendo software que a través de rayos infrarrojos, 1077 00:46:42,550 --> 00:46:46,360 se da cuenta de dónde están sus manos humanas son, incluso sin tocar el teclado. 1078 00:46:46,360 --> 00:46:49,135 Pensamos que nos gustaría compartir una rápida vislumbrar en este, por ejemplo. 1079 00:46:49,135 --> 00:46:51,428 >> [REPRODUCCIÓN DE MÚSICA] 1080 00:46:51,428 --> 00:47:55,840 1081 00:47:55,840 --> 00:47:57,590 Así pues, tenemos un todo montón de estas cosas, 1082 00:47:57,590 --> 00:48:01,040 también, llamado Myo brazaletes que se pone sobre el antebrazo 1083 00:48:01,040 --> 00:48:04,595 y entonces usted puede controlar lo real mundo o el mundo virtual como este. 1084 00:48:04,595 --> 00:48:06,471 >> [REPRODUCCIÓN DE MÚSICA] 1085 00:48:06,471 --> 00:49:17,580 1086 00:49:17,580 --> 00:49:20,920 O, también tenemos algunos Google Cartón, que es, literalmente, como, 1087 00:49:20,920 --> 00:49:24,841 una caja de cartón se puede poner en su cara, pero diapositiva en su teléfono en él 1088 00:49:24,841 --> 00:49:27,590 de manera que se pone el vaso de su teléfono muy cerca de sus ojos. 1089 00:49:27,590 --> 00:49:30,190 Y Google es de cartón bastante barato en $ 10 o $ 20. 1090 00:49:30,190 --> 00:49:32,230 Y tiene pequeños lentes que un poco fuera de turno 1091 00:49:32,230 --> 00:49:35,900 la imagen en la pantalla para su humana ojos para darle una sensación de profundidad 1092 00:49:35,900 --> 00:49:39,550 por lo que en realidad tiene un 3D medio ambiente frente a ti. 1093 00:49:39,550 --> 00:49:42,927 También tenemos algunos Samsung Gear, que es la versión más cara de este, 1094 00:49:42,927 --> 00:49:46,010 pero que puede deslizarse de manera similar en una Teléfono Android y le dará la ilusión 1095 00:49:46,010 --> 00:49:48,309 de-- o dar la experiencia de la realidad virtual. 1096 00:49:48,309 --> 00:49:50,850 Y en nuestras dos minutos finales, pensamos que nos gustaría probar a hacer esto. 1097 00:49:50,850 --> 00:49:55,250 Si puedo proyectar lo Colton tiene aquí sólo para ir abriendo boca, 1098 00:49:55,250 --> 00:49:58,442 déjame ir por delante y tirar arriba en la pantalla grande aquí. 1099 00:49:58,442 --> 00:49:59,400 Déjame matar las luces. 1100 00:49:59,400 --> 00:50:02,290 Colton, ¿quieres ir a continuación y poner en tu celular por un momento 1101 00:50:02,290 --> 00:50:05,171 y vienen de más a la medio del escenario? 1102 00:50:05,171 --> 00:50:07,420 Y qué quieres project-- esto es lo que ve Colton. 1103 00:50:07,420 --> 00:50:10,560 >> Ahora, el Wi-Fi en aquí es no tan fuerte para este dispositivo 1104 00:50:10,560 --> 00:50:13,870 que este es súper atractiva, pero Colton es, literalmente, 1105 00:50:13,870 --> 00:50:15,710 en este lugar futurista mágico. 1106 00:50:15,710 --> 00:50:16,796 Él sólo ve una imagen. 1107 00:50:16,796 --> 00:50:19,920 Usted está viendo el ojo izquierdo y el derecho que su cerebro están cosiendo juntos 1108 00:50:19,920 --> 00:50:22,260 en una de tres dimensiones medio ambiente en su rostro. 1109 00:50:22,260 --> 00:50:24,319 Él sólo ha seleccionado una opción de menú aquí. 1110 00:50:24,319 --> 00:50:27,360 Y así, una vez más, él está usando este auricular con un teléfono Samsung en él que es 1111 00:50:27,360 --> 00:50:29,080 inalámbricamente proyectar a nuestros gastos. 1112 00:50:29,080 --> 00:50:30,349 Ahora usted está en Marte, me parece? 1113 00:50:30,349 --> 00:50:31,140 COLTON: Creo que sí. 1114 00:50:31,140 --> 00:50:32,181 No estoy seguro de [inaudible]. 1115 00:50:32,181 --> 00:50:34,250 [Risas] 1116 00:50:34,250 --> 00:50:36,374 >> DAVID MALAN: Resulta Marte tiene estos menús. 1117 00:50:36,374 --> 00:50:41,590 >> COLTON: [inaudible] algunos fresco lugares si quieren ir a-- 1118 00:50:41,590 --> 00:50:43,330 >> DAVID MALAN: ¿Hacia dónde queremos ir? 1119 00:50:43,330 --> 00:50:45,837 >> COLTON: [inaudible] 1120 00:50:45,837 --> 00:50:48,170 DAVID MALAN: Y vamos a ver donde nos Colton de tomar ahora. 1121 00:50:48,170 --> 00:50:48,961 COLTON: [inaudible] 1122 00:50:48,961 --> 00:50:52,830 1123 00:50:52,830 --> 00:50:56,380 >> DAVID MALAN: Por lo tanto, hay tantos diferentes lugares a los que pueden tomar usted mismo. 1124 00:50:56,380 --> 00:51:00,590 Hay FAPIs través del cual se puede escribir juegos o interacciones que 1125 00:51:00,590 --> 00:51:01,950 ejecutar, en última instancia, en el teléfono. 1126 00:51:01,950 --> 00:51:03,908 Por lo tanto, lo que realmente escribir una aplicación de teléfono móvil. 1127 00:51:03,908 --> 00:51:06,380 Pero gracias al software y las capacidades gráficas, 1128 00:51:06,380 --> 00:51:08,765 Colton ahora es en este pequeña casita. 1129 00:51:08,765 --> 00:51:10,515 Y en el riesgo de abrumar a nosotros mismos, 1130 00:51:10,515 --> 00:51:13,330 Colton y yo me quedo en torno a mientras que al final de la clase hoy 1131 00:51:13,330 --> 00:51:14,300 si te gustaría venir y jugar. 1132 00:51:14,300 --> 00:51:16,350 Y vamos a traerlos la semana que viene también. 1133 00:51:16,350 --> 00:51:18,420 Sin más preámbulos eso es todo por hoy. 1134 00:51:18,420 --> 00:51:21,990 Nos vemos la semana que viene. 1135 00:51:21,990 --> 00:51:24,140 >> [MÚSICA - Ragga Twins, "hombre malo"] 1136 00:51:24,140 --> 00:55:23,146