>> [Glazbom]
DAVID Malan: U redu, ovo je CS50.
To je kraj tjedna osam.
I danas, počinjemo ispuniti u nekim dijelovima
kada je riječ o izgradnji stvari na webu.
Dakle, podsjetiti da je u ponedjeljak trošimo puno više vremena
na PHP, što je to dinamički programski jezik koji
nam omogućuje izlaz, među ostalim stvari, HTML i drugi takav sadržaj
da ćete želite vidjeti.
Ali mi stvarno nije gledao kako idemo za pohranu bilo kakve informacije.
Doista, gotovo ništa od toga super zanimljive web stranice koje posjetite i danas
imaju neku vrstu baze podataka na stražnjem kraju, zar ne?
Facebook sigurno pohranjuje puno podataka o svima nama i Gmail pohranjuje sve
Vaše e-pošte.
>> I tako, mnoge druge web stranice su ne samo Statični Sadržaj to je informativan.
To je zapravo dinamičan, na neki način.
Možete dati ulaz, to ažurira stranice za druge ljude.
Dobivate poruku, šaljete poruke, i tako dalje.
Tako danas, mi gledamo na bliže u podlogu projekta
da ćete zaroniti u sljedeća tjedan, CS50 financija, koji je
zapravo će imati što graditi nešto nije u C, ali u PHP-u.
Web stranicu koja izgleda Malo se nešto ovako
koji omogućuje kupnju i prodaju dionice koje su zapravo
će privući na stvarnom vremenu stock podaci iz Yahoo Finance.
I tako u konačnici, da ćete imati iluzija za sebe i za korisnike
da ste zapravo kupnju i prodaju dionice i uzimajući gotovo u stvarnom vremenu
ažuriranja, upravljanje portfelj, od kojih svi
će zahtijevati vlasništvo, u konačnici, baza podataka korisnika.
>> Dakle, u svojim riječima, pogotovo ako niste
super upoznati s računalom znanosti ili baze podataka, što
znaš bazu podataka kako bi se upravo sada, u netehniËkih smislu?
Što je?
Kako biste ga opisali se cimerica ili prijatelja?
>> PUBLIKA: [nečujan] Informacije [nečujan]
>> DAVID Malan: Dakle, popis podataka, ili store-- listu informacija
da možda želite pohraniti o nečemu, poput korisnika.
I što učiniti korisnici povezane s njima?
Ako ste korisnik na Facebooku ili Gmail, što su obilježja
da svi mi korisnici imaju?
Kao, što bi moglo biti neke od stupaca u tablici u kojoj smo
aludirao zadnji put?
Jer opet, možete mislim baze podataka
stvarno kao fancy Excel datoteci ili Google Spreadsheet ili Apple Brojevi datoteke.
>> Dakle, što mislite o kad mislite korisnik?
Što su?
Što je to?
>> PUBLIKA: Ime.
>> DAVID Malan: Ime.
Dakle, ako ime, kao što su David Malan će biti ime nekog korisnika.
Što još korisnik ima?
>> PUBLIKA: predočenje osobne iskaznice.
>> DAVID Malan: predočenje osobne iskaznice.
Dakle, kao što su matični broj, kao što je vaš Harvard ID ili vaš Yale Neto ID ili slično.
Što drugo bi moglo korisnik ima?
>> PUBLIKA: Lozinka.
>> DAVID Malan: Lozinka, možda jednom adresa, možda broj telefona, možda
adresa e-pošte.
Dakle, postoji grozdove polja i to mogao vrsta spiralni izvan kontrole
brzo, čim počnete realizirati, oh, neka je spremiti ova
i neka je pohraniti ovo i ono.
>> No, kako ćemo zapravo učiniti?
Pa opet, mentalni model da su za danas kao što smo
zaroniti u stvarni SQL, Structured Query Language,
je baza podataka koja izgleda ovako.
To je samo retke i stupce.
A možete zamisliti Google tablice ili bilo koji broj drugih programa.
No, ono što je ključno o MySQL, koji je baze podataka softver ćemo koristiti,
slobodno otvoreno available-- Facebook koristi
to i bilo koji broj ostalih websites-- Baza podataka pohranjuje stvari relacijski.
I relacijske baze podataka samo znači onaj koji doslovno
pohranjuje svoje podatke u retke i stupce.
To je kao jednostavan kao taj.
>> Dakle, čak i nešto poput Oracle koji možda su uglavnom čuli
je relacijska baza podataka.
A ispod haube ga, pohranjuje podatke u retke i stupce.
I Oracle vam naplaćuje mnogo novca za to,
dok MySQL optužbi ti ništa za iste.
Dakle, SQL će nam dati najmanje četiri operacije.
Sposobnost za odabir podataka, kao što su čitanje podataka, umetanje, brisanje i ažuriranje podataka.
Drugim riječima, to su Stvarno četiri ključna poslovanje
koji će nam omogućiti da promijenite stvari u tim redaka i stupaca.
>> Alat koji ćemo koristiti danas posebno kako bi naučili SQL i igrati s njim
opet zove PHP MyAdmin.
To je tkanje temeljen alat.
Ukupno slučajnost da to je napisano u PHP.
Ali to će nam dati grafički korisničko sučelje, tako da možemo zapravo
stvaranje tih redaka i stupaca a onda razgovarati s njima putem koda.
Dakle, neka je sada početi ono što mislim da je iskreno
vrsta procesa zabavu izgradnju stražnji kraj internetskim stranicama,
dijelovi koji korisnici ne vidi, ali sigurno stalo,
jer to je već data događa.
Dakle, slično C i dodaje se malo manje kao PHP,
SQL ili baza podataka koja podržava SQL, ima tipova najmanje ove podatke
i grozdovima drugih.
CHAR, VARCHAR, INT, BIGINT, Decimalni, i DATETIME.
A tu je cijela hrpa druge značajke,
ali neka je to učiniti način stvarnog primjera.
>> Ja ću ići u CS50 IDE gdje je, unaprijed sam logiran
i ja također sam posjetio URL Ovaj alat se zove PHP MyAdmin.
A problema postaviti sedam, mi ćemo reći točno kako doći do tog sučelja
kao.
Na gornjem lijevom kutu, primijetiti da kaže predavanje.
A to samo znači da unaprijed, sam stvorio
prazna baza zove predavanje da nema tablice u njemu još.
Nema redaka i stupaca.
Jer prvi što ćemo učiniti
se početi stvoriti tablicu koje će pohraniti svoje korisnike.
>> Dakle, doslovno preko Ovdje na desno, ja sam
će reći baze podataka Želim stol pod nazivom korisnicima.
Dakle, to je kao da ja datoteke Želite pohraniti sve moje podatke u.
A koliko stupaca?
Pa, neka je i dalje ostane jednostavan za sada.
Samo želim pohraniti poput ime i naziv za korisnika.
Počet ćemo mala.
Dakle, želim dva stupca ukupno.
I ja ću ići naprijed i kliknite Idi.
A onda, za njih stupaca, što ću
da do-- ako ovim internet cooperates-- sve u redu,
pa ćemo opet pokušati.
Idem stvoriti tablicu pod nazivom Korisnici s dva stupca, kliknite Idi, OK.
Sada imamo to jako brzo.
Hvala vam, vrlo dobro učinio.
U redu, tako da ono što želimo Ovi stupci se zove?
>> Dakle, on će se zvati ime.
Dakle, sve što vidim here-- i sučelje iskreno dobiva malo ružno na kraju,
Jednom kada počnete upisivati ​​u svim tim podacima.
No, ono što je lijepo je da vrsta paradoksalno, sam stvara kolone,
ali alat ima glupo postavio ih u redove
tako da mogu konfigurirati te stupce.
Dakle, postoje dva praznine tamo pod Name.
A jedan od tih područja I želim se zove imenom,
a druga polje Želim nazvati ime.
>> A sada moram odabrati vrste podataka za te stvari.
Dakle, dok je u programu Excel i Google Proračunske tablice,
Ako želite stupac, doslovno samo upišite ime ili korisničko ime, pritisnite Enter.
Možda je podebljana napraviti samo za jasnoću, ali to je to.
Ne odrediti vrste stupovima.
Sada u Google ili Excel, možda odrediti kako se podaci donesena.
Ti bi mogao ići na izborniku Format, a vi Možete odrediti pokazati kao znak za dolar,
pokazati kao Krajnja vrijednost.
>> Dakle, to je sličan u duhu da je ono što smo o tome da radimo,
ali to se zapravo događa na snagu podaci biti određena vrsta.
Sada, iako je trenutak prije sam rekao da postoji samo nekoliko vrsta podataka,
tu je zapravo puno, a oni su
u različitim stupnjevima specifičnosti.
I usput, ti Možete čak napraviti ukrasni stvari
kao i skladišnih geometrija unutar baze podataka.
Možete pohraniti stvari poput GPS koordinate
i zapravo naći, matematički, Točke koje su u neposrednoj blizini drugih.
Ali ćemo zadržati ovu super jednostavno
i idite do ovdje, sve takozvani tipa string.
>> Dakle, ovdje je popis od a cijela hrpa opcija.
CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT.
I to je vrsta neodoljiv.
I na žalost, nešto paradoksalno u C,
char nije stvarno CHAR.
Ako ste naveli u bazi podataka da je vaš tip podataka CHAR,
to znači da da, to je CHAR, ali to je jedan ili više znakova.
I morate navesti koliko znakova želite.
Dakle, ono što je tipično Duljina za korisničko ime?
Postoji li ograničenje obično?
>> PUBLIKA: [nečujan]
>> DAVID Malan: 16 možda?
Nešto kao to.
Znaš, vratiti u dana, što je nekad bilo osam.
Ponekad je 16, ponekad to je čak i više od toga.
I tako, to ne znači daj mi jedan znak.
To znači da moram navesti duljina polju,
i sad bih mogla reći nešto poput 16.
I tu je trgovina off ovdje.
Dakle, vidjet ćemo za koji trenutak to znači da je jedan,
svaki korisničko ime mora biti 16 znakova.
Ali čekaj malo, M-a-L-A-N. Ako je to moje ime i ja sam samo pomoću pet,
što bi predložiti da se baza podataka učiniti za ostale 11 znakova koji
Ja sam rezerviran prostor za?
Što bi ti napravio?
>> PUBLIKA: [nečujan]
>> DAVID Malan: Da, samo bi ih sve null.
Napravite im mjesta.
No, vjerojatno null, tako Mnogo kose crtice nula.
Dakle, s jedne strane, mi smo Sada su sigurni da moje korisničko ime
može biti više od 16 znakova.
A druga strana koja je da, ako sam imao jako dugo ime
ili htjeli stvarno dugo korisničko ime kao što neki od vas
dečki možda u tom faksu ili na Yale.edu, ne možete imati jedan.
I tako, u stvari, ako ste nikad registrirana za web stranicu
a vi dobiti vikao na rekavši vaša lozinka je predugačak
ili vaše korisničko ime je predugo, to je jednostavno zato programer, kada
konfiguriranje svoje baze podataka, odlučili da će ovo polje
biti duži od ove duljine.
>> U redu, što ako ćemo nastaviti na ime?
Koliko Ukoliko Ime tipičan ljudski je se?
Koliko znakova, 16?
Ja sam guessing smo mogli naći nekoga u ovoj sobi
gdje njegov ili njezin prvi plus zadnjem Naziv je duži od 16 znakova.
Dakle, što je bolje od toga, 17?
18?
25?
Veći?
30?
>> PUBLIKA: [nečujan]
DAVID Malan: 5000, Bože moj.
Dakle, to je vjerojatno pristojan gornju granicu, reći ćemo.
I ovdje smo vrsta ima da sud poziva.
Kao, nema pravi odgovor ovdje.
Beskrajno nije baš moguće, jer smo na kraju
će have-- smo će ostati bez memorije.
Dakle, moramo napraviti sud poziva u nekom trenutku.
>> Vrlo često će biti, na primjer, da use-- i neka mi navesti CHAR ovdje
kao before-- 255 je doslovno gornja granica ovog softvera baze podataka
godinama prije.
I tako, puno ljudi Samo će reći, u redu.
255 je granica.
Ajmo koristiti maksimum.
I to je prilično smiješno.
Kao, ako pišete netko naziv za 200 plus znakova,
da malo smiješno.
>> No, ne zaboravite da ASCII nije jedini sustav za likove.
I tako, pogotovo u Puno azijskih jezika
gdje ima likova ne možemo izraziti na klavijaturama poput moje SAD
tipkovnica, neki likovi zapravo uzmi 16 bita umjesto osam bitova.
I tako, to je zapravo nije sve što je nerazumna
da trebamo više Prostor ako želimo stati
veći likovi nego samom SAD centric one koje smo skloni da raspravljati.
Dakle, trebamo neke gornja granica.
Ne znam što je najbolje on je, ali 255 je općenito čest jedan.
25 osjeća nisko.
16, 32 osjećate niska.
Ja bih griješiti na strani nešto više.
No, tu je trgovina off, kao i uvijek.
Što je, možda, očito trgovina off rezerviranje 255 znakova
za svačiji ime u mojoj bazi?
>> PUBLIKA: [nečujan]
>> DAVID Malan: Što je to?
>> PUBLIKA: [nečujan]
>> DAVID Malan: To je puno memorije, zar ne?
M-A-L-A-N. Upravo sam gubio 250 likovi jednostavno pohraniti svoje ime
obrambeno, samo u slučaju da netko u razredu ima jako dugu ime.
To izgleda kao nepotrebnog tradeoff.
>> Dakle, ispada da SQL, taj jezik baze podataka,
zapravo podržava nešto zove VARCHAR ili Promjenjiva CHAR.
A to je vrsta lijepo u da je ovaj omogućuje vam da odredite nije fiksna
širina, nego varijabla širina.
I još točnije, Maksimalna širina područja.
Dakle, to znači da ime može biti više od 250 znakova,
ali svakako može biti manje.
A baza podataka će biti pametni.
Ako ne stavite u M-a-L-A-N, to će samo koristiti pet,
možda šest bajtova za slično prateći null karakter,
a ne provesti dodatna 249 ili 250 bajtova potrebe.
>> Dakle, ovo izgleda kao da sam trebao su počeli s ovom pričom.
No, tu je uvijek tradeoff.
Dakle, s jedne strane, korisničko ime Ive navedeno da se teško kodirani na 16,
a možda to nije pravo poziv, možda ga
je, ali zašto ne koristiti VARCHARs za sve?
>> Ona postoji s razlogom.
Zašto ne koristiti VARCHARs i za svaku čija je duljina ne znate unaprijed
Ako se čini da je velika stvar, zar ne?
Koristite samo što više prostora morate do ove granice?
>> PUBLIKA: Sporiji.
DAVID Malan: Speller?
PUBLIKA: to čini sporije?
DAVID Malan: Oh, to je sporije.
Dobro, to je gotovo uvijek odgovor, iskreno.
Kao što je tradeoff?
To bilo košta više prostora ili to košta više vremena.
Dakle, u ovom slučaju, to može biti sporije.
Zašto?
>> PUBLIKA: [nečujan] utvrđivanje [nečujan].
>> DAVID Malan: Dobro.
Dakle, možda ćete se sjetiti s čak PSED5, igranje s pristupom
u rječnik, ako imate alocirati memoriju dinamički ili zadržati
uzgoju pufer, koji zapravo može biti spor.
Ako imate nazvati malloc ispod haube, a možda
to je ono što MySQL radi, tako da sigurno da bi mogao biti slučaj.
A ako mislite način natrag na PSet-- ili čak
tjedna dva, kad smo radili stvari kao binarno traženje ili čak linearno pretraživanje,
jedna od lijepih stvari o svakoj riječi u bazi podataka ili svaku riječ u stupcu
što točno iste duljine, čak Ako cijela hrpa onih znakova
prazno, je da možete koristiti izravnim pristupom na vašim podacima, zar ne?
>> Ako znate da je svaki Riječ je 16 znakova daleko,
možete koristiti pokazivač aritmetiku, tako da govoriti, i ići s nama 16, 32, 48, 64,
a vi jednostavno možete skočiti odmah pomoću aritmetičke
bilo riječi u vašoj bazi podataka.
Dok ako je VARCHAR, što ti umjesto morate učiniti?
>> [Zvonjava telefona]
>> Ako je VARCHAR, što Ne mogu koristiti slučajni pristup.
Što morate tražiti ili učiniti?
Da?
>> PUBLIKA: [nečujan]
>> DAVID Malan: Pogledajte kroz whole-- traga
kroz cijeli popis u potrazi za što, najvjerojatnije?
Kakve posebne vrijednosti?
PUBLIKA: [nečujan]
DAVID Malan: Tražim za nultu terminatora
da razgraničenje razdvajanje riječi.
Pa opet, tradeoff i nema pravi odgovor.
No, ovo je mjesto gdje, pogotovo kada korisnici doći do biti mnogo
i tvoj teret na svojim serverima je broj ljudi koristi se dobiva visoka,
To su zapravo Netrivijalno odluke.
Dakle, možemo ostaviti ih kao ovaj, ali neka je spustite na to pravo
ovdje.
Sada postoji nekoliko stupaca gdje moramo napraviti sud poziva.
Ima li smisla dopustiti korisnik je ime, korisnički korisničko ime ili korisnički a
ime, da bude nula?
To je, jednostavno prazan.
Osjeća malo besmisleno, pa sam Ne ide to provjeriti one kutije.
Ali ispada u baze podataka, možete reći,
netko može po izboru imati tu vrijednost.
Ovaj stupac nema zapravo biti tamo.
>> Zatim, tu je ovaj padajući izbornik.
I primijetiti još sam u prvom redu tu,
pa ja govorim o korisničkim imenom sada.
I ispada da je baza podataka, za razliku od jednostavnog puke tablice,
ima snažne značajke zove indeksa.
I indeks je način da govore Baza unaprijed da ja, ljudski
sam pametniji od tebe.
>> Znam što vrste upita, odaberite ili umetnuti ili izbrisati ili ažurirati,
da moj broj ide do kraja se radi na ovoj bazi podataka.
Želim pročitati puno podataka.
Želim umetnuti puno podataka.
Želim da stalno Brisanje puno podataka.
Ako znam da ću biti Pristupom polje kao Username puno,
Ja preventivno može reći baze podataka, znam više od tebe,
a ja želim da se dekretom trebali Indeks ovo područje.
Gdje indeksiranje polje ili stupac znači da je baza podataka u unaprijed
trebali posuditi neke ideje iz, kao što su, Tjedan četiri i pet i šest od CS50
i zapravo izgraditi nešto kao binarnog pretraživanja
stablo ili nešto obično naziva B stablo
da bi saznali u klasi kao CS124
na Harvardu, An algoritmi klase, ili bilo koji drugi broj mjesta.
>> Baza podataka i pametna ljudi koji ga provode
će shvatiti kako za pohranu da tablica podataka
u memoriji tako da pretraga i ostali poslovi su super brzo.
Ne moraš to učiniti.
Ne morate provoditi linearni traži ili binarno traženje
ili spojiti vrsta ili odabir vrsta, ništa od toga.
Baza to radi za vas, ako kažem to preventivno indeks ovo polje.
>> A možete vidjeti, postoji neke druge osobine
možemo reći baza podataka za provedbu.
Što bi to značilo da sam odabrati jedinstvene iz ovog izbornika, jednostavno intuitivno?
Da?
>> PUBLIKA: [nečujan]
DAVID Malan: Da, korisničko ime mora biti jedinstveno.
Je li to dobra stvar ili loša stvar za baza podataka, za web stranice s korisnicima?
Ukoliko korisnička imena biti jedinstveni?
Da, vjerojatno.
Ako je to ono što je Polje se koristiti za prijavu,
ti stvarno ne želim da ljudi imaju isti osjećaj ili isto korisničko ime.
Dakle, možemo imati Baza provoditi tako da
da je sada u mom PHP koda ili bilo kojem jeziku, Nemam se, na primjer, provjerite
nužno radi ovaj korisničko ime postojati prije nego što sam neka netko registrirati?
Baza podataka neće dopustiti dvije osobe po imenu David ili Malans registrirati u ovom slučaju.
>> I usput, iako je to Izbornik samo vam omogućuje da odaberete jedan,
jedinstveni indeks je onaj koji je indeksirane za super brzi nastup,
ali ona također provodi jedinstvenost.
A mi ćemo se vratiti na ono što je Druga dva znače u samo trenutak.
U međuvremenu, ako ja ići na moj drugi red, koji
korisniku je ime, trebam navesti da ime treba biti jedinstven?
Ne, zato što bi svakako have-- nema dva Davida
Malans u ovoj sobi, najvjerojatnije.
Ali ako ćemo odabrati drugo ime, mi sigurno može imati sudara.
>> Razmislite hash tablice i slično.
Dakle, mi sigurno ne želite da je polje ime jedinstven.
Dakle, samo ćemo ostaviti da kao crtica, crtica, crtica, ništa.
I ja ću otići sve ostalo sam.
Doista, većina tih područja nećemo morati brinuti o tome.
A kada sam spremna za spremanje ovaj, ako je internet surađuje,
Ja kliknite Spremi, a vrlo, vrlo, vrlo Polako se baza podataka biti spašen.
I sada sam natrag na ovaj sučelje, koje doduše,
je neodoljiv na prvi pogled.
Ali sve ću učiniti je kliknuti na riječi korisnike u gornjem lijevom kutu.
Ja ću ići ovdje, kliknite Korisnici i po defaultu, to
je izvršiti neku SQL, ali više o tome u ovom trenutku.
Evo samo sažetak onoga što sam učinio.
I ne brinite da vidite spomenuti latinski i švedski ovdje.
Oni su samo zadana Postavke jer MySQL izvorno,
ili PHP MyAdmin, jedan od dvojice dogodilo treba napisati neki švedskih ljudi.
Ali to je nebitno u našem slučaju ovdje.
>> U redu, pa zašto je sve ovo zanimljivo?
Ispada, mogu umetnuti podatke u bazu podataka od strane pisanja koda.
A ja ići naprijed i u mom datoteku ovdje, ja sam
ići naprijed i praviti se kao to je priključena na toj bazi podataka, koja
to nije u ovom trenutku, ali to će se biti kad dođemo do problema postaviti sedam.
I ja ću ići naprijed i izvršiti funkciju pod nazivom upita,
koje ćemo vam dati problema postaviti sedam distribucija koda, koji
traje najmanje jedan argument, što je samo niz.
Niz SQL koda.
Dakle, vi ste o kako bi naučili kako Napiši Structured Query Language.
>> Ako želim umetnuti novi redak u mom Baza zato što je netko podnio
oblik mom kodu, ja bih doslovno Napiši INSERT INTO korisnike sljedeće
polja: Korisničko ime, zarez, naziv, vrijednosti,
i sad mi treba umetnuti nešto poput Malan i citat,
citat 'David Malan. A sada čak i za one koji nisu upoznati s SQL,
zašto sam koristeći jednostruke navodnike unutar ovog zelenog string?
Ono što bi moglo biti razlog ovdje?
>> Obavijest sam ko-druženje dva jezika.
Upita je PHP funkcija, ali to traje argument.
I to je argument mora biti sama napisan u drugi jezik zove
SQL, Structured Query Language.
Dakle, sve što sam Upravo ovdje istaknute
je taj jezik zove SQL.
Dakle, što je s jednostrukim navodnicima, jednako brzo provjeriti razum?
Samo naprijed.
Oni su žice.
Dakle, citat, citat Malan i citat, citat David Malan su žice.
I baš razmišljam intuitivno sada, znajući što znate o C i PHP,
zašto ne to, što ja obično Korištene dvostruki navodnici za žice?
Zašto ja ne želim to učiniti?
Da?
>> PUBLIKA: [nečujan]
DAVID Malan: Točno.
Zato sam već pomoću dvostruki navodnici na putu
izvan argument na PHP funkcije,
Ja bi samo zbuniti tumača.
Ona neće znati, zar ovi idu zajedno?
Nemojte to idu zajedno?
Dakle, ja izmjenjivati ​​umjesto.
>> Ili sam mogao učiniti nešto ovako, backslash citat ili backslash citat.
Iskreno, da je samo počne dobiti vrlo nečitak i ružno.
Ali to bi se postigla isti rezultat kao dobro.
>> Dakle, ako su za izvršenje ovog upita sada, da vidimo što se događa.
Idem ići naprijed i sada radije nego izvršavanje PHP kod, koji
je mjesto gdje ćete igrati u problemu postaviti sedam,
Idem umjesto otići u PHP MyAdmin.
A ja ću ručno ići na SQL kartici,
i neka mi uvećanje na sučelju.
I ja ću zalijepiti u stvar sam upisali.
A kodiranje boja ima promijenio malo sada,
Samo zato što su formati programa stvari malo drugačije.
Ali primijetite da je sve što sam učinio je sam rekao, umetnite korisnike.
Ja sam navedeno, a zatim, u zarez odvojeni zagradi popis dvoje
polja koje želim umetnuti, i onda sam doslovno sam rekao vrijednosti
slijedi još jedan navodnik, a zatim su te dvije vrijednosti
Želim plug-in, i Sada za dobru mjeru,
Ja ću staviti zarez na kraju.
Dakle, ovo nije C. Ovo nije PHP.
To je sada SQL, i ja sam ga zalijepiti u ovom web-temeljen sučelje koje je
Samo će me pustiti, čim sam kliknite Idi,
izvršiti ovaj upit na bazu podataka trčanje unutar CS50 IDE.
>> Dakle, to je dobro.
Obavijest da je rekao jedan red umetnuta, otišao super brzo,
0.0054 sekundi umetnuti te podatke.
Dakle, to zvuči prilično zdrava.
To preoblikovati svoj upit mi ovdje samo da ga vidim
u kakve boje kodirane verziji.
Ali sada, ako ja kliknite Pregledavanje, primijetiti da, čak i
iako ima puno nereda na zaslon, moj stol sada ima dva reda.
>> Dakle, neka mi ići naprijed i učiniti drugi.
Umjesto toga, neka me ići na SQL kartici opet.
I ovaj put ću ubaciti nešto poput Rob i ime će mu biti Rob Bowden.
Bowden.
Idemo kliknite Spremi.
Ups, a Go.
>> Ponovno kliknite Pregledaj, a Sada primijetite Imam dva reda.
Dakle, ovo je samo način složeniji način otvaranja Google tablice
i samo upisivanjem red u koloni.
No, ono što je ključno je da sada imamo sintaksu
s kojima pisati kod, tako da u konačnici, mogli bismo zapravo
učiniti nešto i to.
Sjetite se da PHP podržava super globalne varijable.
>> Što je unutar dolara prijaviti podcrtavanja doći u PHP-u?
Uzeli smo pogled na jedan ili dva jednostavna primjera.
A u PSet6, podsjetiti imate pozdrav dot PHP koji koristi ovu varijablu.
Što se tamo?
Ili što je to?
Malo glasnije.
>> PUBLIKA: [nečujan]
>> DAVID Malan: To je snijeg Sjeme polje, koje
je samo fancy način govoreći niz koji ima ključ parove vrijednosti.
A ključevi nisu numerički.
Oni su riječi ili žice.
A Naime, ono što su oni ključni parova vrijednosti?
Odakle su došli?
Žao nam je?
>> PUBLIKA: [nečujan]
DAVID Malan: Ne?
Gdje one ključ vrijednost parova dolaze iz?
Reci opet?
Opet?
Jesam li ja jedina rasprava nešto?
>> [Smijeh]
>> To je točno, zar ne?
>> PUBLIKA: [nečujan]
DAVID Malan: Da, dolaze iz upitom.
Dakle, ako ste natrag u vrijeme da kad smo igrali sa Google
a mi smo otišli na google.com slash Traženje upitnik q jednak mačke,
ako bih pritisnite Enter, a ako Google je implementiran u PHP,
PHP kod koje Google pisao će imati pristup znak za dolar
naglašavaju dobiti unutar kojih ključni je nazvao Q i vrijednost
nazivaju mačke koje onda može koristiti koristiti za napraviti stvarnu pretraživanje s.
>> Dakle, u stvari, što ću sada je vratiti se mojoj PHP koda
da opet ćete vidjeti više u PSet7.
I umjesto plugging u tvrdim kodiranih vrijednosti koje
ne izgleda poput Vrlo dinamična web stranice,
Ja ću vam dati teaser za što vaš stvarni broj će učiniti.
Ti bi stavio u dva Pitanje obilježava ovako.
Ne znam što je korisničko ime je.
Ne znam što je Naziv će biti,
ali ja znam da mogu dobili ih dinamički.
>> Dakle, ako kod pišemo sada kod trčanje na Googleovim poslužiteljima,
ili ako je to zdravo dot PHP, koji dolazi s PSet6,
Idem proći u funkcija upit
baš kao printf, druge dvije tvrdnje.
GET, citat, citat korisničko ime, i dobiti, citat, citat ime.
A sada, primijetiti što se Opća struktura je ovdje.
Imam na lijevoj ruka strana poziva,
ova funkcija zove upit u PHP.
Još uvijek imam kao prvi argument, samo niz teksta.
>> Ali taj komad teksta pisani jezikom zove SQL.
I iskreno, to nije veliki jezik.
Mi samo će govoriti o je službeno danas, stvarno.
A onda je u problemu postaviti sedam, postoji relativno
nekoliko značajki koje smo će utjecati.
Pitanje maraka, međutim, znači priključiti vrijednost i ovdje priključak u drugoj vrijednosti
ovdje.
I napomena, ja sam izostaviti ono iz cijelog quote-- Damn
it-- oko kotaciju obilježava ovaj put.
Ja sam izostavljen citat Oznake oko upitnikom,
Žao nam je, ovaj put okolo.
>> Dakle, ono što je lijepo o tome upitnik značajka koja
PHP sklon podržati, Ruby i Python i drugih jezika,
to samo znači utikač u nekim Cijenimo ovdje i znate što?
Vi shvatiti da li koristiti jednostruke navodnike ili dvostruki navodnici.
Nemojte me gnjaviti s onima intelektualno nezanimljiv pojedinosti.
Ali, uvjerite se da je točna tako da je moj broj je u konačnici
operativni i sigurno, što će imati značenje prije dugo.
>> Sada, koliko argumente iznositi, samo da biti jasan, je upita funkcija uzimanje?
Svatko želi glasati za više od dva?
Tri?
Naravno, zašto?
Zašto tri?
>> PUBLIKA: [nečujan]
DAVID Malan: Točno.
Prvi dio je niza.
Drugi argument je dolar znak naglašavaju GET nosača korisničko ime.
I treći argument je Ista stvar, ali samo ime.
Tako je u drugim riječima, sada ako sam imao web obrasca
koji je morao tekstualnih polja, jedan za korisnika korisničkim imenom,
jedan za njegovo ili njezino ime, samo kao što će vidjeti u web stranicu
kada se registrirate za neke web stranice, to može
biti kod na stražnjem kraju da zapravo radi umetanja sada
u bazu podataka.
>> Sada za razliku od, idemo brzo naprijed.
Pretpostavimo korisnik je sad prijavite i želite
napisati PHP kod koji provjerava je li osoba koja je samo prijavljeni
je zapravo korisnik, možete koristiti prilično jednostavne sintakse.
Možete reći SELECT, recimo star, gdje zvijezda znači sve.
Ne znam što bih žele, pa samo mi daj
svi stupci iz tablice zove Korisnici gdje je, i to je lijepo.
Odaberite podržava ono što je zove predikat, što je
kao način kvalificiranja ono što želite.
Gdje korisničko ime jednako citat, citat Malan.
Tako i ovdje, ja sam ugrađeni unutar argument
na PHP funkcije, liniju SQL koda.
I to SQL kod ova Vrijeme je doslovno ide
tražiti citat, citat Malan.
>> Sada to nije sve što je korisno, pa ću preskočiti da
i ja ću staviti daleko Ovaj savjet iz Brady, i otići
i plug-in umjesto pitanje oznaka ovdje.
Dakle, samo da bude jasno, ono trebalo mi je drugi argument
se ako je netko upravo prijavljeni i ja provjeriti da li je on ili ona je zapravo
korisnik?
PUBLIKA: [nečujan]
DAVID Malan: Da.
Čujem znak za dolar podvlačenje Pošalji citat, korisničko ime.
I to bi trebalo vratiti na mene bilo koji od redova u mojoj bazi
koji imaju korisničko ime Malan.
Sada, nadamo se, da ću se vratiti nula ako Malan je ovdje nikad nije bilo,
ili jedan ako ima.
Ne bi trebao dobiti natrag dva ili tri ili četiri.
Zašto?
>> PUBLIKA: [nečujan]
>> DAVID Malan: Rekao sam jedinstven, zar ne?
Jednostavan razlog.
Zato sam rekao da je dobio biti jedinstven, baš logično,
možete imati samo nula ili jedan Malans u ovom konkretnom baze podataka tablice.
Sada kao stranu, samo da ste vidjeli da, iako sam i dalje koristiti GET
i iako PSet6 samo koristi GET, sigurno možete imati POST.
I podsjetiti da je još jedan post tehnika za podnošenje podataka
od oblika, ali ne prikazuju se u URL.
To je malo više siguran sigurno za stvari kao što su korisnička imena i lozinke,
koji PSet7 će, u stvari, uključiti.
>> Dakle, neka je to u PHP MyAdmin i vidjeti što se događa.
Ja ću ići na karticu MySQL.
I obavijest da je zadanu vrijednost za PHP MyAdmin, samo pokušati biti od pomoći,
je odabrati zvijezdu od korisnika gdje je jedan.
Pa, on je uvijek istina, pa ovo je glup snazi
samo odaberite sve.
Ali ću biti malo više pedantan i ručno
upišite se SELECT zvijezdu od korisnika.
>> Sada tehnički, možete citirati naziv tablice.
To je rijetko da morate, ali primijetiti to nisu
normalne citati o američkoj tipkovnici.
To je tzv backtick, koji uglavnom na gornjem lijevom rukom
kutak tipkovnici.
Ali to je rijetko da ćete zapravo treba gnjaviti s tim,
tako da sam samo ću ih izostaviti svejedno.
Tako sada, neka mi ići naprijed i udario ići.
A koliko redova trebam dobiti kad sam odabrati zvijezdu s korisnicima?
>> PUBLIKA: [nečujan]
DAVID Malan: Broj redaka, sigurno.
No, koliko je u ovom beton priča upravo sada?
Drugo, zato što je ja i bilo je Rob.
Dakle, ako ja kliknite Idi, vidim da je vizualno Ja sam dobio natrag, dapače, dva reda.
Postoji mnogo nereda na zaslon, ali ja vidim samo dva reda.
Nasuprot tome, ako ja to učiniti opet i raditi SELECT zvijezda od korisnika, gdje korisničko ime
jednak citat, citat Malan, sad ako ja kliknite Idi,
Ja sam samo ide da biste dobili leđa jedan red.
I na kraju, ako to učinim nešto kao što je ovaj, pretpostavljam
da ne brinu o uzimajući sve,
koja je vrsta besmisleno sada, jer ima samo dvije kolone.
To nije kao ja odabirom ogromna količina podataka.
Pretpostavimo da ići naprijed i Ne SELECT ime FROM
Korisnici, gdje korisničko ime jednako je Malan, što je lijepo o SQL iskreno,
je da zapravo samo radi što to kažem.
To je prilično kratak, ali doslovno samo ga reći ono što želite učiniti.
Odaberite naziv od korisnika gdje korisničko ime jednak Malan.
I to je uistinu tako eksplicitno.
Dakle, sada, ako sam pogodio Idi, koliko Redovi ću dobiti natrag?
Jedan, jer to je samo Malan, nadam se.
Ili nula ako nije postoji, ali maksimalno.
>> A koliko stupaca ću dobiti natrag?
Koliko stupaca?
Ovaj put, samo sam ću dobiti jedan jer nisam
odaberite zvijezdu, koja je sve.
Sada sam odabirom samo ime, pa sam samo dobiti natrag jedan stupac i jedan redak.
I to izgleda nekako prikladno smiješno, samo gleda super
Mali ovako.
Dakle, ono što se zapravo događa?
Kada izvršiti SQL upita pomoću odabir,
što ste uzimajući natrag iz baze podataka
je kao privremena tablica s redaka i stupaca, možda,
ali to izostaviti ništa što nije zapravo izabran od strane vas.
Dakle, to je kao da je netko imao veliki Proračunska tablica svih studenata
registrirana za neke Student grupa, a ti kažeš,
daj mi sve brucoš koji ste registrirana za naše studentske grupe, što
Vaš kolega u Student grupa može učiniti
se oni samo mogli predati što je cijela proračunska tablica.
To je kao da kažete odaberite zvijezdu.
I to je malo neugodno ako samo htjela brucoš.
I tako, ako umjesto toga, rekao je, odaberite zvijezda iz tablica baze podataka
gdje godišnje jednak citat, citat brucoš,
to je kao da je tvoj prijatelj u studentskoj grupi
doslovno je istaknuo i kopirati samo prve redove,
ih zalijepiti u novi Google Spreadsheet ili Excel datoteke,
i ti predao natrag Nastala je samo datoteku.
To je sve što se događa na konceptualno ovdje.
>> Tako je na kraju, možemo učiniti neke prilično ukrasni stvari
spremanjem stvari poput korisničkih imena i lozinke i slično.
No, ispostavilo se, da radimo malo drugačije od toga.
To nije toliko pametan da je samo pohraniti korisničko ime i lozinku.
Netko je ranije, mislim ovdje, predložio ID.
Sada osobna mogao biti poput Harvard ili Yale ID neto ID,
ali to bi mogao biti još jednostavnije u našem slučaju baze podataka.
I doista, čest slučaj je još jedan stupac.
I ja ću otići naprijed i urediti tablicu.
A ako se poigrati s Ovo sučelje za PSet7,
vidjet ćete da možete provjeriti Ovaj gumb je ovdje i dodajte
polje na početku tablice.
I sad ako ja kliknite ići, to se događa da mi daju jednu od tih oblika
od ranije.
Idem dodati polje nazivom ID.
I ja ću ga numerički tip napraviti.
>> Imam hrpu vrijednosti za Brojevi.
Samo ću odabrati INT i Ne brinite o različitih veličina.
Nemam odrediti duljina ili vrijednost,
jer će biti 32 bita bez obzira.
Značajke, nismo vidjeli prije.
Svako zanimanje bilo koji od ovih opcije izbornika ovo vrijeme?
Za INT?
Što predlažete?
Ne?
Da li bilo koji od ovih smisla?
Da.
Da, nepotpisana, zar ne?
>> Općenito, ako ćemo dati svi jedinstveni broj koji
gdje je ova priča ide, ja stvarno samo želim
osoba ima broj kao nulu i jedan i dva i tri i četiri.
Ne trebam nositi s negativnim brojevima.
To samo izgleda kao nepotrebnog složenosti.
Želim četiri milijarde mogućih vrijednosti, ne četiri milijarde mogućih vrijednosti,
tako da sam samo udvostručen Kapacitet moje INT.
Kao na stranu, ako želite da se odnose to nešto poput Facebooka,
povratak u vrsti mom dana kada Facebook prvi iziđe,
Vjerujem ono što su bili korištenjem u MySQL bazu podataka
trgovinu korisnik je identifikator, bio samo INT.
Ali, naravno, tu je mnogo od stvarnih ljudi na svijetu.
Ima puno lažnih Facebook račune na svijetu.
I tako na kraju, Facebook potopilo veličina int, A četiri milijarde
vrijednost.
Koji je razlog zašto, ako pogledate oko sebe i tu je web stranica
koji vam mogu reći što vaš jedinstveni ID.
A ako nikada izabrao ime u Facebook, vidjet ćete svoj jedinstveni ID.
Mislim da je to profil dot PHP Upitnik ID jednak nešto.
To je sada nešto kao velika INT, ili dugo dugo, ako hoćete,
što je 64-bitni vrijednost ili nešto usporedivo.
>> Dakle, čak iu stvarnom svijetu učiniti te Problemi u konačnici ponekad smeta.
I ispada ovdje, ako sam dajući sve moje korisnika jedinstveni ID,
Želim biti super eksplicitno i minimalno bi ovo polje jedinstven.
Ali ispada da postoji jedna komad nomenklatura i danas
to je primarni ključ.
Ako ste projektiranje baze podataka stol i unaprijed znate
da je jedan od stupova na tom stolu treba i da će jedinstveno identificiraju redaka
u tablici, želite navedite ga i reći baze podataka,
ovo je moj primarni ključ.
Tu bi moglo biti duplikati u drugim područjima,
ali ja govorim da je to baza podataka je moj primarni, moje najvažnije područje,
koji je zajamčeno da budu jedinstveni.
>> Sada, to se čini suvišan.
Ja sam sada predlaže da smo dodati, klikom na Spremi ovdje
polje called-- i idem ići naprijed i kliknite AI,
mi ćemo se vratiti da je u trenutku, Spremi.
Predlažem da sada moj stol izgleda ovako.
Imam polje INT nazivom ID, polje CHAR zove ime,
polje VARCHAR zove ime, ali ID, ako je primarni i stoga jedinstvena,
zašto sam baš otpada Vrijeme uvođenja što
učinkovito je drugi jedinstven Polje naziva ID koji je int?
>> Korisničko ime, podsjetimo, bio Već jedinstven, rekli smo.
Tako je samo logično, ne trebate bilo koju bazu podataka iskustvo razloga
kroz to, zašto Možda sam uveo
int kao moj jedinstveni identifikator kao i?
Što this-- kažem opet?
>> PUBLIKA: [nečujan]
>> DAVID Malan: Slučajna Pristup je lakše, zašto?
>> PUBLIKA: [nečujan]
DAVID Malan: Da, to je Samo pristupanje brojeve.
Dakle, ako mislite da je to doista je stol, kao što je niz,
sada imam jedinstvene identifikatore da mogu skakati.
I bolje od toga i dalje je da je Koliko je velik int će biti opet?
32 bita ili četiri bajta.
>> Koliko velika je moje korisničko ime će biti?
Maksimalno?
16 bajtova.
>> Dakle, ako ste stvarno briga o performanse vašeg koda,
mislim natrag PSet5, biste li radije za traženje vrijednosti četiri bajta ili 16
byte vrijednost, zar ne?
To je uistinu tako jednostavno.
Vi morate učiniti četiri puta više posla tražiti korisničkih imena jer su oni
16 bajtova.
Dakle, morate doslovno usporediti sve 16 bajtova se
jeste da, ovo je korisničko ime želim.
Dok za INT, možete to učiniti sa samo četiri bajta.
>> I usput za one zanima računalni hardver,
ispada da može stati nešto poput int ili 32-bitne vrijednosti u nečemu
zove registar u računalu CPU, što znači da je super,
super brzo, čak i na najmanji Razina hardveru računala.
Dakle, postoji samo prednosti sve oko sebe.
Dakle, što to znači?
U stvari, kada projektiranja tablica baze podataka, gotovo sve vrijeme
ćete imati ne samo podatke koje je stalo,
ali i nešto poput jedinstveni identifikator
jer ovo ide neka nam raditi druge stvari.
I neka je spotaknuti jedan problem ovdje.
>> Pretpostavimo da korisnici nisu Samo korisnička imena i nazivi,
ali oni također imaju stvari poput gradova i država i poštanski brojevi, barem
ovdje u SAD-u.
Dakle, ja ću ići naprijed i samo se brzo reći,
daj mi još tri stupca na kraju stola.
A to će biti grad, to će biti državni,
i to će biti Zip.
>> Sada tipa Grad, koje podatke treba to biti, možda?
VARCHAR?
Ne znam što je Najduži naziv grad.
Negdje u Americi, tamo je vjerojatno neki smiješno duge riječi,
pa neka je samo ići s 255, nešto povijesno ili samovoljno.
Država, ono što želite učiniti?
Presuda poziv, zar ne?
Što je možda najučinkovitiji?
Koliko likovi?
Možda samo dva, ako mi može dobiti daleko s radi samo,
slično, MA za Massachusetts i slično.
Dakle, ja ću ići char vrijednost dva.
>> Poštanski broj je zanimljiva.
Mi smo ovdje u 02138, tako da je sugerira da bismo trebali iskoristiti ono?
To je INT, zar ne?
INT, INT, kratko?
Kratko će raditi.
Ne?
CHAR ili pet, ali želim int.
Zašto gurnuti natrag na INT?
Uvjeriti me od toga.
Što je glupo o INT, mojoj ideji?
Da.
>> PUBLIKA: Pokupiti više memorije.
>> DAVID Malan: Pokupiti više memorije.
Četiri bajtova, ali si predlaže poštanski broj
kao pet bajtova ili netko kao CHAR, koja se osjeća kao eh, to nije stvarno
slučaj.
>> Pa, zabavna priča.
Prije mnogo godina, kada sam se koristiti Microsoft Outlook za moj e-mail,
I na kraju želio prebaciti na Gmail.
I tako, izvoze sam sve moje kontakata iz programa Outlook kao CSV datoteku.
Vrijednosti odvojenih zarezom, koji je upravo sam mislio
imali svi moji prijatelji imena i prezime imena i telefonske brojeve i poštanski brojevi
i sve to.
I onda sam napravio pogreška se otvaraju
u Excelu, koji je Program tablicu koja
razumije CSV datoteka kao što smo vidjeli.
Ali onda, mora da sam pogodila, kao što su, Naredba ili Kontrola S u jednom trenutku.
I Excel očito u vrijeme imao značajku kojom bilo kojem trenutku
Vidio broj, pokušala je biti od pomoći.
A ako taj broj je započeo s nule, to bi samo dobili osloboditi od njih.
Zašto trebate vodeći nula na cijelih brojeva?
Oni su besmislene, matematički.
Oni nisu beznačajne u US Postal sustava.
Dakle, ja sam imao godinama, do danas, još uvijek
imati prijatelje da kada rijedak slučaj da trebam netko
rješavanje ovih dana, I dalje ćemo vidjeti da sam
imati prijatelja u Cambridgeu, Massachusetts, 2138.
I to je neugodno ako ste pokušavajući vrsta programski
generiranje omotnice ili samo pribilježiti.
A to je zbog toga, Izabrao sam pogrešan tip podataka.
Dakle, ja volim svoju ideju.
Idemo koristiti polje char.
Pet znakova, osim tu je kutak slučaj.
Ako još uvijek poslati mail, Ponekad zip kodove ovih dana,
oni su, kao, plus četiri.
Dakle, trebamo crticu, a zatim trebamo još četiri brojeva.
Dakle, da budem iskren, to bi ići mnogo različitih načina.
>> Za sada, ja ću zadržati je jednostavan i ja sam samo
će reći da je to pet CHAR vrijednost, a mi smo
će preskočiti cijelu crtica plus četiri.
No, to su vrste tradeoffs.
A možete misliti na Isti problemi koji proizlaze
s telefonskim brojevima i drugim područjima.
>> A sada, to je zapravo lud ceste ići prema dolje.
Pretpostavimo kako Rob i ja i Hannah i Maria i [? Davon?] I Andy
i drugi na osoblje sve žive u Cambridgeu, Massachusetts, 02138.
To zapravo osjećam glupo da sam dodajući da moj korisnike stol, grad, država,
i zip.
Zašto?
>> PUBLIKA: [nečujan]
>> DAVID Malan: Reci opet?
PUBLIKA: [nečujan]
>> DAVID Malan: Oni su uvijek ići zajedno, zar ne?
Kada se ispostavilo, koristili smo razmišljati to bio slučaj dok ne iscrpno
Tražili cijeli SAD, i ispada da postoji
neke nedosljednosti gdje je više mjesta imaju
isti zip, što je čudno.
Ali, ako mi propisuje za sada to 02138 Uvijek je Cambridge, Massachusetts,
Zašto u svijetu bi li pohraniti u baza podataka Cambridge i MA i 02138
za mene i za Hannah i Rob i za [? Davon?] I drugima koji žive
ovdje u Cambridgeu, to je savršeno suvišan.
>> Trebamo izvući sa samo skladištenje što?
Samo poštanski broj.
Ali onda, ako smo pohraniti samo poštanski broj, ja želim, vjerojatno,
za moje web stranice znati na kojem je 02138.
Dakle, treba mi još jedan stol.
I to je u redu.
A u stvari, to je jedan od dizajn procesi projektiranje stolova
da ćete učiniti u PSet7 kao i pri čemu Želite li faktor zajedničke podatke.
Baš kao što smo faktoring iz čest kod i faktoring iz zajedničkog
stilova iz CSS, ovdje također u bazi podataka,
ako mi treba samo 02138 jedinstveno prepoznati nečiju rodni grad,
nemojte pohranjivati ​​Cambridge, MA za svaki prokleto korisnik u tablici.
>> Umjesto toga, imaju poseban stol pod nazivom Poštanskih brojeva da bi trebali imati što kolumne?
Vjerojatno ID polje, samo zato, jer načela govorimo o sada.
Vjerojatno polje zip za 02138.
A onda vjerojatno ono što drugi stupovi?
Grad i država, ali samo imati jedan red za 02138, jedan red za 02139,
jedan red za 90210.
I to je doslovno svi su poštanski brojevi znam.
>> Tako sada, što možete učiniti?
Ovo je problematično, jer Sada imam dvije tablice.
Dakle, moji korisnici su uglavnom ovdje, ali njihov grad državne informacije je
ovdje.
Dakle, ispada SQL, postoji zapravo način da se pridruže informacije,
i to ćete vidjeti u PSet.
>> Ali ispada možete učiniti nešto ovako.
SELECT zvijezda od korisnika, JOIN zips NA Korisnici dot zip jednak poštanskih brojeva dot zip.
Koji je malo razvučen, doduše, ali to jednostavno
znači odaberite sve od Proces uzimanja moj korisnicima stol
moj poštanskih brojeva tablica.
Pridružite im se na jednom području imaju u koloni.
Dakle, doslovno radi nešto kao što je ovaj, i dati me natrag
nova privremena tablica to je širi, to je veća,
koji ima sve stupovi od njih oboje.
I to je, jednostavno, bio bi Sintaksa za nešto ovakvo.
>> Dakle, tu je to naprijed, ali se događa
biti druge dizajnerske odluke da ćete napraviti, ne samo s indeksima
ali i trčanje u izazove.
U stvari, tu je izazov u svakom dizajn baze podataka
pri čemu ponekad dvoje ljudi možda želite pristupiti iste redove baze podataka
stol.
Dakle, to je nešto što ćemo susresti u PSet7 kao dobro.
>> Ali sam mislio da ću gledati na jedan napad koji je moguće u SQL.
Koje su neke od problemi koji mogu nastati?
Dakle, vi ćete naići na to u PSet7.
A mi vam reći iskreno što kodiranje rješenje za ovaj problem.
Ali ako se uzme višu razinu klase, osobito u operativnim sustavima,
idete u susret pitanje valentnost,
problem pokušava učiniti više stvari odjednom
bez prekida.
>> I ja sam mislio da ću uvesti taj Ideja za PSet7 s metaforom
da sam naučio u Margo Seltzer je CS164 operativni sustavi
Prije klase godina.
Pretpostavimo da imate jednu od ovih domu hladnjaci u vašoj sobi u studentskom domu ili domu,
i imate pravi sklonost za mlijeko.
I tako, dođete kući iz razreda jednog dana, otvorite hladnjak.
Oh, dovraga.
Nema mlijeka u hladnjaku.
Dakle, zatvorite frižider, zaključavanje vrata, zaključavanje vašem domu,
hoda iza ugla na CVS, stati u red,
i početi checking out za malo mlijeka.
I to će potrajati, jer one proklete samo naplata
brojači se zauvijek ionako koristiti.
Tako je u međuvremenu, vaš cimer dolazi kući.
On ili ona stvarno voli mlijeko, kao dobro.
Oni dolaze u sobi u studentskom domu, otvorite hladnjak, oh, prokleto je.
Nema više mlijeka.
>> Dakle, on ili ona također ide iza ugla.
Ali sada, s obzirom da je kao dva ili tri ili četiri CVSes blizini,
oni se dogoditi da ide u jedan od različitih one na trgu.
I tako sada, nekoliko minuta kasnije, oboje
doći kući i uh, najgori problem ikad.
Sada imate previše mlijeka jer će ići kiselo.
A ti se sviđa mlijeko, ali stvarno ne sviđa mlijeko.
>> Tako sada, to je skupo pogreška zbog vas oboje
napravio odluku na temelju stanje neke varijable koje
je u procesu se mijenja od vas,
inicijator će dobiti mlijeko.
Dakle, ono što je možda i ljudsko Rješenje za taj problem?
PUBLIKA: [nečujan]
DAVID Malan: Ostavite poruku, zar ne?
Uvijek ostavite napomenu, ako ste upoznati s tom showu.
Da, tu su nas dvije.
Dakle, uvijek ostaviti poruku, ili doslovno zaključali hladnjak
s nekom vrstom lokot ili nešto preko vrha kao što je to.
Ali to je zapravo će biti Ključni problem s dizajnom baze podataka,
pogotovo kad bi mogli imati više preglednicima, više laptopa,
više korisnika sve pokušava ažurirati podatke odjednom.
Posebno osjetljive informacije kao i financijske informacije,
pri čemu uz trgovanje dionicama web stranice kao i ti ćeš biti zgrada,
što ako želite provjeriti koliko novca imate i onda ako imate dovoljno,
kupiti nešto dionica?
>> Ali što ako netko drugi tko ima zajednički račun s vama
istodobno pokušavajući kupiti neke dionice?
Dakle, on ili ona provjere račun platne bilance, oboje
vratiti isto Odgovor, nema mlijeka.
Ili oboje vratiti odgovor, imate 100 $ na računu.
Oboje vas pokušati donijeti odluku kupiti jednu dionicu neke tvrtke zaliha.
>> A sada, što se događa?
Imate dvije dionice?
Nemate dionice?
Problemi kao što to može pojaviti.
Dakle, mi ćemo naići na to.
SQL injection napada, srećom, su nešto što će vam pomoći s,
ali to su atrociously uobičajene ovih dana još.
Dakle, ovo je samo jedan primjer.
Ja ne tražim da Harvard PIN sustava je
ranjiva na ovaj napad.
Pokušali smo.
Ali, vi znate da mi teren ovako.
I Yale neto ID ima sličan u potrazi zaslon ovih dana.
I to ispada, da je možda PIN sustav je implementiran u PHP-u.
>> A ako je were-- je not-- oni možda kôd koji izgleda ovako.
Imaju dvije varijable.
Daj mi ime i lozinku iz Post super globalne varijable
da smo razgovarali o ranije.
Možda Harvard ima upit poput SELECT zvijezda od korisnika
gdje korisničko ime jednak i lozinku jednak.
I obavijest da sam samo plugging u korištenju
Kovrčava braće zapis od drugih dan, što znači samo uključiti u vrijednosti
ovdje.
Neću pomoću upitnik tehnika.
Ja nemam drugi ili treće tvrdnje.
Ja sam samo doslovno izgradnje string sebi.
>> Problem je, međutim, da je ako netko sviđa scroob,
što je referenca na filmu, prijavljuje se u ovako nešto,
i ja sam ukloniti točkice koji obično prikriti
lozinke, što ako je on posebno zlonamjerni
i njegova lozinka možda je 12345, po filmu pod nazivom "Spaceballs"
ali on kritički tipa A Jedan citat nakon pet,
onda doslovno riječ ili u prostoru, a zatim citat,
citat jedan jednako jedan citat, ali primijetiti da je izostavljeno što?
On je izostavljen citat na desnoj a on je propustio citat na lijevoj strani.
>> Jer ako je to napadač scroob je pretpostavka
je da su ljudi koji su pisali ovo PHP kod nisu tako svijetle,
možda su samo neki pojedinačni citira oko interpolacije
varijable u vitičastim zagradama?
I tako, možda, mogao vrsta od završe misao
za njih, ali na način koji će da ga provalio u PIN sustava.
Drugim riječima, pretpostavimo da je to kod
i sada priključiti ono scroob upisali.
I to je crvena, jer je to loše.
>> A temeljni teksta je ono što je upisali u,
scroob mogla izigrati Harvard poslužitelja u izgradnju SQL upit
niz koji izgleda ovako.
Lozinka jednak 12345 ili jedan jednako jedan.
Rezultat koji je, logično, je da će to prijaviti scroob
u ako mu je lozinka 12345 ili ako jedan jednako
jedan, što je, naravno, uvijek istinito, što znači scroob uvijek dobiva.
>> I tako, put popraviti ovaj, kao iu mnogo slučajeva,
bi se napisati više defenzivno.
Za korištenje nešto poput naših stvarna funkcija upita, što
što ćete vidjeti u PSet7, gdje smo ukopčali nešto slično pitanje obilježava se ovdje.
A ljepota Funkcija upit koji smo
dati je da brani od ovih Takozvani SQL injekcije napada, u kojima
netko prevariti svoj kod u ubrizgavanje svoj vlastiti SQL koda.
Jer ono što funkciji upit dajemo ćete zapravo učiniti,
ako koristite upitnika sintaksu i drugi i treći argument,
je ono što se to dodati na ulaz da korisnik pod uvjetom?
Oni backslash citati.
>> Dakle, to bježi bilo potencijalno opasni likovi.
Ovo izgleda čudno sada, ali to nije ranjiv
jer ne promijeniti logiku više
jer cijeli zaporka sada jedan citat koji nije,
Zapravo, lozinkom scroob a.
Dakle, došlo je do neke šale o tome tijekom godina.
Dakle, ovo je fotografija uzeta neke monstrum na parkiralištu
pri čemu ti znaš da neki gradovi i država pokušati skenirati vaše licence
Ploča vama ili ulaznicu naplatiti vam ako idete kroz bez, kao što su,
E-Z pass stvar.
Dakle, ta osoba smatra da je možda ljudi pišu na e-Z Pass sustav
nisu bile tako svijetle, a možda su Samo spojeni zajedno niz,
tako da on ili ona ne može zlonamjerno ne samo završe misao,
ali zapravo izvršiti loše naredbu, što nismo još spomenuli,
ali vjerojatno možete pogoditi.
To osim za brisanje i umetnuti i ažuriranje i odaberite,
tu je ključna riječ se zove pad, što doslovno briše sve
u bazi podataka, koja Osobito je loše.
>> Možemo uvećanje na ovo ako to je malo teško vidjeti.
Ovaj, sada je poznato crtić to je predivno pametan sada
i razumljivo.
>> [Smijeh]
>> Da, super.
Vrsta geeking van.
Dakle, to su, dakle, SQL injection napada.
I oni su tako lako izbjeći pomoću pravo kod ili prave knjižnice.
I vidjet ćete u PSet7, to je Zato ćemo vam dati funkciju upita.
Dakle, nekoliko zadirkivači koje smo mislili da bih
vam dati ovdje u našem Preostalo minuta zajedno.
Dakle, kao što se sjećate iz tjedna nula, mi uvedena ove dvije žarulje koje
su lijepe, a ne samo zato oni su prilično i šarene,
nego zato što podržavaju nešto pozvao API, aplikacija
Sučelje za programiranje i u CS50 do sada, mi smo
uglavnom usmjerena na GET i POST, ali ispada
postoji drugi HTTP glagoli poput PUT.
>> A u stvari, to je bio slide iz tjedna nula
gdje ako pišete kod koji šalje la PSet6 HTTP zahtjev koji
izgleda ovako s ovim komad teksta na dnu, koji se zove JSON,
ili JavaScript Objekt oznake da ćemo razgovarati o sljedećem tjednu,
možete uključiti ili isključiti ili promjene boja svjetla poput onih.
Dakle, ako CS50 ima osim nekih tih žarulja ovdje u New Havenu
ako želite posuditi ih za konačne projekte,
Također neke Microsoft Bendovi, koji su poput
Satovi koje nose oko ručnog zgloba da na sličan način imaju API tako da
Možete napisati svoj softver za njih.
>> Imamo račun s Appleov iOS broj tako
da, ako imate Apple Satovi ili iPhone ili iPad ili iPod,
možete napisati kod koji zapravo radi o onima.
Imamo hrpu od Arduinos, koji su
maleni malo računala bez slučajeva, u biti,
da se možete povezati putem USB, obično na svoj Mac ili PC,
napisati kod koji radi na tim fizičko uređaji koji često imaju senzore na njima
tako da možete komunicirati sa stvarnim svijetom.
Imamo hrpu od Leap Motion uređaja,
koji su USB uređaji za Mac i Računala, i ovdje opet, u New Havenu.
A ako ga spojite na svoj Mac, zapravo možete kontrolirati vaše računalo
pisanjem softvera da putem infracrvenih zraka,
otkrije gdje se vaše ljudske ruke, čak i bez dodirivanja tipkovnice.
Mislili smo da ćemo podijeliti brz uvid u to, na primjer.
>> [Glazbom]
Dakle, imamo cjelinu hrpa tih stvari,
također, pozvao MYO ruku bendova koje ste stavili u odnosu na podlakticu
a onda možete kontrolirati pravi svijet ili virtualni svijet kao što je ovaj.
>> [Glazbom]
Ili, mi također imaju neke Google Karton, što je doslovno, kao što je,
kartonska kutija ste mogli staviti na svoje lice, ali tobogan na telefonu u nju
tako da stavite čašu svoje Telefon jako blizu svojim očima.
I Google Karton je prilično jeftini na $ 10 ili $ 20.
I to je malo leće da malo off smjene
slika na zaslonu Vašeg čovjeka Oči vam dati osjećaj dubine
tako da zapravo imaju 3D okruženje u ispred vas.
Također imamo neke Samsung Gear, koji je skuplji verzija ovog,
ali da isto tako mogu slajd u Android telefon i dati vam iluziju
of-- ili dati iskustvo virtualne stvarnosti.
I u naše posljednje dvije minute, mislili smo da ćemo pokušati učiniti.
Ako mogu projicirati ono Colton ima Ovdje samo oštriti apetit,
neka mi ići naprijed i baciti se na velikom ekranu ovdje.
Dopustite mi ubiti svjetla.
Colton, želiš ići naprijed i staviti na mobitel trenutak
i dođite do sredina pozornici?
I želiš project-- to je ono što Colton vidi.
>> Sada, Wi-Fi u ovdje Ne toliko jaka za ovaj uređaj
da je to super uvjerljiv, ali Colton je doslovno
u ovom čarobnom futuristički mjestu.
On vidi samo jednu sliku.
Vi vide svoju lijevu i desno oko da je njegov mozak se povezivanjem
u trodimenzionalni okoliš na njegovom licu.
Upravo je izabrao izbornika ovdje.
I tako opet, on je nosio ovaj slušalice sa Samsung telefona na to da je
bežično projiciranje našem pretek.
Sada ste na Marsu, mislim?
COLTON: Mislim da je.
Nisam siguran [nečujan].
[Smijeh]
>> DAVID Malan: Ispada Mars ima tih izbornika.
>> COLTON: [nečujan] neke cool mjesta ako želimo ići to--
>> DAVID Malan: Gdje želimo ići?
>> COLTON: [nečujan]
DAVID Malan: I da vidimo gdje Colton nas je da se sada.
COLTON: [nečujan]
>> DAVID Malan: Dakle, postoji toliko mnogo različitih mjesta koje možete poduzeti sami.
Postoji FAPIs preko kojih možete pisanje igre ili interakcije koje
izvoditi, u konačnici, na telefon.
Dakle, ti zapravo samo pisanje mobilni telefon app.
No, zahvaljujući softveru i grafičke mogućnosti,
Sada Colton je to maleni malo vikend.
I na rizik sebe neodoljiv,
Colton, a ja ću se držati za oko dok je na kraju klase danas ovdje
Ako želite da se i igrati.
A mi ćemo ih sljedeći tjedan, kao dobro.
Bez daljnjeg, Ado to je to za danas.
Vidimo se sljedeći tjedan.
>> [MUSIC - ragga TWINS "loš čovjek"]