[Musikwiedergabe] DAVID MALAN: Okay, das ist CS50. Dies ist das Ende der achten Woche. Und heute, beginnen wir in einigen Stücken zu füllen wenn es um Gebäude geht Sachen auf dem Netz. Also, daran erinnern, dass wir am Montag, Wir verbringen viel mehr Zeit auf PHP, die diese Dynamik ist Programmiersprache, lässt uns ausgegeben, unter anderem Dinge, HTML und andere derartige Inhalte dass wir sehen wollen. Aber wir haben nicht wirklich an, wie sah wir werden keine Informationen zu speichern. In der Tat, fast jeder, dass die Super- interessante Webseiten, die Sie heute besuchen eine Art von Datenbank am hinteren Ende, nicht wahr? Facebook speichert sicherlich viele Daten über uns alle und Google Mail speichert alle Ihre E-Mails. Und so sind viele andere Websites nicht nur statische Inhalte, die information ist. Es ist in gewisser Weise tatsächlich dynamisch. Sie Input, aktualisiert es die Seiten für andere Menschen. Sie erhalten Nachrichten, die Sie senden Nachrichten und so weiter. Also heute, schauen wir näher an die Grundlagen eines Projektes dass Sie in die nächsten Tauchgang Woche CS50 Finanzen, das tatsächlich zu haben, die Sie bauen, etwas, das nicht in C, aber in PHP. Eine Website, die eine sieht wenig so etwas wie dieses dass ermöglicht den Kauf und Verkauf Aktien, die eigentlich gehen, um auf Echtzeit zu zeichnen Bestandsdaten aus Yahoo Finance. Und so letztendlich, hast du das haben Illusion, für sich selbst und für die Nutzer dass Sie tatsächlich den Kauf und Verkauf Aktien und immer nahezu in Echtzeit Updates, die Verwaltung ein Mappe, die sämtlich wird zu verlangen, mit, letztlich eine Datenbank der Benutzer. Also, in Ihren eigenen Worten, vor allem, wenn Sie nicht sind Super vertraut mit Computer Wissenschaft oder Datenbanken, was wissen Sie, eine Datenbank zu sein gerade jetzt, in nicht-technischen Begriffe? Was ist es? Wie würden Sie es beschreiben, an einen Mitbewohner oder einen Freund? ZIELGRUPPE: [unverständlich] Informationen [unverständlich] DAVID MALAN: Also, eine Liste der Informationen, oder ein store-- eine Liste von Informationen dass Sie möchten, zu speichern könnte über etwas, wie ein Benutzer. Und was machen Benutzer mit ihnen verbunden? Wenn Sie einen Benutzer auf Facebook oder sind Gmail, was sind die Merkmale dass wir alle Benutzer? Wie, was vielleicht einige der sein Spalten in der Tabelle, auf die wir zuletzt angespielt? Denn hier können Sie denken Sie an eine Datenbank wirklich so ein schickes Excel-Datei oder Google Tabellenkalkulation oder Apple Numbers Datei. Also, was denken Sie, wenn Sie eines Benutzer? Was haben sie? Was ist das? Publikum: Ein Name. DAVID MALAN: Ein Name. Also, wenn Namen wie, David Malan würde der Name eines Benutzers sein. Was braucht ein Benutzer? Publikum: Eine ID. DAVID MALAN: Eine ID. So, wie eine ID-Nummer, wie Ihr Harvard ID oder Ihr Yale Net-ID oder dergleichen. Was sonst könnte ein Benutzer? ZIELGRUPPE: Passwort. DAVID MALAN: Ein Passwort, vielleicht ein Adresse, vielleicht eine Telefonnummer, vielleicht eine E-Mail-Adresse ein. Also, es gibt Trauben von Feldern und diese könnte Art von außer Kontrolle geraten schnell, sobald Sie beginnen Realisierung, oh, wir speichern diese und lassen Sie speichern dieses und jenes. Aber wie können wir wirklich tun? Also noch einmal, das mentale Modell für heute haben wir tauchen Sie ein in tatsächlichen SQL, Strukturierte Abfragesprache, ist eine Datenbank, die so aussieht. Es ist nur, Zeilen und Spalten. Und Sie können sich vorstellen, Google Spreadsheets oder eine beliebige Anzahl anderer Programme. Aber was ist Schlüssel zu MySQL, die das ist, Datenbank-Software werden wir verwenden, der frei offen available-- Face Verwendungen es und jede Anzahl von anderen websites-- Datenbank speichert Dinge relational. Und eine relationale Datenbank, bedeutet nur eine, die buchstäblich speichert die Daten in Zeilen und Spalten. So einfach ist das. Also, auch so etwas wie Oracle, dass Sie könnten in der Regel gehört haben eine relationale Datenbank ist. Und unter der Haube ist es, speichert die Daten in Zeilen und Spalten. Und Oracle lädt Sie ein viel Geld, das zu tun, der Erwägung, dass MySQL Gebühren Sie haben nichts für die gleiche. Also, SQL wird uns geben, mindestens vier Operationen. Die Möglichkeit, Daten auszuwählen, wie Lese Daten, Einfügen, Löschen und Aktualisieren von Daten. Mit anderen Worten, das sind wirklich die vier Tastenbetätigungen die gehen, um es uns ermöglichen, zu ändern Sachen in diesen Zeilen und Spalten. Das Werkzeug, das wir heute vor allem verwendet werden um SQL zu lernen und mit ihm zu spielen erneut aufgerufen PHP MyAdmin. Es ist web-basiertes Tool. Insgesamt Zufall, dass es ist in PHP geschrieben. Aber es wird uns eine grafische geben Benutzerschnittstelle, so dass wir tatsächlich erstellen Sie diese Zeilen und Spalten und dann mit ihnen zu sprechen über Code. Also, lasst uns jetzt zu starten was ich denke, ist ehrlich gesagt Art des Spaßes Prozess Aufbau des Back-End von Websites, die Teile, die Benutzer nicht zu sehen, aber mit Sicherheit zu tun kümmern uns um, denn das ist eher die Daten gehen. So ähnlich wie C und etwas weniger wie PHP, SQL oder einer Datenbank, die unterstützt SQL, wenigstens diese Datentypen und Trauben von anderen. CHAR, VARCHAR, INT, BIGINT, DECIMAL und DATETIME. Und es gibt eine ganze Reihe von anderen Funktionen, aber wir tun dies, indem Art des tatsächlichen Beispiels. Ich werde in CS50 IDE gehen wo, im Voraus, ich habe eingeloggt und ich habe auch besucht eine URL für Dieses Tool namens PHP MyAdmin. Und in Problem stellte sieben, wir sagen, Sie genau, wie man mit dieser Schnittstelle erhalten auch. Auf der linken oberen Ecke, Bekanntmachung heißt es Vorträge zu halten. Und das bedeutet nur, dass im Voraus, habe ich eine leere Datenbank mit dem Namen Vortrag dass keine Tabellen in es noch nicht. Es gibt keine Zeilen und Spalten. Da die erste Sache, die wir tun werden wird beginnen, um eine Tabelle zu erstellen das wird unsere Nutzer zu speichern. Also, buchstäblich über hier nach rechts, ich bin gehen, um die Datenbank zu sagen, Ich möchte eine Tabelle namens Users. Also, das ist, wie die Datei, die ich will alle meine Daten gespeichert werden. Und wie viele Spalten? Nun, lassen Sie es einfach halten für den Moment. Ich will einfach nur wie ein Geschäft Benutzernamen und ein Name für einen Benutzer. Wir fangen klein. So möchte ich zwei Spalten insgesamt. Und ich werde weitermachen und klicken Sie auf Go. Und dann für diese Säulen, was ich wenn dieser Internetseite zu do-- cooperates-- alle Rechte, so werden wir, dass es erneut zu versuchen. Ich werde eine Tabelle namens erstellen Benutzer mit zwei Spalten, klicken Sie auf OK, OK. Jetzt müssen wir es wirklich schnell. Danke, sehr gut gemacht. Na gut, so was wollen wir diese Säulen genannt zu werden? Also, man werde genannt Benutzername werden. Also, alles was ich sehe hier-- und die Schnittstelle ehrlich gesagt wird ein wenig hässlich schließlich, sobald Sie beginnen Sie in all diesen Daten. Aber was schön ist, dass Art paradoxerweise Ich erstelle Säulen, aber das Werkzeug dummer legte sie in Reihen , so dass ich diese Spalten konfigurieren. Also, es gibt zwei Leer es unter Name. Und eines dieser Felder I wollen Benutzername genannt, und der andere Bereich Ich möchte Namen zu nennen. Und jetzt habe ich zu entscheiden, Datentypen für diese Dinge. So, während in Excel und Google Spreadsheets, Wenn Sie eine Spalte möchten, können Sie buchstäblich geben Sie einfach Namen oder Nickname, drücken Sie Enter. Vielleicht haben Sie es fett machen gerade für Klarheit, aber das ist es. Sie müssen nicht angeben Typen der Spalten. Jetzt in Google Spreadsheets oder Excel, die Sie könnte festlegen, wie die Daten wiedergegeben. Sie könnten in das Menü Format zu gehen, und Sie können angeben, zeigen diese, wie Dollarzeichen, zeigen dies wie eine Fließkommazahl. Also, es ist vom Grundprinzip her dass das, was wir tun wollen, aber das ist eigentlich los, um zu erzwingen die Daten zu einem bestimmten Typ sein. Nun, auch wenn ich vor einem Augenblick sagte, es gibt nur wenige Datentypen, es ist eigentlich ein ganze Menge, und sie sind in unterschiedlichem Ausmaß an Spezifität. Und so nebenbei, du können sogar ausgefallene Dinge wie Lagergeometrien innerhalb einer Datenbank. Sie können Dinge zu speichern wie GPS-Koordinaten und tatsächlich finden, mathematisch, Punkte, die in der Nähe von anderen sind. Aber wir sind zu gehen Bewahren Sie diese super einfach und gehen bis zu hier, alle die sogenannten String-Typen. So, hier ist eine Liste von ein ganze Reihe von Optionen. CHAR, VARCHAR, TINYTEXT, MEDIUM, LONG. Und es ist irgendwie überwältigend. Und leider etwas paradoxerweise zu C, a CHAR ist nicht wirklich ein CHAR. Wenn Sie in einer Datenbank angeben dass Ihre Datentyp CHAR, das bedeutet, dass ja, es ist ein CHAR, aber es ist ein oder mehrere Zeichen. Und Sie müssen angeben, wie viele Zeichen Sie wollen. Also, was ist ein typisches Länge für einen Benutzernamen vergessen? Gibt es eine Grenze in der Regel? ZIELGRUPPE: [unverständlich] DAVID MALAN: 16 vielleicht? So ähnlich. Wissen Sie, zurück in die Tag, benutzte es, um acht sein. Manchmal ist es 16, die manchmal es ist noch mehr als das. Und so bedeutet dies nicht, bedeuten, geben Sie mir eine CHAR. Das bedeutet, ich muss angeben, die Länge des Feldes, und jetzt habe ich könnte so etwas wie 16 sagen. Und es gibt einen Trade-off hier. So werden wir gleich sehen dass dies bedeutet, eins, jeden Benutzernamen hat zu 16 Zeichen lang sein. Aber warten Sie eine Minute, M-A-L-A-N. Wenn das ist, mein Benutzerkonto und ich bin nur mit fünf, was würden Sie vorschlagen, dass die Datenbank für die anderen 11 Zeichen zu tun, dass Ich habe Platz für reserviert? Was würden Sie tun? ZIELGRUPPE: [unverständlich] DAVID MALAN: Ja, nur sie alle null. Machen Sie sie Plätze. Aber wahrscheinlich null, so dass eine Viele Backslash Nullen. Also, auf der einen Seite haben wir nun dafür gesorgt, dass mein Benutzername können nicht mehr als 16 Zeichen sein. Und die Kehrseite davon ist, dass, wenn ich hatte einen wirklich langen Namen oder wollte eine wirklich lange Benutzername, wie einige von euch Jungs könnten in dieser Ausbildung oder bei Yale.edu, können Sie keine haben. Und so in der Tat, wenn Sie schon immer für eine Website registriert und man sich sagen, schrie erhalten Ihr Passwort ist zu lang oder Ihren Benutzernamen zu lang ist, ist es weil ein Programmierer, wenn Konfigurieren seine Datenbank, dass entschieden wird dieses Feld werden nicht mehr als diese Länge. Na gut, so was ist, wenn wir gehen zu nennen? Wie lange sollte ein Namen typische menschliche sein? Wie viele Zeichen, 16? Ich vermute, wir könnten jemand in diesem Raum finden wo durch seine oder ihre erste Plus letzten Name ist länger als 16 Zeichen. Also, was ist besser als das, 17? 18? 25? Größer? 30? ZIELGRUPPE: [unverständlich] DAVID MALAN: 5.000, oh mein Gott. Also, das ist wahrscheinlich eine anständige obere Grenze, sagen wir. Und hier sind wir Art haben ein Urteil Anruf. Wie, es gibt keine richtige Antwort hier. Unendlich ist nicht ganz möglich, weil wir irgendwann werde have-- wir sind gehen, um über genügend Arbeitsspeicher ausgeführt. Also müssen wir eine machen Urteil Anruf zu einem bestimmten Zeitpunkt. Sehr häufig wäre, zum Beispiel, um use-- und lassen Sie mich CHAR hier angeben wie before-- 255 war buchstäblich die Obergrenze für diese Datenbanksoftware vor Jahren. Und so viele Menschen würde einfach sagen, in Ordnung. 255 ist die Grenze. Lass uns einfach das Maximum zu verwenden. Und das ist ziemlich lächerlich. Wie, wenn Sie die Eingabe jemandes Name für 200 plus Zeichen, dass ein wenig lächerlich. Aber denken Sie daran, dass ASCII nicht das einzige System für die Charaktere. Und so, insbesondere in einem Viele asiatische Sprachen wo es Zeichen können wir nicht Ausdruck auf Tastaturen wie meine US Tastatur, einige Zeichen tatsächlich nehmen 16 Bit anstelle von acht Bits. Und so, das eigentlich ist gar nicht so unvernünftig dass wir mehr Raum, wenn wir zu passen wollen größeres Zeichen als die sehr US centric, die wir haben, neigten dazu, zu diskutieren. So benötigen wir einige obere Schranke. Ich weiß nicht, was das beste ist, aber 255 ist im Allgemeinen ein allgemeines. 25 fühlt gering. 16, 32 fühlen niedrig. Ich würde auf der Seite irren der etwas höher. Aber es gibt einen Trade-off, wie immer. Was ist die vielleicht offensichtlich Trade-off zu reservieren 255 Zeichen für jeden Namen in meiner Datenbank? ZIELGRUPPE: [unverständlich] DAVID MALAN: Was ist das? ZIELGRUPPE: [unverständlich] DAVID MALAN: Es ist ein Menge Speicher, oder? M-A-L-A-N. Ich habe gerade vergeudet 250 Zeichen, nur um meinen Namen zu speichern defensiv, nur für den Fall jemand in der Klasse hat einen wirklich langen Namen. Das scheint wie eine unangemessene Kompromiss. So stellt sich heraus, dass SQL, Diese Datenbanksprache, tatsächlich unterstützt etwas genannt VARCHAR oder CHAR Variable. Und das ist irgendwie schön, dass diese Damit können Sie nicht ein fester um anzugeben, Breite, sondern vielmehr eine variable Breite. Und insbesondere ein maximale Breite des Feldes. So bedeutet dies, dass ein Name nicht mehr als 250 Zeichen, aber es kann sicherlich weniger sein. Und die Datenbank wird, intelligent zu sein. Wenn Sie in der M-A-L-A-N setzen Sie, es nur geht, um fünf zu verwenden, vielleicht sechs Bytes für wie eine Hinter Null-Zeichen, und nicht zu verbringen eine zusätzliche 249 oder 250 Byte unnötig. Also, erscheint dies wie ich sollte haben mit dieser Geschichte begann. Aber es gibt immer ein Kompromiss. Also, auf der einen Seite, ein Benutzername Ich habe angegeben, hart an der 16 kodiert werden, und vielleicht war das nicht die richtige Entscheidung, vielleicht ist es ist, aber warum nicht verwenden VARCHARs für alles? Es besteht aus einem Grund. Warum nicht VARCHARs für jedes Feld deren Länge Sie nicht im Voraus wissen, wenn es scheint eine große Sache sein, oder? Verwenden Sie nur so viel Platz wie Sie brauchen, um diese Grenze? ZIELGRUPPE: langsamer. DAVID MALAN: Speller? ZIELGRUPPE: Macht es langsamer? DAVID MALAN: Oh, es ist langsamer. Gut, das ist fast immer die Antwort, ehrlich gesagt. Wie, was ist der Kompromiss? Es kostet entweder mehr Platz oder es kostet mehr Zeit. So, in diesem Fall könnte es langsamer. Warum? ZIELGRUPPE: [unverständlich] Bestimmung [unverständlich]. DAVID MALAN: Good. So könnten Sie von selbst wieder zu PSED5, spielen mit Ihrem Ansatz in das Wörterbuch, wenn Sie zu haben Speicher zuweisen dynamisch oder zu halten Aufwachsen einer Puffer, daß kann tatsächlich langsam sein. Wenn Sie malloc verlangen unter der Haube und vielleicht das ist, was MySQL tut, so sicher, dass der Fall sein könnte. Und wenn Sie so denken zurück zu PSet-- oder sogar zwei Wochen, als wir Dinge wie binäre Suche oder sogar lineare Suche, eines der schönen Dinge über jedes Wort, in einer Datenbank oder einem jedem Wort in einer Spalte wobei genau die gleiche Länge, auch wenn eine ganze Reihe von diesen Zeichen leer sind, ist, dass Sie verwenden können, Direktzugriff auf Ihre Daten, oder? Wenn Sie wissen, dass jedes Wort ist 16 Zeichen entfernt, Sie können die Zeigerarithmetik verwenden, so zu zu sprechen, und gehen Sie zu uns, 16, 32, 48, 64, und Sie nur springen sofort mit arithmetischen einem der Wörter in Ihrer Datenbank. Während, wenn es ist ein VARCHAR, was tun Sie stattdessen tun? [Telefon klingelt] Wenn es ein VARCHAR, die Sie nicht verwenden können, mit wahlfreiem Zugriff. Was Sie haben, zu suchen oder zu tun? Ja? ZIELGRUPPE: [unverständlich] DAVID MALAN: Schau durch die whole-- Spuren durch die ganze Liste Suche nach was, wahrscheinlich? Welche besonderen Wert? ZIELGRUPPE: [unverständlich] DAVID MALAN: Suchen für die Nullabschluss daß die Trennung von Wörtern abzugrenzen. Also noch einmal, ein Kompromiss, und es gibt keine richtige Antwort. Aber hier, insbesondere Wenn Ihre Benutzer kennen zu viele sein und Ihre Last auf den Servern, die Anzahl der Leute, die es hoch wird, Diese sind eigentlich nicht trivialen Entscheidungen. So können wir diese als diese zu verlassen, aber Lassen Sie uns nach unten scrollen nach rechts Hier. Nun, es gibt ein paar Säulen wo wir ein Urteil Anruf. Ist es sinnvoll, um einen Benutzer erlauben Name, Benutzername eines Benutzers oder ein Benutzer- Name, um null sein? Das heißt, nur leer. Fühlt sich ein wenig unsinnig, also bin ich nicht gehen, um die Kisten zu überprüfen. Aber es stellt sich heraus, in ein Datenbank, können Sie sagen, jemand kann wahlweise diesen Wert. Diese Spalte muss nicht tatsächlich dort zu sein. Jetzt gibt es diese Dropdown-Menü. Und beachten Sie, ich bin immer noch da die erste Zeile, so bin ich über Benutzernamen sprechen jetzt. Und es stellt sich heraus, dass eine Datenbank, im Gegensatz zu einer einfachen bloßen Tabellenkalkulation, bietet leistungsstarke Funktionen aufgerufen Indizes. Und ein Index ist eine Möglichkeit zu sagen, die Datenbank im Voraus, dass ich die menschliche bin klüger als Du. Ich weiß, welche Arten von Anfragen, wählen oder einfügen oder löschen oder zu aktualisieren, dass mein Code wird am Ende tut dieser Datenbank. Ich möchte eine Menge Daten zu lesen. Ich möchte eine Menge Daten einfügen. Ich möchte ständig löschen Sie eine Menge Daten. Wenn ich weiß, dass ich werde sein Zugriff auf ein Feld, wie Benutzername viel, Ich kann sagen, die präventiv Datenbank, ich weiß mehr als du, und ich möchte Dekret, Sie sollten Index dieses Feld. Wo die Indizierung ein Feld oder eine Spalte bedeutet, dass die Datenbank im Voraus sollten einige Ideen aus, wie zu leihen, Woche vier und fünf und sechs aus CS50 und tatsächlich aufzubauen so etwas wie eine binäre Suche Baum oder etwas in der Regel ein B-Baum genannt dass Sie lernen möchten in einer Klasse wie cs124 in Harvard, eine Algorithmen-Klasse, oder eine beliebige Anzahl von anderen Orten. Die Datenbank und die Smart- Menschen, die es implementiert wird herauszufinden, wie man speichern dass Tabelle mit Informationen im Speicher, so dass Suchanfragen und anderen Operationen sind super schnell. Sie müssen nicht, es zu tun. Sie müssen nicht zu implementieren lineare Suche oder binäre Suche oder Mergesort oder Auswahl Sortieren, irgendwelche von dem. Die Datenbank bedeutet es für Sie, wenn Sie sagen, es präventiv zu indizieren dieses Feld. Und auch Sie sehen können, gibt es einige andere Eigenschaften können wir sagen, dass die Datenbank zu erzwingen. Was könnte es bedeuten, wenn ich Einzigartige wählen aus diesem Menü, nur intuitiv? Ja? ZIELGRUPPE: [unverständlich] DAVID MALAN: Ja, das Benutzername muss eindeutig sein. Ist das eine gute Sache oder eine schlechte Sache für eine Datenbank, für eine Website mit Benutzer? Benutzernamen sollten eindeutig sein? Ja, wahrscheinlich. Wenn es das ist, was die Feld verwenden wir melden Sie sich an, Sie nicht wirklich um Menschen mit möchten das gleiche Gefühl oder die gleiche Benutzernamen ein. So können wir die haben, Datenbank zu erzwingen, dass so dass jetzt in meinem PHP-Code oder jeder Sprache, Ich habe nicht zu, zum Beispiel, zu überprüfen unbedingt erledigt diese Benutzernamen vorhanden sein, bevor ich jemand zu registrieren? Die Datenbank wird nicht zwei Personen mit dem Namen lassen David oder Malans registrieren in diesem Fall. Und nebenbei, obwohl dies Menü können Sie nur eine auswählen, ein eindeutiger Index ist eine, die ist für superschnelle Performance indexiert, aber es erzwingt auch Einzigartigkeit. Und wir werden zurückkommen, was die beiden anderen bedeuten, in nur einem Augenblick. Inzwischen, wenn ich gehe zu meine zweite Reihe, die ist der Name des Benutzers, muss ich angeben, dass der Name sollte eindeutig sein? Nein, denn man konnte sicher have-- es gibt keine zwei David Malans in diesem Raum, wahrscheinlich. Aber wenn wir einen anderen Namen wählen, wir könnten sicherlich Kollisionen. Denken Sie zurück an Hash-Tabellen und dergleichen. Also, wir wollen sicher nicht um das Namensfeld einzigartig. Also, wir sind gerade dabei, zu verlassen dass, Bindestrich, Bindestrich, Bindestrich, nichts. Und ich werde zu verlassen alles andere allein. Tatsächlich sind die meisten dieser Felder wir müssen nicht zu kümmern. Und wenn ich bereit bin, um diese zu retten, Wenn das Internet zusammenarbeitet, Ich klicken Sie auf Speichern, und sehr, sehr, sehr langsam wird die Datenbank gespeichert zu werden. Und jetzt bin ich wieder auf diese Schnittstelle, die zugegebenermaßen ist überwältigend auf den ersten Blick. Aber alles, was ich zu tun ist, klicken Sie auf den Wort Benutzer oben links. Ich werde hier zu gehen, klicken Sie auf Benutzer, und standardmäßig, es hat einige SQL ausgeführt wird, aber mehr dazu in einem Moment. Hier ist nur eine Zusammenfassung dessen, was ich getan habe. Und sich keine Sorgen machen, dass Sie zu sehen Die Erwähnung von lateinischen und schwedischen hier. Das sind nur die Standard- Einstellungen, weil MySQL ursprünglich, oder PHP MyAdmin, einer der beiden passiert von einigen schwedischen Volkes geschrieben werden. Aber es ist unerheblich, in unserem Fall hier. Na gut, also warum ist das alles interessant? Es stellt sich heraus, kann ich Daten einfügen in eine Datenbank durch das Schreiben von Code. Und ich voran gehen und in meine Datei hier, ich bin werde weitermachen und so tun, wie dies wird zu dieser Datenbank, die verdrahtet ist es zur Zeit nicht, aber es wird sein, wenn wir bekommen, um Problem stellte sieben. Und ich werde weitermachen und führen Sie eine Funktion namens Abfrage, welche wir Ihnen bei der Problem geben set sieben Distributionscode, dass nimmt mindestens ein Argument, Das ist nur eine Zeichenfolge. Eine Zeichenfolge von SQL-Code. Also, um zu lernen, wie du bist Schreiben Structured Query Language. Wenn ich eine neue Zeile in meinem einfügen Datenbank, weil jemand eingereicht eine Form, meinen Code, würde ich buchstäblich Schreiben INSERT INTO Benutzer die folgende Felder: Benutzername, Komma, Namen, die Werte, und jetzt muss ich einfügen so etwas wie Malan und Zitat, unquote 'David Malan.' Und jetzt auch für diejenigen, die nicht mit SQL, warum bin ich mit einfachen Anführungszeichen Innere dieser grünen Schnur? Was könnte der Grund hier zu sein? Beachten Sie, Ich bin Vermischung zwei Sprachen. Abfrage ist eine PHP-Funktion, aber es dauert ein Argument. Und das Argument, muss sich sein in einer anderen Sprache geschrieben genannt SQL, Structured Query Language. Also, alles, was ich habe gerade hier hervorgehoben ist dies Sprache namens SQL. Also, was ist mit den einfachen Anführungszeichen, nur als eine schnelle Plausibilitätsprüfung? Gehen Sie geradeaus. Sie sind Zeichenfolgen. Also, zitat, unquote Malan und Zitat, unquote David Malan sind Strings. Und nur daran denke intuitiv jetzt, zu wissen, was Sie über C und PHP wissen, warum habe ich nicht tun, was ich in der Regel gebrauchte doppelte Anführungszeichen für Strings? Warum habe ich nicht das tun wollen? Ja? ZIELGRUPPE: [unverständlich] DAVID MALAN: Genau. Denn ich bin schon mit Anführungszeichen auf dem Weg außerhalb des Arguments mit der PHP-Funktion, Ich würde nur verwirren den Interpreter. Es wird nicht einfach, passt das zusammen? Passt das zusammen? Passt das zusammen? So wechseln I statt. Oder ich könnte etwas tun, umgekehrten Schrägstrich oder Backslash Zitat Zitat. Ehrlich gesagt, beginnt, nur um werden sehr lesbar und hässlich. Aber das zu erreichen wäre das gleiche Ergebnis auch. Also, wenn ich dies ausführen Abfrage jetzt, mal sehen, was passiert. Ich werde ab und zu recht voran gehen als führen Sie den PHP-Code, der ist, wo Sie spielen in Problem stellte sieben, Ich werde stattdessen PHP MyAdmin gehen. Und ich manuell gehen auf der Registerkarte SQL zu gehen, und lassen Sie mich Zoom auf die Schnittstelle. Und ich werde fügen das, was ich gerade eingegeben haben. Und die Farbcodierung hat verändert ein wenig jetzt, nur weil die Programmformate Dinge ein wenig anders. Aber feststellen, dass alles, was ich getan habe, Ich habe gesagt, ist, legen Sie in den Benutzer. Ich habe festgelegt, so wird in einem Komma getrennt in Klammern Liste die beiden Felder, die möchte ich einfügen, und dann habe ich wörtlich gesagt Werte gefolgt von einer weiteren paren, und dann werden die zwei Werte Ich möchte Plug-in, und jetzt für eine gute Maßnahme, Ich werde ein Semikolon am Ende gesetzt. So ist dies nicht C. Dies ist nicht PHP. Dies ist nun SQL, und ich bin es einfügen in diese Web-basierte Schnittstelle, die ist gerade dabei, mich lassen, sobald ich auf Go, Diese Abfrage ausführen in der Datenbank Innere CS50 IDE ausgeführt. Also das ist gut. Beachten Sie, dass der einen Reihe eingesetzt ist, ging super schnell, 0,0054 Sekunden, um die Daten einzufügen. Also, das klingt ziemlich gesund. Es formatiert meine Abfrage für mich hier, nur um es zu sehen, in Art farbcodierte Version. Aber jetzt, wenn ich klicken Durchsuchen, bemerken, dass selbst aber es gibt eine Menge von Unordnung auf der Bildschirm hat meinem Tisch nun zwei Reihen. Also, lassen Sie mich gehen Sie vor und das andere tun. Stattdessen lassen Sie mich gehen Sie zur Registerkarte SQL erneut. Und dieses Mal werde ich etwas einfügen Rob und sein Name wird Rob Bowden betragen. Bowden. Lassen Sie uns auf Speichern. Hoppla, vielmehr gehen. Klicken Sie auf Durchsuchen wieder, und Jetzt merke ich zwei Reihen zu haben. Also, das ist nur eine Möglichkeit, komplexere Weg der Öffnung Google Spreadsheets und nur die Eingabe eine Zeile in eine Spalte. Aber was ist Schlüssel ist, dass wir haben jetzt die Syntax , mit denen, um Code zu schreiben, so dass Letztendlich könnten wir tatsächlich Tun Sie etwas, und dies. Daran erinnern, dass PHP unterstützt Super globalen Variablen. Was ist im Inneren der Dollar- unterzeichnen Strich in PHP GET? Wir haben einen Blick auf eines oder zwei einfache Beispiele. Und in PSet6, erinnern Sie hallo haben dot PHP, die diese Variable verwendet. Was geht da drin? Oder was ist es? Ein wenig lauter. ZIELGRUPPE: [unverständlich] DAVID MALAN: Es ist ein Schnee Samen des Array, das ist nur eine andere Art zu sagen ein Array, das Schlüsselwertpaare hat. Und die Tasten nicht numerisch sind. Sie sind Wörter oder Zeichenfolgen. Und insbesondere, was sind die Schlüssel-Wert-Paare? Woher kommen Sie? Es tut uns leid? ZIELGRUPPE: [unverständlich] DAVID MALAN: Nein? Wo geben die Schlüssel Wert-Paare her? Sage es noch einmal? Schon wieder? Bin ich der einzige, der mündlichen Verhandlung etwas? [Gelächter] Das ist richtig, ja? ZIELGRUPPE: [unverständlich] DAVID MALAN: Ja, sie stammen aus der Query-String. Also, wenn Sie in der Zeit, zurückspulen wenn wir mit Google gespielt haben und wir haben Google.com in Schrägstrich weg Suchfragezeichen q gleich Katzen, wenn ich drücken Sie die Eingabetaste, und wenn Google wurden in PHP implementiert, PHP-Code, dass Google hat geschrieben würde den Zugang zu Dollar-Zeichen haben streichen GET innerhalb dessen ist ein Schlüssel namens Q und einem Wert genannt Katzen, dass sie dann verwenden können, verwendet, um eine tatsächliche Suche zu tun. Also, in der Tat, was ich zu gehen jetzt tun ist, gehen Sie zurück zu meinem PHP-Code dass Sie wieder zu sehen mehr in PSet7. Und statt der Steck in hart codierte Werte, nicht wie ein scheinen sehr dynamische Website, Ich werde Ihnen einen Teaser zu geben was Ihre eigentliche Code tun würde. Sie würden in zwei gesetzt Fragezeichen wie diese. Ich weiß nicht, was der Benutzername. Ich weiß nicht, was die Name sein wird, aber ich weiß, ich kann bekommen sie dynamisch. Also, wenn der Code wir jetzt schreiben, ist der Code auf den Google-Servern läuft, oder, wenn dies hallo dot PHP, das mit PSet6 kommt, Ich werde in geben die Abfrage-Funktion wie printf, zwei weitere Argumente. GET, zitat, unquote Benutzername, und GET, zitat, unquote Namen. Und nun, bemerken, was die allgemeine Struktur ist hier. Ich habe auf der linken Seite kam Seite des Anrufs, diese Funktion aufgerufen Abfrage in PHP. Ich habe immer noch als eine erste Argument, nur eine Textzeichenfolge. Aber das Textzeichenfolge ist in einer Sprache namens SQL geschrieben. Und ehrlich gesagt, ist es nicht eine große Sprache. Wir sind nur gehen, um darüber zu sprechen formal heute, wirklich. Und dann in Problem eingestellt sieben, gibt es relativ paar Features, die wir sind gehen zu nutzen. Die Fragezeichen, obwohl, meine stecken ein Wert hier und Stecker in einen anderen Wert Hier. Und beachtet, habe ich weggelassen welche aus der ganzen quote-- verdammt es-- um das Angebot markiert diese Zeit. Ich habe das Zitat weggelassen Markierungen rund um die Fragezeichen, sorry, diese Zeit herum. Also, was ist schön zu dieser Fragezeichen-Funktion, PHP neigt dazu, zu unterstützen, Ruby und Python und andere Sprachen, Dies bedeutet nur, Plug in einigen schätzen hier und wissen Sie was? Sie herausfinden, ob zu bedienen Apostrophe oder Anführungszeichen. Mich mit denen sich nicht die Mühe intellektuell uninteressante Details. Aber stellen Sie sicher, dass es korrekt ist so dass mein Code ist letztlich operative und sicher, die eine Bedeutung haben, bevor lang. Nun, wie viele Argumente insgesamt, nur um klar sein, ist die Abfrage-Funktion Nahme? Jeder will mehr als zwei zu wählen? Drei? Klar, warum? Warum drei? ZIELGRUPPE: [unverständlich] DAVID MALAN: Genau. Der erste Teil ist die Zeichenfolge. Das zweite Argument ist Dollar-Zeichen streichen GET Halterung Benutzernamen ein. Und das dritte Argument ist die elbe, aber nur der Name. Also mit anderen Worten: Nachdem wenn ich ein Web-Formular dass Textfelder hatten, eine für Benutzernamen des Benutzers, einer für seinen oder ihren Namen, nur wie Sie in einer Website zu sehen würde wenn Sie für registrieren einige Website, könnte dies den Code auf der Rückseite Ende sein, dass tatsächlich die Einfügung jetzt in die Datenbank. Jetzt hingegen, lassen Sie uns schnell vorwärts. Angenommen, ein Benutzer ist jetzt Anmeldung und Sie möchten PHP-Code, der überprüft, ob zu schreiben die Person, die gerade eingeloggt ist ist eigentlich ein Benutzer, können Sie benutzen ziemlich einfache Syntax. Man kann sagen, SELECT, sagen wir, Stern, Sterne, wo alles. Ich weiß nicht, was ich möchten, so gib mir alle Spalten der Tabelle genannt, wo Nutzer, und das ist schön. Select unterstützt, was rief ein Prädikat, das ist, wie eine Art und Weise zu qualifizieren, was Sie wollen. Wo Benutzernamen entspricht zitat, unquote Malan. So auch hier, ich habe eingebettet innerhalb des Arguments zu einer PHP-Funktion, einer Reihe von SQL-Code. Und das SQL-Code diese Zeit ist buchstäblich gehen zur Angebotsanfrage zu suchen, unquote Malan. Nun, das ist nicht alles, was nützlich, so werde ich, dass überspringen und ich werde weggeräumt dieser Tipp von Brady, und gehen und Plug-in statt ein Fragezeichen hier. Also, nur klar zu sein, was sollte mein zweites Argument wenn jemand hat gerade in und ich eingeloggt sein prüfen wollen, ob er oder sie ist eigentlich ein Benutzer? ZIELGRUPPE: [unverständlich] DAVID MALAN: Ja. Ich habe gehört, Dollarzeichen Unterstrich Angebot einholen, unquote Benutzernamen ein. Und das zu mir zurückkehren sollte eine der Zeilen in meiner Datenbank dass über einen Benutzernamen von Malan. Jetzt hoffentlich werde ich wieder zu bekommen Null, wenn Malans hier noch nie, oder eine, wenn er hat. Ich sollte nicht zurückbekommen zwei oder drei oder vier. Warum? ZIELGRUPPE: [unverständlich] DAVID MALAN: Ich sagte, einzigartige, nicht wahr? Einfachen Grund. Weil ich sagte, es ist zu bekommen sein einzigartiges, nur logisch, Sie können nur Null oder Eins Malans in diesem speziellen Datenbanktabelle. Jetzt nebenbei, nur damit Sie gesehen haben es, auch wenn ich immer mit GET und obwohl nur benutzt PSet6 Erhalten, können Sie sicherlich POST. Und daran erinnern, dass Beitrag ist ein weiterer Verfahren zur Übermittlung von Informationen aus einem Formular, aber es nicht zu sehen sind in der URL. Es ist ein wenig sicherer sicherlich für Dinge wie Benutzernamen und Passwörter, die PSet7 wird, in der Tat, zu beteiligen. Also, lassen Sie uns dies tun in PHP MyAdmin und sehen was passiert. Ich werde auf MySQL Registerkarte zu gehen. Und beachten Sie, dass Sie den Standardwert für die PHP MyAdmin, nur um zu versuchen, hilfreich zu sein, ist die Sterne von den Benutzern, wo man auswählen. Nun, das ist eine immer wahr, so dies hat den dummen effektive der einfach alles auszuwählen. Aber ich werde, ein wenig mehr pedantisch und manuell tippen SELECT Sterne FROM users. Jetzt Rein technisch können Sie zitieren Sie den Namen der Tabellen. Es ist selten, dass Sie, aber beachten, das sind nicht Ihre normale Anführungszeichen auf der US-Tastatur. Dies ist die so genannte Backtick, die ist in der Regel auf der linken oberen Ecke der Tastatur. Aber es ist selten, dass Sie tatsächlich benötigen, um mit, dass die Mühe, also werde ich sie trotzdem einfach weglassen. So, jetzt lassen Sie mich gehen Sie vor und schlug zu gehen. Und wie viele Zeilen sollte ich zurück, wenn ich Sterne-Nutzer wählen? ZIELGRUPPE: [unverständlich] DAVID MALAN: Die Anzahl der Zeilen, sicher. Aber wie viele in diesem konkrete Geschichte gerade jetzt? Zwei, weil es mich und es gab Rob. Also, wenn ich klicken Sie auf Go, sehe ich, dass visuell Ich habe wieder bekommen, ja, zwei Reihen. Es gibt eine Menge von Unordnung auf die Bildschirm, aber ich sehe nur zwei Reihen. Im Gegensatz dazu, wenn ich dies wieder tun und zu tun SELECT-Star aus Benutzern, wobei Benutzername gleich Zitat, Zitat Ende Malan, jetzt, wenn ich klicken Sie auf Go, Ich werde nur, um wieder eine Zeile. Und schließlich, wenn ich es tue so etwas wie dies: Angenommen dass ich kümmere mich nicht um bekommen alles, welcher Art von bedeutungs jetzt, denn es gibt nur zwei Spalten. Es ist nicht wie ich die Auswahl eine riesige Menge von Daten. Angenommen, ich voran gehen und Sie SELECT name FROM Benutzer, denen Benutzernamen entspricht Malan, Das Schöne an SQL ehrlich gesagt, ist, dass es wirklich nur tut, was Sie sagen, es zu tun. Es ist ziemlich prägnant, aber sie buchstäblich nur sagen, was Sie tun möchten. Wählen Sie die Namen von Benutzern, wo der Benutzername gleich Malan. Und es ist wirklich so eindeutig. So, jetzt, wenn ich getroffen Go, wie viele Zeilen werde ich zurück? One, weil es einfach Malan, hoffentlich. Oder null, wenn er nicht gibt, aber eine maximal. Und wie viele Spalten bekomme ich zurück? Wie viele Spalten? Dieses Mal Ich werde einfach , eins zu bekommen, weil ich nicht Wählen Sie Sterne, was alles. Jetzt bin ich der Auswahl nur Namen, so dass ich gerade wieder eine Spalte und eine Zeile. Und es sieht irgendwie angemessen lächerlich, gerade auf der Suche Super kleine wie diese. Also, was wirklich passiert? Wenn Sie eine SQL ausführen Abfrage mit wählen, was Sie bekommen aus der Datenbank zurück ist wie eine temporäre Tabelle mit Zeilen und Spalten, vielleicht, aber das alles unterlassen, dass war nicht wirklich von Ihnen gewählten. Also, es ist wie wenn jemand hatte eine große Tabellenkalkulation aller Schüler für manche registriert Studentengruppe, und Sie sagen, mir alle von der Neuling, der habe für unsere Studentengruppe registriert, was Ihr Kollege in der Studentengruppe tun könnte wird sie nur die Hand könnte Sie die ganze Tabelle. Das ist, als würde man sagen wählen Stern. Und es ist ein wenig ärgerlich, wenn Sie wollte nur den Neuling. Und so, wenn Sie stattdessen sagte, Wählen Star aus Datenbanktabelle wo Jahr entspricht zitat, unquote Freshman, es ist, als ob dein Freund in der Studentengruppe buchstäblich hervorgehoben und kopiert nur die Freshman-Reihen, klebte sie in ein neues Google Tabellenkalkulation oder eine Excel-Datei, und übergeben Sie zurück die resultierende einzige Datei. Das ist alles, das geht auf konzeptionell hier. Also am Ende, was wir tun können einige ziemlich ausgefallene Sachen indem Dinge wie Benutzernamen und Passwörter und ähnliches. Aber es stellt sich heraus, wir tun sollten etwas anders als diese. Das ist es nicht klug, um nur speichern Sie einen Benutzernamen und ein Passwort. Jemand früher, ich glaube, hier unten, schlug eine ID. Nun könnte eine ID wie ein sein Harvard oder Yale ID Net-ID, aber es noch einfacher sein könnte in unserer Datenbank Fall. Und in der Tat die häufigste Fall ist es, eine andere Spalte aufweisen. Und ich werde gehen voran und meine Tabelle bearbeiten. Und wenn Sie spielen, um mit Diese Schnittstelle für PSet7, Sie sehen, dass Sie überprüfen können, werden auf diese Schaltfläche, und fügen Sie hier ein Feld am Anfang der Tabelle. Und jetzt, wenn ich klicken Sie auf Go, es geht mir eine jener Formen zu geben, aus früheren. Ich werde ein Feld namens ID hinzuzufügen. Und ich werde es ein numerischer Typ zu machen. Ich habe eine ganze Reihe von Werten für numerische Werte. Ich werde einfach ein INT wählen und nicht um die unterschiedlichen Größen sorgen. Ich habe nicht um anzugeben, eine Länge oder ein Wert, denn es geht um sein 32 Bit, egal was. Attribute, haben wir nicht sehen, bevor. Alle Interesse an einer dieser Punkte Menüoptionen dieses Mal? Für eine INT? Was haben Sie vor? Nein? Führen Sie einen von ihnen sinnvoll? Ja. Ja, ohne Vorzeichen, nicht wahr? Im Allgemeinen, wenn wir gehen zu geben, jeder eine eindeutige Nummer, die ist, wo diese Geschichte werde ich nur wirklich wollen, eine Person, die Anzahl, wie Null haben und eins und zwei und drei und vier. Ich brauche nicht zu umgehen mit negativen Zahlen. Es scheint, wie sie nicht zu komplex. Ich möchte vier Milliarden mögliche Werte, nicht vier Milliarden mögliche Werte, so dass ich nur verdoppelte sich die Kapazität von meiner INT. Nebenbei, wenn Sie beziehen möchten dies um so etwas wie Facebook, zurück in eine Art mein Tag, wenn Facebook zum ersten Mal aus, Ich glaube, was sie waren, Verwendung in ihrer MySQL-Datenbank So speichern Sie eine Benutzer- Kennung, war nur ein INT. Aber natürlich gibt es eine Menge von realen Menschen in der Welt. Es gibt eine Menge von gefälschten Facebook Konten in der Welt. Und so schließlich, Facebook übergelaufen die Größe eines INT, einen vier Milliarden Wert. Das ist, warum, wenn man sich rund und es gibt Websites das kann Ihnen sagen, was Ihre eindeutige ID ist. Und wenn Sie noch nie wählte einen Benutzernamen in Facebook, sehen Sie die eindeutige ID. Ich denke es ist Profil dot PHP Fragezeichen-ID gleich etwas. Das ist jetzt so etwas wie eine große INT, oder eine lange, lange, wenn man so will, der mit einem 64-Bit-Wert ist, oder etwas Vergleichbares. Also, auch in der realen Welt diese tun Fragen letztlich manchmal egal. Und es stellt sich heraus hier, wenn ich geben alle meine Benutzer eine eindeutige ID, Ich möchte Super explizit zu sein und minimal machen dieses Gebiet einzigartig. Aber es stellt sich heraus, es gibt eine Stück der Nomenklatur auch heute das ist ein Primärschlüssel. Wenn Sie Entwerfen einer Datenbank Tisch und Sie im Voraus wissen, daß eine der Spalten in der Tabelle sollte und eindeutig zu identifizieren Reihen in der Tabelle, zu wollen, dass Sie geben Sie ihn und sagen Sie die Datenbank, dies ist mein Primärschlüssel. Es könnte Duplikate in anderen Bereichen, aber ich sage die Datenbank, dass diese ist meine primäre, meine wichtigste Feld, das ist garantiert eindeutig sein. Nun, dies scheint überflüssig. Ich bin jetzt vorschlägt, dass wir hinzufügen, indem Sie auf Speichern Sie hier, ein Feld called-- und ich werde gehen Sie vor und klicken Sie auf AI, wir kommen wieder zu kommen , dass in einem Moment, speichern. Ich bin jetzt, dass vorzuschlagen meinem Tisch wie folgt aussehen. Ich habe eine INT Feld namens ID, ein CHAR-Feld namens Benutzername, ein VARCHAR Feld namens Namen, aber ID, wenn es primäre und somit ein Unikat, warum habe ich nur Abfälle Zeit die Einführung, was effektiv eine zweite einzigartige Feld namens ID, die eine INT ist? Benutzername, Rückruf, war bereits einzigartige, sagten wir. Also nur logisch, brauchen Sie nicht Jeder Datenbankerfahrung zur Vernunft durch diese, warum vielleicht habe ich eingeführt INT als meine eindeutige Kennung, wie gut? Was this-- wieder sagen? ZIELGRUPPE: [unverständlich] DAVID MALAN: Random Zugang ist einfacher, warum? ZIELGRUPPE: [unverständlich] DAVID MALAN: Ja, es ist nur Zugriff auf Zahlen. Also, wenn Sie denken, dies wirklich ist eine Tabelle, wie eine Matrix, jetzt habe ich eindeutige Kennungen dass ich herumspringen. Und besser als die immer noch ist, dass Wie groß ist ein INT werde wieder sein? 32 Bits oder vier Bytes. Wie groß ist mein Benutzername sein wird? Maximal? 16 Byte. Also, wenn Sie wirklich die Sorge um die Leistung des Codes, denken Sie zurück an PSet5, würden Sie es vorziehen für eine Vier-Byte-Wert oder einem 16 suchen Byte-Wert, oder? Es ist wirklich so einfach ist das. Sie müssen vier Mal so viel Arbeit zu tun für Benutzernamen, weil diejenigen suchen sind 16 Bytes. Also, Sie haben buchstäblich vergleichen alle 16 Bytes sein sicher, ja, das ist Benutzernamen ich will. Während für einen INT, können Sie tun Sie es mit nur vier Bytes. Und nebenbei für diejenigen, Interesse an Computer-Hardware, es stellt sich heraus, können Sie etwas wie passen INT oder ein 32-Bit-Wert in etwas genannt ein Register in einem Computer CPU, was bedeutet, es ist super, super schnell, selbst bei der niedrigsten Niveau der Hardware des Computers. Also, es gibt nur Vorteile rundum. Also, was bedeutet das? In der Tat, wenn Sie entwerfen ein Datenbanktabelle, die fast alle die Zeit willst du nicht nur die Daten, die Sie interessieren, sondern auch so etwas wie eine eindeutige Kennung weil dies zu gehen lassen Sie uns andere Dinge. Und lassen Sie uns stolpern ein Problem hier. Nehmen wir an, dass Benutzer nicht nur Benutzernamen und Namen, aber sie Dinge wie Städte haben auch und Zustände und Postleitzahlen, zumindest Hier in den USA. Also, ich werde weitermachen und nur schnell sagen, Geben Sie mir drei weitere Säulen am Ende der Tabelle. Und das wird der Stadt zu sein, das wird Staat, und das wird Zip sein. Jetzt Stadt, welche Datentypen sollte dies vielleicht? VARCHAR? Ich weiß nicht, was die längsten Namen der Stadt ist. Irgendwo in Amerika, da ist wahrscheinlich einige lächerlich langen Wort, so lassen Sie uns nur mit 255 zu gehen, etwas historisch oder willkürlich. State, was Sie wollen, zu tun? Urteil nennen, nicht wahr? Was ist vielleicht die effizienteste? Wie viele Zeichen? Vielleicht nur zwei, wenn wir können weg mit nur tun, dergleichen, MA Massachusetts und so weiter. Also, ich werde eine CHAR Wert von zwei zu gehen. Postleitzahl ist interessant. Wir sind hier in 02138, so dass schlägt vor, wir sollten, was zu verwenden? Es ist ein INT, nicht wahr? INT, INT, kurz? Short funktionieren würde. Nein? CHAR oder fünf, aber ich möchte einen INT. Warum schieben Sie zurück auf eine INT? Reden mich von diesem. Was ist dumm zu einem INT, meine Idee? Ja. ZIELGRUPPE: mehr Speicherkapazität. DAVID MALAN: mehr Speicherkapazität. Vier Bytes, aber du bist schlägt eine PLZ als fünf Bytes oder jemand war als CHAR, die wie eh fühlt, das ist nicht wirklich der Fall. Nun, Spaß Geschichte. Vor Jahren, als ich früher benutzen Microsoft Outlook für meine E-Mail, Ich schließlich wollte, um Google Mail wechseln. Und so exportierte ich alle meine Kontakte aus Outlook als CSV-Datei. Comma Separated Values, das nur bedeutete, dass ich hatte alle meine Freunde Namen und letzten Namen und Telefonnummern und Postleitzahlen und all das. Und dann machte ich die Fehler, indem er sie in Excel, die eine ist Tabellenkalkulationsprogramm, versteht, CSV-Dateien, wie wir gesehen haben. Aber dann muss ich getroffen haben, wie, Befehl oder Steuerung S in einem Punkt. Und Excel offensichtlich zu der Zeit hatte eine Funktion, bei der es jederzeit sah eine Reihe, es versucht, hilfsbereit zu sein. Und wenn diese Zahl begann mit Nullen, wäre es nur, sie loszuwerden. Warum glauben Sie was brauchen Nullen am ganzen Zahlen? Sie sind bedeutungslos, mathematisch. Sie sind nicht sinnlos in der US-Postsystem. Also, ich habe schon seit Jahren, bis zum heutigen Tag, habe ich noch Freunde haben, dass, wenn die seltenen Fall, dass Ich brauche jemanden, ist Adresse in diesen Tagen, Ich werde immer noch sehen, dass ich habe einen Freund in Cambridge, Massachusetts, 2138. Und es ist ärgerlich, wenn Sie versuchen, programmgesteuert Art erzeugen Umschläge oder gerade notieren Sie ihn. Und das ist aus diesem Grund, Ich wählte den falschen Datentyp. Also, ich liebe deine Idee. Lassen Sie uns ein CHAR-Feld. Fünf Zeichen, mit Ausnahme gibt es eine Ecke Fall. Wenn Sie immer noch E-Mail senden, manchmal Postleitzahlen in diesen Tagen, sie sind, wie, plus vier. Also brauchen wir einen Bindestrich und dann wir brauchen noch vier Zahlen. Also um ehrlich zu sein, könnte es gehen viele verschiedene Möglichkeiten. Denn jetzt, ich werde zu halten es einfach und ich bin sagen, dass es ein fünf CHAR-Wert, und wir sind gehen, um den ganzen Strich plus vier zu überspringen. Aber das sind die Arten von Kompromissen. Und Sie der denken kann gleichen Probleme mit Telefonnummern oder anderen Bereichen. Und jetzt, das ist eigentlich ein dummer Weg nach unten gehen. Nehmen wir an, sowohl Rob und ich und Hannah und Maria und [? Davon?] Und Andy und andere auf das Personal alle leben in Cambridge, Massachusetts, 02138. Diese tatsächlich das Gefühl dumm, dass ich Hinzufügen zu meiner Benutzer-Tabelle, Stadt, Bundesland, und Reißverschluss. Warum? ZIELGRUPPE: [unverständlich] DAVID MALAN: Sagen Sie wieder? ZIELGRUPPE: [unverständlich] DAVID MALAN: Sie sind immer gehen, um zusammen zu gehen, nicht wahr? Wenn sich herausstellt, waren wir der Meinung dies der Fall war, bis wir abschließend durchsucht den gesamten USA, und es stellt sich heraus, dass sind einige Inkonsistenzen in denen mehrere Städte haben das gleiche zip, was schon seltsam ist. Aber wenn wir jetzt, dass 02138 festgelegt für ist immer Cambridge, Massachusetts, Warum in der Welt würden Sie speichern in Ihre Datenbank Cambridge und MA und 02138 für mich und für Hannah und Rob und für [? Davon?] Und für die anderen, die leben hier in Cambridge, ist es vollkommen überflüssig. Wir sollten weg mit nur speichern, was? Nur die Postleitzahl. Aber dann, wenn wir nur die Speicherung Postleitzahl, ich will, wahrscheinlich, für meine Website zu wissen, wo 02.138 ist. Also, ich brauche einen anderen Tisch. Und das ist OK. Und in der Tat ist eine der diese Designprozesse zu entwerfen Tabellen dass Sie in PSet7 sowie wobei tun Sie ausklammern gemeinsamen Daten möchten. Genau wie wir haben Ausklammerung Common Code und Factoring gemeinsame Arten von CSS, hier Auch in der Datenbank, wenn ich nur 02138 eindeutig identifizieren jemanden, der Heimatstadt, nicht Cambridge, Mass speichern für jeden verdammten Benutzer in Ihrer Tabelle. Stattdessen haben eine separate Tabelle namens Reißverschlüsse, die haben sollten, welche Spalten? Wahrscheinlich ein ID-Feld, nur weil, für die Prinzipien wir jetzt spreche. Wahrscheinlich ein zip Feld für 02138. Und dann wahrscheinlich das, was anderen Spalten? Stadt und Staat, aber nur einen Zeile für 02138, eine Zeile für 02139, eine Zeile für 90210. Und das ist buchstäblich alle Postleitzahlen Ich weiß. So, jetzt, was kann man tun? Dies ist problematisch, denn jetzt habe ich zwei Tabellen hat. So sind meine Nutzer meist über hier, aber ihre Stadt Zustandsinformation ist hier drüben. So stellt sich heraus, mit SQL gibt es eigentlich eine Möglichkeit, Informationen zu verbinden, und Sie werden diese in der PSet sehen. Aber es stellt sich heraus, können Sie tun so etwas wie dieses. SELECT-Star aus Benutzern, JOIN-Reißverschlüsse an Nutzer dot zip gleich Reiß dot Reißverschluss. Das ist ein wenig wortreich, zugegebenermaßen, aber dies nur bedeutet, wählen Sie alles aus der Prozess der Übernahme meiner Benutzer-Tabelle und meine Reißtisch. Begleiten Sie sie auf der einen Feld haben sie in der Spalte. Also, buchstäblich etwas zu tun, wie diese, und geben Sie mir zurück eine neue temporäre Tabelle das ist breiter, das ist größer, dass hat alle Spalten aus beiden. Und das ganz einfach wäre, die Syntax für so etwas wie dies zu tun. Also, es gibt diese vor, aber es geht zu anderen Design-Entscheidungen sein, du wirst haben, um nicht nur mit den Registern sondern auch in die laufenden Herausforderungen. In der Tat, es ist eine Herausforderung, in jeder Datenbank-Design wobei manchmal zwei Personen möchten Sie vielleicht um die gleichen Zeilen der Datenbank zugreifen Tabelle. Also, das ist etwas, dass wir Begegnung in PSet7 auch. Aber ich dachte, dass ich auf einen Blick Angriff, der in SQL möglich ist. Was sind einige der Probleme, die entstehen können? Also, werden Sie diese in PSet7 begegnen. Und wir sagen Ihnen, was die völlige Codierungs Lösung für dieses Problem ist. Aber wenn Sie eine höhere Klasse zu nehmen, vor allem in Betriebssystemen, Sie gehen zu treffen sind eine Frage der Unteilbarkeit, das Problem zu tun versuchen, mehrere Dinge auf einmal ohne Unterbrechung. Und ich dachte, ich würde dieses einzuführen Ideen für PSet7 mit einer Metapher Ich habe gelernt, dass ich mich in Margo Seltzer der CS164-Betriebssysteme Klasse Jahren. Nehmen wir an, dass Sie eine dieser Wohnheim haben Kühlschränke in Ihrem Zimmer im Studentenwohnheim oder ein Haus und Sie haben eine echte Vorliebe für Milch. Und so, nach Hause von Klassen kommen Sie eines Tages, den Kühlschrank öffnen Sie. Oh, verdammt noch mal. Es gibt keine Milch im Kühlschrank. Also, den Kühlschrank zu schließen Sie, verriegeln die Tür, sperren Sie Ihre Wohnheim zu Fuß um die Ecke CVS, erhalten in der Linie, und starten Sie die Überprüfung für ein wenig Milch. Und es wird eine Weile dauern, weil diese verdammten Self-Checkout- Zähler ewig dauern, um trotzdem zu verwenden. So unterdessen kommt Ihre Mitbewohner Hause. Er oder sie wirklich mag Milch als auch. Sie kommen in das Zimmer im Studentenwohnheim, öffnen Sie den Kühlschrank, oh, verdammt sie. Es gibt keine Milch mehr. Also, er oder sie auch geht um die Ecke. Aber jetzt, da es wie zwei oder drei oder vier CVSes in der Nähe, sie geschehen, zu einem der gehen verschiedene, auf dem Platz. Und jetzt, ein paar Minuten später, beide von Ihnen nach Hause kommen und ugh, schlimmste Problem überhaupt. Jetzt zu viel Milch muss man denn es wird sauer. Und Sie wollen Milch, aber sie nicht wirklich gerne Milch. So, jetzt war dies ein teures Fehler, weil Sie beide eine Entscheidung auf der Grundlage der Zustand einiger Variable, war in dem Verfahren durch Sie geändert haben, der Initiator der gehen, um Milch zu bekommen. So ist, was vielleicht eine menschliche Lösung für dieses Problem? ZIELGRUPPE: [unverständlich] DAVID MALAN: Lassen Sie eine Notiz, nicht wahr? Lassen Sie immer eine Notiz, wenn Sie vertraut mit dieser Show. Ja, es gibt zwei von uns. Also, immer eine Nachricht hinterlassen, oder den Kühlschrank buchstäblich sperren mit einer Art Schloss oder etwas über die Spitze so. Aber das ist eigentlich los, um sein Schlüssel Problem mit Datenbank-Design, vor allem, wenn Sie haben könnten mehrere Browser, mehrere Laptops, mehrere Benutzer alle versuchen, Aktualisieren von Informationen auf einmal. Besonders sensible Informationen wie Finanzinformationen wobei mit einem Aktienhandel Website, wie Sie bauen, was, wenn Sie, wie viel Geld überprüfen möchten Sie haben und dann, wenn Sie genug haben, kaufen einige Lager? Aber was, wenn jemand anderes, hat eine gemeinsame Rechnung mit Ihnen gleichzeitig versuchen , einige Aktien zu kaufen? Also, er oder sie ist die Kontrolle der Kontostand, beide von Ihnen wieder die gleiche Antwort, es gibt keine Milch. Oder beide der Sie wieder die Antwort, Sie haben 100 $ auf dem Konto. Sie beide versuchen, die Entscheidung zu treffen, mit einem Anteil von rund Aktien des Unternehmens zu kaufen. Und nun, was passiert? Sie haben zwei-Aktien? Sie haben keine Aktien? Probleme wie das entstehen kann. Also, wir begegnen, dass. SQL-Injection-Angriffe, zum Glück, sind etwas, das wir Ihnen helfen, aber diese sind grausam häufig in diesen Tagen immer noch. Also, das ist nur ein Beispiel. Ich mache keine behauptet, dass Harvard-PIN-System ist anfällig für diese spezielle Angriff. Wir haben versucht. Aber, wissen Sie, dass wir ein Feld wie dieses. Und Yale Net-ID hat eine ähnliche Suche-Bildschirm in diesen Tagen. Und es stellt sich heraus, dass vielleicht die PIN-System ist in PHP implementiert. Und wenn es were-- es nicht-- sie vielleicht haben Code, der so aussieht. Sie haben zwei Variablen. Gib mir den Benutzernamen und Passwort von der Post Super globale Variable dass wir sprachen über früher. Vielleicht Harvard hat eine Abfrage wie SELECT Sterne FROM users wo Benutzernamen entspricht, dass und das Kennwort gleich, dass. Und beachten Sie, dass ich bin einfach Einstecken in Verwendung die geschweifte Klammer-Notation von der anderen Tag, der nur in einem Wert Stopfenmittel Hier. Ich bin nicht mit der Fragezeichen-Technik. Ich habe keine Sekunde haben oder dritte Argument. Ich bin nur wörtlich Konstruieren Sie die Zeichenfolge selbst. Das Problem ist jedoch, dass Wenn jemand wie ein scroob, Das ist ein Hinweis auf einen Film, meldet sich mit so etwas wie dieses, und ich habe die Punkte entfernt dass in der Regel vertuschen Passwörter, was ist, wenn er besonders bösartigen und sein Passwort vielleicht ist 12345, pro Film namens "Spaceballs" aber er kritisch Typen ein Apostroph nach der fünf, dann buchstäblich das Wort oder in den Raum, und dann zitieren, unquote eins gleich Zitat ein, Beachten Sie aber, er weggelassen, was? Er hat das Zitat auf der rechten Seite weggelassen und er hat das Zitat auf der linken weggelassen. Denn wenn diese Angreifer scroob die Vermutung, ist, dass die Menschen, die schrieb, Diese PHP-Code nicht so hell, vielleicht haben sie nur einige Einzel Anführungszeichen um die Interpolation einer Variablen in geschweiften Klammern? Und vielleicht konnte er Art ihre Gedanken zu vervollständigen für sie, aber in einer Weise, die gehen ihn in die PIN-System gehackt zu lassen. Mit anderen Worten wird angenommen, dass dies das Code und wir haben jetzt in dem, was scroob eingegeben stecken. Und es ist rot, weil es schlecht ist. Und das zugrunde liegende Text ist, was er tippte, scroob könnte Harvard-Server überlisten in den Bau einer SQL-Abfrage Zeichenfolge, die wie folgt aussieht. Kennwort entspricht 12345 oder eins gleich eins. Das Ergebnis davon, logisch ist, dass dies scroob log in, wenn sein Passwort 12345 oder wenn eine equals ein, was natürlich ist immer wahr, was bedeutet, scroob in bekommt immer. Und ja, die Art und Weise zu beheben wird, wie in vielen Fällen, wäre die Verteidigung zu schreiben. So etwas wie nutzen Sie unser eigentliche Abfrage-Funktion, die Sie werden in PSet7, wo wir stecken in zu sehen so etwas wie Fragezeichen hier. Und die Schönheit der Abfragefunktion, die wir Ihnen ist es gegen diese verteidigt so genannte SQL-Injection-Angriffe, in denen jemand trickst Ihren Code in Einspritzen von seinen eigenen SQL-Code. Denn das, was die Abfragefunktion wir geben Sie tatsächlich tun, wenn Sie auf das Fragezeichen-Syntax verwenden und ein zweites und ein drittes Argument Hier ist, was hat sie, um das Add Eingang, dass der Benutzer zur Verfügung gestellt? Diejenigen, Backslash zitiert. Also, jeder potenziell entweicht es gefährliche Zeichen. Das sieht jetzt komisch, aber es ist nicht gefährdet weil es nicht der Fall ist ändern Sie die Logik mehr denn das ganze Passwort jetzt ein Apostroph, das nicht, in der Tat, vergessen scroob ist. Also, es ist schon einige Witze darüber im Laufe der Jahre. So, das war ein Foto, das irgend Aussenseiter in einem Parkplatz wobei Sie wissen vielleicht, dass einige Städte und Staaten versuchen, Ihre Lizenz zu scannen Platte an Sie oder an Ticket berechnen Ihnen wenn Sie durch gehen, ohne, wie, die E-Z-Pass Sache. Also, diese Person vermutet, dass vielleicht die Menschen, das Schreiben der E-Z-Pass-System waren nicht so hell, und vielleicht haben sie gemeinsam eine Kette nur verkettet, so dass er oder sie konnte nicht böswillig nicht nur den Abschluss ihrer Gedanken, aber eigentlich führen eine schlechte Befehl, die wir noch nicht haben erwähnt, aber Sie können sich wahrscheinlich vorstellen. Dass zusätzlich zu löschen und einfügen und aktualisieren, und wählen Sie, es gibt auch ein Stichwort genannt Tropfen, die buchstäblich alles löscht in der Datenbank, die Besonders schlimm ist. Wir können auf diese Option, wenn heran es ist ein wenig schwer zu finden. Dies nun ist eine berühmte Comic- das ist jetzt wunderbar klug und verständlich. [Gelächter] Ja, cool. Art geeking aus. Also das sind dann SQL-Injection-Angriffe. Und sie sind so einfach, unter Verwendung zu vermeiden der richtige Code oder die richtigen Bibliotheken. Und du wirst in PSet7 zu sehen, das ist, Deshalb geben wir Ihnen die Abfragefunktion. Also, ein paar Teaser dass wir dachten, wir würden geben Ihnen hier in unserem verbleibenden Minuten zusammen. So, wie Sie sich erinnern von Woche null, wir führte diese zwei Glühbirnen die sind schön, nicht nur, weil sie sind ziemlich und sind bunt, sondern weil sie etwas zu unterstützen genannt API eine Anwendung Programmierschnittstelle und in CS50 bisher, haben wir meist konzentrierte sich auf GET und POST, aber es stellt sich heraus, es gibt andere HTTP-Verben wie PUT. Und in der Tat war dies eine Rutsche von Woche null wobei, wenn Sie Code schreiben, dass sendet a la PSet6 eine HTTP-Anforderung, sieht mit diesem Stück Text an der Unterseite, die aufgerufen JSON wird, oder JavaScript Object Notation dass wir über die nächsten Wochen zu sprechen, können Sie aktivieren oder deaktivieren oder ändern die Farbe der Lichter, wie sie. Also, wenn CS50 hat auch zusätzlich zu einigen dieser Glühbirnen hier in New Haven wenn Sie möchten, zu leihen sie für die Abschlussarbeiten, Auch einige Microsoft Bands, die wie sind Uhren, dass man um das Handgelenk tragen daß in ähnlicher Weise über eine API, so dass Sie können Sie Ihre eigenen Software für sie zu schreiben. Wir haben ein Konto bei Apples iOS-Code, so dass, wenn Sie ein Apple-Uhr oder ein iPhone oder ein iPad oder einen iPod, können Sie Code schreiben, dass tatsächlich läuft auf jene. Wir haben eine ganze Reihe von Arduinos, das sind winzigen Computern ohne Fällen im Wesentlichen wissen, dass Sie über USB anschließen, in der Regel eigene Mac oder PC, Code schreiben, die auf diesen physischen läuft Geräte, die oft Sensoren auf sie so können Sie mit der realen Welt interagieren. Wir haben eine ganze Reihe von Leap Motion-Geräte, USB-Geräte, die für Macs sind und PCs, hier wieder in New Haven. Und wenn Sie es mit Ihrem Mac verbinden, Sie tatsächlich kontrollieren können Ihren Computer durch Schreiben von Software- dass über Infrarotstrahlen, findet heraus, wo Ihre menschliche Hände, sogar ohne Berührung der Tastatur. Wir dachten, wir würden einen schnellen teilen Einblick in diese, zum Beispiel. [Musikwiedergabe] Also, wir haben eine ganze Bündel von diesen Dingen, Auch genannt Myo Armbinden die Sie über den Unterarm gelegt und dann können Sie die wirkliche Kontrolle Welt oder die virtuelle Welt wie diese. [Musikwiedergabe] Oder haben wir auch einige Google Pappe, die buchstäblich ist, wie, ein Karton konnte man am stellen Sie Ihre Gesicht, aber Folie in Ihr Telefon in es so dass Sie das Glas legen Sie Ihre Handy wirklich nah an die Augen. Und Google Karton ist ziemlich billig bei $ 10 oder $ 20. Und es hat wenig Linsen dass etwas weg Verschiebung das Bild auf dem Bildschirm für die menschliche Augen, um Ihnen ein Gefühl der Tiefe zu geben so dass Sie tatsächlich eine 3D- Umwelt vor Ihnen. Wir haben auch einige Samsung Getriebe, das ist das teurere Version davon, sondern kann in ähnlicher Weise in ein Schieben Android-Handy und geben Ihnen die Illusion von-- oder die Erfahrung der virtuellen Realität. Und in unserer letzten zwei Minuten, Wir dachten, wir würden versuchen, dies zu tun. Wenn ich zu projizieren, was Colton hat Hier, nur um Ihren Appetit anzuregen, lassen Sie mich gehen Sie vor und werfen up auf der großen Leinwand hier. Lassen Sie mich das Licht zu töten. Colton, möchten Sie weitermachen wollen, und auf Ihr Handy legte für einen Moment und kommen auf mehr als auf die Mitte der Bühne? Und wissen Sie, um project-- möchten dies ist, was Colton sieht. Nun, die Wi-Fi in hier nicht so stark für diese Vorrichtung dass dies ist super überzeugende, aber Colton ist buchstäblich in diesem magischen Ort, futuristisch. Er sieht nur ein Bild. Sie sah seine linke und rechte Auge dass sein Gehirn zusammen nähen in einem dreidimensionalen Umwelt auf seinem Gesicht. Er ist gerade ausgewählten Menüoption hier. Und so wieder, er trägt dieses Headset mit einem Samsung Handy auf sie, das ist drahtlos, unsere Gemein vorsteht. Jetzt sind Sie auf dem Mars, ich denke? COLTON: Ich denke schon. Ich bin nicht sicher [unverständlich]. [Gelächter] DAVID MALAN: Stellt sich heraus, Mars hat diese Menüs. COLTON: [unverständlich] ein paar coole Orte, wenn wir zu gehen zu-- möchten DAVID MALAN: Wo wollen wir hin? COLTON: [unverständlich] DAVID MALAN: Und mal sehen, wo Coltons jetzt unter uns. COLTON: [unverständlich] DAVID MALAN: Also, es gibt so viele verschiedenen Orten können Sie sich selbst zu nehmen. Es gibt FAPIs über den Sie Schreiben Spiele oder Wechselwirkungen, laufen letztlich auf dem Handy. Also, Sie haben wirklich nur Schreiben eines Handy App. Aber dank der Software- und die Grafik-Fähigkeiten, Jetzt Colton ist in diesem winzig kleine Häuschen. Und auf die Gefahr uns überfordern, Colton, und ich werde bleiben, um für während am Ende der Klasse heute hier wenn Sie möchten, zu kommen und zu spielen. Und wir werden sie bringen nächste Woche auch. Ohne weitere, ado Das war es für heute. Wir sehen uns nächste Woche. [MUSIC - RAGGA TWINS "schlechter Mensch"]