[Mūzikas atskaņošanai] DAVID Malan: Labi, tas ir CS50. Tas ir beigu nedēļas astoņiem. Un šodien, mēs sākam aizpildīt dažos gabalos kad runa ir par ēkas lietas tīmeklī. Tātad, atgādināt, ka pirmdien mēs pavadīt daudz vairāk laika uz PHP, kas ir šī dinamiskā programmēšanas valoda, kas ļauj mums produkciju, cita starpā lietas, HTML un citu šādu saturu ka mēs vēlamies redzēt. Bet mēs neesam īsti paskatījās kā mēs spēsim saglabāt jebkādu informāciju. Patiešām, gandrīz jebkuru, ka super interesanti mājas lapas jūs apmeklējat šodien ir sava veida datu bāzi uz muguras beigās, vai ne? Facebook noteikti saglabā daudz datu Par mums visiem un Gmail veikalos visi Jūsu e-pastiem. Un tā, daudzas citas vietas ir ne tikai Statiskā informācija, kas ir informatīvs. Tas ir tiešām dinamisks kaut kādā veidā. Jūs sniedzat ievadi, tas aktualizē lapas par citiem cilvēkiem. Jūs saņemsiet ziņas, jūs sūtīt ziņas, un tā tālāk. Tātad šodien, mēs apskatīt tuvāk par pamatojumu par projekta ka jūs ienirt blakus nedēļa, CS50 Finance, kas ir tiešām nāksies jums veidot kaut kas nav C, bet PHP. Mājas lapu, kas izskatās mazliet kaut kas līdzīgs šim kas ļauj pirkt un pārdot krājumi, kas ir faktiski gatavojas izdarīt pēc reālā laikā krājumu datus no Yahoo Finance. Un tā galu galā, jums ir ilūzija par sevi un lietotājiem ka jūs faktiski pērk un pārdod krājumi un kļūst gandrīz reālā laikā atjauninājumus, pārvaldīt portfelis, no kurām visas gatavojas pieprasīt, kam, galu galā, datu bāzes lietotāju. Tātad, saviem vārdiem, it īpaši, ja jūs neesat super iepazinušies ar datoru zinātne vai datubāzes, ko Vai jūs zināt datubāzi, lai būtu tieši tagad, jo netehniskiem izteiksmē? Kas tas ir? Kā Jūs raksturotu to ar kaimiņiem vai pa e-pastu? Mērķauditorija: [dzirdams] Informācija [dzirdams] DAVID Malan: Tātad, informācijas saraksts, vai store-- sarakstu informācijas ka jūs varētu vēlēties, lai saglabātu par kaut ko, piemēram, lietotāju. Un ko darīt lietotājiem saistīta ar viņiem? Ja esat lietotājs Facebook vai Gmail, kādas ir pazīmes ka mums visiem lietotājiem ir? Tāpat, kādi varētu būt daži no kolonnas izklājlapu uz kuru mēs pieminēja pēdējo reizi? Jo atkal, jūs varat domā par datubāzes tiešām kā iedomātā Excel failā vai Google Izklājlapu vai Apple Numbers failu. Tātad, ko jūs domājat par kad jūs domājat par lietotāju? Kas viņi ir? Kas tas ir? Mērķauditorija: Nosaukumu. DAVID Malan: Nosaukumu. Tātad, ja nosaukums, piemēram, David Malan būtu nosaukums kāda lietotāja. Ko vēl dara lietotājs ir? Mērķauditorija: ID. DAVID Malan: An ID. Tātad, piemēram, identifikācijas numuru, piemēram, jūsu Harvard ID vai jūsu Yale Net ID vai tamlīdzīgi. Ko vēl varētu lietotājam ir? Mērķauditorija: Parole. DAVID Malan: parole, varbūt adrese, varbūt tālruņa numuru, varbūt e-pasta adresi. Tātad, tur ir ķekarus laukiem un tas varētu veida spirāli no kontroles ātri tiklīdz sākat saprotot, ak, pieņemsim saglabāt šo un pieņemsim saglabāt šo un to. Bet kā mēs patiesībā darīt? Tātad vēlreiz, garīgās modelis ir šodien, kā mēs nodoties faktisko SQL, Strukturēts Query Language, ir datu bāze, kas izskatās šādi. Tas ir tikai rindas un kolonnas. Un jūs varat iedomāties Google izklājlapas vai kādu citu programmu skaits. Bet kas ir galvenais par MySQL, kas ir datu bāzes programmatūra mēs spēsim izmantot, brīvprātīgu atklāti available-- Facebook lietojumi tā un jebkuru citu websites-- skaits datubāzē glabājas lietas relationally. Un relāciju datu bāze nozīmē tikai vienu, ka burtiski glabā savus datus rindās un kolonnās. Tas ir tik vienkārši. Tātad, pat kaut kā Oracle, ka Jums varētu būt vispār dzirdējuši par ir relāciju datu bāze. Un zem motora pārsega, to glabā datus rindās un kolonnās. Un Oracle jums jāmaksā daudz naudas, lai to izdarītu, tā kā MySQL maksas jums nekas par to pašu. Tātad, SQL gatavojas sniegt mums vismaz četras operācijas. Spēja atlasīt datus, piemēram, lasīt dati, ievietot, dzēst, un atjaunināt datus. Citiem vārdiem sakot, tie ir tiešām četras galvenās darbības kas gatavojas ļauj mums, lai mainītu sīkumi tajās rindās un kolonnās. Rīks, ka mēs izmantosim īpaši šodien mācīties SQL un spēlēt ar to atkal sauc PHP MyAdmin. Tas ir tīmekļa rīks. Kopā nejaušība, ka tas ir uzrakstīts PHP. Bet tas notiek, lai dotu mums grafisko lietotāja interfeisu, lai mēs varētu reāli izveidot šīs rindas un kolonnas un tad runāt ar viņiem, izmantojot kodu. Tātad, pieņemsim tagad sāk tas, ko es domāju, ka ir atklāti veida fun procesā ēkas atpakaļ beigām mājas lapas, daļas, kas lietotājiem nav redzēt, bet, protams, darīt rūp, jo tas ir diezgan datu notiek. Tātad, līdzīgi kā C un A nedaudz mazāk kā PHP, SQL, vai datu bāze, kas atbalsta SQL, ir vismaz šie datu tipi un ķekarus citiem. CHAR, VARCHAR, INT, BIGINT, Decimal, un DATETIME. Un tur ir viss ķekars citas funkcijas, bet pieņemsim izdarīt veids faktisko piemērs. Es iešu uz CS50 IDE kur, iepriekš, es esmu pieteicies un es esmu arī apmeklēja URL Šis rīks sauc PHP MyAdmin. Un problēma noteikti septiņi, mēs jums pastāstīt jums tieši tā, kā nokļūt uz šo interfeisu arī. Augšējā kreisajā stūrī, pamanāt, ka tas saka lekciju. Un tas tikai nozīmē, ka iepriekš, es izveidots tukšu datu bāzi sauc lekcija ka nav izklājlapas to vēl. Nav rindas un kolonnas. Tā kā pirmais lieta, ko mēs gatavojamies darīt ir sākt, lai izveidotu tabulu kas notiek, lai saglabātu mūsu lietotājiem. Tātad, burtiski pāri šeit pa labi, es esmu gatavojas pateikt datu bāzi Es gribu galda sauc lietotājiem. Tātad, tas ir kā failu, kas man vēlaties saglabāt visas manas datu. Un cik kolonnas? Nu, pieņemsim glabā to vienkārši tagad. Es tikai vēlos, lai saglabātu Like lietotājvārdu un nosaukumu lietotājam. Mēs sāksim maza. Tātad, es gribu divas slejas kopā. Un es iešu uz priekšu un noklikšķiniet uz Aiziet. Un tad, lai tie kolonnas, ko es esmu gatavojas uz do-- ja šo internetā cooperates-- visas tiesības, tāpēc mēs esam gatavojas izmēģināt, ka vēlreiz. Es esmu gatavojas izveidot tabulu sauc Lietotāji ar divām kolonnām, noklikšķiniet uz Aiziet, OK. Tagad mēs esam ieguvuši tas tiešām ātri. Paldies, ļoti labi darīts. Labi, lai to, ko mēs gribam šīs slejas varētu saukt? Tātad, viens gatavojas saukt Delfi. Tātad, viss, es redzu here-- un interfeiss atklāti kļūst nedaudz neglīts beidzot, Kad sākat rakstīt visu šo datu. Bet to, kas ir jauki, ir, ka sava veida paradoksāli, es esmu radot kolonnas, bet rīks ir muļķīgi kas tos rindās lai es varētu konfigurēt šos kolonnas. Tātad, tur ir divas sagataves tur zem nosaukums. Un viena no šīm jomām I gribu sauc Delfi, un otrs lauks es vēlos, lai izsauktu vārdu. Un tagad man ir jāizvēlas datu tipi par šīm lietām. Tātad, tā kā Excel un Google izklājlapas, ja jūs vēlaties, kolonnu, tu burtiski vienkārši ierakstiet nosaukumu vai lietotājvārdu, hit Enter. Varbūt jūs darīt to treknrakstā tikai skaidrības labad, bet tas arī viss. Jums nav precizētu veidi kolonnām. Tagad Google izklājlapas vai Excel, jums var norādīt, kā dati tiek padarīti. Jūs varētu doties uz izvēlni Format, un jūs var norādīt parādīt šo kā dolāra zīmi, parādīt šo kā peldoša punktu vērtības. Tātad, tas ir līdzīgs garā uz ka tas, ko mēs esam par to, ko darīt, bet tas ir patiešām gatavojas piespiest datus, lai būtu konkrēta veida. Tagad, lai gan pirms brīža es teica, tur ir tikai dažas datu tipi, tur tiešām visai daudz, un viņi dažādas pakāpes specifiku. Un kā malā, jūs var pat darīt iedomātā lietas piemēram, uzglabāšanas ģeometrijas iekšpusē datubāzē. Jūs varat uzglabāt lietas piemēram, GPS koordinātas un faktiski atrast, matemātiski, punkti, kas ir tuvu citiem. Bet mēs ejam uz saglabāt šo super vienkārši un iet līdz šeit visi tā sauktās stīgu veidi. Tātad, šeit ir saraksts ar A viss ķekars iespējām. CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. Un tas ir sava veida milzīgs. Un diemžēl, nedaudz paradoksāli C, char nav īsti CHAR. Ja jūs norādiet datubāzē ka jūsu datu tips ir CHAR, tas nozīmē, ka jā, tas ir CHAR, bet tas ir viens vai vairāki simboli. Un jums ir jānorāda cik chars vēlaties. Tātad, kas ir tipisks garums lietotājvārdu? Vai pastāv ierobežojums parasti? Mērķauditorija: [dzirdams] DAVID Malan: 16 varbūt? Kaut kas tamlīdzīgs. Jūs zināt, atpakaļ diena, tas izmanto, lai būtu astoņi. Dažreiz tas ir 16, dažreiz tas ir pat vairāk, nekā to. Un tā, tas nav nozīmēt dod man vienu CHAR. Tas nozīmē, ka man ir jānorāda garums lauka, un tagad es varētu teikt kaut ko līdzīgu 16. Un tur ir tirdzniecības off šeit. Tātad, mēs redzēsim pēc brīža ka šī ir viena, katrs lietotājvārds ir jābūt 16 rakstzīmes. Bet pagaidiet minūti, M-A-L-A-N. Ja tas ir my username un es esmu tikai ar pieci, ko jūs ierosināt, ka datubāze darīt pārējiem 11 rakstzīmes, kas Esmu rezervētas vietas? Ko tu darītu? Mērķauditorija: [dzirdams] DAVID Malan: Jā, tikai dara tos visiem null. Padarīt viņiem atstarpes. Bet, iespējams, null, tāpēc no slīpsvītru nullēm daudz. Tātad, no vienas puses, mēs esam tagad ir pārliecināts, ka mans lietotājvārds var būt ne vairāk kā 16 rakstzīmes. Un otra puse, kas ir ka, ja man bija ļoti garš nosaukums vai gribēja ļoti ilgi lietotājvārdu, piemēram, daži no jums puiši varētu būt šajā koledžā vai pie Yale.edu, jūs nevarat būt viens. Un tā patiesībā, ja esat jebkad reģistrēts mājas lapā un jums kliedza pie sakot Jūsu parole ir pārāk garš vai jūsu lietotājvārds ir pārāk garš, tas ir vienkārši tāpēc, ka programmētājs, kad konfigurējot savu datu bāzi, nolēma, ka šajā jomā nav ilgāks par šo garumu. Labi, lai to, ko tad, ja mēs turpināt nosaukt? Cik ilgi tipisks Cilvēka vārds būt? Cik daudz rakstzīmes, 16? Es esmu guessing varējām atrast kādu šajā telpā ja viņa vai viņas pirmā plus pēdējās nosaukums ir garāks par 16 simboliem. Tātad, kas ir labāk nekā tas, 17? 18? 25? Bigger? 30? Mērķauditorija: [dzirdams] DAVID Malan: 5000, ak mans Dievs. Tātad, tas ir iespējams, pienācīgas augšējā robeža, teiksim. Un šeit mēs veida ir spriest zvanu. Tāpat, nav pareizā atbilde šeit. Infinite nav gluži iespējams, jo mēs esam beidzot gatavojas have-- mēs esam gatavojas palaist no atmiņas. Tātad, mums ir padarīt spriedums zvanu kādā brīdī. Ļoti bieži būtu, piemēram, lai use-- un ļaujiet man norādīt CHAR šeit kā before-- 255 bija burtiski augšējā robeža uz šo datu bāzes programmatūra gadiem. Un tā, daudz cilvēku vēlētos teikt, naudas sodu. 255 ir robeža. Pieņemsim tikai izmantot maksimāli. Un tas ir diezgan smieklīgi. Tāpat, ja jūs rakstāt kāds ir nosaukt par 200 plus rakstzīmes, ka mazliet smieklīgi. Bet atcerieties, ka ASCII nav vienīgā sistēma rakstzīmes. Un tā, it īpaši Āzijas valodu daudz kur tur ir rakstzīmes, mēs nevaram izteikt uz klaviatūras, piemēram, manā ASV tastatūra, dažas rakstzīmes faktiski aizņem 16 biti, nevis astoņi biti. Un tā, tas patiesībā nav tik nesaprātīgs ka mums vajag vairāk telpa, ja mēs gribam, lai ietilptu lielāki zīmēm nekā pašā ASV orientētus tiem mēs esam tieksmi apspriest. Tātad, mums vajag kādu augšējo robežu. Es nezinu, kas ir labākais viena ir, bet 255 parasti ir izplatīts. 25 jūtas zems. 16, 32 jūtas zems. Es varētu grēkot sānos par kaut ko augstāku. Bet tur ir kompromiss, kā vienmēr. Kas ir, iespējams, skaidrs tirdzniecība off rezervējot 255 rakstzīmēm par ikviena vārda manā datu bāzē? Mērķauditorija: [dzirdams] DAVID Malan: Kas tas ir? Mērķauditorija: [dzirdams] DAVID Malan: Tas ir atmiņas daudz, vai ne? M-A-L-A-N. Es tikko izšķērdēta 250 rakstzīmes tikai glabāt savu vārdu aizsardzībai, tikai gadījumā, ja kāds klasē ir ļoti garš nosaukums. Tas šķiet kā nepamatotas tradeoff. Tātad, izrādās, ka SQL, Šī datu bāze valoda, faktiski atbalsta kaut ko sauc VARCHAR vai Variable CHAR. Un tas ir sava veida jauki, ka šis Ļauj norādīt nav fiksēta platums, bet drīzāk, mainīga platuma. Un vēl konkrētāk, maksimālais platums no lauka. Tātad, tas nozīmē, ka vārds var ne vairāk kā 250 rakstu zīmes, bet tas noteikti var būt mazāk. Un datubāze būs gudri. Ja jūs likts M-A-L-A-N, tas ir tikai gatavojas izmantot pieci, varbūt seši baiti like velkas null raksturs, un nav jātērē papildu 249 vai 250 baiti nevajadzīgi. Tātad, tas šķiet man vajadzētu ir sākuši ar šo stāstu. Bet tur vienmēr tradeoff. Tātad, no vienas puses, lietotājvārds Man norādīts būt grūti kodē uz 16, un varbūt, ka nebija īstais aicinājums, varbūt to ir, bet kāpēc neizmantot VARCHARs par visu? Tā pastāv par iemeslu. Kāpēc neizmantot VARCHARs visās jomās kuru garums jūs nezināt iepriekš ja tas, šķiet, ir lieliska lieta, vai ne? Lietojiet tikai tik daudz vietas, kā jums ir nepieciešams, līdz šim limitam? Mērķauditorija: lēnāk. DAVID Malan: Speller? Mērķauditorija: Padara tas lēnāk? DAVID Malan: Ak, tas ir lēnāks. Labi, tas ir gandrīz vienmēr atbilde, atklāti. Tāpat, kāda ir tradeoff? Tā nu maksā vairāk vietas vai tas maksā vairāk laika. Tātad, šajā gadījumā, tas varētu būt lēnāks. Kāpēc? Mērķauditorija: [dzirdams] Nosakot [dzirdams]. DAVID Malan: Labi. Tātad, jūs varētu atgādināt no vēl PSED5, rotaļājoties ar savu pieeju vārdnīcai, ja jums ir piešķirt atmiņu dinamiski vai paturēt aug buferi, kas patiesībā var būt lēna. Ja jums ir zvanīt malloc zem motora pārsega un varbūt tas ko MySQL dara, tāpēc protams, ka varētu būt gadījums. Un, ja jūs domājat, ka veids atpakaļ uz PSet-- vai pat nedēļas divas, kad mēs darījām lietas, piemēram, binārā meklēšana vai pat lineāra meklēšana, viens no nice lietas par katru vārdu datubāzē vai katru vārdu kolonnā ir tieši tāds pats garums, pat ja visu ķekars no šiem burtiem ir tukšs, ir tas, ka jūs varat izmantot brīvpiekļuves par saviem datiem, vai ne? Ja jūs zināt, ka katrs Vārds ir 16 rakstzīmes prom, Jūs varat izmantot rādītāju aritmētisko, tāpēc, lai runā, un dodieties pie mums 16, 32, 48, 64, un jūs varat vienkārši lēkt uzreiz, izmantojot aritmētiskās ar jebkuru no vārdiem, kas savā datu bāzē. Tā kā, ja tas ir VARCHAR, Ko jūs tā vietā ir jādara? [Tālruņa zvana] Ja tas ir VARCHAR, jūs nevar izmantot izlases piekļuvi. Kas jums ir meklēt vai darīt? Yeah? Mērķauditorija: [dzirdams] DAVID Malan: Look caur whole-- pēdām cauri visam sarakstam meklē to, ko, visticamāk? Kādu īpašu vērtību? Mērķauditorija: [dzirdams] DAVID Malan: Meklē par nulles terminatoriem kas norobežo atdalīšanu vārdiem. Tātad vēlreiz, tradeoff, un tur nav pareizā atbilde. Bet tas ir, ja, īpaši kad jūsu lietotājiem iegūt būt daudz un jūsu slodze uz saviem serveriem, tad cilvēku skaits, izmantojot tā kļūst liels, Tie ir faktiski netriviāls lēmumi. Tātad, mēs varam atstāt tos kā šis, bet pieņemsim ritiniet uz leju, pa pa labi šeit. Tagad tur ir pāris kolonnām kur mums ir spriest zvanu. Vai ir kāda jēga ļaut lietotāja nosaukt, lietotāja lietotājvārds vai lietotāja Vārds, par spēkā? Tas ir, tikai tukšs. Jūtas mazliet muļķīgi, tāpēc es esmu nav gatavojas pārbaudīt tās kastes. Bet izrādās datubāzes, jūs varat teikt, kāds var pēc izvēles būt šo vērtību. Šī sleja nav faktiski būt tur. Tagad tur ir šis kritums uz leju izvēlnē. Un paziņojums es esmu vēl pirmajā rindā tur, tāpēc es runāju par lietotājvārdu tagad. Un izrādās, ka datu bāzē, atšķirībā vienkāršu vienkāršu izklājlapu, ir spēcīgs funkcijas sauc par indeksu. Un indekss ir veids, kā stāsta datubāzes iepriekš, ka I cilvēka esmu gudrāks par tevi. Es zinu, kāda veida vaicājumus, izvēlieties vai ievietot vai dzēst vai atjaunināt, ka mans kods ir beigsies up dara šo datu bāzi. Es gribu lasīt daudz datu. Es gribu, lai ievietotu daudz datu. Es gribu, lai pastāvīgi izdzēst daudz datu. Ja es zinu, ka es esmu būs piekļūt lauku tāpat Lietotājvārds daudz, Es varu preemptively pateikt datubāzes, es zinu vairāk nekā tu, un es gribu, ka dekrēta Jums vajadzētu indekss šajā jomā. Ja indeksācija lauks vai kolonnu nozīmē, ka datu bāze iepriekš vajadzētu aizņemties dažas idejas no, piemēram, nedēļa četras un piecas un sešas no CS50 un faktiski veidot kaut kā bināro meklēšanu koks vai kaut kas parasti sauc par B koks ka jūs varētu mācīties klasē, piemēram CS124 Hārvarda, kas ir algoritmi klase, vai kādu citu vietu skaits. Datu bāze un smart cilvēki, kas to īstenoja būs izdomāt, kā uzglabāt ka tabula informācijas atmiņā tā, ka meklējumi un citas darbības ir super ātri. Jums nav to darīt. Jums nav, lai īstenotu lineārs meklēšana vai binārā meklēšana vai apvienot veida vai atlasi kārtot, kāds no tā. Datubāzē tas jums, ja jums pateikt tas preemptively indeksēt šajā jomā. Un jūs varat redzēt arī, tur ir dažas citas īpašības mēs varam pateikt datubāzē izpildīt. Ko tas varētu nozīmēt, ja es izvēlos Unikāls Šajā izvēlnē, vienkārši intuitīvi? Yeah? Mērķauditorija: [dzirdams] DAVID Malan: Jā, tad lietotājvārds ir unikāls. Vai tas ir labi vai slikti, lai datubāzi, lai mājas lapā ar lietotājiem? Ja lietotājvārdi ir unikāls? Jā, droši vien. Ja tas ir tas, ko lauks mēs izmantojam, lai pieteiktos, Jums nav tiešām vēlaties, lai cilvēki, kam pats jūtas vai tas pats lietotājvārds. Tātad, mēs varam būt datu bāze izpildīt, ka tā ka tagad manā PHP kodu vai jebkurā valodā, Man nav, piemēram, pārbaudīt vienmēr dara šo lietotājvārdu pastāvēt pirms es let kāds reģistrs? Datubāze neļaus divi cilvēki nosaukts David vai Malans reģistrēties šajā lietā. Un kā malā, kaut gan šis menu tikai ļauj jums izvēlēties vienu, unikāls indekss ir viens, kas ir indeksē par super ātru darbību, bet tas arī īsteno unikalitāti. Un mēs būsim atpakaļ uz to, ko Pārējie divi nozīmē tikai brīdi. Tikmēr, ja es eju uz mana otrā rinda, kurai ir lietotāja vārds, man vajadzētu precizēt ka nosaukums ir unikāls? Nē, jo jūs varētu, protams, have-- tur nav divu David Malans šajā telpā, visticamāk. Bet, ja mēs izvēlēties citu nosaukumu, mēs varētu, protams, ir sadursmes. Domāju, ka atpakaļ uz hash tabulas un tamlīdzīgi. Tātad, mēs noteikti nevēlamies padarīt nosaukums lauks unikāls. Tātad, mēs esam tikai gatavojas atstāt ka domuzīme, domuzīme, domuzīme, nekas. Un es esmu gatavojas pamest viss pārējais vien. Patiešām, lielākā daļa no šiem laukiem mums nebūs rūp. Un, kad es esmu gatavs, lai saglabātu to, ja internets sadarbojas, Es noklikšķiniet uz Saglabāt, un ļoti, ļoti, ļoti lēnām tas datubāze saglabātas. Un tagad es esmu atpakaļ uz šo interfeiss, kas, protams, ir milzīgs pēc pirmā acu uzmetiena. Bet viss, ko es esmu gatavojas darīt, ir klikšķu uz Word lietotājiem kreisajā augšējā stūrī. Es iešu šeit, noklikšķiniet Lietotāji, un pēc noklusējuma, to ir izpildīts kādu SQL, bet vairāk par šo brīdi. Lūk tikai kopsavilkums par to, ko es darīju. Un nav jāuztraucas, ka jūs redzēt nerunājot par latīņu un zviedru šeit. Tie ir tikai noklusējuma uzstādījumus, jo MySQL sākotnēji, vai PHP MyAdmin, viens no diviem noticis jāraksta daži Zviedrijas cilvēku. Bet tas ir svarīgi, jo mūsu gadījumā šeit. Labi, tad kāpēc ir tas viss interesanti? Izrādās, es varētu ievietot datus datu bāzē, rakstot kodu. Un es esmu iet uz priekšu un Manā failu šeit, es esmu gatavojas iet uz priekšu un izlikties, piemēram, tas ir vadu uz šo datu bāzi, kurā tas nav šobrīd, bet tas būs tad, kad mēs nokļūt līdz problēmu noteikt septiņi. Un es iešu uz priekšu un izpildīt funkciju sauc vaicājums, ko mēs sniegsim jums problēmu noteikt septiņas izplatīšanas kodu, kas ilgst vismaz vienu argumentu, kas ir tikai virkne. Virkne SQL kodu. Tātad, jūs esat par to, lai iemācītos rakstīt Strukturēts Query Language. Ja es gribu, lai ievietotu jaunu rindu manā datubāze tāpēc, ka kāds ir iesniegusi forma uz manu kodu, es burtiski rakstīt INSERT INTO lietotājiem šādiem lauki: lietotājvārdu, komats, nosaukums, vērtībām, un tagad man ir nepieciešams, lai ievietotu kaut kas līdzīgs Malan, un citējot, likt pēdiņas beigās "David Malan." Un tagad pat tiem svešs ar SQL, kāpēc es esmu, izmantojot vienu pēdiņām iekšpusē šo zaļo string? Kāds varētu būt iemesls šeit? Paziņojums Es esmu sajaukšana kopā divas valodas. Vaicājums ir PHP funkcija, bet tas aizņem arguments. Un šis arguments ir sevi var rakstīts citā valodā, ko sauc SQL, Strukturēts Query Language. Tātad, viss, kas man tikko uzsvēra šeit ir šī valoda sauc par SQL. Tātad, kas ir ar vienu pēdiņām, tikpat ātri veselība pārbaudītu? Uz priekšu. Viņi stīgas. Tātad, citēju, likt pēdiņas beigās Malan un citātu, likt pēdiņas beigās David Malan ir virknes. Un tikai domāju intuitīvi tagad, zinot to, ko jūs zināt par C un PHP, kāpēc es ne darīt, ko es parasti Double pēdiņas virknes? Kāpēc es negribu to darīt? Yeah? Mērķauditorija: [dzirdams] DAVID Malan: Tieši tā. Jo es jau izmantoju pēdiņas ceļā ārpus argumentu ar PHP funkciju, Es tikai sajaukt tulks. Tas nebūs zināt, vai tie iet kopā? Vai tie iet kopā? Vai tie iet kopā? Tātad, es pārmaiņus vietā. Vai es varētu darīt kaut kas līdzīgs šim, slīpsvītru quote vai slīpsvītru citātu. Atklāti sakot, ka tikai sāk iegūt ļoti nenolasāmiem un neglīts. Bet tas varētu sasniegt tādu pašu rezultātu, kā arī. Tātad, ja es būtu, lai izpildītu šīs vaicājums tagad, pieņemsim redzēt, kas notiek. Es iešu uz priekšu tagad un diezgan kā izpildīt PHP kodu, kas ir vieta, kur jūs varēsiet spēlēt jo problēma noteikti septiņi, Es esmu gatavojas, nevis doties uz PHP MyAdmin. Un es esmu gatavojas manuāli iet uz cilni SQL, un ļaujiet man tuvinātu interfeisu. Un es esmu gatavojas ielīmēt lieta, ko es tikko drukāti. Un krāsu kodiem ir mainījies mazliet tagad, tikai tāpēc, ka programma formāti lietas nedaudz savādāk. Bet paziņo, ka viss, ko es esmu darījusi ir man teica, ievietot lietotājiem. Esmu norādīts, tad, komats atdalīts iekavoto saraksts divi lauki, es gribu, lai ievietotu, un tad es esmu burtiski teicu vērtības seko cita paren, Un tad divām vērtībām Es gribu, lai plug-in, un Tagad labu pasākumu, Es nolikšu semikolu beigās. Tātad, tas nav C. Tas nav PHP. Tas tagad ir SQL, un es esmu ielīmējot to šajā tīmekļa saskarni, kas ir tikai gatavojas let me, tiklīdz es noklikšķiniet uz Aiziet, izpildīt šo vaicājumu datu bāzē darbojas iekšpusē CS50 IDE. Tātad šis ir labs. Paziņojums, ka teica viens rinda ievietota, gāja super ātri, 0.0054 sekundes, lai ievietotu, ka dati. Tātad, tas izklausās diezgan veselīgi. Tā pārveidots manu vaicājumu man šeit tikai, lai to aplūkotu in veida krāsu kodēta versiju. Bet tagad, ja es noklikšķiniet Nozares, ievērosiet, ka, pat lai gan tur ir daudz jucekli uz ekrāns, mana galda tagad ir divas rindas. Tātad, ļaujiet man iet uz priekšu un darīt citu. Tā vietā, ļaujiet man dodieties uz cilni SQL vēlreiz. Un šoreiz es ievietot kaut ko līdzīgu Rob un viņa vārds būs Rob Bowden. Bowden. Pieņemsim, noklikšķiniet uz Saglabāt. Hmm, drīzāk iet. Noklikšķiniet uz Pārlūkot atkal, un tagad paziņojums Man ir divas rindas. Tātad, tas ir tikai veids, kā sarežģītāka veids, kā atvērt Google izklājlapu un tikai rakstīt rindu uz kolonnas. Bet to, kas ir galvenais ir tas, ka mums tagad ir sintakse ar kuru rakstīt kodu, lai galu galā, mēs patiešām varētu tie daži un tas. Atgādināt, ka PHP balstus super globālie mainīgie. Kas ir iekšā dolāru pierakstīties pasvītrojums GET PHP? Mēs ņēmām apskatīt vienu vai divi vienkārši piemēri. Un PSet6, atceros jums ir sveiki dot PHP, kas izmanto šo mainīgo. Kas notiek tur? Vai kas tas ir? Mazliet skaļāk. Mērķauditorija: [dzirdams] DAVID Malan: Tas ir sniega sēklas masīva, kas ir tikai iedomātā veids, kā pateikt masīvs, kas ir galvenās vērtības pārus. Un atslēgas nav ciparu. Viņi vārdus vai stīgas. Un konkrēti, ko ir tie galvenie vērtību pārus? Kur viņi nāk no? Sorry? Mērķauditorija: [dzirdams] DAVID Malan: Nē? Kur šiem galvenajiem vērtību pārus nāk no? Say atkal? Atkal? Vai es esmu vienīgais, dzirdes kaut ko? [Smiekli] Tas ir labi, jā? Mērķauditorija: [dzirdams] DAVID Malan: Jā, viņi nāk no vaicājuma virknes. Tātad, ja jūs attīt laikā, lai kad mēs esam spēlēja ar Google un mēs esam aizgājuši uz Google.com slīpsvītra meklēšana jautājuma zīme q ir vienāds ar kaķi, ja man bija hit Enter, un, ja Google tika īstenoti PHP, PHP kodu, kas Google rakstīja būtu pieejami dolāra zīmi uzsvērt iekļūt iekšā, no kuriem ir galvenais sauc Q un vērtība sauc par kaķi, ka tā var pēc tam izmantot mēdza darīt faktisko meklēšanu ar. Tātad, patiesībā, ko es esmu gatavojas darīt tagad ir doties atpakaļ uz savu PHP kodu ka jūs atkal redzēt vairāk par in PSet7. Un tā vietā, tapām cietajos kodēto vērtības, kas nav šķist ļoti dinamiska mājas lapa, Es esmu gatavojas sniegt jums teaser par kādas ir jūsu faktiskais kods darītu. Jūs nodot divos Jautājums iezīmē kā šis. Es nezinu, kas lietotājvārds ir. Es nezinu, kāda nosaukums būs, bet es zinu, ka varu saņemt tos dinamiski. Tātad, ja kods mēs rakstiski tagad ir kods darbojas uz Google serveriem, vai, ja tas ir sveiki dot PHP, kas nāk ar PSet6, Es esmu gatavojas pāriet uz vaicājums funkcija tāpat kā printf, divi citi argumenti. GET, quote, likt pēdiņas beigās lietotājvārds, un GET, citēju, likt pēdiņas beigās nosaukums. Un tagad, pamanīt to, ko vispārējā struktūra ir šeit. Man pa kreisi labajā pusē no zvana, šī funkcija sauc vaicājumu PHP. Man joprojām ir kā pirmais arguments, tikai virkne tekstu. Bet tas string teksta ir uzrakstīts valodā sauc SQL. Un godīgi sakot, tas nav liels valoda. Mēs esam tikai gatavojas runāt par tā formāli šodien, tiešām. Un tad problēma noteikti septiņi, tur ir salīdzinoši Dažas pazīmes, ka mēs esam dodas uz sviras. Jautājums zīmes, lai gan, nozīmē iespraudiet vērtība šeit un plug citā vērtībā šeit. Un paziņojums, es esmu izlaists ko no visas quote-- damn it-- ap citāts iezīmē šo laiku. Es esmu izlaists citāts zīmes ap jautājuma zīmi, sorry, šoreiz apkārt. Tātad, kas ir jauka par šo jautājuma zīme iezīme, kas PHP tendence atbalstīt, Ruby un Python un citas valodas, Tas tikai nozīmē, plug dažās novērtēt šeit, un jūs zināt, ko? Jūs izdomāt, vai izmantot vienu pēdiņām vai pēdiņas. Nelietojiet apnikt mani ar tiem intelektuāli neinteresanti detaļas. Bet, pārliecinieties, ka tas ir pareizs tā, ka mans kods ir galā operatīvo un droša, kas būs nozīme pirms ilgi. Tagad, cik argumentus kopā, tikai lai jābūt skaidram, ir vaicājums funkcija ņemšanu? Ikviens vēlas balsot par vairāk nekā diviem? Trīs? Protams, kāpēc? Kāpēc trīs? Mērķauditorija: [dzirdams] DAVID Malan: Tieši tā. Pirmā daļa ir virkne. Otrs arguments ir dolāra zīmi uzsvērt GET bracket lietotājvārdu. Un trešais arguments ir Tas pats, bet tikai nosaukums. Tātad citiem vārdiem sakot, tagad ja man bija tīmekļa formu kas bija teksta laukos, viena lietotāja lietotājvārdu, viens par viņa vai viņas vārdu, tāpat kā jūs varētu redzēt, kas mājas lapā kad jūs reģistrējaties kādu mājas lapu, tas varētu būt kodu uz muguras beigās, kas tiešām ievietošanas tagad datu bāzē. Tagad savukārt, pieņemsim ātri uz priekšu. Pieņemsim, ka lietotājs ir tagad piesakoties un jūs vēlaties rakstīt PHP kodu, kas pārbauda, ​​vai persona, kas ir tikai pieteicies ir faktiski lietotājs, jūs varat izmantot diezgan vienkāršu sintaksi. Jūs varat teikt, atlasīt, teiksim Star, kur zvaigzne ir viss. Es nezinu, ko es vēlaties, lai tikai dod man visi kolonnas no tabulas sauc lietotājiem, ja, un tas ir jauki. Izvēlieties atbalsta to, kas ir sauc predikāta, kas ir kā veids, kvalificējoties, ko jūs vēlaties. Ja lietotājvārds ir vienāds quote, likt pēdiņas beigās Malan. Tātad arī šeit, es esmu iegultās iekšā argumentu uz PHP funkciju, līnijas SQL kodu. Un ka SQL kods šis laiks ir burtiski dodas meklēt citātu, likt pēdiņas beigās Malan. Tagad tas nav viss, kas noderīgs, tāpēc es esmu gatavojas izlaist ka un es esmu gatavojas nodot tālāk tas tip no Brady, un iet un plug-in vietā jautājuma zīme šeit. Tātad, tikai, lai būtu skaidrs, ko būtu mans otrais arguments tad, ja kāds ir tikko pieteicies un I vēlaties pārbaudīt, ja viņš vai viņa ir patiesībā lietotājs? Mērķauditorija: [dzirdams] DAVID Malan: Jā. Es dzirdu dolāra zīmi pasvītrojumu Get Citāts, likt pēdiņas beigās lietotājvārdu. Un kas būtu jāatgriežas pie manis kādu no rindas, kas savā datu bāzē kas ir lietotājvārdu Malan. Tagad, cerams, es esmu gatavojas, lai saņemtu atpakaļ nulle, ja Malan nekad nav bijis šeit, vai viens, ja viņam ir. Man nevajadzētu saņemt atpakaļ divi vai trīs vai četri. Kāpēc? Mērķauditorija: [dzirdams] DAVID Malan: Es teicu unikāls, labi? Vienkāršs iemesls. Jo man teica, ka tas ir nokļuvis ir unikāls, tikai loģiski, Jums var būt tikai nulle vai viens Malans šajā konkrētajā datu bāzes tabulā. Tagad kā malā, tikai, lai jūs esat redzējis tā, lai arī es glabāt izmantojot GET un pat ja PSet6 izmantot tikai GET, jūs noteikti var būt POST. Un atceros, ka Post ir cits paņēmiens informācijas iesniegšanai no formā, bet tas neparādās URL. Tas ir mazliet drošāk noteikti par lietas, piemēram, lietotājvārdus un paroles, kas PSet7 būs, patiesībā, iesaistīt. Tātad, pieņemsim darīt PHP MyAdmin un redzēt, kas notiek. Es iešu uz cilnes MySQL. Un paziņojums, ka noklusējuma vērtību PHP MyAdmin, vienkārši cenšas būt noderīga, ir izvēlēties zvaigzni no lietotājiem, kad viens. Nu, viens ir vienmēr taisnība, tāpēc Tas ir muļķīgi efektīva no vienkārši izvēlieties viss. Bet es esmu būs nedaudz vairāk pedantiska un manuāli tipa no SELECT zvaigzni no lietotājiem. Tagad tehniski, jūs varat citēt nosaukumu galdiem. Tas ir reti, ka jums ir, bet paziņojums tie nav Jūsu normāls kotējumi ASV tastatūras. Tas ir tā sauktā backtick, kas parasti ir uz augšējā kreisajā rokā stūris tastatūras. Bet tas ir reti, ka jūs tiešām ir nepieciešams apgrūtināt ar, ka, tāpēc es ņemšu tikai izlaist tos anyway. Tāpēc tagad, ļaujiet man iet uz priekšu un hit iet. Un cik rindas man vajadzētu saņemt atpakaļ, kad es izvēlētos zvaigzni no lietotājiem? Mērķauditorija: [dzirdams] DAVID Malan: To rindu skaits, protams. Bet cik daudz šajā betona stāsts tieši tagad? Divi, jo tur bija mani un tur bija Rob. Tātad, ja es noklikšķiniet uz iet, es redzu, ka vizuāli Es esmu gotten atpakaļ, protams, divas rindas. Tur ir daudz jucekli uz ekrāns, bet es tikai redzēt divas rindas. Savukārt, ja es to izdarītu vēlreiz, un darīt SELECT zvaigzne no lietotājiem, kur lietotājvārds vienāds quote, likt pēdiņas beigās Malan, tagad, ja es noklikšķiniet uz Aiziet, Es esmu tikai gatavojas atgriezties vienu rindu. Un, visbeidzot, ja man kaut kas līdzīgs šim, pieņemsim ka man nav rūp iegūt visu, kas ir sava veida bezjēdzīga tagad, jo tur ir tikai divas kolonnas. Tas nav tāpat kā es esmu izvēloties milzīgs datu apjoms. Pieņemsim, ka man iet uz priekšu un Vai SELECT vārdu no Lietotāji, kur username vienāda Malan, kas ir jauka par SQL godīgi, ir tas, ka tas patiešām ir tikai dara ko tu pateikt to darīt. Tas ir diezgan īss, bet tu burtiski tikai pateikt to, ko jūs vēlaties darīt. Izvēlieties nosaukums no lietotājiem, ja lietotājvārds vienāds Malan. Un tas tiešām ir tik skaidri. Tātad, tagad, ja es hit Go, cik rindas es esmu gatavojas saņemt atpakaļ? Viens, jo tas ir tikai Malan, cerams. Vai nulle, ja viņš nav tur, bet viens maksimāli. Un cik kolonnas es saņems atpakaļ? Cik kolonnas? Šoreiz, es esmu tikai gatavojas lai iegūtu vienu, jo man nav izvēlēties zvaigzne, kas ir viss. Tagad es esmu izvēloties tikai vārdu, tāpēc es tikai saņemt atpakaļ vienu kolonnu un vienu rindu. Un tas izskatās veida pienācīgi smieklīgi, vienkārši skatoties super mazs kā šis. Tātad, kas īsti notiek? Kad jūs izpildīt SQL vaicājumu, izmantojot atlasīt, ko jūs saņemat atpakaļ no datu bāzes ir kā pagaidu tabulā ar rindām un kolonnām, varbūt, bet izlaist kaut kas faktiski nav izvēlēts ar jums. Tātad, tas ir tāpat kā, ja kāds bija liels izklājlapu no visiem studentiem reģistrēts dažiem studentu grupa, un jūs sakāt, dod man visu pirmkursnieks, kas esam reģistrēts mūsu studentu grupai, ko Jūsu kolēģi studentu grupa var darīt ir tie varētu tikai roku tu visu izklājlapu. Tas ir tāpat kā teikt izvēlieties zvaigzni. Un tas ir mazliet kaitinošas, ja Jums tikai gribēja pirmkursnieks. Un tā, ja jūs tā vietā teica, Izvēlieties zvaigzne no datu bāzes tabulas ja gads ir vienāds quote, likt pēdiņas beigās pirmkursnieks, tas ir tā, it kā jūsu draugs no studentu grupā burtiski izcelti un kopēt tikai pirmkursnieks rindas, ielīmēt tos jaunā Google Izklājlapu vai Excel failu, un pasniedza jūs atpakaļ rezultātā tikai failu. Tas ir viss, kas notiek, par konceptuāli šeit. Tātad galu galā, mēs varam darīt daži diezgan iedomātā lietas uzglabājot lietas, piemēram, lietotājvārdu un paroles un tamlīdzīgi. Bet, izrādās, mums vajadzētu darīt nedaudz savādāk nekā šis. Tas nav tik gudrs, lai tikai uzglabāt lietotājvārdu un paroli. Kāds agrāk, es domāju, ka šeit lejā, ieteica ID. Tagad ID varētu būt, piemēram, Harvard ID vai Yale s Net ID, bet tas varētu būt vēl vienkāršāka Mūsu datu bāzē gadījumā. Un tiešām, kopējā lieta ir ir cits kolonnu. Un es iešu priekšu un rediģēt mana galda. Un, ja jūs spēlēt aptuveni ar šis interfeiss PSet7, Jūs redzēsiet, ka jūs varat pārbaudīt šo pogu šeit un pievienot lauka sākumā tabulā. Un tagad, ja es noklikšķiniet uz iet, tas notiek sniegt man vienu no šiem veidiem no agrāk. Es esmu gatavojas pievienot lauku sauc ID. Un es esmu gatavojas darīt to ciparu tips. Man ir viss ķekars Vērtību par Skaitļi. Es esmu tikai gatavojas izvēlēties INT un nav jāuztraucas par atšķirīgi izmēri. Man nav jānorāda garums vai vērtība, jo tas būs 32 biti vienalga ko. Atribūti, mēs neredzēju agrāk. Jebkura interese par kādu no šiem izvēlnes iespējas šajā laikā? Par INT? Ko jūs ierosināt? Nē? Vai kāds no šiem jēga? Jā. Jā, neparakstīts, vai ne? Parasti, ja mēs spēsim dot katrs unikāls numurs, kas ir tad, ja šis stāsts ir notiek, es tiešām tikai gribu personai, lai būtu, piemēram, nulles numuru un viens un divi un trīs un četri. Man nav nepieciešams, lai risinātu ar negatīviem skaitļiem. Tā tikai šķiet, piemēram, liekas sarežģītības. Es gribu četrus miljardus iespējamās vērtības, ne četrus miljardus iespējamās vērtības, tāpēc es vienkārši dubultojies jauda mana INT. Kā malā, ja jūs vēlaties saistīt tas kaut ko, piemēram, Facebook, atpakaļ veida mana diena, kad Facebook pirmais iznāca, Es uzskatu, ka tas, ko viņi izmantojot to MySQL datu bāzē uzglabāt lietotāja identifikators, bija tikai INT. Bet, protams, tur ir daudz no reāliem cilvēkiem visā pasaulē. Tur ir daudz viltus Facebook kontiem visā pasaulē. Un tā galu galā, Facebook pārplūda lielumā INT, četru miljardu apmērā vērtība. Kurš ir iemesls, kāpēc, ja paskatās apkārt un tur ir mājas lapas kas var pateikt, kas jūsu unikālo ID ir. Un, ja jūs nekad izvēlējās lietotājvārdu Facebook, jūs redzēsiet savu unikālo ID. Es domāju, ka tas profilu dot PHP jautājuma zīme ID vienāds kaut ko. Tas ir tagad kaut kā liels INT, vai ilgi ilgi, ja jūs, kas ir 64-bit vērtība vai kaut kas salīdzināmi. Tātad, pat reālajā pasaulē izdarīt šos jautājumi galu galā dažreiz svarīgi. Un izrādās šeit, ja es esmu sniedzot visu manu lietotāju unikāls ID, Es gribu būt super skaidri un minimāli padara šo lauks unikāls. Bet izrādās, tur ir viens gabals nomenklatūras šodien pārāk tas ir primārā atslēga. Ja jūs projektēšana datubāzi galds un jūs zināt iepriekš ka viens no kolonnu šajā tabulā ir un būs unikāli identificē rindas tabulā, jūs vēlaties precizēt to un pateikt datubāzi, šī ir mana primārā atslēga. Tur varētu būt dublikāti citās jomās, bet es esmu stāsta datu bāzē, ka šis ir mans galvenais, mana svarīgākā joma, kas ir garantēta būt unikāls. Tagad tas šķiet lieks. Es tagad ierosina, ka mēs pievienot, noklikšķinot uz Saglabāt šeit, lauks called-- un es eju iet uz priekšu un noklikšķiniet uz AI, mēs būsim atpakaļ ka pēc brīža, Save. Es ierosinu, ka šobrīd mana galda izskatās šādi. Man ir INT lauks sauc ID, char lauks sauc Delfi, varchar lauks sauc vārds, bet ID, ja tas ir primārais un tāpēc unikāls, kāpēc es tikai atkritumi laiks ieviest ko faktiski ir otrais unikāls lauks sauc ID, kas ir par INT? Lietotājvārds, atgādināt, bija jau unikāls, mēs teicām. Tātad, tikai loģiski, jums nav nepieciešams jebkuru datu bāzes pieredze iemesla caur to, kāpēc iespējams, man ir ieviesušas int kā manu unikālo identifikatoru, kā arī? Kas this-- saku vēlreiz? Mērķauditorija: [dzirdams] DAVID Malan: Random piekļuve ir vieglāk, kāpēc? Mērķauditorija: [dzirdams] DAVID Malan: Jā, tas ir vienkārši piekļūt numuriem. Tātad, ja jūs domājat, ka tas patiesi ir tabula, piemēram, masīvs, tagad man ir unikālos identifikatorus ka es varu lēkt apkārt. Un labāk, nekā tas joprojām ir tas, ka cik liels ir INT būs atkal? 32 bitu vai četri baiti. Cik liela ir my username būs? Maksimāli? 16 baiti. Tātad, ja jums ir patiešām rūpējas par sniegumu savu kodu, domāju, ka atpakaļ uz PSet5, jūs vēlaties meklēt četru baitu vērtību vai 16 baitu vērtības, vai ne? Tas patiešām ir tik vienkārši. Jums ir jādara četras reizes vairāk darba meklēt lietotājvārdus, jo tiem ir 16 baiti. Tātad, jums ir burtiski Salīdzini visus 16 baiti būt Noteikti jā, tas ir lietotājvārds es gribu. Tā par INT, jūs varat darīt to tikai ar četriem baitiem. Un kā malā tiem interesē datortehnika, izrādās, jūs varat fit kaut ko līdzīgu int vai 32 bitu vērtība kaut sauc reģistrs datorā CPU, kas nozīmē, ka tas ir super, super ātri, pat vismazākais līmenis datora aparatūru. Tātad, tur ir tikai priekšrocības visapkārt. Tātad, ko tas nozīmē? Patiesībā, kad jūs esat projektēšana datu bāzes tabulu, gandrīz visu laiku jūs nāksies ne tikai dati jums rūp, bet arī kaut ko līdzīgu unikāls identifikators jo tas būs ļaujiet mums darīt citas lietas. Un pieņemsim paklupt viena problēma šeit. Pieņemsim, ka lietotājiem ir ne tikai lietotājvārdus un nosaukumi, bet viņiem ir arī lietas, piemēram, pilsētās un valstis un pasta indeksi, vismaz šeit ASV. Tātad, es esmu gatavojas iet uz priekšu un tikai ātri teikt, iedodiet man trīs vairākas kolonnas beigās tabulā. Un tas būs City, tas būs valsts, un tas būs Zip. Tagad City, kādi datu veidi ja tas ir, varbūt? VARCHAR? Es nezinu, kāda Garākais vārds pilsēta ir. Kaut kur Amerikā, tur ir iespējams, daži smieklīgi garš vārds, tāpēc pieņemsim tikai iet ar 255, nedaudz vēsturiski vai patvaļīgi. Valsts, ko jūs vēlaties darīt? Spriedums zvans, vai ne? Kas varbūt visefektīvākais? Cik zīmes? Varbūt tikai divi, ja mēs varam aizmukt ar dara tikai, piemēram, MA par Massachusetts un tā tālāk. Tātad, es iešu char vērtību divi. Pasta kods ir interesants. Mēs esam šeit, 02138, tā ka ierosina mums vajadzētu izmantot to, ko? Tas ir INT, vai ne? INT, INT, īsu? Īss varētu strādāt. Nē? CHAR vai pieci, bet es gribu INT. Kāpēc push atpakaļ uz INT? Pārliecināt mani no šī. Kas ir stulba par INT, mana ideja? Jā. Mērķauditorija: aizņem vairāk atmiņas. DAVID Malan: aizņem vairāk atmiņas. Četri baiti, bet tu esi ierosinot pasta indeksu kā piecu baitu vai kāds bija kā CHAR, kas jūtas kā eh, tas nav īsti lieta. Nu, jautri stāsts. Pirms daudziem gadiem, kad es mēdzu izmantot Microsoft Outlook uz manu e-pastu, Es beidzot gribēju pāriet uz Gmail. Un tā, es eksportē visas manas kontaktus no Outlook kā CSV failu. Komatiem atdalītas vērtības, kas tieši domāts man bija visi mani draugi vārdi un pēdējais vārdus un tālruņa numurus un pasta indeksi un visu to. Un tad es labi nospēlēja kļūda atverot to uz augšu Excel, kas ir izklājlapu programma, kas saprot CSV failus, kā mēs esam redzējuši. Bet tad, man ir hit, piemēram, Command vai Control S ir viens punkts. Un Excel acīmredzot brīdī bija funkciju turklāt jebkuru laiku tas redzēja numuru, tas centās būt noderīgi. Un, ja šis numurs sākās ar nulles, tas būtu vienkārši atbrīvoties no tiem. Kāpēc jums ir nepieciešams vadošais nullītes uz veseliem skaitļiem? Viņi bezjēdzīga, matemātiski. Viņi nav jēgas ASV Pasta sistēmā. Tātad, es esmu bijusi uz gadu, līdz šai dienai, es joprojām ir draugi, ka tad, kad rets gadījums, kas man ir nepieciešams kāds ir risinātu šajās dienās, Es joprojām redzu, ka man ir draugs Cambridge, Massachusetts, 2138. Un tas ir kaitinošas, ja esat mēģina kārtot no programmiski radīt aploksnes vai vienkārši pierakstītu to uz leju. Un tas ir tāpēc, ka šī iemesla dēļ, Es izvēlējos nepareizo datu tipu. Tātad, es mīlu savu ideju. Let 's izmantot CHAR lauku. Piecas rakstzīmes, izņemot ir stūra gadījums. Ja jūs joprojām sūtīt vēstules, dažreiz zip kodi šajās dienās, viņi, piemēram, plus četri. Tātad, mums ir nepieciešams defisi un tad mums vajag vēl četras numurus. Tātad, lai būtu godīgi, tas varētu iet daudz dažādos veidos. Tagad, es esmu gatavojas glabāt tas vienkārši un es esmu tikai teiksiet, ka tas ir pieci CHAR vērtība, un mēs esam gatavojas izlaist visu domuzīme plus četri. Bet tie ir no kompromisus veidus. Un jūs varat domāt par pašas problēmas, kas rodas ar tālruņa numuriem vai citās jomās. Un tagad, tas ir faktiski dumjš ceļš iet uz leju. Pieņemsim, gan Rob un I un Hannah un Maria un [? Davon?] Un Andy un citi par personāla visi dzīvotu Cambridge, Massachusetts, 02138. Tas tiešām liekas muļķīgi, ka es esmu pievienojot manu lietotāju galda, pilsēta, valsts, un zip. Kāpēc? Mērķauditorija: [dzirdams] DAVID Malan: Say atkal? Mērķauditorija: [dzirdams] DAVID Malan: Viņi vienmēr kas iet kopā, vai ne? Kad izrādās, mēs izmantojām domāt šis bija gadījums, kamēr mēs izsmeļoši meklēja visu ASV, un izrādās, ka tur ir dažas pretrunas kur vairākas pilsētas ir tas pats zip, kas ir dīvaini. Bet, ja mēs paredz, tagad, ka 02138 vienmēr ir Cambridge, Massachusetts, kāpēc pasaulē jūs glabāt jūsu datu bāze Cambridge un MA un 02138 man un Hannah un Rob un par [? Davon?] Un citiem, kas dzīvo šeit Cambridge, tas ir pilnīgi lieks. Mums vajadzētu aizmukt tikai ar uzglabāšanu, ko? Tikai zip kodu. Bet tad, ja mēs uzglabāt tikai zip kodu, es gribu, iespējams, manā mājas lapā zināt, kur 02138 ir. Tātad, man vajag citu tabulu. Un tas ir OK. Un patiesībā, tas ir viens no dizaina procesi projektēšana galdi kas jums jādara, PSet7 kā arī saskaņā ar kuru Jūs vēlaties, lai faktors kopējus datus. Tāpat kā mēs esam faktoringa out kopīgs kods un faktorings out kopīgs stili no CSS, šeit pārāk datu bāzē, ja man ir nepieciešama tikai 02138 unikāli identificēt kādu dzimtajā pilsētā, neuzglabājiet Cambridge, masas katrs darn lietotājs jūsu galda. Tā vietā, ir atsevišķa tabulu sauc Zips ka būtu ko slejas? Iespējams, ir ID lauks, tikai tāpēc, lai principi, mēs runājam par tagad. Iespējams, zip lauks 02138. Un tad, iespējams, kāda cita slejas? Pilsēta un valsts, bet ir tikai viens rindu 02138, viena rinda par 02139, viena rinda par 90210. Un tas ir burtiski visi zip kodi es zinu. Tāpēc tagad, ko jūs varat darīt? Tas ir problemātiski, jo tagad es esam ieguvuši divas tabulas. Tātad, mani lietotāji ir pārsvarā pār šeit, bet viņu pilsēta valsts informācijas ir šeit. Tātad, izrādās ar SQL, tur ir patiesībā ir veids, kā pievienoties informāciju, un jūs redzēsiet, tas ir PSET. Bet izrādās, jūs varat darīt kaut kas līdzīgs šim. SELECT zvaigzne no lietotājiem, pievienoties rāvējslēdzēji ON Lietotāji dot zip vienāds rāvējslēdzēji dot zip. Kas ir nedaudz izplūdis, protams, bet tas tikai nozīmē, izvēlieties Viss no process ņemot manu lietotāju tabula un mans rāvējslēdzēji galda. Pievienoties viņiem uz vienu lauks viņiem ir slejā. Tātad, burtiski darot kaut ko kā šis, un dod man atpakaļ jauna pagaidu tabulas tas ir plašāks, kas ir lielāks, ka ir visas šīs kolonnas no viņiem abiem. Un tas, gluži vienkārši, būtu sintakse darīt kaut kas līdzīgs šim. Tātad, tur ir šis priekšu, bet tur notiek būt citiem dizaina lēmumus, jūs ir, lai, ne tikai ar indeksiem bet arī nokļūšanu izaicinājumiem. Patiesībā, tur ir izaicinājums jebkurā datubāzē dizains kuru dažreiz divi cilvēki varētu vēlēties piekļūt tiem pašiem rindas datu bāzes galds. Tātad, tas ir kaut kas, mēs sastopas PSet7 kā arī. Bet es domāju, ka man apskatīt vienu uzbrukums, kas ir iespējams, SQL. Kādi ir daži no problēmas, kas var rasties? Tātad, jūs sastopaties šo PSet7. Un mēs jums pateikt tieši to, ko kodēšanas risinājums šai problēmai ir. Bet, ja jūs veikt augstāka līmeņa klases, it īpaši operētājsistēmu, jūs gatavojas sastapties jautājums Atomitāte, problēma mēģina darīt vairākas lietas visu uzreiz bez pārtraukuma. Un es domāju, ka man iepazīstināt šis Ideja par PSet7 ar metaforu ka es uzzināju sevi Margo Seltzer ir CS164 operētājsistēmas klases gadiem. Pieņemsim, ka jums ir viens no šiem kopmītnes ledusskapji savā kopmītnes istabā vai mājā, un jums ir reāla tieksme uz pienu. Un tā, jūs nākt mājās no klasēm kādu dienu, atverot ledusskapi. Ak, damn it. Nav piens ledusskapī. Tātad, jūs aizverat ledusskapis, aizslēgt durvis, bloķētu kopmītnes, staigāt ap stūri lai CVS, saņemt līniju, un sākt pārbaudes veic kādu pienu. Un tas ir gatavojas veikt kādu laiku, jo šie damn sevis izrakstīšanās skaitītāji veikt uz visiem laikiem, lai izmantotu anyway. Tātad tikmēr, jūsu kaimiņiem nāk mājās. Viņš vai viņa patiešām patīk pienu, kā arī. Viņi nāk uz kopmītnes istabā, atvērt ledusskapi, oh, darn to. Nav vairāk piena. Tātad, viņš vai viņa arī iet ap stūri. Bet tagad, jo tur ir kā divi vai trīs vai četras CVSes tuvumā, tās notiek, lai dotos uz kādu no dažādi tie laukumā. Un tāpēc tagad, dažas minūtes vēlāk, jums abiem nākt mājās un ugh, sliktākajā problēma kādreiz. Tagad jums ir pārāk daudz piena jo tas ir gatavojas iet skābs. Un jums patīk pienu, bet jūs nav īsti patīk pienu. Tāpēc tagad, tas bija dārgs kļūda, jo jums abiem pieņēma lēmumu, pamatojoties uz stāvoklis kādu mainīgā ka bija procesā tiek mainīts ar jums, iniciators gatavojas iegūt pienu. Tātad, kas ir iespējams, cilvēka risinājums šai problēmai? Mērķauditorija: [dzirdams] DAVID Malan: Leave piezīmi, vai ne? Vienmēr atstājiet piezīmi, ja jūs esat iepazinušies ar šo šovu. Jā, tur ir divi no mums. Tātad, vienmēr atstājiet piezīmi, vai burtiski bloķētu ledusskapi ar kādu atslēga vai kaut kas vairāk nekā, piemēram, ka augšā. Bet tas tiešām būs Galvenā problēma ar datu bāzes projektēšana, jo īpaši, ja jūs varētu būt vairākiem pārlūkiem, vairākas laptops, vairāki lietotāji visi cenšas atjaunināt informāciju uzreiz. Īpaši jutīga informācija piemēram, finanšu informāciju, ar ko ar akciju tirdzniecību mājas lapā, piemēram, jūs būsiet ēkas, Ko darīt, ja jūs vēlaties, lai pārbaudītu, cik daudz naudas jums ir, un tad, ja jums ir pietiekami daudz, nopirkt kādu akciju? Bet ko tad, ja kāds cits, kas ir kopīgs konts ar jums ir vienlaikus mēģinot nopirkt kādu akciju? Tātad, viņš vai viņa ir pārbaudīta konta bilance, jums abiem saņemt atpakaļ pats atbilde, tur nav piens. Vai jums abiem saņemt atpakaļ atbildi, Jums ir $ 100 kontā. Abi jūs mēģināt veikt lēmumu nopirkt vienu daļu no kāda uzņēmuma noliktavā. Un tagad, kas notiek? Jums ir divas daļas? Jums nav akcijas? Problēmas, piemēram, kas var rasties. Tātad, mēs sastopas kas. SQL injekcijas uzbrukumiem, par laimi, Ir kaut kas, mēs palīdzēsim jums, bet tie ir atrociously kopējā šajās dienās tomēr. Tātad, tas ir tikai piemērs. Man nav nekādas pretenzijas, ka Harvard PIN sistēma ir neaizsargāti pret šo konkrēto uzbrukumu. Mēs esam mēģinājuši. Bet, jūs zināt, ka mēs ir lauks, kā šis. Un Yale s Net ID ir līdzīga meklē ekrānu šajās dienās. Un izrādās, ka varbūt PIN sistēma ir ieviesta PHP. Un, ja tas were-- tas not-- viņi varētu būt kods, kas izskatās šādi. Viņiem ir divi mainīgie. Dodiet man lietotājvārdu un paroli No amata super globālo mainīgo ka mēs runājām par agrāk. Varbūt Harvard ir vaicājumu tāpat SELECT zvaigzne no lietotājiem kur lietotājvārds ir vienāda un parole vienāda. Un paziņojums, ka es esmu tikai tapām to lietojot cirtaini lencēm notācija no otra diena, kas nozīmē vienkārši iespraudiet vērtībā šeit. Es neesmu izmantojot jautājuma zīme paņēmiens. Man nav nekādu sekundi vai trešo argumentus. Es esmu tikai burtiski būvējot virkni sevi. Problēma, lai gan, ir tas, ka ja kāds patīk scroob, kas ir atsauce uz filmu, piesakās ar kaut kas līdzīgs šim, un es esam izņēmuši punkti ka parasti aizsegt paroles, kas notiks, ja viņš ir īpaši ļaunprātīgs un viņa parole varbūt ir 12345, vienu filmu ar nosaukumu "Spaceballs," bet viņš kritiski tipi A single quote pēc pieciem, tad burtiski vārds vai telpā, un pēc tam quote, likt pēdiņas beigās viens vienāds quote vienu, bet paziņojums viņš izlaist ko? Viņš izlaisti citātu labajā pusē un viņš izlaists citātu pa kreisi. Jo, ja šis uzbrucējs scroob ir pieņēmums ir tas, ka cilvēki, kas rakstīja šis PHP kods nebija tik spilgti, varbūt viņi vienkārši ir daži single citē ap interpolācijas ir mainīgs cirtaini lencēm? Un tāpēc varbūt, viņš varēja laipns par pabeigtu savu domu par viņiem, bet tādā veidā, kas notiek ļaut viņam ielauzies PIN sistēmā. Citiem vārdiem sakot, pieņemsim ka tas ir kods un mēs tagad iespraudiet ko scroob drukāti. Un tas ir sarkans, jo tas ir slikti. Un pamatā teksts ir tas, ko viņš drukāti, scroob varētu triks Harvard serveri vērā būvējot SQL vaicājumu virkne, kas izskatās šādi. Paroles vienāds 12345 vai viens vienāds vienu. Rezultāts, kas, loģiski, ir tas, ka šis būs log scroob jo, ja viņa parole ir 12345 vai, ja viens Vienāds viens, kas, protams, vienmēr ir taisnība, kas nozīmē scroob vienmēr izpaužas. Un tā, veids, kā noteikt Tas, tāpat kā ir daudz gadījumu, būtu rakstīt vairāk koncentrētos aizsardzībai. Izmantot kaut ko līdzīgu mūsu Faktiskais query funkcija, kas jūs redzēsiet PSet7, kur mēs plug in kaut kas līdzīgs jautājums iezīmē šeit. Un skaistums vaicājums funkcija, kas mums dot jums tas aizsargā pret šiem tā sauktās SQL injekcijas uzbrukumiem, kur kāds ir tricking savu kodu injicēšanas savs SQL kodu. Jo tas, ko vaicājumu funkcijas mēs dodam jums būs faktiski darīt, ja jūs izmantojat jautājuma zīmi sintakse un otrais un trešais arguments šeit, ir tas, kas to darīja pievienot ievade, ka lietotājs sniegta? Tie slīpsvītru citē. Tātad, tas aizbēg jebkurš potenciāli bīstamas rakstzīmes. Tas izskatās dīvaini tagad, bet tas nav neaizsargāti jo tas nav mainīt loģiku vairs jo tas viss parole Tagad viens citāts tas nav, Patiesībā, scroob parole. Tātad, tur ir bijuši daži joki par šo gadu gaitā. Tātad, tas bija nofotografēties Dažu geek kādā autostāvvietā ar ko jūs varētu zināt, ka daži pilsētām un valstis mēģināt skenēt savu licenci plate ar rēķinu vai to biļeti jūs ja jūs iet cauri bez, piemēram, E-Z Pass lieta. Tātad, šis cilvēks pieņem, ka varbūt cilvēki rakstot e-Z Pass sistēmu nebija tik spilgti, un varbūt viņi tikko saliktās kopā virkne, tāpēc, ka viņš vai viņa nevarēja ļaunprātīgi ne tikai pabeigt savu domu, bet faktiski izpildīt sliktu komandu, kas mēs esam vēl nav minēts, bet jūs varat droši uzminēt. Ka papildus izdzēst un ievietot un atjaunināt un izvēlieties, tur ir arī atslēgvārdu sauc kritums, kas burtiski izdzēš visu datu bāzē, kas ir īpaši slikts. Mēs varam tuvināt šo, ja tas ir nedaudz grūts, lai redzētu. Tas, kas tagad, ir slavens karikatūra tas ir lieliski gudrs tagad un saprotams. [Smiekli] Jā, atdzesē. Veida geeking out. Tātad tie, tad ir SQL injekcijas uzbrukumiem. Un viņi tik viegli izvairīties, izmantojot pareizais kods vai tiesības bibliotēkas. Un jūs redzēsiet PSet7, kas ir kāpēc mēs jums vaicājumu funkciju. Tātad, pāris mežģu ka mēs domājam, ka mēs dot jums šeit mūsu Atlikušo minūtes kopā. Tātad, kā jūs atceraties no nedēļas nulles, mēs ieviesa šos divus spuldzēm, kas ir jauki, ne tikai tāpēc, ka viņi diezgan, un ir krāsains, bet tāpēc, ka viņi atbalsta kaut ko sauc par API, pieteikumu Programming Interface And in CS50 līdz šim, mēs esam galvenokārt koncentrējas uz GET un POST, bet izrādās, tur ir citi HTTP darbības vārdi, piemēram, izlietošanu. Un patiesībā, tas bija slaidu no nedēļas nulles saskaņā ar kuru, ja jūs rakstīt kodu, kas sūta a la PSet6 HTTP pieprasījumu, kas izskatās šādi ar šo rieciens teksta apakšā, ko sauc JSON, vai JavaScript Object notācija ka mēs runājam par nākamo nedēļu, Jūs varat ieslēgt vai izslēgt vai mainīt krāsu gaismu, piemēram, tiem. Tātad, ja CS50 arī ir papildus daži no šīm spuldzēm šeit New Haven Ja vēlaties aizņemties viņiem gala projektiem, arī daži Microsoft Lentes, kas ir, piemēram, pulkstenis, kas jums valkāt ap plaukstas locītavu ka līdzīgi ir arī tā, ka API jums var rakstīt savu programmatūru par viņiem. Mums ir konts Apple iOS kods tik ka, ja jums ir Apple Watch vai iPhone vai iPad vai iPod, Jūs varat uzrakstīt kodu, kas faktiski darbojas uz tiem. Mums ir viss ķekars of Arduinos, kas ir tiny maz datori bez gadījumos, būtībā, ka jūs varat savienot, izmantojot USB, parasti uz savu Mac vai PC, rakstīt kodu, kas darbojas uz šo fizisko ierīces, kas bieži vien ir sensori uz tiem lai jūs varētu mijiedarboties ar reālo pasauli. Mums ir viss ķekars Garajā Motion ierīcēm, kas ir USB ierīces Mac un Datori, šeit un atkal, New Haven. Un, ja jūs savienot to ar savu Mac, jūs faktiski var kontrolēt datoru rakstot programmatūru ka, izmantojot infrasarkano staru, skaitļi, kur jūsu cilvēka rokas ir, pat nepieskaroties tastatūru. Mēs domājam, ka mēs gribētu dalīties ātrs ieskatu šajā, piemēram. [Mūzikas atskaņošanai] Tātad, mums ir viss ķekars no šīm lietām, Arī sauc Myo aproces kas jūs likts pār jūsu apakšdelms un tad jūs varat kontrolēt reālo pasaules vai virtuālā pasaule, kā šis. [Mūzikas atskaņošanai] Vai mums ir arī dažas Google Kartons, kas ir burtiski, piemēram, kartona kastē, jūs varētu likt uz jūsu sejas, bet slaidu tālrunī tajā tā, ka jūs varat ievietot glāzi jūsu tālrunis patiešām tuvu acīm. Un Google Kartons ir diezgan lēti pie $ 10 vai $ 20. Un tas ir maz lēcas ka nedaudz off maiņā attēls uz ekrāna jūsu cilvēku acis, lai dotu jums sajūtu dziļums tā, ka jums tiešām ir 3D vide priekšā no jums. Mums ir arī daži Samsung Gear, kas ir dārgāka versija par šo, bet ka var tāpat slaidu izturēties Android telefonu un jums ilūziju of-- vai dot pieredzi Virtuālās realitātes. Un mūsu divas minūtes gala, mēs domājam, ka mēs cenšamies to darīt. Ja es varētu prognozēt, kāda ir Colton šeit tikai, lai apetītes rosināšanai, ļaujiet man iet uz priekšu un mest up uz lielā ekrāna šeit. Ļaujiet man nogalināt gaismas. Colton, jūs vēlaties, lai iet uz priekšu un likts uz jūsu mobilo uz brīdi un nāk vairāk nekā uz vidū skatuves? Un jūs vēlaties, lai project-- tas ir tas, ko Colton redz. Tagad, Wi-Fi šeit ir nav tik spēcīga, lai šo ierīci ka tas ir super pārliecinoši, bet Colton ir burtiski šajā maģiskajā futūristisks vietā. Viņš redz tikai vienu attēlu. Jūs redzat savu kreiso un labo aci ka viņa smadzenes tiek izšūšanas kopā jo trīsdimensiju vide uz viņa sejas. Viņš tikko izvēlēts izvēlnes iespēju šeit. Un tā atkal, viņš valkā šo austiņas ar Samsung telefonu par to, kas ir vadiem projicē uz mūsu izdevumiem. Tagad jūs uz Marsa, es domāju? COLTON: Es domāju, ka tā. Es neesmu pārliecināts, ka [nedzirdama]. [Smiekli] DAVID Malan: Izrādās Marss ir šīs izvēlnes. COLTON: [dzirdams] dažas atdzist vietas, ja mēs gribam iet kuri paredzēti, DAVID Malan: Kur mēs gribam iet? COLTON: [nedzirdama] DAVID Malan: Un pieņemsim redzēt kur Colton s ņemot mums tagad. COLTON: [nedzirdama] DAVID Malan: Tātad, tur ir tik daudz dažādās vietās jūs varat veikt pats. Tur FAPIs, caur kuru jūs varat rakstīt spēles vai mijiedarbība, kas palaist, galu galā, pa tālruni. Tātad, jūs tiešām vienkārši rakstot mobilā tālruņa app. Bet, pateicoties programmatūru un grafikas iespējas, Tagad Colton ir šajā tiny maz māja. Un pie riska milzīgs sevi, Colton un es stick ap bet beigās klasē šodien šeit ja vēlaties nākt un spēlēt. Un mēs lai tos atpakaļ nākamnedēļ, kā arī. Bez tālāk, Ado tas arī šodien. Redzēsim tevi nākamnedēļ. [MUSIC - Ragga TWINS, "BAD MAN"]