[Muusika mängib] DAVID Humala: Olgu, see on CS50. See on lõpuks nädalas kaheksa. Ja täna me alustame täita mõned tükid kui tegemist on hoone asju veebis. Nii, meenutan, et esmaspäeval me kulutame palju aega PHP, mis on selle dünaamilise programmeerimiskeel, mis laseb meil väljund, muu hulgas asju, HTML ja muud sellist sisu et me tahame näha. Aga me ei ole tõesti vaadeldi me ei kavatse hoida mingit teavet. Tõepoolest, peaaegu keegi, et super huvitav külastatavate veebisaitide täna on mingi andmebaasi kolp, eks? Facebook kindlasti salvestab palju andmeid umbes meile kõigile ja Gmail kauplustes kõik teie kirju. Ja nii paljud teised saidid ei ole ainult staatiline sisu on informatiivne. See on tegelikult dünaamiline mingil moel. Sa anda oma panus, seda ajakohastatakse lehed teisi inimesi. Saad sõnumeid saata sõnumeid, ja nii edasi. Nii et täna me vaatame lähemalt tuginemine projekti et sa sukelduda järgmine nädalas, CS50 Finance, mis tegelikult läheb on sul ehitada midagi ei C, kuid PHP. Kodulehel mis näeb välja natuke midagi sellist mis võimaldab osta ja müüa varud, mis on tegelikult läheb lähtuda reaalajas varude andmeid Yahoo Finance. Ja nii lõpuks, on teil illusiooni enda ja kasutajad mis sa tegelikult ostavad ja müüvad varud ja saada peaaegu reaalajas uuendused, haldamise portfelli, mis kõik läheb vaja võttes, lõpuks andmebaasi kasutajatele. Niisiis, oma sõnadega, eriti kui sa ei ole super tuttav arvuti teaduse ja andmebaasid, mida sa tead andmebaasis olevat just nüüd, aastal nontechnical mõttes? Mis on? Kuidas te kirjeldaksite seda to toakaaslane või sõber? Sihtrühm: [kuuldamatu] info [kuuldamatu] DAVID Humala: Nii, andmete loetelu, või store-- andmete loetelu et võiksite salvestada midagi, nagu kasutaja. Ja mida teha on kasutajad nendega? Kui oled kasutaja Facebook või Gmail, millised on omadused et me kõik kasutajad on? Like, milline võiks olla mõned veergude tabelit, mis me vihjas viimasel ajal? Sest jälle, saate arvan andmebaasi tõesti nagu väljamõeldud Excel fail või Google Töövihik või Apple Numbers faili. Niisiis, mida sa arvad kui sa arvad kasutaja? Mida nad on? Mis see on? Sihtrühm: Nimi. DAVID Humala: Nimi. Nii et kui nimi, nagu, David Humala Oleks nimi mõne kasutaja. Mida peaks veel kasutaja on? Sihtrühm: ID-. DAVID Humala: ID-. Nii, nagu identifitseerimisnumber, nagu oma Harvard ID või oma Yale Net ID vms. Mida võib kasutaja olla? Sihtrühm: Password. DAVID Humala: Parooli võibolla aadress, võibolla telefoni number, võibolla E-posti aadressi. Niisiis, seal on kobarad väljad ja selle võiks mingi spiraal väljub kontrolli alt kiiresti niipea kui hakkate mõistes, oh, olgem hoidke ja olgem hoidke seda ja teist. Aga kuidas me tegelikult seda tegema? Nii jälle, vaimse mudel on täna, kui me sukelduda tegelik SQL, Structured Query Language, on andmebaas, mis näeb välja selline. See on lihtsalt ridu ja veerge. Ja te võite ette kujutada, Google Spreadsheets või mitmeid teisi programme. Aga mis peamine umbes MySQL, mis on andmebaasitarkvara me ei kavatse kasutada, vabalt avalikult available-- Facebook kasutab see ja ükskõik kui palju muid websites-- Andmebaasis salvestatakse asju relationally. Ja relatsioonandmebaasile tähendab lihtsalt üks, mis sõna otseses mõttes salvestab oma andmed ridade ja veergudena. See on nii lihtne see ongi. Seega, isegi midagi Oracle, et sa võisid üldiselt kuulnud on relatsiooniline andmebaas. Ja all kapuuts, see salvestab andmed ridade ja veergude. Ja Oracle laeb Teile palju raha, et seda teha, samas MySQL maksud te midagi sama. Nii, SQL läheb meile vähemalt neli tegevust. Võime valida andmeid, nagu lugeda andmed, lisada, kustutada ja uuendada andmeid. Teisisõnu, need on tõesti neli peamist tegevust et ei kavatse võimaldab meil muuta kraami need read ja veerud. Vahend, mis me kasutame tänapäeval eriti õppida SQL ja mängida seda jälle nimetatakse PHP MyAdmin. See on veebipõhine vahend. Kokku juhus, et see on kirjutatud PHP. Aga see läheb meile graafiline kasutajaliides, nii et me saame tegelikult luua nende ridade ja veergude ja siis räägi nendega kaudu koodi. Niisiis, olgem nüüd hakkavad ma arvan, et on ausalt öeldes selline lõbus protsess hoone tagaosas veebilehed, osad, et kasutajad ei näha, kuid kindlasti hoolivad, sest see on pigem andmed on läheb. Niisiis, sarnaseid C ja Veidi vähem nagu PHP, SQL või andmebaasi, mis toetab SQL, on vähemalt need andmetüübid ja kobarad teised. CHAR, varchar, INT, BIGINT, DECIMAL ja DATETIME. Ja seal on terve hunnik muid funktsioone, kuid teeme seda viis tegeliku näiteks. Ma lähen minema CS50 IDE Kui eelnevalt olen sisse logitud ja ma olen ka käinud URL Selle tööriista nimega PHP MyAdmin. Ja probleem pani seitse, me ütleme teile täpselt, kuidas saada, et see liides samuti. On the top vasakus nurgas, märka seda ütleb loengu. Ja see tähendab lihtsalt, et ette, ma lõin tühja andmebaasi nimega loengu et ei ole tabeleid seda veel. Pole ridu ja veerge. Kuna esimene asi, mida me teeme on alustada luua tabel et läheb salvestada meie kasutajatele. Niisiis, sõna otseses mõttes üle siin õigus, ma olen ütlen andmebaasis Ma tahan tabelis pealkirjaga kasutajad. Nii, see on nagu fail, et ma soovite salvestada kõik oma andmed. Ja kui palju veerge? Noh, olgem hoida lihtsa nüüd. Ma tahan, et hoida nagu kasutajanimi ja nimi kasutaja. Hakkame väike. Niisiis, ma tahan kahte tulpa kokku. Ja ma lähen edasi minna ja klõpsake Mine. Ja siis, et need veerud, mida ma lähen to do-- kui see internet cooperates-- kõik korras, nii et me läheme proovida seda uuesti. Ma lähen luua tabel nimega Kasutajad, kellel on kaks veergu, klõpsake Go, OK. Nüüd on meil see väga kiiresti. Aitäh, väga hästi tehtud. Olgu, nii et mida me tahame need sambad, mida nimetatakse? Niisiis, üks läheb nimetada kasutajanime. Niisiis, kõik, mida ma näha siin-- ja kasutajaliides ausalt öeldes saab natuke inetu lõpuks, kui hakkate kirjutama kõik need andmed. Aga mis on tore, et omamoodi paradoksaalselt ma loon sambad, kuid näitaja on mõistmatult panid välja rida nii et ma ei saa seadistada need sambad. Niisiis, seal on kaks tühikud seal nime all. Ja üks nendest valdkondadest ma tahan nimetatakse kasutajanime, ja muus valdkonnas tahan helistada nimi. Ja nüüd on mul valida andmetüübid neid asju. Nii, et Excelis ja Google arvutustabeleid Kui soovite veerus, siis sõna otseses mõttes kirjuta nimi või kasutajanime, Enter. Äkki oleks rasvases kirjas lihtsalt selguse, kuid see on kõik. Sa ei täpsustata tüüpi veerud. Nüüd Google tabelites või Excel, siis võiks täpsustada, kuidas andmed on muutunud. Sa võid minna Format menüüst, ja sa saab määrata näidata nagu dollari märk, näidata nagu Murdarv. Nii, see on sarnase sisuga et see, mida me parasjagu teeme, kuid see on tegelikult sunni Andmed, mis tuleb teatud tüüpi. Nüüd, kuigi hetk tagasi ma ütles seal ainult paar tüüpi andmeid, seal on tegelikult palju, ja nad erineval määral konkreetsus. Ja kui kõrvale, siis Võib isegi teha fancy asju nagu ladustamine geomeetriale sees andmebaasis. Saate salvestada asju nagu GPS koordinaadid ja tegelikult leida, matemaatiliselt, punktid, mis on lähedane teised. Aga me ei kavatse hoida seda super lihtne ja minge siin kõik niinimetatud string tüüpi. Niisiis, siin on nimekiri, mis terve hulk võimalusi. CHAR, varchar, TINYTEXT, MEDIUMTEXT, LONGTEXT. Ja see on selline suur. Ja kahjuks mõnevõrra paradoksaalselt C, char ei ole tegelikult CHAR. Kui määrate andmebaasis et teie andmed tüüp on CHAR, see tähendab, et jah, see on CHAR, kuid see on üks või mitu Paaliad. Ja siis pead määrama kui palju Paaliad soovite. Niisiis, milline on tüüpiline pikkus kasutajanime? Kas piir tavaliselt? Sihtrühm: [kuuldamatu] DAVID Humala: 16 äkki? Midagi sellist. Sa tead, tagasi päev, see oli varem kaheksa. Mõnikord on 16, mõnikord see on isegi rohkem. Ja nii see ei ole tähenda mulle üks CHAR. See tähendab, et mul täpsustada pikkus valdkonnas, ja nüüd ma võin öelda midagi 16. Ja seal on kompromiss siin. Niisiis, me näeme ühel hetkel et see tähendab üht, Iga kasutajanimi peab olema 16 tähemärki. Aga oota natuke, M-A-L-A-N. Kui see on minu kasutajanimi ja ma kasutan ainult viis, mida soovitaksite, et andmebaas teha teiste 11 märki, et Olen reserveeritud ruumi? Mida sa teeksid? Sihtrühm: [kuuldamatu] DAVID Humala: Jah, just need kõik null. Tee neid ruume. Aga ilmselt null, nii palju langkriipsude nulli. Niisiis, ühelt poolt oleme nüüd kindlaks teinud, et mu kasutajanimi võib olla mitte rohkem kui 16 tähemärki. Ja varjuküljeks mis on et kui mul oli tõesti pikk nimi või tahtsid tõesti pikk kasutajanime, nagu mõned teist poisid võisid selles kolledžis või kell Yale.edu, sa ei saa olla üks. Ja nii tegelikult, kui olete kunagi registreeritud kodulehel ja sa saad karjus öelda ununes on liiga pikk või sinu kasutajanimi on liiga pikk, siis on lihtsalt sellepärast, programmeerija, kui seadistamisel oma andmebaasi, Otsustati, et selles valdkonnas olla pikem kui selle pikkus. Hea küll, mis siis, kui Astume nimi? Kui kaua peaks Tüüpiline inimese nimi on? Mitu märki, 16? Olen aim võiksime leida keegi siin ruumis kus tema või tema esimene pluss viimase nimi on pikem kui 16 tähemärki. Niisiis, milline on parem kui 17? 18? 25? Suuremad? 30? Sihtrühm: [kuuldamatu] DAVID Humala: 5000, oh mu jumal. Nii, see on ilmselt korralik ülemist piiri, ütleme. Ja siin me sellist on et kohtumõistja. Nagu, ei ole õige vastus siin. Infinite ei ole täiesti võimalik, sest me oleme lõpuks läheb have-- me oleme läheb otsa mälu. Niisiis, me peame tegema kohtumõistja mingil hetkel. Väga sageli oleks näiteks to use-- ja andke mulle täpsustada CHAR siin kui before-- 255 oli sõna otseses mõttes ülempiiri see andmebaasitarkvara aastaid tagasi. Ja nii palju inimesi ütleks selle trahvi. 255 on piir. Lihtsalt kasutada maksimaalselt. Ja see on päris naeruväärne. Like, kui sa kirjutad kellegi nimi 200 pluss märki, et natuke naeruväärne. Aga pidage meeles, et ASCII ei ole ainuke süsteem tähemärki. Ja nii, seda eriti Paljud Aasia keelte kus tegelased ei saa me väljendada klaviatuurid nagu mu USA klaviatuur, mõned tegelased tegelikult asuda 16 bitti asemel kaheksa bitti. Ja nii see tegelikult ei ole nii ebamõistlik et meil on vaja rohkem ruumi, kui me tahame, et see sobiks suurem märke kui väga USA kesksemaks need oleme pigem arutada. Niisiis, me peame mõned ülemise. Ma ei tea, mis on parim üks, kuid 255 on üldiselt levinud. 25 tundub väike. 16, 32 tunnen madal. Ma Syyllistyä midagi kõrgemat. Aga seal on kompromiss, nagu alati. Mis on ehk selge Kompromiss reserveerimise 255 Paaliad igaühe nime minu andmebaasi? Sihtrühm: [kuuldamatu] DAVID Humala: Mis see on? Sihtrühm: [kuuldamatu] DAVID Humala: See on palju mälu, eks? M-A-L-A-N. Olen lihtsalt raisku 250 tegelased lihtsalt salvestada oma nimi kaitsele, igaks juhuks keegi klassis on tõesti pikk nimi. See tundub põhjendamatu Miinuseks. Niisiis, tuleb välja, et SQL, Selles andmebaasis keeles tegelikult toetab midagi nimetatakse varchar või vahelduva CHAR. Ja see on omamoodi tore, et see võimaldab teil määrata ole fikseeritud laiusele, kuid pigem muutuva laiusega. Ja spetsiifilisemalt maksimaalne laius valdkonnas. Niisiis, see tähendab, et nimi ei olla mitte rohkem kui 250 tähemärki, küll aga võib olla vähem. Ja andmebaasis saab olema tark. Kui te ei pane M-A-L-A-N, see on ainult kavatse kasutada viis, võibolla kuus baiti nagu lõppserva null iseloomu, ja mitte kulutama täiendavalt 249 või 250 baiti asjatult. Nii, see tundub nagu ma peaks hakanud seda lugu. Aga seal on alati kompromiss. Niisiis, ühelt poolt, kasutajanime Olen täpsustada tuleb kõva kodeeritud 16, ja võibolla see ei olnud õige kõne, äkki see on, aga miks mitte kasutada VARCHARs kõike? Ta eksisteerib põhjus. Miks mitte kasutada VARCHARs iga valdkonna mille pikkus sa ei tea ette, kui see tundub olevat suur asi, eks? Kasutage ainult nii palju ruumi kui sa pead kuni see piir? Sihtrühm: aeglasem. DAVID Humala: Speller? Sihtrühm: Teeb aeglasem? DAVID Humala: Oh, see on aeglasem. Hea, et on peaaegu alati vastus, ausalt. Like, milline on kompromiss? See kas maksab rohkem ruumi või see maksab rohkem aega. Niisiis, sel juhul võib olla aeglasem. Miks? Sihtrühm: [kuuldamatu] määramisel [kuuldamatu]. DAVID Humala: Hea. Nii, võite mäletate isegi PSED5, mängides oma lähenemist sõnastikku, kui teil on mälu eraldada dünaamiliselt või hoida kasvav puhvrit, et võib tegelikult olla aeglane. Kui teil on helistada malloc all kapuuts ja võibolla see, mida MySQL teeb, nii kindlasti, et võib juhtuda. Ja kui te arvate, kuidas tagasi PSet-- või isegi nädalat kaks, kui me tegime asjad Kahendotsingupuu või isegi lineaarne otsing, üks tore asju iga sõna andmebaasis või iga sõna veerus on täpselt sama pikk, isegi kui terve hunnik neid tähemärki on tühi, on see, et saate random access oma andmed, eks? Kui sa tead, et iga Sõna on 16 tähemärki ära, mida saab kasutada pointer aritmeetika, nii et rääkida ja minna meile 16, 32, 48, 64, ja sa võid hüpata koheselt kasutades aritmeetilise mis tahes sõna oma andmebaasi. Arvestades, kui see on varchar, Mis sa selle asemel tegema? [Telefonihelin] Kui see on varchar, siis ei saa kasutada muutmälu. Mida sa pead otsima või tegema? Jah? Sihtrühm: [kuuldamatu] DAVID Humala: Vaata läbi whole-- jälgi läbi terve nimekirja otsivad, mida kõige tõenäolisemalt? Millist erilist väärtust? Sihtrühm: [kuuldamatu] DAVID Humala: Vaadates for null terminators et piiritleda eraldamine sõnu. Nii jälle Miinuseks, ja pole õige vastus. Aga see on koht, kus eriti kui teie kasutajad saavad olema palju ja oma koormat serverite kasutavate inimeste arv siis saab kõrge, need on tegelikult nontrivial otsuseid. Nii võime jätta, kuna tegemist, kuid olgem keri üle paremale siin. Nüüd, seal on paar sambad kus peame kohtumõistja. Kas on mõtet lubada kasutaja Nime, kasutaja kasutajanimi või kasutaja Nimi, olla null? See on lihtsalt tühi. Tundub natuke absurdne, et ma olen ei kavatse vaadata need kastid. Aga selgub, on andmebaasi, võib öelda, keegi ei soovi olla selle väärtus. See veerus ei ole tegelikult olemas. Nüüd, seal on see rippmenüüst. Ja teate ma olen ikka esimeses reas seal, nii et ma räägin kasutajanimi nüüd. Ja selgub, et andmebaasi Erinevalt lihtne lihtsalt tabelisse, on võimas funktsioone nimetatakse indeksid. Ja indeks on viis öelda Andmebaasi ette, et ma inimese olen targem kui sina. Ma tean, milliseid päringuid valige või sisestada või kustutada või uuendada, et minu kood lõppeb teeme selle andmebaasi. Ma tahan lugeda palju andmeid. Ma tahan lisada palju andmeid. Ma tahan pidevalt kustutada palju andmeid. Kui ma tean, et ma lähen juurdepääsu valdkonnas nagu Kasutajanimi palju, Ma ei ennatlikult öelda andmebaasi, ma tean rohkem kui sina, ja ma tahan, et dekreedi, mis sa peaksid index selles valdkonnas. Kus indekseerimine valdkonnas või kolonnist tähendab, et andmebaasi eelnevalt peaks laenata ideid, nagu, Nädala neli ja viis ja kuus alates CS50 ja tegelikult ehitada midagi binaarne otsing puu või midagi üldiselt nimetatakse B puu et sa õpiksid klassi nagu CS124 Harvardi, mis on algoritmide klassi, või mitmeid teistes kohtades. Andmebaas ja nutikas inimesed, kes on seda rakendanud nuputada, kuidas hoida Selle tabeli info mälu, nii et otsingud ja muud toimingud on super kiire. Sa ei pea seda tegema. Sa ei pea rakendama lineaarne otsing või binaarne otsing või liita omamoodi või valiku sorteerida, ükskõik mis. Andmebaas see sinu jaoks kui sa ütled see ennetavalt indeks selles valdkonnas. Ja näed ka, seal on mõned muud omadused Me ei saa öelda andmebaasis jõustada. Mis võiks see tähendab, kui ma valin Unique sellest menüüst, lihtsalt intuitiivselt? Jah? Sihtrühm: [kuuldamatu] DAVID Humala: Jah, kasutajanimi peab olema unikaalne. Kas see on hea või halb asi andmebaasi veebilehel kasutajatega? Kui kasutajanimed olema unikaalne? Jah, ilmselt. Kui see on, mida valdkonnas, mida me kasutame, et sisse logida, sa ei taha, et inimesed, kellel sama tunne või sama kasutajanime. Nii saame olla andmebaasis jõustada, et nii et nüüd minu PHP kood või mis tahes keeles, Ma ei pea näiteks vaadata tingimata seda teeb kasutajanimi olemas enne kui ma lasta kellelgi registreeruda? Andmebaas ei lase kaks inimest nimega David või Malans registreerida sel juhul. Ja kui kõrvale, kuigi see menu vaid võimaldab valida ühe, unikaalne indeks on üks, mis on indekseeritud ülikiire jõudlus, kuid see sunnib unikaalsust. Ja me tuleme tagasi sellele, mida Ülejäänud kaks tähenda vaid hetk. Vahepeal, kui ma lähen minu teine ​​rida, mis on kasutaja nimi, ma peaksin täpsustada et nimi peaks olema unikaalne? Ei, sest sa võid kindlasti have-- pole kahe David Malans selles ruumis, kõige tõenäolisem. Aga kui me valime teise nime me võiksime kindlasti kokkupõrkeid. Mõtle tagasi räsitabeli jms. Niisiis, me kindlasti ei taha teha nimeväljal ainulaadne. Niisiis, me lihtsalt kavatse lahkuda et nagu kriips-kriips-kriips-midagi. Ja ma jätan kõike muud üksi. Tõepoolest, enamik neist väljad me ei pea hooli. Ja kui ma olen valmis päästma seda, kui internet koostööd, Ma käsku Salvesta ja väga, väga, väga aeglaselt ei andmebaasis saada päästetud. Ja nüüd ma olen tagasi selle liides, mis küll, on valdav esimesel pilgul. Aga ma lähen tegema, on klõpsa sõnal Kasutajad vasakus ülaservas. Ma lähen siin, klõpsa Kasutajad ja vaikimisi seda on sooritanud mõne SQL, kuid rohkem sellest kohe. Siin on ainult kokkuvõte, mida ma tegin. Ja ärge muretsege, et sa näed rääkimata Ladina ja Rootsi siin. Need on vaid vaikimisi seaded, sest MySQL algselt või PHP MyAdmin, üks kahest juhtus tuleb kirjutada mõned rootslased. Aga see on ebaoluline meie puhul siin. Hea küll, miks on see kõik huvitav? Selgub, võin lisada andmeid andmebaasiks kirjutades koodi. Ja ma minna ja minu pilt siin, ma olen läheb minna ja teeselda, nagu see on traadiga andmebaasi, mis see ei ole hetkel puuduvad, kuid see olla, kui me saame probleemi pani seitse. Ja ma lähen edasi minna ja käivitate funktsiooni nimetatakse päringu mis me anname teile probleem pani seitse jaotus- kood, mis võtab vähemalt üks argument, mis on lihtsalt string. Rida SQL koodi. Niisiis, sa oled umbes, et õppida, kuidas kirjuta Structured Query Language. Kui ma tahan lisada uus rida minu andmebaasi, sest keegi on esitanud vormis, et minu kood, ma oleks sõna otseses mõttes kirjutada INSERT INTO kasutajad järgmine valdkondades: kasutajanimi, koma, nimi, väärtused, ja nüüd ma pean sisestada midagi Humala ja tsiteerida, lõppeb "David Humala." Ja nüüd isegi need tuttavad SQL, miks ma kasutan ülakoma sees see roheline string? Mis võib olla põhjuseks, siin? Pange tähele, ma olen segunemine kahes keeles. Päring on PHP funktsioon, kuid see võtab argument. Ja see argument on, et ise olla kirjutatud teises keeles nimetatakse SQL, Structured Query Language. Niisiis, kõik, mis ma just siin esile on selles keeles nimetatakse SQL. Niisiis, milline on koos ülakoma, sama kiire meelerahu vaadata? Lase käia. Nad on stringid. Nii, quote, lõppeb Humala ja tsiteerida, lõppeb David Humala on stringid. Ja just mõtlesin intuitiivselt nüüd, teades, mida sa tead C ja PHP, Miks ma ei tee seda, mida ma tavaliselt Kasutatud jutumärkide keelpillidele? Miks ma ei taha seda teha? Jah? Sihtrühm: [kuuldamatu] DAVID Humala: Täpselt. Kuna ma kasutan juba jutumärkide teel väljaspool argument PHP funktsiooni, Ma lihtsalt segadusse tõlk. See ei tea, kas need käivad käsikäes? Kas need käivad käsikäes? Kas need käivad käsikäes? Niisiis, ma vaheldumisi asemel. Või ma võiks teha midagi sellist, kurakriips quote või kurakriips tsiteerida. Ausalt, see lihtsalt hakkab saada väga loetamatu ja kole. Aga see oleks saavutada sama tulemuse samuti. Niisiis, kui ma suuta Päring Nüüd vaatame, mis juhtub. Ma lähen edasi minna nüüd ja pigem kui täita PHP kood, mis on koht, kus saate mängida probleemide pani seitse, Ma lähen asemel minna PHP MyAdmin. Ja ma käsitsi läheb minna SQL sakk ja las ma suumida liides. Ja ma lähen kleebi asi, mida ma lihtsalt kirjutada. Ja värvikoodiga on muutunud natuke nüüd, lihtsalt sellepärast, et programm formaadid asju natuke teistmoodi. Aga märkate, et kõik, mida ma olen teinud on ma olen öelnud, lisada Kasutajad. Olen määratud, siis on komadega eraldatud sulgudes nimekirja kahe valdkondades, mida ma tahan lisada, ja siis ma olen sõna otseses mõttes ütles väärtused järgnes teine ​​paren, ja siis kaks väärtust Ma tahan, et plug-in, ja nüüd hea meede, Ma panen semikooloniga lõpus. Niisiis, see ei ole C. See ei ole PHP. See on nüüd SQL, ja ma määrimiseks sellesse veebipõhine kasutajaliides, mis on lihtsalt lase mind niipea kui ma vajutan Go, täidab selle päringu andmebaasi töötab sees CS50 IDE. Nii et see on hea. Pane tähele, et ütles üks rida sisestatud, läks super kiire, 0,0054 sekundiga lisada, et andmeid. Nii, see kõlab päris terve. See ümberkujundatud minu päringu mulle siin lihtsalt seda näha aastal omamoodi värv kodeeritud versiooni. Aga nüüd, kui ma vajutan Sirvi, märkate, et isegi kuigi seal on palju segadusega ekraani, mu laua nüüd on kaks rida. Niisiis, lubage mul minna ja teha teisele. Selle asemel, lase mind minna SQL sakk uuesti. Ja seekord ma lisada midagi Rob ja tema nimi on Rob Bowden. Bowden. Olgem käsku Salvesta. Oih, pigem Go. Vajuta Sirvi uuesti, ja Nüüd märkate Mul on kaks rida. Nii, see on lihtsalt nii keerulisemate kuidas avada Google Spreadsheets ja kirjutades järjest sambaks. Aga mis peamine on see, et meil on nüüd süntaks millega kirjutada koodi, nii et lõpuks saime tegelikult teha mõned ja see. Tuletame meelde, et PHP toetab super globaalseid muutujaid. Mis on sees dollar kirjutama alakriips saada PHP? Me vaatlesime ühe või kaks lihtsat näidet. Ja PSet6, meenub sul hello dot PHP, mis kasutab seda muutujat. Mis läheb seal? Või mis see on? Vähe kõvemini. Sihtrühm: [kuuldamatu] DAVID Humala: See on lumi seemne massiiv, mis on lihtsalt fancy viis öelda massiiv, mis on peamine väärtus paare. Ja võtmed ei ole numbrilist. Nad on sõnad või stringid. Ja just, mida need põhiväärtus paari? Kust nad tulevad? Vabandust? Sihtrühm: [kuuldamatu] DAVID Humala: No? Kust need võti väärtuse paarid tulevad? Öelge uuesti? Jälle? Kas ma olen ainuke, kuulmine midagi? [NAER] See on õige, jah? Sihtrühm: [kuuldamatu] DAVID Humala: Jah, nad pärit stringi. Niisiis, kui teil kerida ajas kui oleme mänginud Google ja me oleme läinud Google.com kaldkriipsuga Otsing küsimärk q võrdub kassid, kui ma Enter ja kui Google rakendati PHP, PHP kood, mis Google kirjutas oleks juurdepääs dollari märk rõhutavad GET mille sees on oluline nn Q ja väärtus nimetatakse kassid, et seda saab siis kasutada harjunud tegema tegelik otsingut. Nii et tegelikult, ma lähen tegema nüüd lähen tagasi oma PHP koodi et sa jälle näha rohkem in PSet7. Ja selle asemel, ühendades kõva kodeeritud väärtused, mis ei tundu väga dünaamiline veebileht, Ma annan teile teaser mida teie tegelik kood teeks. Sa oleks panna kaks küsimärke niimoodi. Ma ei tea, mis kasutajanimi on. Ma ei tea, mida nimi saab olema, aga ma tean, et ma ei saa saada neid dünaamiliselt. Seega, kui koodi anname nüüd on kood töötab Google'i serveritesse, või kui see on hello dot PHP, mis pakub PSet6, Ma lähen edasi kanduda päringu funktsiooni nagu printf, kaks argumenti. GET, quote, lõppeb kasutajanime Ja saada, quote, lõppeb nime. Ja nüüd, märkate, mida üldine struktuur on siin. Mul vasakul servas kõne Seda funktsiooni nimetatakse päringu PHP. Mul on veel esimese argument, vaid mingi teksti. Aga et tekstistringi on kirjutatud keeles nimetatakse SQL. Ja ausalt öeldes, see ei ole suur keel. Me ainult räägime, see ametlikult täna, tõesti. Ja siis probleem seatud seitse, seal on suhteliselt mõned omadused, et me oleme läheb võimendada. Küsimärke, aga mõtlen pistik väärtus siin ja plug teises väärtus siin. Ja teate, ma olen ära jätta, mida kogu quote-- kuradi see-- ümber tsitaat tähistab seekord. Olen jäetud tsitaat märgid ümber küsimärk, sorry, seekord. Niisiis, milline on tore see küsimärk funktsioon, mis PHP kipub toetama, Ruby ja Python ja teistes keeltes, see tähendab lihtsalt plug mõnel Väärtustame siin ja sa tead, mida? Sa nuputada, kas kasutada ülakoma või jutumärkide. Ära tüüta mind nendega intellektuaalselt ebahuvitav üksikasjad. Aga veenduge, et see on õige nii et minu kood on lõppkokkuvõttes tegevus- ja ohutu, mis on tähendus enne pikk. Nüüd, kui paljud argumendid kokku, lihtsalt olema selge, on päringu funktsiooni võtmist? Igaüks taha hääletada rohkem kui kaks? Kolm? Muidugi, miks? Miks kolm? Sihtrühm: [kuuldamatu] DAVID Humala: Täpselt. Esimene osa on string. Teine argument on dollari märk rõhutavad GET sulg kasutajanimi. Ja kolmas argument on Sama asi, kuid ainult nime. Nii teisisõnu, nüüd kui mul oleks veebivormi mis pidi tekstiväljade üks kasutaja kasutajanimi, üks tema nimi, vaid nagu sa näeksid oma kodulehel kui registreerute mõned kodulehel, võib see olla kood kolp, et tegelikult teeb sisestamise nüüd andmebaasi. Nüüd seevastu olgem kiiresti edasi. Oletame, et kasutaja on nüüd logimist ja soovid kirjutada PHP kood, mis kontrollib, kas isik, kes on just sisse on tegelikult kasutaja saab kasutada päris lihtne süntaks. Võite öelda SELECT oletame star, kus täht tähendab kõike. Ma ei tea, mida ma soovite, et anda mulle kõik veerud tabelis nimetatakse kasutajatega, ja see on tore. Vali toetab milline nimetatakse predikaat, mis on nagu viis saamise mida sa tahad. Kus kasutajanimi võrdub tsitaat, lõppeb Humala. Nii ka siin, ma olen varjatud sees argument to PHP funktsioon, rida SQL koodi. Ja et SQL koodi selle aeg on sõna otseses mõttes läheb otsida quote, lõppeb Humala. Nüüd see pole veel kõik, mis kasulik, nii et ma lähen vahele, et ja ma lähen ära koristama see tip Brady ja mine ja plug-in asemel küsimärk siin. Nii lihtsalt peab olema selge, mida peaks minu teine ​​argument olla, kui keegi on just sisse ja ma tahan vaadata, kas ta on tegelikult kasutaja? Sihtrühm: [kuuldamatu] DAVID Humala: Jah. Olen kuulnud dollari märk alakriips Saa Quote, lõppeb kasutajanimi. Ja see peaks tagasi mulle ükskõik milline rida minu andmebaasis mis on kasutajanimi ja Humala. Nüüd loodetavasti ma lähen tagasi null, kui Humala pole kunagi olnud siin, või üks, kui tal on. Ma ei saa tagasi kaks või kolm või neli. Miks? Sihtrühm: [kuuldamatu] DAVID Humala: ma ütlesin unikaalne, eks? Lihtne põhjus. Sest ma ütlesin seda ju olema unikaalne, vaid loogiliselt, Sul võib olla null või üks Malans selles andmebaasi tabelisse. Nüüd kui kõrvale, lihtsalt, et sa oled näinud see, kuigi ma saan kasutada GET ja kuigi PSet6 kasutatakse ainult GET, saate kindlasti POST. Ja meenutada, et Post on teine tehnikat andmete esitamise alates vormis, kuid see ei näita üles URL. See on veidi turvalisem kindlasti jaoks asjad kasutajanimed ja paroolid, mis PSet7 on tegelikult kaasata. Niisiis, teeme seda PHP MyAdmin ja vaata, mis juhtub. Ma lähen MySQL tab. Ja märkad, et vaikeväärtusi PHP MyAdmin, lihtsalt püüan olla kasulik, on valida star kasutajate kus üks. Noh, üks on alati tõsi, et see on rumal tõhus lihtsalt valida kõike. Aga ma lähen veidi rohkem pedantne ja käsitsi kirjuta välja SELECT tähe kasutajad. Nüüd tehniliselt, saate Tsiteerin nimi tabelid. See on haruldane, et sa pead, aga märgata neid ei ole teie tavaline hinnapakkumisi USA klaviatuuri. See on niinimetatud graavis, mille Üldiselt on peal vasakul nurgas oma klaviatuuri. Aga see on haruldane, et teil tegelikult vaja muretseda, et nii et ma lihtsalt jätta neid niikuinii. Nüüd lubage mul minna ja tabas minna. Ja kui palju ridu ma peaksin tagasi, kui ma valida tähe kasutajad? Sihtrühm: [kuuldamatu] DAVID Humala: Mitu rida on, kindlasti. Aga kui palju selles konkreetne jutt kohe? Kaks, sest seal oli mina ja seal oli Rob. Niisiis, kui ma vajutan Go näen visuaalselt, et Ma olen saanud tagasi, tõepoolest, kaks rida. Seal on palju segadust kohta ekraan, aga ma näen ainult kaks rida. Seevastu, kui ma seda uuesti ja teha VALI star kasutajate, kus kasutajanimi võrdub quote, lõppeb Humala, nüüd, kui ma vajutan Go, Ma olen ainult hakka tagasi ühes reas. Ja lõpuks, kui ma midagi sellist, arvan et ma ei hooli saada kõike, mis on selline mõttetu nüüd sest seal on ainult kaks veergu. See ei ole nagu ma valides suur hulk andmeid. Oletame ma minna ja ei valige nimi kasutajate, kus kasutajanimi on võrdne Humala, Mis on tore SQL ausalt, on see tõesti lihtsalt ei mida sa öelda tahad. See on päris lühike, kuid sa sõna otseses mõttes lihtsalt öelda seda, mida sa tahad teha. Vali nime kasutajate kus kasutajanimi võrdub Humala. Ja see on tõesti nii selge. Nii, nüüd, kui ma tabanud Go, kui palju rida ma lähen tagasi saada? Üks, sest see on lihtsalt Humala, loodetavasti. Või null, kui ta ei ole olemas, kuid ühe maksimaalselt. Ja kui palju veerge ma saan tagasi? Mitu sambad? Seekord ma lihtsalt lähen saada üks, sest ma ei ole vali täht, mis on kõike. Nüüd ma valides lihtsalt nime, nii et ma lihtsalt saada tagasi üks veerg ja üks rida. Ja tundub justkui asjakohaselt naeruväärne, lihtsalt otsin super väike niimoodi. Niisiis, mis tegelikult toimub? Kui te käivitate SQL päring kasutades valige, mida sa saada tagasi andmebaasist on nagu ajutine tabel ridade ja veergude, võibolla, aga et jätta kõik, mis tegelikult ei valinud teid. Nii, see on nagu siis, kui keegi oli suur tabelisse kõik õpilased Registreeritud mõnda üliõpilased ja sa ütled, anna mulle kõik uustulnuk, kes olen Registreeritud meie õpilaste rühm, mida Teie kolleegi üliõpilased võiksid teha on nad võiksid lihtsalt käsi sa kogu tabelit. See on nagu öelda valige star. Ja see on natuke tüütu, kui sa ainult tahtsid uustulnuk. Ja nii, kui sa selle asemel ütles, Vali täht andmebaasi tabeli kus aasta võrdub tsitaat, lõppeb uustulnuk, see on justkui oma sõber õpilase grupp sõna otseses mõttes esile ja kopeerida ainult uustulnuk rida, kleebitud nad uude Google Töövihik või Exceli faili, ja andis sulle tagasi tulemuseks faili ainult. See on kõik, mis läheb kohta kontseptuaalselt siin. Nii et lõpuks, mida me teha saame päris väljamõeldud asju salvestades asjad kasutajanime ja paroolid jms. Aga selgub, et peaksime tegema natuke teistmoodi kui see. See ei ole nii tark, et ainult salvestada kasutajanimi ja parool. Keegi varem, ma arvan siia alla, soovitas ID. Nüüd ID võiks olla nagu Harvardi ID või Yale'i Net ID, kuid see võiks olla veelgi lihtsam Meie andmebaasis puhul. Ja tõepoolest, ühise juhul on, et teise kolonni. Ja ma lähen edasi ja muuta oma laua. Ja kui sa mängida Selle liidese PSet7, näete, et saate kontrollida Selle nupu siin ja lisada valdkonnas alguses lauale. Ja nüüd, kui ma vajutan Go, see läheb mulle üks neist vormidest varasemate. Ma lähen lisada Väli ID. Ja ma teen seda arvuline. Mul on terve hunnik väärtuste numerics. Ma lihtsalt valida INT ja ei muretse erinevad suurused. Ma ei pea täpsustada pikkus või väärtus, sest see saab olema 32 bitti ükskõik mida. Näitajad, me ei näinud enne. Iga huvi mõni neist menüüvalikud seekord? Sest INT? Mida soovitaksite? No? Kas mõni neist on mõtet? Jah. Jah, allkirjastamata, eks? Üldiselt, kui me ei kavatse anda igaüks unikaalne number, mis on koht, kus see lugu on läheb, ma tõesti tahan ainult inimene saada nii palju nagu null ja üks ja kaks ja kolm ja neli. Ma ei pea tegelema negatiivse numbrid. See lihtsalt tundub tarbetu keerukus. Ma tahan 4000000000 võimalikku väärtust, ei 4000000000 võimalikku väärtust, nii et ma lihtsalt kahekordistunud suutlikkust minu INT. Selle kõrvale, kui soovite siduda see, et midagi nagu Facebook, tagasi justkui minu päev, mil Facebook kõigepealt tuli välja, Ma usun seda, mida nad olid kasutades oma MySQL andmebaasi salvestada kasutaja tunnust, oli lihtsalt INT. Aga muidugi, seal on palju reaalsed inimesed maailmas. Seal on palju võltsitud Facebook moodustab kogu maailmas. Ja nii lõpuks, Facebook ajama suurust INT, nelja miljardit väärtus. Mistõttu, kui te vaatate ümber ja seal on veebilehed mida öelda, mida oma unikaalse ID on. Ja kui sa kunagi valisid kasutajanime Facebook, näete oma unikaalne ID. Ma arvan, et see profiili dot PHP küsimärk ID võrdub midagi. See on nüüd midagi suurt INT või pika pika kui soovite, mis on 64-bitine väärtus või midagi võrreldavat. Seega, isegi reaalses maailmas teha neid küsimused lõpuks mõnikord oluline. Ja selgub siin, kui ma olen andes kogu oma kasutajate unikaalne ID, Ma tahan olla super selgesõnaline ja minimaalselt teha selles valdkonnas ainulaadne. Selgub aga seal on üks tükk nomenklatuuri täna liiga see on primaarvõti. Kui sa mingit andmebaasi laua ja sa tead ette et üks tulp nimetatud tabelis peaks ja üheselt identifitseerida rida tabelis, mida soovid täpsustada seda ja öelda andmebaasis see on minu esmane võti. Võib korduda muudes valdkondades, aga ma ütlen andmebaasi, et see on minu esmane, minu olulisim, see on garanteeritud olema unikaalne. Nüüd tundub, et see üleliigne. Ma teen ettepaneku võtta, et me lisada, klõpsates Salvesta siin valdkonnas nimetaks ma lähen minna ja klõpsake AI, me tuleme tagasi et ühel hetkel, säästate. Pakun nüüd, et minu laua näeb välja selline. Mul on INT Väli ID, char valdkonnas nimetatakse kasutajanime, varchar Väli nimi, kuid ID, kas see on esmane ja seetõttu unikaalne, Miks ma lihtsalt raisku aja sisse, mis tõhusalt on teine ​​unikaalne Väli ID, mis on INT? Kasutajanimi, mäletate, oli juba unikaalne, me ütlesime. Nii lihtsalt loogiliselt, sa ei pea üheski andmebaasis kogemus põhjus läbi selle, miks Võib Olen tutvustas INT nagu minu kordumatu tunnus ka? Mis see-- veelkord öelda? Sihtrühm: [kuuldamatu] DAVID Humala: Juhuslikud ühendus on lihtsam, miks? Sihtrühm: [kuuldamatu] DAVID Humala: Jah, see on lihtsalt juurdepääsu numbrid. Niisiis, kui te arvate sellest tõeliselt on tabel, nagu massiivi, nüüd on mul kordumatute tunnuste et ma saan hüpata ringi. Ja parem kui ikka on, et kui suur on INT läheb jälle? 32 bitti või neli baiti. Kui suur on minu kasutajanimi saab olema? Maksimaalselt? 16 baiti. Niisiis, kui teil on tõesti hoolib täita oma kood, arvan, et tagasi PSet5 sooviksite otsida neli bait väärtusega või 16 baidi väärtus, eks? See on tõesti nii lihtne. Sa pead tegema neli korda nii palju tööd otsida kasutajanimed, sest need on 16 baiti. Nii, teil on sõna otseses mõttes võrrelda kõiki 16 baiti olevat Kindlasti jah, see on kasutajanimi tahan. Arvestades eest INT, saate seda teha vaid nelja baiti. Ja kui kõrvale need, huvitatud arvuti riistvara, Selgub mahub midagi INT või 32-bitine väärtus midagi nimetatakse register arvutis CPU, mis tähendab, et see on super, super kiire, et isegi kõige madalama tasemel arvuti riistvara. Niisiis, seal on lihtsalt eeliseid kogu. Niisiis, mida see tähendab? Tegelikult, kui sa mingit andmebaasi tabeli peaaegu kogu aeg kas sa ei ole ainult andmete hoolid, vaid ka midagi kordumatu tunnus sest see läheb tehkem muid asju. Ja olgem komistada üks probleem. Oletame, et kasutajad ei ole lihtsalt kasutajanimed ja nimed, kuid neil on ka asjad linnad ja riikide ja postiindeksid, vähemalt siin USAs. Nii, et ma lähen edasi minna ja lihtsalt kiiresti öelda, anna mulle veel kolm sambad lõpus tabelis. Ja see saab olema City, see saab olema riigi, ja see saab olema Zip. Nüüd City, milliseid andmetüüpe kui see peaks olema, võib-olla? Varchar? Ma ei tea, mida Pikim nimi linn on. Kusagil Ameerikas, seal on ilmselt mõned naeruväärselt pikk sõna, nii Lähme koos 255, mõnevõrra ajalooliselt või meelevaldselt. Riik, mida sa teha tahad? Kohtuotsus kõne, eks? Mis võibolla kõige tõhusam? Mitu tähemärki? Võib-olla vaid kaks, kui me suudame pääse teed lihtsalt, jms, MA Massachusetts ja nii edasi. Niisiis, ma lähen char väärtus kaks. Zip kood on huvitav. Oleme siin 02138, nii et soovitab, et peaksime kasutama, mida? See on INT, eks? INT, INT, lühike? Lühike töötaks. No? CHAR või viis, aga ma tahan INT. Miks tagurdamise kohta INT? Veenda mind sellest. Mis loll umbes INT, minu idee? Jah. Sihtrühm: võtavad rohkem mälu. DAVID Humala: võtavad rohkem mälu. Neli baiti, kuid sa oled ettepaneku postiindeksi viie baiti või keegi oli nagu CHAR, mis tunne on eh, see ei ole tõesti puhul. Noh, lõbus lugu. Aastaid tagasi, kui ma harjunud kasutama Microsoft Outlook minu e-posti, Ma lõpuks tahtis minna Gmail. Ja nii ma eksporditakse kõik minu kontaktid Outlook CSV-failina. Komadega eraldatud väärtuste, mis lihtsalt tähendas Ma olid kõik mu sõbrad nimed ja viimase Nimede ja telefoninumbrite ja postiindeksid ja kõik see. Ja siis ma tegin viga avades selle Excelis, mis on tabelarvutusprogrammi, et mõistab CSV faile nagu me oleme näinud. Aga siis pean ma tabanud, nagu, Juhtimis- ja kontrollsüsteemi S ühel hetkel. Ja Excel ilmselt ajal oli omadus, mille läbi iga kord, kui ta nägin number, seda üritanud olla kasulik. Ja kui see number algas nulli, see oleks lihtsalt lahti saada neist. Miks sa vajad juhtiv nullid täisarvud? Nad on mõttetu, matemaatiliselt. Nad ei ole mõttetu USA Postal süsteemi. Niisiis, ma olen olnud juba aastaid, sel päeval, ma ikka on sõpru, kui harva juhtub, et mul on vaja kellegi tegeleda nendel päevadel, Ma ikka näha, et ma on sõber Cambridge, Massachusetts, 2138. Ja see on tüütu, kui sa oled üritab sorteerida ning programmiliselt luua ümbriku või lihtsalt kübeke see maha. Ja see on sellepärast, et sel põhjusel, Ma valisin vale andmete tüübi. Niisiis, ma armastan oma idee. Olgem kasutada sümbolit valdkonnas. Viis märki, välja arvatud on nurgas puhul. Kui sa ikka saata posti, mõnikord postiindeksid nendel päevadel, nad, nagu, pluss neli. Niisiis, me peame sidekriipsuga ja seejärel vajame veel neli numbrit. Nii et olgem ausad, see võiks minna mitmeti. Sest nüüd, ma lähen hoida see lihtne ja ma olen lihtsalt ütlen, et see on viie CHAR väärtus ja me oleme läheb vahele kogu kriips pluss neli. Aga need on, milliseid kompromisse. Ja sa ei mõtle Samad probleemid tekivad Telefoninumbrite või muudes valdkondades. Ja nüüd, see on tegelikult rumal tee minna. Oletame Rob ja I ja Hannah ja Maria ja [? Davon?] Ja Andy ja teised töötajad elavad kõik Cambridge, Massachusetts, 02138. See tegelikult loll, et ma olen Lisades oma kasutajate tabelist, linn, riik, ja ZIP. Miks? Sihtrühm: [kuuldamatu] DAVID Humala: Ütle uuesti? Sihtrühm: [kuuldamatu] DAVID Humala: Nad alati lähe kokku, eks? Kui selgub, oleme harjunud mõtlema see oli nii kuni me ammendavalt otsida kogu USA, ja selgub, et seal on mõningaid puudusi kus mitmed linnad on Samal zip, mis on imelik. Aga kui me ette näha, et nüüd, 02138 Alati on Cambridge, Massachusetts, miks maailmas oleks sa salvestada Sinu andmebaasi Cambridge ja MA ja 02138 minu ja Hannah ja Rob ja for [? Davon?] Ja teised, kes elavad siin Cambridge, see on täiesti üleliigne. Me peaksime minema lihtsalt ladustamiseks mida? Just sihtnumber. Aga siis, kui me salvestada ainult sihtnumber, ma ei taha, ilmselt, minu kodulehel teada, kus 02138 on. Niisiis, ma pean teises tabelis. Ja see on OK. Ja tegelikult on see üks disaini protsesside kavandamise tabelid et saad teha PSet7 ka kusjuures soovite tegur ühised andmed. Just nagu me oleme faktooring välja ühine kood ja faktooring ühised stiilid CSS, siin liiga andmebaasis kui ma ainult vaja 02138 üheselt tuvastada kellegi kodulinnas, ei talleta Cambridge, Mass eest iga darn kasutaja oma laua. Selle asemel, on eraldi tabel nimega Postiindeksid, et peaks olema, mida sambad? Tõenäoliselt ID-valdkonnas, lihtsalt sellepärast, et põhimõtteid me räägime nüüd. Tõenäoliselt zip väli 02138. Ja siis ilmselt mida teised veerud? Linn ja riik, kuid ainult üks rida 02138, üks rida 02139, üks rida 90210. Ja see on sõna otseses mõttes kõik sihtnumbrid ma tean. Nüüd, mida saate teha? See on problemaatiline, sest Nüüd on mul kaks tabelit. Niisiis, minu kasutajad on enamasti üle siin, kuid nende linnriik info on siin. Niisiis, tuleb välja, SQL, seal on tegelikult viis liituda info ja sa näed seda ka pset. Aga selgub, saate midagi sellist. VALI tähe kasutajad, LIITU lukud ON kasutajate dot zip võrdub lukud dot zip. Milline on vähe paljusõnaline, küll, kuid seda vaid tähendab valige kõike protsess võtab oma kasutajate tabelis ja minu lukud tabelis. Liitu neist ühelt valdkonnas neil veerus. Niisiis, sõna otseses mõttes midagi niimoodi, ja anna mulle tagasi uus ajutine tabel see on laiem, mis on suurem, millel on kõik veerud mõlemad. Ja see, lihtsalt oleks süntaks midagi sellist. Niisiis, seal on see ees, kuid seal saab olla teiste disaini otsuseid saate pead tegema, mitte ainult indeksid vaid ka suubuvad väljakutseid. Tegelikult on väljakutse Igal andmebaasi disain kusjuures mõnikord kaks inimest tahta juurdepääs samale rida andmebaasi tabelis. Nii, see on midagi, mida me tulen puutuvad PSet7 samuti. Aga ma mõtlesin, et ma vaadata ühe rünnak, mis on võimalik SQL. Mis on mõned probleeme, mis võivad tekkida? Nii, saate kokku puutuda selle PSet7. Ja me ütlen teile otse, mida kodeerimine lahendus sellele probleemile on. Aga kui te võtate kõrgema klassi, eriti operatsioonisüsteemid, sa lähed tekib küsimus atomicity, probleemi üritavad teha Mitme asja korraga katkestusteta. Ja ma mõtlesin, et ma tutvustada selle Idee PSet7 metafoori et ma õppinud ennast Margo Seltzer on CS164 operatsioonisüsteemid klassi aastat tagasi. Oletame, et teil on üks neist ühiselamus külmkappe oma Dorm tuba või maja, ja sul on tõeline Eelistus piima. Ja nii, te tulete klassi Ühel päeval, kui avate külmik. Oh, kurat võtaks. Ei ole piima külmkappi. Niisiis, sa sulgeda külmik, ukse lukku, lukustada oma Dorm, kõndida ümber nurga CVS, võta line, ja alustada end välja mõned piima. Ja see läheb veidi aega, sest need kuradi ise kassas letid võtta igaveseks kasutada niikuinii. Nii vahepeal oma toakaaslane tuleb koju. Ta tõesti meeldib piim ka. Nad tulevad Dorm tuba, avada külmik, oh, darn ta. Ei ole enam piima. Nii ta ka läheb ümber nurga. Aga nüüd, sest seal on nagu kaks või kolm või neli CVSes lähedal, nad juhtuvad minema üks erinevatega väljakul. Ja nii nüüd, paar minutit Hiljem, te mõlemad koju ja vuih, halvim probleemi kunagi. Nüüd on teil liiga palju piima sest see läheb Hapantua. Ja sulle meeldib piim, aga sa tõesti ei meeldi piima. Nüüd, see oli kallis viga, sest te mõlemad tehtud otsuse aluseks on riigi mõne muutuja oli protsessis on muutunud sind, algataja hakka piima. Niisiis, mida on ehk inimese lahendus sellele probleemile? Sihtrühm: [kuuldamatu] DAVID Humala: Jäta teade, eks? Jätke alati tähele, kui sa oled tuttav, et show. Jah, seal on kahekesi. Niisiis, jätke alati tähele, või sõna otseses mõttes lukustada külmkapp mingi tabaluku või midagi Peal niimoodi. Aga see on tegelikult saab olema peamine probleem on andmebaasi disain, eriti kui sa võisid mitu brauserid, mitu sülearvutid, suurkasutajatega kõik üritavad ajakohastada teavet korraga. Eriti tundlik teave nagu finantsteavet, kusjuures koos aktsia kauplemise veebilehel nagu Teil on hoone, Mis siis, kui sa tahad, et kontrollida, kui palju raha sul on ja siis kui sul on piisavalt, osta mõned varu? Aga mis siis, kui keegi teine, kes on ühine konto teiega on samaaegselt üritab osta mõned varu? Niisiis, ta on kontrollida kontoseisu, te mõlemad saada tagasi samal vastus, ei ole piima. Või nii saad tagasi vastus, sul on $ 100 konto. Mõlemad üritate teha otsus osta üks osa mõne firma aktsia. Ja nüüd, mis juhtub? Sul on kaks aktsiaid? Teil ei ole aktsiaid? Probleemid nagu mis võivad tekkida. Niisiis, me kohtame seda. SQL süst rünnakud, õnneks on midagi, mida me aitame teid, kuid need on metsikult levinud nendel päevadel ikka. Nii, see on lihtsalt üks näide. Ma ei tee väiteid, et Harvardi PIN süsteem tundlikud selle konkreetse rünnaku. Oleme püüdnud. Aga sa tead, et me on valdkond, nagu seda. Ja Yale'i Net ID on sarnane otsin ekraani nendel päevadel. Ja selgub, et võib-olla PIN süsteemi rakendatakse PHP. Ja kui see were-- see Mitte-- nad võib olla kood, mis näeb välja selline. Neil on kaks muutujat. Andke mulle kasutajanimi ja parool kohalt super globaalne muutuja et me rääkisime varem. Ehk Harvard on päringu nagu SELECT tähe kasutajad kus kasutajanimi on võrdne ja parooli võrdne. Ja teate, et ma olen lihtsalt kõrvaldamine seda kasutades lokkis traksidega märke teistest päev, mis tähendab lihtsalt ühendage väärtus siin. Ma ei kasuta küsimärk tehnikat. Mul ei ole ühtegi teist või kolmas argument. Ma olen lihtsalt sõna otseses mõttes ehitamise string ennast. Probleem, kuigi see, et kui keegi meeldib scroob, mis on viide film, logib midagi sellist, ja ma olen eemaldanud dots et tavaliselt varjata paroole, mis siis, kui ta on eriti pahatahtlik ja tema parooli võibolla on 12345, Ühe filmi nimega "Spaceballs" kuid ta kriitiliselt tüübid ülakoma pärast viit, siis sõna otseses mõttes sõna või ruumi, ja siis tsiteerin lõppeb üks võrdub quote üks, kuid teate, et ta on ära jäetud, mida? Ta jättis välja quote paremal ja ta jättis välja quote vasakul. Sest kui see ründaja scroob eeldus on see, et inimesed, kes kirjutas Selle PHP kood ei ole nii hele, äkki nad lihtsalt mõnele üksikule jutumärgid interpolatsiooni muutuja lokkis traksid? Ja et äkki saaks ta lahke ning täiendada oma mõtte neid, kuid nii, et läheb lase tal häkkis PIN süsteem. Teisisõnu, oletame et see on kood ja nüüd ühendage mida scroob kirjutatud. Ja see on punane, sest see on halb. Ja selle aluseks oleva teksti on see, mida ta kirjutada, scroob võiks petta Harvardi server arvesse ehitamise SQL päring string, mis näeb välja selline. Salasõna võrdub 12345 või üks võrdub üks. Mistõttu loogiliselt on see, et see on sisse scroob aastal, kui tema parool 12345 või kui üks võrdsete üks, mis on muidugi alati tõene, mis tähendab scroob alati satub. Ja nii, kuidas määrata Siin, nagu ka paljudel juhtudel, oleks kirjutada rohkem kaitsele. Et kasutada midagi meie tegelik päringu funktsiooni, mis näete PSet7, kus me ühendage midagi küsimärke siin. Ja ilu päringu funktsiooni, et me teile on ta kaitseb nende vastu Niinimetatud SQL süst rünnakud, kus keegi kavaldades oma koodi süstivate enda SQL koodi. Sest see, mis päringu funktsiooni anname tegelikult teha, kui te kasutate küsimärk süntaks ja teine ​​ja kolmas argument siin on see, mida tegid seda lisada sisend, et kasutaja ei esitanud? Need kurakriips hinnapakkumisi. Nii, see põgeneb kõigi võimalike ohtlikke sümboleid. See tundub imelik nüüd, kuid see ei ole haavatav kuna see ei ülesehituse muutmist enam sest et kogu salasõna on nüüd ülakoma see pole, Tegelikult scroob parooli. Niisiis, seal on olnud mõned naljad selle aastate jooksul. Niisiis, see oli tehtud foto Mõne geek parklas millega sa võiksid teada, et mõned linnad ja riikide proovida skaneerida litsentsi plaat teile arve või pileti sulle kui sa lähed läbi ilma, nagu, E-Z Pass asi. Nii, see inimene oletada, et võibolla inimesed kirjalikult E-Z Pass süsteem ei olnud nii särav ja äkki nad lihtsalt märge on kokku string, nii, et ta ei suutnud pahatahtlikult mitte ainult täiendada oma mõtte, aga tegelikult ellu halb käsk, mis me oleme seni mainimata kuid saab ilmselt vist. Et lisaks kustutada ja sisestada ja uuendada ning valida, seal on ka märksõna nimetatakse langus, mis sõna otseses mõttes kustutab kõik andmebaasi, mis Eriti halb. Me saame suurendada selle, kui see on natuke raske näha. See, nüüd on kuulsa multifilmi see on imeliselt tark nüüd ja arusaadav. [NAER] Jah, lahe. Kind of geeking välja. Nii et need, siis on SQL süst rünnakud. Ja nad on nii lihtne, et vältida abil õige koodi või paremal raamatukogud. Ja näete PSet7, mis on miks me anname teile päringu funktsiooni. Niisiis, paar õrritused et me arvasime me tahaks teile siin meie Ülejäänud minuti koos. Niisiis, kui see teile meenub alates nädalal null, siis kehtestati need kaks lambid, mille on kena, mitte ainult sellepärast, nad on üsna ja on värviline, kuid kuna nad toetavad midagi nimetatakse API taotlus Programming Interface Ja in CS50 siiani oleme keskendunud peamiselt GET ja POST, kuid selgub, seal on teised HTTP verbid nagu PUT. Ja tegelikult, see oli liumägi nädalal null kusjuures, kui sa kirjutad koodi, mis saadab a la PSet6 HTTP taotluse, et näeb välja selline selle tüki teksti allosas, mida nimetatakse JSON, või JavaScript Object Märge et me räägime järgmisel nädalal, saab sisse või välja lülitada või muuta värvi tuled sarnaselt. Nii et kui CS50 on ka lisaks mõned need lambid siin New Haven Kui soovite laenata neid lõplikke projekte, Samuti mõned Microsoft Bändid, mis on nagu kellad, et te kannate ümber randme et sarnaselt on API, nii et teil saab kirjutada oma tarkvara nende jaoks. Meil on konto Apple iOS kood nii et kui sul on Apple Watch või iPhone või iPad või iPod, võite kirjutada koodi, mis tegelikult töötab neid. Meil on terve hunnik of Arduinos, mis on tilluke arvutid ilma juhtudel sisuliselt et saate ühendada USB, Tavaliselt sinu enda Mac või PC, kirjutada koodi, mis töötab nende füüsilist seadmed, mis on sageli andurid neile nii saad suhelda reaalses maailmas. Meil on terve hunnik hüpe Resolutsiooni seadmeid, mis on USB seadmed Mac ja Arvutid, siin ja jälle, New Haven. Ja kui sa ühendada oma Mac, saab tegelikult kontrollida arvuti kirjutades tarkvara et infrapuna kiirte, arvud, kus oma inimeste kätega, isegi ilma puudutamata klaviatuuri. Me mõtlesime, et tahaks jagada kiire heidame pilgu sellele, näiteks. [Muusika mängib] Niisiis, meil on terve hunnik neid asju, Ka nn Müo arm ansamblid mis paned üle käsivarre ja siis saab kontrollida reaalne maailma või virtuaalses maailmas niimoodi. [Muusika mängib] Või on meil ka mõned Google Papi, mis on sõna otseses mõttes, nagu, pappkast võid panna oma nägu, kuid slide telefoni sinna nii, et paned klaasi oma telefoni tõesti lähedal silmad. Ja Google kartong on päris odav at $ 10 või 20 $. Ja see on natuke objektiivid et veidi off vahetuses pilt ekraanil oma inimese silmad teile sügavust nii et sa tegelikult 3D keskkonna ees. Meil on ka mõned Samsung Gear, mis on kallim versioon sellest, aga mis saab sarnaselt slaidi ühes Android telefoni ja annab sulle illusiooni of-- või anda kogemusi virtuaalne reaalsus. Ja meie kaks viimast minutit arvasime me tahaks proovida seda teha. Kui ma ei saa prognoosida, millist Colton on siin lihtsalt huvi äratamiseks, lubage mul minna ja visata üles suurel ekraanil siin. Lubage mul tappa tuled. Colton, sa tahad minna ja pane oma mobiiltelefoni hetkeks ja tule üle Keset lava? Ja sa tahad project-- see on see, mida Colton näeb. Nüüd, Wi-Fi siin on ei ole nii tugev selle seadme jaoks et see on super kaalukad, kuid Colton on sõna otseses mõttes Selles maagiline futuristlik koht. Ta näeb vaid ühe pildi. Sa näed oma vasaku ja parema silma et tema aju on õmblemisega kokku kolmemõõtmelisse keskkond tema nägu. Ta on lihtsalt valinud menüükäsu siin. Ja nii uuesti, ta kannab seda peakomplekt koos Samsung telefoni peal, mis on juhtmevabalt projekteerimine meie pea kohal. Nüüd oled Mars, ma arvan? COLTON: Ma arvan küll. Ma ei ole kindel, [kuuldamatu]. [NAER] DAVID Humala: Selgub Mars on nende menüüsid. COLTON: [kuuldamatu] mõned lahedad kohti, kui me tahame minna mina-- DAVID Humala: kuhu me tahame minna? COLTON: [kuuldamatu] DAVID Humala: Ja vaatame kus Colton on meid nüüd. COLTON: [kuuldamatu] DAVID Humala: Niisiis, seal on nii palju erinevates kohtades saab võtta ise. Seal FAPIs, mille kaudu saab kirjuta mänge või vastasmõju, joosta, lõpuks telefoni. Niisiis, sa tõesti ainult kirjalikult mobiiltelefoni app. Kuid tänu tarkvara ja graafika võimeid, nüüd Colton on selles tilluke suvila. Ja riski valdav ise, Colton ja ma jään ringi samas lõpus class täna Kui soovite tulla ja mängida. Ja me toome neid järgmisel nädalal tagasi ka. Ilma pikema, jututa Ongi täna. Näeme järgmisel nädalal. [MUSIC - Ragga kaksikud, "paha mees"]