>> [Musiikkia]
DAVID MALAN: Okei, tämä on CS50.
Tämä on viikon lopussa kahdeksan.
Ja tänään, aloitamme täyttää joitakin paloja
kun se tulee rakentaa asiat verkossa.
Niin, muistuttaa, että maanantaina vietämme paljon enemmän aikaa
PHP, joka on tämä dynaaminen ohjelmointikieli, joka
antaa meidän tuotos, muun asioita, HTML ja muita sisältöä
että me haluamme nähdä.
Mutta emme ole todella pohtinut, miten aiomme säilyttää mitään tietoja.
Itse asiassa lähes kaikki kyseisen Super Mielenkiintoisia sivustoja käyt tänään
jonkinlainen tietokannan loppupäätä, eikö?
Facebook varmasti tallentaa paljon tietoja noin meitä kaikkia ja Gmail tallentaa kaikki
sähköposteja.
>> Ja niin monet muut sivustot eivät ole vain staattista sisältöä, joka on kattava.
Se on todella dynaaminen jollakin tavalla.
Voit antaa panoksensa, se päivittää sivut muita ihmisiä.
Saat viestit, voit lähettää viestejä, ja niin edelleen.
Joten tänään, katsomme lähemmin perustuksista hankkeen
että voit sukeltaa seuraava viikko, CS50 Finance, joka
on todella menossa on rakentaa jotain ei C, mutta PHP.
Sivusto, joka näyttää vähän jotain tällaista
jonka avulla voidaan ostaa ja myydä varastot, jotka ovat todella
aikoo hyödyntää reaaliaikaisesti Varastossa tietoja Yahoo Finance.
Ja niin lopulta, sinulla on illuusio itse ja käyttäjille
että olet todella ostamalla ja myymällä varastot ja saada lähes reaaliajassa
päivityksiä, toimitusjohtaja portfolio, jotka kaikki
aikoo vaatia ottaa, lopulta, tietokanta käyttäjiä.
>> Joten, omin sanoin, varsinkin jos et ole
Super perehtynyt tietokoneen tiede tai tietokantojen, mitä
tiedät tietokanta olla juuri nyt, kuin teknisen kannalta?
Mikä se on?
Miten kuvailisit sitä ja kämppäkaveri tai ystävä?
>> Yleisö: [äänetön] tiedot [äänetön]
>> DAVID MALAN: Niin, luettelo tiedoista, tai store-- luettelo tiedoista
että saatat haluta tallentaa jotain, kuten käyttäjä.
Ja mitä käyttäjät ovat niihin liittyviä?
Jos olet käyttäjä Facebookissa tai Gmail, mitä ominaisuuksia
että me kaikki käyttäjät ovat?
Kuten, mitä voisi olla joitakin sarakkeet taulukkolaskenta jota
viittasi viimeksi?
Koska uudelleen, voit ajatella tietokannan
todella niin hieno Excel-tiedosto tai Google Taulukkolaskenta tai Apple Numerot tiedosto.
>> Joten, mitä mieltä olet kun ajattelee käyttäjän?
Mitä ne ovat?
Mikä tuo on?
>> Yleisö: nimi.
>> DAVID MALAN: nimi.
Joten jos nimi, kuten David Malan olisi nimi joidenkin käyttäjä.
Mitä muuta käyttäjä on?
>> Yleisö: tunnus.
>> DAVID MALAN: tunnus.
Joten, kuten henkilötunnus, kuten teidän Harvard Tunnus tai Yale Net tunnus tai vastaava.
Mitä muuta voi käyttäjä olla?
>> Yleisö: Salasana.
>> DAVID MALAN: salasana, ehkä osoite, ehkä puhelinnumero, ehkä
sähköpostiosoite.
Niin, siellä on rypäleterttuja aloilla ja tämän voisi tavallaan karkaa käsistä
nopeasti heti, kun aloitat ymmärtämättä, oi, nyt tallentaa tämän
ja nyt tallentaa sitä ja tätä.
>> Mutta miten me todella tehdä?
Joten jälleen, henkinen malli on tänään kuin me
sukeltaa todellinen SQL, Structured Query Language,
on tietokanta, joka näyttää tältä.
Se on vain rivejä ja sarakkeita.
Ja voit kuvitella Google Spreadsheets tai useita muita ohjelmia.
Mutta mikä on avain noin MySQL, joka on tietokantaohjelmisto aiomme käyttää,
vapaasti avoimesti available-- Facebook käyttötarkoitukset
se ja useita muita websites-- tietokanta tallentaa asioita relationally.
Ja relaatiotietokannan vain tarkoittaa joka kirjaimellisesti
tallentaa tietonsa riveihin ja sarakkeisiin.
Se on niin yksinkertaista.
>> Joten, vaikka jotain Oracle, joka saatat olla yleisesti kuullut
on relaatiotietokanta.
Ja alla huppu, se tallentaa tiedot rivejä ja sarakkeita.
Ja Oracle laskuttaa sinua paljon rahaa tehdä niin,
katsoo MySQL maksut te mitään saman.
Joten, SQL aikoo antaa meille vähintään neljä toimintaa.
Kyky valita tiedot, kuten lukea tiedot, lisätä, poistaa ja päivittää tietoja.
Toisin sanoen, ne ovat todella neljä keskeistä toiminta
jotka ovat menossa, jotta voimme muuttaa kamaa ne riveihin ja sarakkeisiin.
>> Työkalu että käytämme tänään erityisesti oppia SQL ja leikkiä sillä
on jälleen kutsutaan PHP MyAdmin.
Se on web-pohjainen työkalu.
Yhteensä sattumaa, että se on kirjoitettu PHP.
Mutta se tulee antaa meille graafinen käyttöliittymä jotta voimme todella
luoda nämä rivit ja sarakkeet ja sitten puhua heille kautta koodia.
Joten, nyt nyt alkaa mielestäni on suoraan sanottuna
tavallaan hauskaa prosessi rakennus loppupäätä sivustot,
osat, että käyttäjät eivät katso, mutta varmasti tehdä välitä,
koska se on melko tietoja on menossa.
Niin, samanlainen kuin C ja hieman vähemmän kuin PHP,
SQL, tai tietokanta, joka tukee SQL, on ainakin nämä tietotyypit
ja rypäleterttuja muut.
CHAR, VARCHAR, INT, bigint, DECIMAL, ja DATETIME.
Ja siellä koko joukko muita ominaisuuksia,
mutta katsotaan tehdä tämän tapa todellinen esimerkki.
>> Aion mennä CS50 IDE missä, etukäteen, olen kirjautunut
ja olen myös käynyt URL tämä työkalu nimeltään PHP MyAdmin.
Ja ongelma asettaa seitsemän, kerromme sinulle kuinka päästä tähän käyttöliittymä
yhtä hyvin.
On vasemmassa yläkulmassa, huomata se sanoo luento.
Ja se tarkoittaa vain sitä, että etukäteen, olen luonut
tyhjä tietokanta nimeltä luento että ei ole laskentataulukoita sitä vielä.
Ei ole rivejä ja sarakkeita.
Koska ensimmäinen asia aiomme tehdä
on alkaa luoda taulukon että menee tallentaa myös käyttäjille.
>> Joten, kirjaimellisesti yli täällä oikealle, olen
kerron tietokantaan Haluan pöytä soitetuille käyttäjille.
Niin, tämä on kuin tiedosto, että olen haluat tallentaa kaikki minun tiedot.
Ja kuinka monta saraketta?
No, pitää se yksinkertainen nyt.
Haluan vain tallentaa kuin käyttäjätunnus ja nimi käyttäjälle.
Aloitamme pieni.
Joten, haluan kaksi saraketta yhteensä.
Ja aion mennä eteenpäin ja valitse Siirry.
Ja sitten, näiden pylväät, mitä aion
jotta do-- jos tämä internet cooperates-- kunnossa,
joten aiomme kokeilla uudelleen.
Aion luoda taulukon nimeltä Käyttäjät, joilla on kaksi saraketta, valitse Siirry, OK.
Nyt meillä se todella nopeasti.
Kiitos, hyvin tehty.
Selvä, joten mitä haluamme nämä sarakkeet kutsua?
>> Niin, yksi tulee olemaan nimeltään Käyttäjätunnus.
Joten, kaikki näen here-- ja käyttöliittymä rehellisesti saa hieman ruma lopulta,
kun alkaa kirjoittaa kaiken tämän tiedon.
Mutta mikä on mukavaa on, että sellainen Paradoksaalisesti Luon sarakkeet,
mutta työkalu on tyhmästi panivat riveihin
jotta voin määrittää nämä sarakkeita.
Niin, siellä on kaksi aihioita on alle nimi.
Ja yksi näistä aloista I haluavat kutsutaan Käyttäjänimi,
ja muut alan haluan soittaa nimi.
>> Ja nyt minun on valittava tietotyyppejä näitä asioita.
Joten, kun taas Excel ja Google Spreadsheets,
jos haluat sarake, voit kirjaimellisesti kirjoita Nimi tai käyttäjätunnus, Enter.
Ehkä teet sen rohkea kasvot vain selvyyden vuoksi, mutta siinäpä se.
Et määritä tyyppisiä sarakkeita.
Nyt Google Spreadsheets tai Excel, olet voi määrittää, miten tiedot on suoritettu.
Voisit mennä Muotoile-valikosta ja sinä voi määrittää näytä tätä kuten dollarin merkki,
näytä tätä kuin liukulukuarvoksi.
>> Niin, se on samanlainen hengeltään että mitä aiomme tehdä,
mutta tämä on todella menossa pakottaa tiedot ovat tietynlainen.
Nyt, vaikka hetki sitten sanoi, että on vain vähän tietoja tyyppejä,
siellä oikeastaan paljon, ja ne ovat
vaihtelevalla erityisyyttä.
Ja sivuun, te voi jopa tehdä hienoja asioita
kuten varastointi geometriat sisällä tietokantaan.
Voit tallentaa asioita kuten GPS-koordinaatit
ja itse löytää, matemaattisesti, kohtia, jotka ovat lähellä toisiaan.
Mutta aiomme pitää tämä Super yksinkertainen
ja mennä jopa täällä, kaikki ns merkkijono tyyppejä.
>> Niin, tässä on luettelo koko joukko vaihtoehtoja.
CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT.
Ja se on tavallaan ylivoimainen.
Ja valitettavasti hieman paradoksaalisesti C,
CHAR ei oikeastaan ​​CHAR.
Jos määrität tietokantaan että tietotyyppi on CHAR,
se tarkoittaa, että kyllä, se on CHAR, mutta se on yksi tai useampia MERKEILLÄ.
Ja sinun on määritettävä kuinka monta MERKEILLÄ haluat.
Joten, mikä on tyypillinen pituus käyttäjätunnusta?
Onko raja tyypillisesti?
>> Yleisö: [äänetön]
>> DAVID MALAN: 16 ehkä?
Jotain sellaista.
Tiedäthän, takaisin päivä, se käytti olla kahdeksan.
Joskus se on 16, joskus se on vielä enemmän.
Ja niin, tämä ei tarkoittaa anna minulle yksi CHAR.
Tämä tarkoittaa minun pitää ilmoittaa kentän pituutta,
ja nyt voisin sanoa jotain 16.
Ja siellä kaupan tehoilla.
Joten näemme hetken että tämä tarkoittaa yhtä,
jokainen käyttäjänimen on oltava 16 merkkiä.
Mutta odota minuutti, M--L--N. Jos se käyttäjätunnukseni ja olen vain käyttämällä viittä,
mitä ehdottaisitte, että tietokanta tehdä muiden 11 merkkejä
Olen varattu tilaa?
Mitä sinä tekisit?
>> Yleisö: [äänetön]
>> DAVID MALAN: Joo, juuri ne kaikki null.
Tee niitä tiloja.
Mutta luultavasti null, joten paljon kenoviiva nollia.
Niin, toisaalta, olemme nyt varmistanut, että käyttäjätunnukseni
voi olla enintään 16 merkkiä.
Ja kääntöpuoli, jotka on että jos minulla oli todella pitkä nimi
tai halusi todella pitkä käyttäjätunnus kuten jotkut teistä
kaverit saattaisi olla, että korkeakoulussa tai klo Yale.edu, et voi olla yksi.
Ja niin itse asiassa, jos olet koskaan rekisteröity sivusto
ja saat huusi sanoen salasana on liian pitkä
tai käyttäjätunnuksesi on liian pitkä, se on yksinkertaisesti siksi ohjelmoija, kun
määrittämällä hänen tietokanta, päätti, että tällä alalla tulee
olla enää kuin tämä pituus.
>> Hyvä on, niin mitä jos etenemme nimi?
Kuinka kauan Tyypillinen ihmisen nimi on?
Kuinka monta merkkiä, 16?
Olen arvaamaan voisimme löytää joku tässä huoneessa
jossa hänen tai hänen ensimmäinen plus viimeinen nimi on pidempi kuin 16 merkkiä.
Joten, mikä on parempi kuin että, 17?
18?
25?
Isompi?
30?
>> Yleisö: [äänetön]
DAVID MALAN: 5000, Voi luoja.
Niin, se on luultavasti kunnollinen yläraja, sanokaamme.
Ja tässä meillä sellainen on tehdä arvostele.
Kuten, ei ole oikea vastaus täällä.
Infinite ei ole täysin mahdollista, koska olemme lopulta
menossa have-- olemme menossa loppuu muisti.
Joten, meidän on tehtävä arvostele jossain vaiheessa.
>> Hyvin yleinen olisi esimerkiksi jotta use-- ja haluan täsmentää CHAR täällä
kuten before-- 255 oli kirjaimellisesti yläraja tällä tietokantaohjelmisto
vuosia sitten.
Ja niin, paljon ihmisten olisi vain sanoa, hieno.
255 on rajana.
Haluan vain käyttää maksimi.
Ja tämä on melko naurettavaa.
Kuten, jos kirjoitat jonkun nimetä 200 plus merkkiä,
että vähän naurettavaa.
>> Mutta muista, että ASCII ei ole ainoa järjestelmä merkkiä.
Ja niin, erityisesti paljon aasialaisia ​​kieliä
missä on merkkejä emme voi ilmaista koskettimet mun US
näppäimistö, jotkut hahmot ovat vievät 16 bittiä sijasta kahdeksan bittiä.
Ja niin, oikeastaan ei ole kovin kohtuuton
että tarvitsemme enemmän tilaa, jos haluamme sovittaa
suurempi merkkejä kuin hyvin Yhdysvalloissa centric niistä olemme yleensä keskustella.
Joten, tarvitsemme ylärajan.
En tiedä, mitä paras on, mutta 255 on yleensä yhteinen.
25 tuntuu alhainen.
16, 32 tuntea alhainen.
Haluaisin varmuuden vuoksi jotain korkeampaa.
Mutta on vaihtokauppa, kuten aina.
Mikä on, ehkä, ilmeinen kauppa pois varata 255 MERKEILLÄ
kaikkien nimi minun tietokantaan?
>> Yleisö: [äänetön]
>> DAVID MALAN: Mikä tämä on?
>> Yleisö: [äänetön]
>> DAVID MALAN: Se on paljon muistia, eikö?
M--L-A-N-. Olen vain hukkaan 250 merkkiä vain tallentaa nimeni
puolustautui, vain jos joku luokassa on todella pitkä nimi.
Se tuntuu kohtuuttoman kompromissi.
>> Joten, käy ilmi, että SQL, tämä tietokanta kieli,
todella tukee jotain kutsutaan VARCHAR, tai muuttuva CHAR.
Ja tämä on tavallaan mukavaa, että tämä Voit määrittää ole kiinteä
leveys, vaan vaihteleva leveys.
Ja erityisemmin suurin leveys kentän.
Joten, tämä tarkoittaa, että nimi voi olla enintään 250 merkkiä,
mutta se voi varmasti olla vähemmän.
Ja tietokanta tulee olemaan fiksu.
Jos et laita M--L--N, se on vain aio käyttää viisi,
ehkä kuusi tavua, kuten jäljessä null hahmo,
ja ei viettää ylimääräinen 249 tai 250 tavua tarpeettomasti.
>> Joten, tämä tuntuu minun pitäisi on aloitettu tämän tarinan.
Mutta on aina kompromissi.
Niin, toisaalta, käyttäjätunnus olen määritelty olemaan koodattu 16,
ja ehkä se ei ollut oikea puhelu, ehkä se
on, mutta miksi ei käytä VARCHARs kaikesta?
>> Se on olemassa syystä.
Miksi ei käytä VARCHARs kaikkien alojen joiden pituus et tiedä etukäteen
jos se näyttää olevan suuri juttu, eikö?
Käytä vain yhtä paljon tilaa kuin sinun täytyy tähän rajaan?
>> Yleisö: Hitaampi.
DAVID MALAN: Speller?
Yleisö: Tekee se hitaammin?
DAVID MALAN: Voi, se on hitaampi.
Hyvä, se on lähes aina vastaus, rehellisesti.
Kuten, mikä on kompromissi?
Se joko maksaa enemmän tilaa tai se maksaa enemmän aikaa.
Eli tässä tapauksessa se saattaa olla hitaampaa.
Miksi?
>> Yleisö: [äänetön] määritettäessä [äänetön].
>> DAVID MALAN: Hyvä.
Joten, saatat muistan jopa PSED5, leikkii lähestymistapa
sanakirjaan, jos sinulla on varata muistia dynaamisesti tai pitää
kasvaa puskuri, joka voi todella olla hidasta.
Jos sinun täytyy soittaa malloc alla huppu ja ehkä
se mitä MySQL tekee, niin varmasti, että voisi olla kyse.
Ja jos luulet tapa takaisin PSet-- tai jopa
viikkoa kaksi, kun teimme asioita, kuten binäärihakupuu tai jopa lineaarinen haku,
yksi mukavia asioita jokainen sana tietokantaan tai jokaisen sanan sarakkeessa
on täsmälleen sama pituus, vaikka jos koko joukko näistä merkeistä
ovat tyhjiä, on, että voit käyttää random access tietosi, eikö?
>> Jos tiedät, että jokainen sana on 16 merkkiä pois,
voit käyttää osoitin aritmeettinen, niin puhua, ja mene meille 16, 32, 48, 64,
ja voit vain hypätä heti käyttäen aritmeettinen
Jonkin sanat tietokantaan.
Ottaa huomioon, jos se on VARCHAR, mitä sen sijaan on tehtävä?
>> [Puhelimen soivan]
>> Jos se on VARCHAR, sinua voi käyttää random access.
Mitä sinun täytyy etsiä tai tehdä?
Joo?
>> Yleisö: [äänetön]
>> DAVID MALAN: Katso kautta whole-- jälki
läpi koko lista etsivät mitä todennäköisesti?
Minkälainen erityinen arvo?
Yleisö: [äänetön]
DAVID MALAN: Katse varten null terminaattorit
että rajattava erottaminen sanoja.
Joten jälleen, kompromissi, ja ei ole oikea vastaus.
Mutta tämä on silloin, erityisesti kun käyttäjät saavat olla monia
ja kuorma palvelimiin, ihmisten määrä käyttää sitä saa korkea,
nämä ovat todella triviaali päätöksiä.
Joten, voimme jättää nämä kuin tämä, mutta Katsotaanpa selaa yli oikealle
täällä.
Nyt siellä on pari saraketta jossa meidän on tehtävä arvostele.
Onko järkevää sallia käyttäjän nimi, käyttäjän käyttäjätunnuksen tai käyttäjän
nimi, olla null?
Eli vain tyhjä.
Tuntuu hieman järjetön, joten olen aio tarkistaa niitä laatikot.
Mutta se osoittautuu vuonna tietokanta, voit sanoa,
joku voi mahdollisesti olla tämän arvon.
Tämä sarake ei ole todella olla siellä.
>> Nyt, on tämä pudotusvalikosta.
Ja huomaa olen yhä ensimmäisellä rivillä siellä,
joten puhun käyttäjätunnuksen nyt.
Ja käy ilmi, että tietokanta, toisin kuin yksinkertainen pelkkä taulukkolaskenta,
on tehokkaita ominaisuuksia kutsutaan indeksit.
Ja indeksi on tapa kertoa tietokanta etukäteen, että olen ihmisen
olen fiksumpi kuin sinä.
>> Tiedän millaisia ​​kyselyjä, valitse tai lisätä tai poistaa tai päivittää,
että minun koodi tulee päättymään jopa tekee tästä tietokannasta.
Haluan lukea paljon tietoa.
Haluan lisätä paljon tietoa.
Haluan jatkuvasti poistaa paljon tietoa.
Jos tiedän, että aion olla päästä kenttä kuin Käyttäjänimi paljon,
Voin ennaltaehkäisevästi kertoa tietokanta, tiedän enemmän kuin sinä,
ja haluan käskyn, että sinun pitäisi indeksi tällä alalla.
Jos indeksointi kenttä tai sarake tarkoittaa sitä, että tietokannan etukäteen
pitäisi lainata ideoita, kuten, viikko neljä ja viisi ja kuusi CS50
ja todella rakentaa jotain binäärihaku
puu tai jotain yleensä kutsutaan B puu
että oppisit luokkaansa kuten CS124
Harvardin, algoritmit luokka, tai useita muita paikkoja.
>> Tietokanta ja fiksu ihmisiä, jotka toteutetaan sen
tulee selvittää, miten säilyttää että tietotaulukkoa
muistiin jotta haut ja muut toiminnot ovat erittäin nopea.
Sinun ei tarvitse tehdä sitä.
Sinun ei tarvitse toteuttaa lineaarinen haku tai binäärihaku
tai yhdistää lajitella tai valinta lajitella, mitään sellaista.
Tietokanta tekee sen puolestasi jos kerrot se ennaltaehkäisevästi indeksoida tällä alalla.
>> Ja voit nähdä myös, siellä jotkut muut ominaisuudet
voimme kertoa tietokannan valvoa.
Mitä se voisi tarkoittaa, jos päätän Unique tästä valikosta, vain intuitiivisesti?
Joo?
>> Yleisö: [äänetön]
DAVID MALAN: Joo, Käyttäjätunnus on oltava ainutlaatuinen.
Onko tämä hyvä vai huono asia tietokanta, verkkosivuilla käyttäjiin?
Jos käyttäjänimiä on ainutlaatuinen?
Joo, luultavasti.
Jos niin kenttä käytämme kirjautua sisään,
et todellakaan halua ihmisiä, joilla sama tunne tai samaa käyttäjätunnusta.
Joten, voimme olla tietokanta valvoa, että niin
että nyt minun PHP tai millä tahansa kielellä, Minulla ei tarvitse esimerkiksi tarkistaa
välttämättä tekee tämän käyttäjätunnus olemassa ennen kuin antaa jonkun rekisteröityä?
Tietokanta ei anna kaksi ihmistä nimeltä David tai Malans rekisteröidä tässä tapauksessa.
>> Ja syrjään, vaikka tämä valikon vain voit valita yksi,
yksilöllinen indeksi on yksi, joka on indeksoitu super nopea suorituskyky,
mutta se myös valvoo ainutlaatuisuutta.
Ja me palata mitä Kaksi muuta tarkoita vain hetken.
Samaan aikaan, jos menen toinen rivi, joka
on käyttäjän nimi, minun pitäisi määritellä että nimi olisi ainutlaatuinen?
Ei, koska voisit varmasti have-- ei ole kaksi David
Malans tässä huoneessa, todennäköisesti.
Mutta jos me valita eri nimi, voisimme varmasti törmäykset.
>> Muistelen hash taulukoita ja vastaavia.
Joten, emme missään nimessä halua tehdä nimikenttä ainutlaatuinen.
Joten, me vain lähdössä että viiva, viiva, viiva, ei mitään.
Ja aion lähteä kaikki muu yksin.
Itse asiassa suurin osa näillä aloilla meidän ei tarvitse välittää.
Ja kun olen valmis pelastamaan tätä, Jos Internet yhteistyötä,
I valitse Tallenna, ja hyvin, hyvin, hyvin hitaasti ei tietokantaan tallentuvat.
Ja nyt olen takaisin tähän käyttöliittymä, joka tosin,
on ylivoimainen ensi silmäyksellä.
Mutta kaikki aion tehdä, on klikkaa sanaa Käyttäjiä vasemmassa yläkulmassa.
Aion mennä tänne, napsauta Käyttäjiä, ja oletuksena, se
on toteuttanut joitakin SQL, mutta siitä lisää hetken kuluttua.
Tässä on vain yhteenveto siitä, mitä tein.
Ja ei hätää, että näet mainita Latinalaisen ja Ruotsin täällä.
Nämä ovat vain oletus asetukset, koska MySQL alunperin,
tai PHP MyAdmin, toinen tapahtui on kirjoittanut noin Ruotsin kansa.
Mutta se on merkityksetöntä tässä tapauksessa täällä.
>> Hyvä on, joten miksi tämä kaikki mielenkiintoinen?
On käynyt ilmi, voin lisätä tietoja tietokantaan kirjoittamalla koodin.
Ja minä mennä eteenpäin ja minun tiedosto täällä, olen
menossa eteenpäin ja teeskennellä kuin tämä on kytketty tietokantaan, joka
se ei ole tällä hetkellä, mutta se olla, kun saamme ongelman asettaa seitsemän.
Ja aion mennä eteenpäin ja suorittaa toiminto nimeltään kyselyn,
joka annamme sinulle ongelma asettaa seitsemän jakelu- koodin, että
kestää ainakin yhden argumentin, joka on vain merkkijono.
Jono SQL-koodin.
Joten, olet aikeissa oppia kirjoittaa Structured Query Language.
>> Jos haluan lisätä uuden rivin minun tietokanta koska joku on toimittanut
muodossa minun koodi, olisin kirjaimellisesti kirjoittaa INSERT INTO käyttäjät seuraavat
kentät: käyttäjätunnus, pilkku, nimi, ARVOT,
ja nyt minun täytyy lisätä jotain Malan, ja lainaus,
lainaus "David Malan." Ja nyt myös niille, jotka eivät tunne SQL,
miksi minulla on käytössä puolilainausmerkkejä sisäosat vihreä merkkijono?
Mikä voisi olla syy täällä?
>> Huomata Olen sekoittuminen kahdella kielellä.
Kysely on PHP funktio, mutta se vie argumentti.
Ja että väite on itsessään kirjoitettu toisella kielellä nimeltään
SQL, Structured Query Language.
Niin, kaiken, mitä juuri korostettu täällä
on tällä kielellä nimeltään SQL.
Joten, mitä kanssa puolilainausmerkkejä, yhtä nopeasti järki tarkistaa?
Mene eteenpäin.
He jouset.
Niin, lainaus, lainaus Malan ja lainaus, lainaus David Malan ovat merkkijonoja.
Ja vain ajatella intuitiivisesti nyt, tietäen mitä tiedät C ja PHP,
Miksi en tee tätä, jota yleensä käytetyt lainausmerkit jousille?
Miksi en halua tehdä sitä?
Joo?
>> Yleisö: [äänetön]
DAVID MALAN: Aivan.
Koska olen jo käytössä lainausmerkit matkalla
ulkopuolella argumentti PHP funktio,
Haluan vain sekoittaa tulkki.
Se ei tiedä, nämä liittyvät toisiinsa?
Ovatko nämä menevät yhteen?
Joten, minä vuorottelevat sijaan.
>> Tai voisin tehdä jotain tällaista, kenoviiva lainaus tai kenoviivaa tarjous.
Suoraan sanottuna, että vain alkaa saat hyvin lukukelvoton ja ruma.
Mutta se saisi saman tuloksen kuin hyvin.
>> Joten, jos olisin suorittaa tämän kysely nyt, katsotaan mitä tapahtuu.
Aion mennä eteenpäin nyt ja melko kuin suorittaa PHP, joka
on jossa voit pelata ongelmatilanteissa asettaa seitsemän,
Aion sen sijaan mennä PHP MyAdmin.
Ja olen itse menossa mennä SQL välilehti,
ja haluaisin suurentaa käyttöliittymän.
Ja aion liitä mitä olen juuri kirjoittanut.
Ja värikoodit on hieman muuttunut nyt,
vain koska ohjelma formaatteja asiat hieman eri tavalla.
Mutta huomaan, että kaikki olen tehnyt on olen sanonut, työnnä käyttäjät.
Olen määritelty, sitten, vuonna pilkku erotettu suluissa lista kaksi
kenttiä, jotka haluan lisätä, ja sitten Olen kirjaimellisesti sanoi arvot
seurasi toinen paren, ja sitten kaksi arvoa
Haluan plug-in, ja nyt hyvä toimenpide,
Laitan puolipiste lopussa.
Niin, tämä ei ole C. Tämä ei ole PHP.
Tämä on nyt SQL, ja olen liittämällä se tähän web-pohjainen käyttöliittymä, joka on
vain aio antaa minulle, heti kun olen klikkaa Go,
suorittaa tämän kyselyn tietokantaan käynnissä sisällä CS50 IDE.
>> Joten tämä on hyvä.
Huomaa, että mainittu yksi rivi Lisätään, meni huippunopea,
0,0054 sekuntia lisätä tietojen.
Niin, että kuulostaa melko terve.
Se alustanut kysymykseni minulle täällä vain nähdä se
on eräänlainen värikoodatut versio.
Mutta nyt jos napsautan Selaa, huomaa, että vaikka
vaikka siellä on paljon sotkua näyttö, minun pöytäni on nyt kaksi riviä.
>> Joten, anna minun mennä eteenpäin ja tehdä toinen.
Tämän sijasta haluaisin Siirry SQL välilehti uudelleen.
Ja tällä kertaa minä lisätä jotain Rob ja hänen nimensä on Rob Bowden.
Bowden.
Katsotaanpa sitten Tallenna.
Hups, mieluummin mennä.
>> Valitse Selaa uudelleen, ja Nyt huomaan on kaksi riviä.
Joten, tämä on vain tapa monimutkaisempi tapa avata Google Spreadsheets
ja kirjoittamalla rivi pylvääseen.
Mutta mikä on avain on, että meillä on nyt syntaksi
jolla kirjoittaa koodia niin, että lopulta, voisimme todella
tehdä joitakin ja tämän.
Muista, että PHP tukee Super globaaleja muuttujia.
>> Mikä on sisällä dollari kirjaudu alaviiva GET PHP?
Otimme katsele yhtä tai kaksi yksinkertaisia ​​esimerkkejä.
Ja PSet6 Recall olet hei piste PHP joka käyttää tätä muuttujaa.
Mikä menee siellä?
Vai mikä se on?
Vähän kovempaa.
>> Yleisö: [äänetön]
>> DAVID MALAN: Se on lunta siemen array, joka
on vain hieno tapa sanoa array, joka on keskeinen arvo-pareja.
Ja näppäimet eivät ole numeerisia.
He sanoja tai merkkijonoja.
Ja erityisesti, mitä ovat ne keskeiset arvo-pareja?
Mistä ne tulevat?
Anteeksi?
>> Yleisö: [äänetön]
DAVID MALAN: Ei?
Jos tekemään niitä keskeisiä arvo pareja tulevat?
Sano uudelleen?
Uudelleen?
Olenko ainoa kuulo jotain?
>> [Naurua]
>> Aivan oikein, kyllä?
>> Yleisö: [äänetön]
DAVID MALAN: Joo, he tulevat kyselyn merkkijono.
Joten, jos taaksepäin ajoissa kun olemme pelataan Google
ja olemme menneet Google.com kauttaviiva haku kysymysmerkki Q on yhtä kissat,
jos olisin paina Enter ja jos Google toteutettiin PHP,
PHP-koodin että Google kirjoitti olisi pääsy dollarin merkki
korostaa GET jonka sisällä on keskeinen kutsutaan Q ja arvo
kutsui kissat että se voi sitten käyttää tapana tehdä todellinen haku.
>> Joten itse asiassa, mitä aion nyt on palata minun PHP
että voit taas nähdä lisää vuonna PSet7.
Ja sen sijaan kytkemällä kovaa koodattuja arvoja
ei tunnu erittäin dynaamisen sivuston,
Aion antaa sinulle teaser mitä todellinen koodi tekisi.
Voisitte laittaa kaksi kysymys merkitsee näin.
En tiedä, mikä käyttäjätunnus on.
En tiedä mitä nimi tulee olemaan,
mutta tiedän voin saada heidät dynaamisesti.
>> Joten, jos koodi haluamme ilmoittaa nyt koodi käynnissä Googlen palvelimille,
tai jos tämä on hei piste PHP, joka tulee PSet6,
Aion kulkeutua hakutoiminto
aivan kuten printf, kaksi muuta väitettä.
GET, lainaus, lainaus päättyy käyttäjätunnuksen, ja GET, lainaus, lainaus nimi.
Ja nyt, huomaa, mitä yleinen rakenne on täällä.
Minulla vasemmalla puolella puhelun,
tämä toiminto nimeltään kyselyn PHP.
Minulla on vielä ensimmäisenä argumentti, vain merkkijono.
>> Mutta että merkkijono on kirjoitettu kielellä nimeltään SQL.
Ja rehellisesti, se ei ole iso kieli.
Olemme vain aio puhua se virallisesti tänään, todella.
Ja sitten Harjoitus seitsemän, siellä on suhteellisen
muutamia ominaisuuksia, että olemme menossa hyödyntää.
Kysymysmerkkejä kuitenkin tarkoita kytke arvo täällä ja pistoke toisessa arvo
täällä.
Ja ilmoitus, olen pois mitä ympäri quote-- pirun
it-- ympäri lainaus merkitsee tällä kertaa.
Olen pois lainaus tavaramerkit ympärillä kysymysmerkki,
pahoillani, tällä kertaa.
>> Joten, mitä mukavaa tästä kysymysmerkki ominaisuus, joka
PHP pyrkii tukemaan, Ruby ja Python ja muilla kielillä,
tämä tarkoittaa vain plug joissakin Arvostamme täällä ja tiedättekö mitä?
Voit selvittää, käytetäänkö puolilainausmerkkejä tai lainausmerkkeihin.
Älä häiritse minua kanssa älyllisesti mielenkiinnoton tiedot.
Mutta varmista, että se on oikein niin että minun koodi on lopulta
toiminnalliset ja turvallinen, joka on merkitystä ennen pitkää.
>> Nyt, kuinka monia perusteita yhteensä, vain oltava selkeä, on hakutoiminto ottaen?
Kukaan halua äänestää yli kaksi?
Kolme?
Toki, miksi?
Miksi kolme?
>> Yleisö: [äänetön]
DAVID MALAN: Aivan.
Ensimmäinen osa on merkkijono.
Toinen argumentti on dollarin merkki korostaa GET kiinnike käyttäjätunnus.
Ja kolmas väite on sama asia, mutta vain nimi.
Eli toisin sanoen, nyt jos olisin verkkolomakkeella
jotka oli tekstikenttiä, yksi käyttäjän käyttäjätunnus,
yksi hänen nimensä, vain kuten voit nähdä verkkosivuilla
kun rekisteröidyt jotkut verkkosivuilla, tämä saattaa
olla koodi loppupäätä että itse asiassa tekee lisäys nyt
tietokantaan.
>> Nyt sen sijaan, katsotaanpa eteenpäin.
Oletetaan käyttäjä on nyt kirjautumalla sisään ja haluat
kirjoittaa PHP koodia, joka tarkistaa, onko henkilö, joka on juuri kirjautunut sisään
on todella käyttäjä, voit käyttää melko yksinkertainen syntaksi.
Voit sanoa VALINTA, sanokaamme Star, jossa tähti merkitsee kaikkea.
En tiedä mitä minä haluavat, joten anna minulle
kaikki taulukon sarakkeita soitetuille käyttäjille missä, ja tämä on mukavaa.
Valitse tukee mitä kutsutaan predikaatti, joka on
kuten tapa täyttäviä mitä haluat.
Jos käyttäjätunnus on sama lainaus, lainaus Malan.
Niin tässäkin, olen sulautettujen sisällä argumentti
on PHP funktio, rivi SQL-koodin.
Ja että SQL-koodin tämä aika on kirjaimellisesti menossa
etsiä tarjous, Lainaus päättyy Malan.
>> Nyt ei ole kaikki, että hyödyllinen, joten aion skip että
ja aion laittaa pois tämä kärki Brady, ja mennä
ja plug-in sen sijaan kysymysmerkki täällä.
Joten, vain olla selkeä, mitä pitäisi Toinen väite
on jos joku on juuri kirjautunut sisään ja minä haluat tarkistaa, jos hän on itse
käyttäjä?
Yleisö: [äänetön]
DAVID MALAN: Joo.
Kuulen dollarin merkki alaviiva Lähetä pyyntö, lainaus käyttäjätunnus.
Ja että pitäisi palata minulle tahansa rivien tietokannasta
että on käyttäjätunnus Malan.
Nyt toivottavasti, aion saada takaisin nolla, jos Malan ole koskaan ollut täällä,
tai yksi jos hänellä on.
Minun ei pitäisi saada takaisin kaksi tai kolme tai neljä.
Miksi?
>> Yleisö: [äänetön]
>> DAVID MALAN: Sanoin ainutlaatuinen, eikö?
Yksinkertainen syy.
Koska sanoin sen täytyy olla ainutlaatuinen, vain loogisesti,
voit vain olla nolla tai yksi Malans tässä nimenomaisessa tietokannan taulukkoon.
Nyt kun sivuun, juuri niin olet nähnyt se, vaikka pidän käyttäen GET
ja vaikka PSet6 käytetään vain GET, voit varmasti POST.
Ja muistuttaa, että Post on toinen tekniikka tietojen ilmoittamista
lomakkeesta, mutta se ei näy URL.
Se on hieman turvallisempi varmasti asioita, kuten käyttäjätunnuksia ja salasanoja,
joka PSet7, itse asiassa, liittyy.
>> Niin, tehdään tämä PHP MyAdmin ja katso mitä tapahtuu.
Aion mennä MySQL välilehti.
Ja huomaa, että oletusarvo PHP MyAdmin, vain yrittää olla avuksi,
on valita tähden käyttäjiltä jossa yksi.
No, yksi on aina totta, niin tämä on typerä tehokas
vain Valitse kaikki.
Mutta aion olla hieman enemmän pikkutarkka ja manuaalisesti
kirjoittamiseen SELECT tähden käyttäjiltä.
>> Nyt teknisesti, voit Lainaan nimi taulukoita.
On harvinaista, että sinulla on, mutta huomaa nämä eivät ole
normaali lainausmerkkejä Yhdysvaltain näppäimistöllä.
Tämä on niin sanottu backtick, joka on yleensä ylhäällä vasemmalla
kulmassa näppäimistön.
Mutta se on harvinaista, että sinun itse tarvitse vaivautua että,
joten minä vain jättää niitä joka tapauksessa.
Joten nyt, anna minun mennä eteenpäin ja osui mennä.
Ja kuinka monta riviä minun pitäisi saada takaisin kun valitsen tähden käyttäjiltä?
>> Yleisö: [äänetön]
DAVID MALAN: rivien, varma.
Mutta kuinka moni tässä konkreettisia tarina juuri nyt?
Kaksi, koska siellä oli minua ja oli Rob.
Joten, jos olen valitse Siirry, näen visuaalisesti että Olen saanut takaisin, todellakin, kaksi riviä.
Siellä on paljon sotkua näyttö, mutta näen vain kaksi riviä.
Sitä vastoin, jos en tee tätä uudelleen ja tehdä SELECT tähti käyttäjiltä, ​​missä käyttäjätunnus
vastaa lainaus, lainaus Malan, nyt jos olen valitse Siirry,
Olen vain menossa saada takaisin yhden rivin.
Ja lopuksi, jos en jotain tällaista, kai
että en välitä saada kaiken,
joka on tavallaan merkityksetön nyt, koska siellä on vain kaksi saraketta.
Se ei ole kuin olen valitsemalla valtava määrä tietoa.
Kai mennä eteenpäin ja Tehtävät Valitse nimi
käyttäjille, jossa käyttäjänimi on yhtä Malan, mikä on mukavaa noin SQL rehellisesti,
on, että se todella vain tekee mitä kerrot sen tehdä.
Ihan ytimekäs, mutta voit kirjaimellisesti vain kertoa se, mitä haluat tehdä.
Valitse nimi käyttäjiltä missä käyttäjätunnus vastaa Malan.
Ja se todella on, että nimenomainen.
Joten, nyt jos osuin Go, kuinka monta rivit olen menossa saada takaisin?
Yksi, koska se on vain Malan, toivottavasti.
Tai nolla, jos hän ei ole siellä, mutta yksi maksimaalisesti.
>> Ja kuinka monta saraketta pääsen takaisin?
Kuinka monta saraketta?
Tällä kertaa, olen juuri menossa saada yksi koska en
Valitse tähti, joka on kaiken.
Nyt olen valinnut vain nimi, niin minä vain saada takaisin yhteen sarakkeeseen ja yhden rivin.
Ja se näyttää tavallaan asianmukaisesti naurettava, just looking Super
pieni näin.
Joten, mitä todella tapahtuu?
Kun suoritat SQL kysely käyttäen Valitse,
mitä saat takaisin tietokannasta
on kuin tilapäinen taulukko rivit ja sarakkeet, ehkä,
mutta jättää mitään, ei oikeastaan ​​te valitsette.
Niin, se on kuin jos joku oli suuri taulukkolaskenta kaikkien opiskelijoiden
rekisteröity joitakin opiskelijaryhmän, ja sanot,
anna minulle kaikki fuksi jotka olemme rekisteröity meidän opiskelija ryhmä, mitä
sinun kollegansa opiskelija ryhmä voisi tehdä
on ne voisi vain käsi sinua koko laskentataulukon.
Se on kuin sanoisi valitse tähti.
Ja se on vähän ärsyttävää, jos vain halusi fuksi.
Ja niin, jos sen sijaan sanoi, Valitse tähti tietokannan taulukon
jossa vuosi on lainaus, lainaus päättyy fuksi,
se on ikään kuin ystäväsi oppilaan ryhmässä
kirjaimellisesti esiin ja kopioida vain fuksi rivit,
liittää ne uuteen Google Taulukkolaskenta tai Excel-tiedoston,
ja antoi takaisin Tuloksena tiedosto vain.
Siinä kaikki että menee on käsitteellisesti täällä.
>> Joten lopulta, voimme tehdä joitakin melko hienouksia
tallentamalla asioita, kuten käyttäjätunnuksia ja salasanat ja vastaavat.
Mutta, se kääntyy pois, meidän pitäisi tehdä hieman eri tavalla kuin tämä.
Se ei ole järkevää vain tallentaa käyttäjätunnuksen ja salasanan.
Joku aikaisemmin, mielestäni täällä, ehdotti tunnus.
Nyt tunnus voisi olla Harvard tunnus tai Yalen Net tunnus,
mutta se voisi olla jopa helpompaa tietokantaamme tapauksessa.
Ja todellakin, yhteinen asia on saada toisen sarakkeen.
Ja aion mennä eteenpäin ja muokata pöytä.
Ja jos pelaat noin kanssa tämä käyttöliittymä PSet7,
näet, että voit tarkistaa tätä painiketta täällä ja lisää
kentän alussa taulukon.
Ja nyt jos olen valitse Siirry, se tulee antaa minulle yksi niistä muodoista
aiemmista.
Aion lisätä kentän nimeltä tunnus.
Ja aion tehdä numeerinen tyyppi.
>> Minulla on koko joukko arvojen numeriikan.
Olen juuri menossa valita INT ja välitä erilaisia ​​kokoja.
Minulla ei tarvitse määrittää pituus tai arvo,
koska se tulee olemaan 32 bittiä mitä tahansa.
Attribuutteja, emme nähneet ennen.
Mikä tahansa kiinnostunut kaikista näistä valikon vaihtoehdot tällä kertaa?
Saat INT?
Mitä ehdotatte?
Ei?
Tee jokin näistä järkeä?
Joo.
Joo, allekirjoittamaton, eikö?
>> Yleensä jos me aiomme antaa jokainen yksilöllinen numero, joka
on, jos tämä tarina on menossa, en oikeastaan ​​vain halua
henkilö on numero kuin nolla ja yksi ja kaksi ja kolme ja neljä.
En tarvitse käsitellä kanssa negatiivisia lukuja.
Se vain tuntuu turha monimutkaisuus.
Haluan neljä miljardia mahdolliset arvot, ei neljä miljardia mahdolliset arvot,
joten en juuri kaksinkertaistunut kapasiteetti minun INT.
Sivuhuomautuksena, jos haluat liittyä tämä jotain, kuten Facebook,
takaisin tavallaan minun päivä, kun Facebook ensimmäinen tuli ulos,
Uskon, mitä ne olivat käyttämällä niiden MySQL-tietokannan
tallentaa käyttäjän tunniste, oli vain INT.
Mutta tietenkin, siellä on paljon oikeita ihmisiä maailmassa.
Siellä on paljon väärennettyjä Facebook tilit maailmassa.
Ja niin lopulta, Facebook overflowed koko INT, neljä miljardia
arvo.
Minkä vuoksi, jos tarkastellaan ympärillä ja siellä on sivustoja
joka voi kertoa teille, mitä yksilöllinen tunnus on.
Ja jos et koskaan valinnut käyttäjätunnus Facebook, näet oman yksilöllinen tunnus.
Minusta se on profiili piste PHP kysymysmerkki tunnus vastaa jotain.
Tämä on nyt jotain iso INT, tai pitkään pitkään, jos haluatte,
joka on 64-bittinen arvo tai jotain vertailukelpoisia.
>> Joten, vaikka todellisessa maailmassa nämä kysymykset lopulta joskus merkitystä.
Ja se kääntyy pois täältä, jos olen antamalla kaikille minun käyttäjien yksilöllinen tunnus,
Haluan olla erittäin selvä ja minimaalisesti tekevät tällä alalla ainutlaatuinen.
Mutta se osoittautuu siellä on yksi pala nimikkeistön tänään liian
se perusavain.
Jos olet suunnittelussa tietokantaan pöytä ja tiedät etukäteen
että yhden sarakkeen kyseisessä taulukossa olisi ja yksilöimään riviä
taulukossa, jonka haluat määrittää sen ja kertoa tietokanta,
tämä on minun ensisijainen avain.
Saattaa olla kaksoiskappaleita muilla aloilla,
mutta Kerron tietokanta että tämä on minun ensisijainen, minun tärkein kenttä,
joka on taatusti ainutlaatuinen.
>> Nyt tämä näyttää tarpeeton.
Olen ehdottaa nyt, että me lisätä, painamalla Tallenna täällä,
kenttä called-- ja aion mennä eteenpäin ja valitse AI,
me palaamme että hetki, Tallenna.
Ehdotan nyt, että minun pöytä näyttää tältä.
Minulla INT kenttä nimeltä tunnus, CHAR kenttä nimeltään Käyttäjätunnus,
VARCHAR kenttä nimeltä nimi, mutta tunnus, jos se on ensisijainen ja siksi ainutlaatuinen,
miksi olen vain tuhlaa aika ottaa käyttöön mitä
tehokkaasti on toinen ainutlaatuinen kenttä kutsutaan tunnus, joka on INT?
>> Käyttäjätunnus, Recall, oli jo ainutlaatuinen, sanoimme.
Joten loogisesti, sinun ei tarvitse tahansa tietokannan kokemusta syy
kautta, miksi ehkä olen ottanut käyttöön
INT minun yksilöllinen tunniste samoin?
Mitä this-- sano uudelleen?
>> Yleisö: [äänetön]
>> DAVID MALAN: Satunnainen pääsy on helpompaa, miksi?
>> Yleisö: [äänetön]
DAVID MALAN: Joo, se on vain päästä numeroita.
Joten, jos luulet tämän todella on taulukko, kuten array,
nyt minulla on yksilölliset tunnisteet että voin hypätä ympäri.
Ja parempi kuin vielä on, että kuinka suuri on INT olemaan taas?
32 bittiä tai neljä tavua.
>> Kuinka suuri on minun käyttäjätunnuksen olemaan?
Maksimaalisesti?
16 tavua.
>> Joten, jos olet todella välitämme suorituskykyä koodin,
muistelen PSet5, haluatko etsiä neljä tavulla tai 16
tavulla, eikö?
Se on todellakin niin yksinkertaista.
Sinun täytyy tehdä neljä kertaa niin paljon työtä etsiä käyttäjätunnuksia, koska niille
16 tavua.
Joten, sinun täytyy kirjaimellisesti vertailla 16 tavua olla
varma Kyllä, tämä on käyttäjätunnus haluan.
Kun taas INT, voit tehdä sen vain neljä tavua.
>> Ja syrjään kyseisiä kiinnostuneita atk-laitteet,
se kääntyy pois mahtuu jotain INT tai 32-bittinen arvo jotain
kutsutaan rekisteri tietokone CPU, mikä tarkoittaa että se on super,
huippunopea, jopa alhaisin taso tietokoneen laitteisto.
Niin, siellä on vain etuja ympäri.
Joten, mitä tämä tarkoittaa?
Itse asiassa, kun olet suunnittelussa tietokannan taulukko, lähes koko ajan
aiot ole vain tietoja välität,
mutta myös jotain yksilöllinen tunniste
koska tämä on menossa tehkäämme muita asioita.
Ja nyt kompastua yksi ongelma.
>> Oletetaan, että käyttäjät eivät ole vain käyttäjätunnukset ja nimet,
mutta niillä on myös asioita, kuten kaupungeissa ja valtioiden ja postinumerot, ainakin
täällä Yhdysvalloissa.
Joten, aion mennä eteenpäin ja vain nopeasti sanoa,
anna minulle kolme saraketta lopussa taulukossa.
Ja tämä tulee olemaan Kaupunki, tämä tulee olemaan valtion,
ja tämä tulee olemaan Zip.
>> Nyt City, mitä tietotyyppejä pitäisi tämä olla, ehkä?
VARCHAR?
En tiedä mitä pisin nimi kaupunki on.
Jossain Amerikassa, siellä todennäköisesti joitakin naurettavan pitkä sana,
joten haluan vain mennä 255, hieman historiallisesti tai mielivaltaisesti.
Valtion, mitä haluat tehdä?
Arvostele, eikö?
Mikä ehkä tehokkain?
Kuinka monta merkkiä?
Ehkä vain kaksi, jos voimme saada pois tekemässä vain,
kuten, MA Massachusetts ja niin edelleen.
Joten, aion mennä CHAR arvo kaksi.
>> Postinumero on mielenkiintoinen.
Olemme täällä 02138, niin että ehdottaa meidän pitäisi käyttää mitä?
Se INT, eikö?
INT, INT, lyhyt?
Lyhyt toimisi.
Ei?
CHAR tai viisi, mutta haluan INT.
Miksi työntää takaisin INT?
Vakuuta minua tästä.
Mikä tyhmä noin INT, minun idea?
Joo.
>> Yleisö: vievät enemmän muistitilaa.
>> DAVID MALAN: vievät enemmän muistitilaa.
Neljä tavua, mutta olet ehdottaa postinumeron
viisi tavua tai joku oli CHAR, joka tuntuu EH, se ei oikeastaan
tapaus.
>> No, hauska tarina.
Vuosia sitten, kun minulla oli tapana käyttää Microsoft Outlook for sähköpostiini,
Olen lopulta halusin vaihtaa Gmailiin.
Ja niin, minä vienyt kaikki minun yhteystietoja Outlook CSV-tiedostona.
Pilkulla erotettuna arvot, joka vain tarkoitti I
oli kaikki ystäväni nimet ja viime nimiä ja puhelinnumeroita ja postinumerot
ja kaikki tämä.
Ja sitten tein virhe avaamista
Excel, joka on taulukkolaskentaohjelma, joka
ymmärtää CSV-tiedostoja kuten olemme nähneet.
Mutta sitten, minun täytyy lyödä, kuten, Komento tai Control S jossain vaiheessa.
Ja Excel ilmeisesti aikaan oli ominaisuus, jolla tahansa se
näki numero, se yritti olla avuksi.
Ja jos määrä alkoi nollat, se olisi vain päästä eroon niistä.
Miksi tarvitset johtava nollille kokonaislukuja?
He merkityksetön, matemaattisesti.
He eivät ole merkityksetön Yhdysvaltain Postal järjestelmän.
Joten, minulla on ollut vuosia, tähän päivään, olen edelleen
on ystäviä, kun harvinainen tapaus, että tarvitsen jonkun
puuttua näinä päivinä, Olen silti nähdä, että minä
on ystävä Cambridge, Massachusetts, 2138.
Ja se on ärsyttävää, jos olet yrittää tavallaan ohjelmallisesti
tuottaa kirjekuoret tai vain hiukkaakaan alas.
Ja se johtuu tästä syystä, Valitsin väärän tiedon tyyppi.
Joten, minä rakastan ideasi.
Katsotaanpa käyttää CHAR kenttä.
Viisi merkkiä, paitsi on nurkassa tapaus.
Jos vielä lähettää postia, joskus postinumerot näinä päivinä,
he ovat, kuten, sekä neljä.
Joten, tarvitsemme tavuviiva ja sitten Tarvitsemme neljä enemmän numeroita.
Joten olla rehellinen, se voisi mennä monin eri tavoin.
>> Nyt aion pitää se yksinkertainen ja olen vain
aio sanoa, että se on viisi CHAR arvo ja olemme
menossa ohittaa koko viiva plus neljä.
Mutta nämä ovat erilaisia ​​kompromisseja.
Ja voit ajatella Sama ongelmia
kanssa puhelinnumeroita tai muilla aloilla.
>> Ja nyt, tämä on todella typerä tie mennä alas.
Oletetaan sekä Rob ja minä ja Hannah ja Maria ja [? Davon?] Ja Andy
ja muut henkilöstön kaikki elämme Cambridge, Massachusetts, 02138.
Tämä todella tuntea tyhmä, että olen lisäämällä minun käyttäjille pöytä, kaupunki, valtio,
ja zip.
Miksi?
>> Yleisö: [äänetön]
>> DAVID MALAN: Sano uudestaan?
Yleisö: [äänetön]
>> DAVID MALAN: ne ovat aina mene yhdessä, eikö?
Kun se kääntyy pois, meillä oli tapana ajatella näin oli, kunnes me tyhjentävästi
etsinyt koko USA, ja käynyt ilmi, että siellä
joitakin epäjohdonmukaisuuksia jossa useat kaupungit ovat
sama vetoketju, joka on outo.
Mutta, jos me määrätään nyt, että 02138 on aina Cambridge, Massachusetts,
miksi ihmeessä te tallentaa tietokannan Cambridge ja MA ja 02138
minun ja Hannah ja Rob ja varten [? Davon?] Ja muille, jotka asuvat
täällä Cambridge, se on täydellisesti tarpeeton.
>> Meidän pitäisi päästä pois vain tallentamiseen mitä?
Vain postinumeron.
Mutta sitten, jos Tallennamme vain postinumero, en halua, luultavasti,
minun verkkosivuilla tietää, missä 02138 on.
Joten, tarvitsen toisen taulukon.
Ja se on OK.
Ja itse asiassa tämä on yksi suunnittelu prosessit suunnittelusta taulukoiden
että voit tehdä PSet7 samoin jolloin haluat tekijä yhteiset tiedot.
Aivan kuten olemme factoring ulos yhteinen koodi ja factoring yhteiset
tyylejä CSS, tässä liian tietokantaan,
jos minulla on vain 02138 yksikäsitteisesti tunnistaa jonkun kotipaikan,
älä säilytä Cambridge, Mass varten jokainen hiton käyttäjä taulukon.
>> Sen sijaan, on erillinen taulukko nimeltään Vetoketjut että pitäisi olla mitä sarakkeita?
Luultavasti ID kenttä, vain siksi, varten periaatteet puhumme nyt.
Luultavasti zip kenttä 02138.
Ja sitten luultavasti mitä muut sarakkeet?
Kaupunki ja valtio, mutta vain yksi rivi 02138, yhden rivin 02139,
yksi rivi 90210.
Ja se on kirjaimellisesti kaikki postinumerot tiedän.
>> Joten nyt, mitä voit tehdä?
Tämä on ongelmallista, koska Nyt minulla on kaksi taulukkoa.
Joten minun käyttäjät ovat enimmäkseen täällä, mutta heidän kaupunkinsa valtio Informationin
täällä.
Niin, se kääntyy pois SQL, siellä todella tapa liittyä tietoja,
ja näet tämän PSET.
>> Mutta se osoittautuu voit tehdä jotain tällaista.
SELECT tähti käyttäjiltä, ​​JOIN vetoketjut users piste zip vastaa vetoketjut piste zip.
Joka on hieman monisanainen, tosin mutta tämä vain
tarkoittaa valitse kaikkea ottamassa minun käyttäjien pöytä
ja minun vetoketjut pöytä.
Liity ne yhteen kenttä heillä sarakkeessa.
Joten, kirjaimellisesti tehdä jotain näin, ja anna minulle takaisin
uusi tilapäinen taulukko se on laajempi, se on isompi,
että on kaikki sarakkeita molemmat.
Ja että yksinkertaisesti olisi syntaksi tehdä jotain tällaista.
>> Joten, on tämä eteenpäin, mutta siellä tulee
olla muita suunnittelun päätöksistä ll on tehtävä, paitsi indeksit
mutta myös törmätä haasteita.
Itse asiassa siellä on haaste missä tahansa tietokannan suunnittelu
jolloin joskus kaksi ihmiset saattavat haluta käyttää samaa riviä tietokannan
pöytä.
Joten, tämä on jotain, että me will kohtaavat PSet7 samoin.
>> Mutta ajattelin katsoa yksi hyökkäys se on mahdollista SQL.
Mitkä ovat ongelmia, jotka voivat syntyä?
Joten, tapaat tämän PSet7.
Ja me kerromme teille suoraan mitä koodaus ratkaisu tähän ongelmaan on.
Mutta jos otat korkeampi luokka, erityisesti käyttöjärjestelmät,
aiot kohdata kysymys atomisuuden,
ongelma yrittää tehdä useita asioita kerralla
keskeytyksettä.
>> Ja minä ajattelin esitellä tämän idea PSet7 kanssa metafora
että opin itseni Margo Seltzer n CS164 käyttöjärjestelmät
luokka vuotta sitten.
Oletetaan, että sinulla on jokin näistä asuntolan jääkaapit omassa asuntolan huoneessa tai talo,
ja sinulla on todellinen rakastaa maitoa.
Ja niin, tulet kotiin luokat yksi päivä, avaat jääkaappi.
Voi hitto.
Jääkaapissa ei ole yhtään maitoa.
Joten, suljet jääkaappi, lukita oven, lukita asuntolan,
kävellä nurkan takana CVS, saada linjassa,
ja aloittaa tarkkailun joitakin maitoa.
Ja se tulee viemään aikaa, koska ne pirun itse kassalle
laskurit kestää ikuisesti käyttää muutenkin.
Joten välin, kämppäkaveri tulee kotiin.
Hän todella pitää maitoa samoin.
He tulevat asuntolan huoneessa, Avaa jääkaappi, OH, hiton se.
Ei ole maitoa.
>> Niin, hän myös menee nurkan takana.
Mutta nyt, koska siellä on kuin kaksi tai kolme tai neljä CVSes lähellä,
he sattuvat mennä johonkin eri pienimmille neliö.
Ja nyt, muutama minuutti myöhemmin, molemmat teistä
tulla kotiin ja yäk, pahin ongelma koskaan.
Nyt sinulla on liikaa maitoa koska se tulee mennä hapan.
Ja pidät maitoa, mutta sinä eivät todellakaan pidä maitoa.
>> Joten nyt, tämä oli kallis virhe, koska molemmat teistä
teki päätöksen perusteella tilaa noin muuttujan
oli parhaillaan muutetaan sinä,
alullepanija menossa maitoa.
Joten, mikä on ehkä ihmisen ratkaisu tähän ongelmaan?
Yleisö: [äänetön]
DAVID MALAN: Jätä huomata, eikö?
Jätä huomata, jos olet perehtynyt jotka osoittavat.
Kyllä, on olemassa kaksi meistä.
Niin, aina jättää huomata, tai kirjaimellisesti lukko jääkaappi
jonkinlainen riippulukko tai jotain päälle niin.
Mutta se on todella olemaan keskeisenä ongelmana tietokannan suunnittelu,
varsinkin kun saatat olla useita selaimia, useita kannettavia tietokoneita,
useita käyttäjiä kaikki yrittävät päivittää tiedot kerralla.
Erityisen arkaluonteisten tietojen kuten taloudellisia tietoja,
jolloin kanssa varastossa kaupankäynnin verkkosivuilla kuten sinun on rakentaa,
mitä jos haluat tarkistaa, kuinka paljon rahaa sinulla on ja sitten jos sinulla on tarpeeksi,
ostaa varastossa?
>> Mutta entä jos joku muu, joka on yhteinen tili sinua
on samanaikaisesti yrittää ostaa varastossa?
Niin, hän on tarkistaa saldo, molemmat teistä
saada takaisin saman vastaus, ei ole maitoa.
Tai molemmat saat takaisin vastauksen, sinulla on $ 100 tilin.
Molemmat yrität tehdä päätöksen ostaa osuus jonkin yrityksen varastossa.
>> Ja nyt, mitä tapahtuu?
Sinulla on kaksi osaketta?
Sinulla ei ole osakkeita?
Ongelmia, kuten että voi syntyä.
Joten, me kohtaavat että.
SQL-injektio-iskut, onneksi, ovat jotain autamme sinua,
mutta nämä ovat atrociously yhteinen näinä päivinä vielä.
Joten, tämä on vain esimerkki.
En tee mitään väitteitä, Harvard PIN järjestelmä on
alttiita tässä hyökkäys.
Olemme yrittäneet.
Mutta, te tiedätte, että me on kentän näin.
Ja Yalen Net tunnus on samanlainen näköinen näyttö näinä päivinä.
Ja se osoittautuu, että ehkä PIN-järjestelmä on toteutettu PHP.
>> Ja jos se were-- se on not-- ne saattaa olla koodi, joka näyttää tältä.
Heillä on kaksi muuttujaa.
Anna minulle käyttäjätunnus ja salasana post Super globaali muuttuja
että puhuimme aiemmin.
Ehkä Harvard on kyselyn kuten SELECT tähti käyttäjiltä
jossa käyttäjätunnus on sama kuin ja salasana on sama kuin.
Ja huomaa, että olen vain kytket sen avulla
kihara ahdin merkintä muista päivä, mikä tarkoittaa vain kytke arvo
täällä.
En käytä kysymysmerkki tekniikkaa.
Minulla ei ole mitään toista tai kolmannen perusteluja.
Olen vain kirjaimellisesti rakentaa merkkijono itse.
>> Ongelmana on kuitenkin se, että jos joku kuten scroob,
joka on viittaus elokuva, kirjautuu sisään jotain tällaista,
ja olen poistanut pisteitä että yleensä peitellä
salasanat, mitä jos hän on erityisen ilkeä
ja hänen salasana ehkä on 12345, per elokuvan nimeltä "Spaceballs"
mutta hän kriittisesti tyypit tarjouksen jälkeen viisi,
sitten kirjaimellisesti sana tai tilaan, ja sitten lainaus,
lainaus yksi on lainaus yksi, huomaamatta hän on pois mitä?
Hän jättää lainaus oikealla ja hän on jättänyt tarjouksen vasemmalla.
>> Koska jos tämä hyökkääjä scroob olettama
on, että ihmiset, jotka kirjoittivat tämä PHP ei niin kirkas,
Ehkä he vain joitakin yksittäisiä lainausmerkkeihin interpolointi
muuttujan aaltosulkeita?
Ja niin ehkä hän voisi laji ja saattamaan ajattelun
heille, mutta tavalla, joka menee antaa hänen murtautunut PIN järjestelmään.
Toisin sanoen, oletetaan että tämä on koodi
ja nyt kytke mitä scroob kirjoitetaan.
Ja se on punainen, koska se on huono.
>> Ja taustalla teksti on mitä hän kirjoittanut,
scroob voisi huijata Harvardin palvelimella osaksi rakentaa SQL-kysely
merkkijono, joka näyttää tältä.
Salasana vastaa 12345 tai yksi on yksi.
Seurauksena, loogisesti, on että tämä kirjaa scroob
sisään jos hänen salasana on 12345 tai jos yksi on
yksi, joka on tietysti aina totta, mikä tarkoittaa scroob aina joutuu.
>> Ja niin, tapa korjata Tässä, kuten paljon tapauksia,
olisi kirjoittaa enemmän puolustuksellisesti.
Jos haluat käyttää jotain meidän todellinen kyselyn toiminto, joka
voit nähdä PSet7, jossa kytke jotain kysymys merkitsee täällä.
Ja kauneus hakutoiminto että me
antaa teille on se puolustaa näitä ns SQL-injektio-iskut, joissa
joku on huijaaminen sinun koodi pistämällä oman SQL-koodin.
Sillä mitä hakutoiminto annamme sinulle todella tehdä,
jos käytät kysymysmerkki syntaksin ja toinen ja kolmas argumentti täällä,
on mitä se lisää tulo että käyttäjä tarjotaan?
Ne kenoviiva lainaa.
>> Niin, se pakenee tahansa mahdollisesti vaarallinen merkkiä.
Tämä näyttää oudolta nyt, mutta se ei ole haavoittuva
koska se ei ole vaihtaa logiikka enää
koska koko salasana on nyt yksi tarjous, joka ei ole,
itse asiassa, scroob salasana.
Niin, että on ollut joitakin vitsejä tästä vuosien mittaan.
Niin, tämä oli otettu kuva Joidenkin pelle parkkipaikalla
jolloin saatat tietää, että jotkut kaupungit ja valtiot yritä skannata lisenssi
levy laskuttaa sinulle tai lippu sinulle jos menet läpi ilman, kuten,
E-Z Pass juttu.
Joten, tämä henkilö olettaa, että ehkä ihmiset kirjoittaminen E-Z Pass järjestelmä
ei niin kirkas, ja ehkä ne vain ketjutetaan yhdessä merkkijono,
niin että hän ei voinut haitalliseksi ei vain täydentää ajatus,
mutta todellisuudessa suorittaa huono komento, joka olemme ei ole mainittu vielä,
mutta arvata.
Että lisäksi poistaa ja lisätä ja päivittää ja valitse,
siellä on myös avainsanan kutsutaan pudota, joka kirjaimellisesti poistaa kaiken
tietokantaan, joka on erityisen huono.
>> Voimme zoomata tämä, jos se on hieman vaikea nähdä.
Tämä nyt on kuuluisa sarjakuva se on ihanan ovela nyt
ja ymmärrettävää.
>> [Naurua]
>> Joo, viileä.
Tavallaan geeking ulos.
Joten nämä sitten ovat SQL-injektio-iskut.
Ja ne ovat niin helppo välttää käyttämällä oikea koodi tai oikealle kirjastoissa.
Ja voit nähdä PSet7, se on miksi annamme sinulle hakutoiminto.
Niin, pari kiusoittelu että ajattelimme
antaa sinulle täällä meidän Jäljellä minuuttia yhdessä.
Joten, kun muistat viikosta nolla, me esitteli nämä kaksi lamput, jotka
ovat mukavia, ei vain siksi, ne ovat melko ja ovat värikkäitä,
mutta koska ne tukevat jotain kutsutaan API, Application
Programming Interface Ja vuonna CS50 toistaiseksi, olemme
keskittynyt lähinnä GET ja POST, mutta se osoittautuu
siellä on muita HTTP verbejä kuten PUT.
>> Ja itse asiassa tämä oli dia viikko nolla
jolloin jos kirjoitat koodin, joka lähettää la PSet6 HTTP-pyyntöä
näyttää tämä tämän kimpale tekstin alareunassa, jota kutsutaan JSON,
tai JavaScript Object Notation että me puhumme ensi viikolla,
voit kytkeä tai sammuttaa tai muutos valojen väri kaltaisia.
Joten jos CS50 on myös lisäksi joitakin Näiden hehkulamppujen täällä New Haven
jos haluat lainata ne opinnäytetöiden,
myös joitakin Microsoft Bändejä, jotka ovat kuin
kellot että puet noin ranteen että samalla on API jotta voit
voi kirjoittaa oman ohjelmiston heille.
>> Meillä on tili Applen iOS koodi niin
että jos sinulla on Apple Watch tai iPhonen tai iPadin tai iPod,
voit kirjoittaa koodin, joka todella toimii näiden.
Meillä on koko joukko ja Arduinos, jotka ovat
pikku tietokoneet ilman tapauksissa olennaisesti,
että voit liittää USB, tyypillisesti oman Mac tai PC,
kirjoittaa koodia, joka toimii nämä fyysiset laitteet, jotka on usein anturit niitä
joten voit olla vuorovaikutuksessa reaalimaailman.
Meillä on koko joukko Leap Motion laitteita,
jotka ovat USB-laitteita Macit ja PC, täällä ja jälleen, New Haven.
Ja jos liität sen Maciin, voit itse ohjata tietokoneen
kirjoittamalla ohjelmisto että Infrapunavast.otto palkit,
luvut, missä ihmisen kädet ovat, jopa koskematta näppäimistön.
Ajattelimme jakaa nopeasti Hangon tässä, esimerkiksi.
>> [Musiikkia]
Joten, meillä on kokonainen nippu näistä asioista,
Myös nimeltään Myo käsivarsi bändejä joka laitat yli kyynärvarsi
ja sitten voit hallita todellinen maailma tai virtuaalimaailmassa näin.
>> [Musiikkia]
Tai, meillä on myös joitakin Google Pahvi, joka on kirjaimellisesti, kuten,
pahvilaatikko voit laittaa kasvot, mutta dian puhelimesi se
niin että laitat lasillinen puhelin todella lähellä silmäsi.
Ja Google Pahvi on melko halpaa osoitteessa $ 10 tai 20 $.
Ja se on vähän linssit että hieman pois siirtyminen
kuva ruudulla oman ihmisen silmät antaa sinulle tunteen syvyys
niin että sinulla todella on 3D ympäristö edessäsi.
Meillä on myös joitakin Samsung Gear, joka on kalliimpi versio,
mutta että voidaan samalla liukua Android-puhelinta ja antaa sinulle illuusion
of-- tai antaa kokemusta virtuaalitodellisuus.
Ja meidän kaksi viimeistä minuuttia, ajattelimme yrittää tehdä tämän.
Jos en voi heijastaa mitä Colton on täällä vain alkupaloiksi,
anna minun mennä eteenpäin ja heittää ylös valkokankaalla täällä.
Saanen tappaa valot.
Colton, haluat mennä eteenpäin ja laittaa Matkapuhelimella hetkeksi
ja tulevat yli, keskellä vaiheessa?
Ja haluat project-- tämä on mitä Colton näkee.
>> Nyt, Wi-Fi tässä ei niin vahva tätä laitetta
että tämä on erittäin vakuuttava, mutta Colton on kirjaimellisesti
Tässä maaginen futuristinen paikka.
Hän näkee vain yhden kuvan.
Näette hänen vasemman ja oikean silmän että hänen aivonsa ovat ompelemalla yhteen
kolmiulotteinen ympäristö hänen kasvonsa.
Hän vain valitun valikon täällä.
Ja niin taas, hän on päällään tämä kuulokkeet kanssa Samsung puhelin se, joka on
langattomasti ulkonevat meidän yläpuolella.
Nyt olet Marsissa, luulen?
COLTON: Luulen niin.
En ole varma [kuultavissa].
[Naurua]
>> DAVID MALAN: Osoittautuu Mars on valikoita.
>> COLTON: [äänetön] hienoja tarkkuudella jos haluamme mennä to--
>> DAVID MALAN: Missä haluamme mennä?
>> COLTON: [äänetön]
DAVID MALAN: Ja katsotaanpa jossa Colton vie meidät nyt.
COLTON: [äänetön]
>> DAVID MALAN: Niin, siellä on niin paljon eri paikoissa voit tehdä itse.
On FAPIs jonka kautta voit kirjoittaa pelejä tai vuorovaikutus
juosta, lopulta, puhelimessa.
Joten, te oikeastaan ​​vain kirjallisesti matkapuhelin app.
Mutta kiitos ohjelmisto ja grafiikkaominaisuudet,
nyt Colton on tässä pikku mökki.
Ja riski ylivoimainen itsemme,
Colton ja minä kiinni ympäriinsä vaikka lopussa luokan täällä tänään
jos haluat tulla ja pelata.
Ja me tuoda ne takaisin ensi viikolla samoin.
Ilman edelleen Ado se on siinä tänään.
Nähdään ensi viikolla.
>> [MUSIC - Ragga Twins, "paha mies"]