[Гуляе музыка] Дэвід малая: Добра, гэта CS50. Гэта канец тыдня восем. І сёння, мы пачынаем каб запоўніць некаторыя кавалкі калі справа даходзіць да будаўніцтва рэчы ў Інтэрнэце. Так, нагадаем, што ў панядзелак мы трацім значна больш часу на PHP, які з'яўляецца гэтая дынаміка мова праграмавання, які дазваляе нам выхад, сярод іншых рэчы, HTML і іншыя такія матэрыялы што мы хочам бачыць. Але мы на самай справе не паглядзеў на тое, як мы збіраемся захоўваць любую інфармацыю. На самай справе, амаль нічога з гэтага супер цікавыя сайты вы наведваеце сёння ёсць нейкі базы дадзеных на заднім канцы, праўда? Facebook, безумоўна, захоўвае мноства дадзеных пра ўсіх нас і Gmail крамах усё з вашых лістоў. І так, многія іншыя сайты не толькі статычны кантэнт гэта інфармацыйны. Гэта на самай справе дынаміка ў некаторым родзе. Вы дае ўваход, ён абнаўляе старонкі для іншых людзей. Вы атрымліваеце паведамленне, вы пасылаеце Паведамленні, і гэтак далей. Такім чынам, сёння мы паглядзім бліжэй на асновамі праекта што вы будзеце апускацца ў наступным тыдзень, CS50 Фінансы, якія на самай справе адбываецца, каб вы пабудаваць нешта не ў C, але ў PHP. Сайт, які выглядае сёе-тое як гэта што дазваляе купляць і прадаваць запасы, якія фактычна збіраецца прыцягнуць на рэальным часе дадзеныя аб запасах ад Yahoo Finance. І так, у канчатковым рахунку, вы будзеце мець ілюзія для сябе і для карыстальнікаў, што вы на самай справе купля і продаж акцыі і атрымліваць амаль у рэальным часе Абнаўлення, Упраўленне Партфель, усе з якіх будзе патрабаваць, якія маюць, у канчатковым рахунку, база дадзеных карыстальнікаў. Так, у вашых уласных слоў, асабліва калі вы не супер знаёмыя з кампутарам навука або базы дадзеных, тое, што Вы ведаеце, базы дадзеных, каб быць Прама зараз, у нетэхнічнае тэрмінах? Што гэта? Як бы Вы апісалі яго у суседа ці сябра? АЎДЫТОРЫЯ: [неразборліва] Інфармацыя [неразборліва] Дэвід малая: Такім чынам, пералік інфармацыі, або store-- пералік інфармацыі, што вы, магчыма, захочаце, каб захаваць пра нешта, як карыстальнік. І тое, што робяць карыстальнікі маюць звязаных з імі? Калі вы карыстальнік Facebook або на Gmail, якія характарыстыкі што ўсе з нас маюць карыстальнікі? Маўляў, тое, што могуць быць некаторыя з слупкі ў табліцы, да якой мы спасылаўся апошні раз? Таму што зноў жа, вы можаце думаю, базы дадзеных сапраўды, як фантазіі Excel файла або Google Табліца або Apple, нумары файлаў. Такім чынам, што вы думаеце пра калі вы думаеце пра карыстальнік? Што яны маюць? Што гэта? АЎДЫТОРЫЯ: Імя. Дэвід малая: Імя. Так што, калі імя, як Дэвід малая будзе імя якога-небудзь карыстальніка. Што яшчэ ёсць карыстальнік? АЎДЫТОРЫЯ: ID. Дэвід малая: ID. Так што, як ідэнтыфікацыйны нумар, як ваш Гарвардзе ID ці ваш Ельскага Net ID і да таго падобнае. Што яшчэ можа карыстальнік мае? АЎДЫТОРЫЯ: Пароль. Дэвід малая: Пароль, можа быць, адрас, можа быць, нумар тэлефона, можа быць, адрас электроннай пошты. Так, ёсць букеты палёў і гэта можа роду выйсці з пад кантролю хутка, як толькі вы пачынаеце разумеючы, пра, давайце захоўваць гэта і давайце захоўваць гэта і гэта. Але як мы на самай справе гэта зрабіць? Такім чынам, яшчэ раз, то ментальная мадэль каб на сённяшні дзень, як мы пагрузіцца ў рэальнай SQL, Structured Query Language, ўяўляе сабой базу дадзеных, якая выглядае як гэта. Гэта проста радкоў і слупкоў. І вы можаце сабе ўявіць Google Spreadsheets або любую колькасць іншых праграм. Але тое, што з'яўляецца ключавым аб MySQL, якая з'яўляецца праграмнае забеспячэнне базы дадзеных мы будзем выкарыстоўваць, свабодна адкрыта available-- выкарыстання Facebook гэта і любую колькасць іншых websites-- база дадзеных захоўвае рэчы рэляцыйныя. І гэта рэляцыйная база дадзеных проста азначае, што той, які ў літаральным сэнсе захоўвае дадзеныя ў радках і слупках. Гэта так проста, як, што. Такім чынам, нават нешта накшталт Oracle, што Вы, магчыма, як правіла, чулі гэта рэляцыйная база дадзеных. А пад капотам, яго захоўвае дадзеныя ў радках і слупках. І Oracle вінаваціць Вас у шмат грошай, каб зрабіць гэта, у той час як абвінавачванні MySQL ня вы нічога за тое ж самае. Так, у SQL збіраецца даць нам па меншай меры, чатырох аперацый. Магчымасць выбару дадзеных, як для чытання Дадзеныя, устаўка, выдаленне, і абнаўленне дадзеных. Іншымі словамі, тыя на самай справе чатыры ключавых аперацыі якія збіраюцца, каб дазволіць нам змяняць матэрыял у тых радках і слупках. Інструмент, які мы выкарыстоўваем сёння, асабліва даведацца SQL і гуляць з ім зноў заклікаў PHP MyAdmin. Гэта інструмент на аснове вэб-. Усяго выпадкова гэта напісана ў PHP. Але гэта дасць нам графічную карыстацкі інтэрфейс, так што мы сапраўды можам стварыць гэтыя радкоў і слупкоў а затым пагаварыць з імі з дапамогай кода. Так, зараз давайце пачынаць што я думаю, шчыра кажучы, выгляд працэсу задавальненне ад будаўніцтва заднюю частку вэб-сайтаў, часткі, што карыстачы не см, але, безумоўна, клапоцяцца пра, таму што гэта даволі дадзеных збіраецца. Так, падобна С і трохі менш, як PHP, SQL, або базы дадзеных, якая падтрымлівае SQL, мае віды на гэтыя дадзеныя не менш і гронкі іншых. ЗНАК, VARCHAR, INT, BIGINT, Дзесятковай і DateTime. І ёсць цэлы куча іншых функцый, але давайце рабіць гэта, спосаб рэальнага прыкладу. Я збіраюся пайсці ў CS50 IDE дзе загадзя, я ўвайшлі ў і я таксама наведаў URL для гэты інструмент называецца PHP MyAdmin. А ў сем праблема ўсталяваць, мы раскажам вам, як менавіта, каб дабрацца да гэтага інтэрфейсу а таксама. На верхнім левым куце, заўважыце, што ён кажа, лекцыі. І, што проста азначае, што загадзя, я стварыў пусты базы дадзеных называецца лекцыя што не мае табліцы ў яе яшчэ. Там няма радкі і слупкі. Паколькі першы што мы збіраемся рабіць гэта пачаць, каб стварыць табліцу што збіраецца захоўваць нашы карыстальнікі. Так, літаральна на працягу тут направа, я збіраюся расказаць базу дадзеных Я хачу табліца называецца карыстальнікаў. Такім чынам, гэта як файл, які я хочаце захаваць усе мае дадзеныя ст. І колькі калонак? Ну, давайце трымаць яго простая ў цяперашні час. Я проста хачу, каб захоўваць падобна імя карыстальніка і імя для карыстальніка. Мы пачаць з малога. Такім чынам, я хачу ўсяго дзве калонкі. І я збіраюся ісці наперад і націсніце Go. А потым, за гэтыя калоны, што я збіраюся каб do-- калі гэтага Інтэрнэце cooperates-- ўсе правы, так што мы збіраемся, каб паспрабаваць гэта зноў. Я збіраюся стварыць табліцу з імем Людзі з двума калонамі, націсніце Go, ОК. Цяпер у нас ёсць на самай справе хутка. Дзякуй, вельмі добра зроблена. Добра, так, што мы хочам гэтыя слупкі можна назваць? Так, адзін збіраецца назваць Імя карыстальніка. Такім чынам, усё я бачу here-- і інтэрфейс адкрыта становіцца трохі непрыгожа ў рэшце рэшт, як толькі вы пачынаеце набіраць ўсе гэтыя дадзеныя. Але тое, што прыемна, што-то як гэта ні парадаксальна, я ствараю слупкоў, але інструмент мае глупства паклаў іх у шэрагі так што я магу наладзіць гэтыя слупкі. Так, ёсць два нарыхтоўкі там пад імя. І адно з гэтых палёў я хачу назваць імя карыстальніка, і іншае полі я хачу назваць імя. І зараз у мяне ёсць, каб выбраць тыпы дадзеных для гэтых рэчаў. Так, у той час як у Excel і Табліцы Google, калі вы хочаце слупок, вы ў літаральным сэнсе проста увядзіце імя або імя карыстальніка, націсніце Enter. Можа быць, вы робіце гэта тоўсты шрыфт проста для яснасці, але гэта так. Вы не пакажыце тыпы калонак. Зараз у Google Spreadsheets або Excel, вы можа паказаць, як аказваецца дадзеныя. Вы можаце перайсці ў меню Фармат, і вы можна паказаць паказаць гэты знак як даляр, паказаць гэта як значэнне з якая плавае коскі. Так, гэта падобна па духу што тое, што мы збіраемся зрабіць, але гэта на самай справе адбываецца, каб прымусіць дадзеныя, каб быць пэўны тып. Цяпер, нават калі хвіліну назад я сказаў, што ёсць толькі некалькі тыпаў дадзеных, там на самой справе нашмат, і яны у рознай ступені спецыфічнасці. І, як у бок, вы можа нават зрабіць модныя рэчы як геаметрыі захоўвання ўнутры базы дадзеных. Вы можаце захоўваць рэчы як каардынатаў GPS і на самай справе знайсці, матэматычна, кропкі, якія блізкія да іншых. Але мы збіраемся трымаць гэта супер проста і ісці да сюды, усё так званыя тыпы радкоў. Такім чынам, вось спіс з цэлая куча варыянтаў. ЗНАК, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. І гэта збольшага пераважнай. І, на жаль, некалькі як гэта ні парадаксальна З, паўкокс на самай справе не ЗНАК. Калі вы пакажа ў базе дадзеных што ваш тып дадзеных CHAR, што азначае, што так, гэта ЗНАК, але гэта адзін або некалькі знакаў. І вы павінны паказаць колькі сімвалы вы хочаце. Такім чынам, што тыповы Даўжыня імя карыстальніка? Ці ёсць абмежаванні, як правіла ,? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: 16, можа быць? Нешта накшталт гэтага. Вы ведаеце, яшчэ ў дзень, гэта было восем. Часам гэта 16, часам гэта нават больш, чым гэта. І так, гэта не значыць даць мне адзін знак. Гэта азначае, што я павінен пазначыць даўжыня вобласці, і цяпер я магу сказаць нешта накшталт 16. І ёсць кампраміс тут. Такім чынам, мы ўбачым у момант гэта азначае, што адно, кожны імя карыстальніка павінна быць 16 сімвалаў. Але пачакайце хвіліну, M-A-L-A-N. Калі гэта маё імя карыстальніка і я толькі з дапамогай пяці, тое, што вы маглі б прапанаваць, што база дадзеных каб зрабіць для астатніх 11 персанажаў, якія Я абаронены прасторы для? Што б вы зрабілі? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Так, толькі зрабіць іх усіх нуль. Зрабіце ім прасторы. Але, напэўна, нулявая, так што шмат зваротнай касой нулёў. Так, з аднаго боку, мы ў Цяпер пераканаўся, што маё імя карыстальніка не можа быць больш за 16 знакаў. І адваротны бок, якая што калі я сапраўды доўгае імя ці хацелі сапраўды доўга імя карыстальніка, як некаторыя з вас хлопцы, можа мець у гэтым каледжы або у Yale.edu, вы не можаце мець адзін. І так на самой справе, калі ў Вас ёсць небудзь зарэгістраваных на сайце і вы атрымаеце крычаў на кажучы пароль занадта доўга або імя карыстальніка занадта доўга, гэта проста таму, што праграміст, калі наладзе сваю базу дадзеных, вырашыў, што гэта поле ня быць даўжэй гэтай даўжыні. Добра, так што, калі мы зыходзім назваць? Як доўга ці павінен Імя тыповая чалавечая будзем? Як шмат знакаў, 16? Я мяркую, што мы маглі б знайсці каго-то ў гэтым пакоі дзе яго ці яе першага плюс апошні Імя даўжэй, чым 16 знакаў. Так, што лепш, чым 17? 18? 25? Больш? 30? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: 5000, божа мой. Так, што, верагодна, прыстойны Верхняя мяжа, скажам. І вось мы накшталт ёсць каб зрабіць званок меркаванні. Маўляў, няма правільнага адказу тут. Бясконцае ня цалкам магчыма, таму што мы ў канчатковым выніку збіраецца have-- мы збіраецца бегчы з памяці. Такім чынам, мы павінны зрабіць рашэнне выкліку ў некаторай кропцы. Вельмі часта будзе, напрыклад, каб use-- і дазвольце мне задаць CHAR тут а before-- 255 быў літаральна Верхняя мяжа гэтага праграмнага забеспячэння баз дадзеных гады таму. І так, шмат людзей проста сказаць, добра. 255 гэта мяжа. Давайце проста выкарыстоўваць максімум. І гэта даволі смешна. Маўляў, калі вы друкуеце хтосьці назваць на 200 плюс персанажаў, што крыху смешна. Але, памятаеце, што гэта не ASCII- адзіная сістэма для персанажаў. І так, асабліва ў шмат азіяцкіх моў дзе ёсць сімвалы, мы не можам выказаць на клавішных, як мой ЗША клавіятура, некаторыя сімвалы на самай справе ўзяць 16 біт замест васьмі бітаў. І так, гэта на самай справе гэта не ўсё, што неразумна што нам трэба больш прасторай, калі мы хочам, каб адпавядаць буйныя сімвалаў, чым у самім ЗША арыентаваных тыя, каго мы мелі тэндэнцыю абмяркоўваць. Так, нам патрэбныя верхнюю грань. Я не ведаю, што лепш адзін, але 255, як правіла, агульны. 25 адчувае слабасць. 16, 32 адчуваю сябе прыгнечаным. Я б памыліцца ў бок пра нешта вышэй. Але ёсць кампраміс, як заўсёды. Што такое, мабыць, відавочна, Кампраміс рэзервавання 255 сімвалаў для імя кожнага ў маёй базе дадзеных? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Што гэта? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Гэта шмат памяці, праўда? М-А-Л-А-М. Я проста марна 250 сімвалы проста захоўваць сваё імя у абароне, на ўсялякі выпадак, хто-то у класе ёсць сапраўды доўгае імя. Гэта здаецца неправамернага кампрамісу. Такім чынам, атрымліваецца, што SQL, гэта мова баз дадзеных, на самай справе нешта падтрымлівае называецца VARCHAR або CHAR зменнай. І гэта збольшага добра, што гэта ў дазваляе паказаць не фіксаваная шырыня, а, хутчэй, з пераменнай шырынёй. І больш канкрэтна Максімальная шырыня вобласці. Такім чынам, гэта азначае, што імя можа быць не больш за 250 сімвалаў, але гэта, безумоўна, можа быць менш. І база дадзеных будзе разумным. Калі вы пакласці ў М-А-Л-А-N, гэта толькі збіраецца выкарыстоўваць пяць, можа, шэсць байт для як заднюю нулявы сімвал, і не марнаваць дадатковыя 249 або 250 байт залішне. Такім чынам, гэта здаецца, што я павінен пачалі з гэтай гісторыяй. Але заўсёды ёсць кампраміс. Так, з аднаго боку, Імя карыстальніка: Я паказана быць закадаваны на 16, і, магчыма, не было права выкліку, можа быць, гэта ёсць, але чаму б не выкарыстоўваць VARCHARS за ўсё? Яна існуе па прычыне. Чаму б не выкарыстоўваць VARCHARS для кожнага поля даўжыня якога вы не ведаеце загадзя, калі гэта, здаецца, гэта вялікая рэч, ці не так? Выкарыстоўвайце толькі столькі месца, колькі Вы павінны да гэтага мяжы? АЎДЫТОРЫЯ: Павольней. Дэвід малая: Спеллер? АЎДЫТОРЫЯ: Робіць гэта павольней? Дэвід малая: О, гэта больш павольна. Добра, што гэта амаль заўсёды адказ, шчыра кажучы. Маўляў, тое, што кампраміс? Яна альбо варта больш месца ці варта больш часу. Такім чынам, у гэтым выпадку, гэта можа быць больш павольна. Чаму? АЎДЫТОРЫЯ: [неразборліва] вызначэння [неразборліва]. Дэвід малая: Добра. Такім чынам, вы, магчыма, памятаеце з нават PSED5, гуляючы з вашым падыходам у слоўнік, калі ў вас ёсць, каб вылучыць памяць дынамічна або захаваць расце буфер, які можа на самай справе быць павольным. Калі ў вас ёсць, каб патэлефанаваць Таноса пад капотам і, магчыма, гэта тое, што MySQL робіць, так вядома, што можа быць так. І калі вы думаеце, шлях Вярнуцца да PSet-- ці нават тыдні два, калі мы рабілі такія рэчы, як бінарны пошук, або нават лінейны пошук, Адна з прыемных рэчаў аб кожным слове ў базе дадзеных або кожнае слова ў калонцы быўшы сапраўды такі жа даўжыні, нават калі цэлая куча гэтых знакаў пустыя, што вы можаце выкарыстоўваць адвольнага доступу на вашых дадзеных, ці не так? Калі вы ведаеце, што кожны слова 16 сімвалаў прэч, Вы можаце выкарыстоўваць арыфметычныя аперацыі, так казаць, і ідуць да нас 16, 32, 48, 64, і вы можаце проста скакаць імгненна з дапамогай арыфметыкі у любое з слоў у вашай базе дадзеных. У той час як, калі гэта VARCHAR, што вы замест таго, каб рабіць? [Тэлефон тэлефануе] Калі гэта VARCHAR, вы не можа выкарыстоўваць адвольны доступ. Тое, што вы павінны шукаць ці рабіць? Да? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Паглядзіце праз whole-- следу ўвесь спіс Гледзячы для чаго, хутчэй за ўсё ,? Якія асаблівае значэнне? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Мэта для нулявых тэрмінатараў што дэмаркацыю падзел слоў. Такім чынам, яшчэ раз, гэта кампраміс, і няма правільнага адказу. Але гэта, дзе, у прыватнасці калі вашы карыстальнікі атрымліваюць быць шмат і ваш груз на сваіх серверах, то Колькасць людзей, якія выкарыстоўваюць яна атрымлівае высокі, гэта на самай справе нетрывіяльных рашэнняў. Такім чынам, можна пакінуць іх як гэта, але давайце пракруціць ўніз да правага тут. Зараз, ёсць некалькі слупкоў дзе мы павінны зрабіць званок меркаванні. Ці мае сэнс, каб дазволіць карыстальніка імя, імя карыстальніка карыстальніка ці карыстальніка Імя, каб быць пустым? Гэта значыць, проста пустым. Па адчуваннях трохі бессэнсоўна, таму я не збіраюся праверыць гэтыя скрыні. Але, аказваецца, у базы дадзеных, вы можаце сказаць: хто-то можа неабавязкова мець гэта значэнне. Гэтая калонка ня на самай справе там. Зараз, ёсць у гэтым выпадальным меню. І заўважце, я да гэтага часу там у першым шэрагу, так што я кажу пра імя карыстальніка ў цяперашні час. І атрымліваецца, што ў базу дадзеных, у адрозненне ад простага толькі табліцу, мае магутныя функцыі, званыя індэксы. І індэкс з'яўляецца спосаб сказаць базы дадзеных загадзя, што I чалавечага Я разумнейшы за цябе. Я ведаю, што віды запытаў, абярыце або ўставіць або выдаліць або абнавіць што мой код будзе ў канчатковым да рабіць у гэтай базе дадзеных. Я хачу, каб прачытаць шмат дадзеных. Я хачу, каб ўставіць шмат дадзеных. Я хачу, каб пастаянна выдаліць шмат дадзеных. Калі я ведаю, што я збіраюся быць доступ да такой галіне, як Псеўданім шмат, Я магу расказаць прэвентыўна базы дадзеных, я ведаю больш, чым вы, і я хачу, каб ўказа, Вы павінны Індэкс гэтае поле. Дзе індэксацыі поле або слупок азначае, што база дадзеных загадзя павінны пазычаць некаторыя ідэі з, як, тыдзень чатыры і пяць, і шэсць з CS50 а на самай справе пабудаваць нешта накшталт бінарнага пошуку дрэва ці нешта як правіла, называюць Б дрэва што вы даведаецеся у класе, як CS124 у Гарвардзе, клас алгарытмаў, або любую колькасць іншых месцах. База дадзеных і смарт- людзі, якія рэалізавалі яго будзе высветліць, як захоўваць што табліца інфармацыі ў памяці, так што пошук і іншыя аперацыі вельмі хутка. Вы не павінны рабіць гэта. Вы не павінны ажыццяўляць лінейны пошук або бінарны пошук або аб'яднаць тое ці выбар сартаваць, нічога з гэтага. У базе дадзеных робіць гэта для вас, калі вы кажаце гэта прэвентыўна, каб індэкс у гэтым полі. І вы можаце бачыць таксама, ёсць некаторыя іншыя характарыстыкі мы можам сказаць, база дадзеных для выканання. Што гэта можа азначаць, калі я выберу Унікальны З гэтага меню, проста інтуітыўна? Да? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Так, Імя карыстальніка павінна быць унікальным. Ці з'яўляецца гэта добра ці дрэнна для база дадзеных, для вэб-сайта з карыстальнікамі? Калі імёны быць унікальным? Так, напэўна. Калі гэта тое, што поле мы выкарыстоўваем, каб увайсці, Вы сапраўды не хочаце, каб людзі, якія маюць тое ж самае пачуццё ці ж імя карыстальніка. Такім чынам, мы можам мець У базе захавання, што так што цяпер у маім кодзе PHP або любой мове, Я не павінен, напрыклад, праверыць абавязкова робіць гэта імя карыстальніка існуюць, перш чым я хай хтосьці зарэгістравацца? База дадзеных не дазволіць два чалавекі, названыя Дэвід або зарэгіструйцеся Malans ў гэтым выпадку. І, як у бок, нават калі гэта Меню толькі дазваляе выбраць адзін, унікальны індэкс з'яўляецца адным гэта індэксуюцца для супер хуткага выканання, але гэта таксама ўзмацняе ўнікальнасць. І мы вернемся да таго, што два іншых маю на ўвазе хвіліну. Між тым, калі я іду ў мой другі шэраг, які гэтае імя карыстальніка, я павінен паказаць, што імя павінна быць унікальным? Не, таму што вы, безумоўна, have-- няма двух Дэвід Malans ў гэтым пакоі, хутчэй за ўсё. Але калі мы выбіраем іншае імя, мы маглі б безумоўна сутыкненняў. Ўспомніце хеши і да таго падобнае. Такім чынам, мы, вядома, не хачу каб зрабіць полі імя унікальным. Так, мы толькі збіраемся, каб пакінуць што ў працяжнік, працяжнік, працяжнік, нічога. І я сыходжу ўсё астатняе ў адзіночку. На самай справе, большасць з гэтых палёў мы не павінны клапаціцца аб. І калі я гатовы, каб захаваць гэта, калі інтэрнэт супрацоўнічае, Я націсніце кнопку Захаваць, і вельмі, вельмі, вельмі павольна зусім база дадзеных выратавацца. І цяпер я зноў на гэта інтэрфейс, які па агульным прызнанні, з'яўляецца пераважнай на першы погляд. Але ўсё, што я збіраюся зрабіць, гэта націсніце на словы карыстальнікаў на верхнім левым куце. Я збіраюся пайсці сюды, націсніце Людзі, і па змаўчанні, гэта выканаў некаторыя SQL, але больш падрабязна пра гэта ў дадзены момант. Вось толькі апісанне таго, што я і зрабіў. І не хвалюйцеся, што вы бачыце кажучы латыні і шведскай тут. Такія толькі па змаўчанні Налады, таму што MySQL першапачаткова, або PHP MyAdmin, адзін з двух адбылося быць напісаны ў некаторых шведскіх людзей. Але гэта не мае значэння, у нашым выпадку тут. Добра, дык чаму усё гэта цікава? Аказваецца, я магу ўставіць дадзеныя ў базе дадзеных шляхам напісання кода. І я ісці наперад і ў маім файле тут, я ісці наперад і рабіць выгляд, як гэта падлучаныя да гэтай базе дадзеных, якая гэта не ў дадзены момант, але гэта будзе быць, калі мы дабяромся да праблемы ўсталюйце сем. І я збіраюся ісці наперад і выканаць функцыю пад назвай запыт, якія мы дамо вам ў задачы ўсталяваць сем у код размеркавання, што займае па меншай меры адзін аргумент, які з'яўляецца толькі радком. Радок кода SQL. Такім чынам, вы збіраецеся, каб даведацца, як напісаць структураваны мову запытаў. Калі я хачу, каб ўставіць новы радок у маёй базы дадзеных, таму што хто-то падаў форма для майго кода, я б у літаральным сэнсе напісаць INSERT INTO карыстальнікаў наступнае палі: імя карыстальніка, коска, імя, каштоўнасці, і цяпер мне трэба ўставіць нешта накшталт Малання, і цытатай, канец цытаты "Дэвід малая. А цяпер нават для тых, хто незнаёмы з SQL, Таму я выкарыстоўваю адзінарныя двукоссі ўнутры гэтага зялёныя радкі? Што можа быць прычынай тут? Звярніце ўвагу, я са-змешванне двух моў. Запыт з'яўляецца функцыяй PHP, але прымае аргумент. І гэты аргумент павінен быць сам па сабе напісана на іншай мове, званым SQL, Structured Query Language. Так, усё, што я толькі выдзелены тут гэта мова, званы SQL. Такім чынам, што ж з адзінарныя двукоссі, як хутка праверыць стан сьвядомасьці? Ідзіце наперад. Яны радкоў. Так, цытата, канец цытаты малая і цытата, канец цытаты Дэвід малая з'яўляюцца радкамі. І толькі думаць інтуітыўна зараз, ведаючы, што вы ведаеце аб З і PHP, чаму я не зрабіць гэта, якое я звычайна б падвойныя двукоссі для радкоў? Чаму я не хачу, каб гэта зрабіць? Да? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Дакладна. Таму што я ўжо выкарыстоўваю падвойныя двукоссі на шляху за межамі аргументу функцыі PHP, Я б проста блытаюць перакладчыка. Гэта не будзе ведаць, ня гэта пайсці разам? Ёсць яны ідуць разам? Ёсць яны ідуць разам? Такім чынам, я чаргаваць замест гэтага. Ці я мог бы зрабіць нешта накшталт гэтага, Зваротная касая рыса зваротная касая рыса або цытата цытаты. Шчыра кажучы, толькі пачынае атрымаць вельмі нечытэльным, і непрыгожа. Але што б дасягнуць такі ж вынік, як добра. Так што, калі б я быў, каб выканаць гэта запыт зараз, давайце паглядзім, што адбываецца. Я збіраюся ісці наперад, а цяпер і ня выконваць код PHP, які дзе вы будзеце гуляць ў задачы ўсталяваць сем, Я збіраюся замест ісці ў PHP MyAdmin. І я збіраюся ўручную каб перайсці да ўкладцы SQL, і дазвольце мне павялічыць на інтэрфейсе. І я збіраюся ўставіць у рэч, якую я толькі што ўвялі. І колер мае кадаваньне трохі змянілася ў цяперашні час, толькі таму, што фарматы праграм рэчы крыху па-іншаму. Але звярніце ўвагу, што ўсё, што я зрабіў гэта я сказаў, устаўце ў карыстальнікаў. Я паказаў, то, праз коску падзеленых дужкі спіс два Поля, якія я хачу, каб ўставіць, і Затым я сказаў літаральна значэння рушыў услед яшчэ адзін Paren, а затым гэтыя два значэння Я хачу, каб убудова, і Зараз для добрай мерай, Я пакладу кропку з коскі ў канцы. Такім чынам, гэта не С. Гэта не PHP. Зараз гэта SQL, і я ўставіць яго у гэтым вэб-інтэрфейс, што гэта толькі збіраецца дазволіць мне, як толькі я націскаю Go, выканаць гэты запыт у базе дадзеных працуе ўнутры CS50 IDE. Так што гэта добра. Звярніце ўвагу, што сказаў адзін шэраг ўстаўлена, пайшоў вельмі хутка, 0,0054 секунд, каб ўставіць гэтыя дадзеныя. Так, што гучыць даволі здаровым. Гэта перафарматаваць мой запыт для мяне тут, каб паглядзець яго у той колеру кадуюцца версіі. Але цяпер, калі я націсну Людзі, заўважыць, што нават хоць ёсць шмат бязладзіцы на экран, мой стол цяпер мае два шэрагу. Такім чынам, дазвольце мне ісці наперад, а робяць іншае. Замест гэтага, дазвольце мне перайдзіце на ўкладку SQL зноў. І на гэты раз я буду ўстаўляць нешта накшталт Роб і яго імя будзе Роб Боуден. Боуден. Давайце націсніце кнопку Захаваць. Нам, хутчэй за Go. Націсніце кнопку Агляд зноў, і Зараз звернеце ўвагу, я два шэрагу. Такім чынам, гэта проста спосаб больш складаны спосаб адкрыцця табліц Google і проста увёўшы радок ў Стоўбцах. Але тое, што ключавым з'яўляецца тое, цяпер у нас ёсць сінтаксіс з якой пісаць код так, што У канчатковым рахунку, мы маглі на самай справе зрабіць некаторыя, і гэта. Нагадаем, што апоры PHP супер глабальныя зменныя. Што знаходзіцца ўнутры даляра увайдзіце падкрэслення GET ў PHP? Мы разгледзелі ў адным ці два простых прыкладу. І ў PSet6, успамінаю вас ёсць прывітанне кропка PHP, які выкарыстоўвае гэтую зменную. Тое, што адбываецца там? Ці што гэта? Ледзь гучней. АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Гэта снег Насеньне масіва, які гэта проста мудрагелісты спосаб сказаць Масіў, які мае пары ключ-значэнне. І ключы ня лікавы. Яны словы ці радкі. І канкрэтна, якія тыя пары ключ-значэнне? Дзе яны бяруцца? На жаль? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Няма? Дзе тыя ключ Пары значэнняў прыйшоў? Зноў сказаць? Зноў? Я толькі адзін слыхавы то? [Смех] Гэта дакладна, так? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Так, яны прыходзяць з радка запыту. Так што, калі вы ў таму час калі мы гулялі з Google і мы пайшлі ў Google.com слэш Пошук пытальнік Q роўны котак, калі б я ўдарыў Увядзіце і калі Google былі рэалізаваны ў PHP, PHP код, які напісаў Google будуць мець доступ да знак даляра падкрэсліваюць GET, усярэдзіне якога з'яўляецца ключавым называецца Q і значэнне званыя кошкі, якія ён можа затым выкарыстоўваць выкарыстоўваецца, каб зрабіць фактычны пошук з. Так, на самай справе, што я збіраюся зараз зрабіць, гэта вярнуцца да маёй PHP кода што вы будзеце зноў бачыць больш у PSet7. І замест таго, падлучыўшы у цяжкіх закадаваныя значэнняў, якія ня здацца, вельмі дынамічны сайт, Я збіраюся даць вам тізер тое, што ваш фактычны код будзе рабіць. Вы б паставіць у два пытальныя знакі, як гэта. Я не ведаю, што імя карыстальніка з'яўляецца. Я не ведаю, што з Імя будзе, але я ведаю, што магу атрымаць іх дынамічна. Такім чынам, калі код мы пішам зараз код працуе на серверах Google, або, калі гэта прывітанне кропка PHP, які пастаўляецца з PSet6, Я збіраюся перайсці ў функцыя запыту гэтак жа, як Printf, два іншыя аргументы. GET, цытата, канец цытаты імя карыстальніка, і GET, цытата, канец цытаты імя. А цяпер звярніце ўвагу, што ў Агульная структура тут. У мяне злева бок выкліку, гэтая функцыя называецца запыт у PHP. Я да гэтага часу ў якасці першага Аргумент, проста радок тэксту. Але што радок тэксту напісана на мове, званым SQL. І, шчыра кажучы, гэта не з'яўляецца вялікай мову. Мы толькі будзем казаць пра фармальна сёння, на самай справе. І тады ў задачы ўсталяваць сем, ёсць адносна некалькі асаблівасцяў, якія мы збіраецца выкарыстоўваць. Знакі пытання, хоць, на ўвазе падключыць значэнне тут і відэлец ў іншым значэнні тут. І заўважце, я апусціў, што па ўсім quote-- пракляты it-- вакол цытаты адзначае на гэты раз. Я апусціў цытату знакі вакол пытальніка, прабачце, на гэты раз вакол. Так, то, што прыемна пра гэта Функцыя пытанне знак, які PHP, як правіла, падтрымліваюць, Сячы і Python і іншыя мовы, гэта проста азначае, што ўбудова ў некаторых цэнім тут, і вы ведаеце, што? Вы высветліць, ці варта выкарыстоўваць адзінкавыя або падвойныя двукоссі. Не турбуе мяне з тымі, інтэлектуальна нецікавыя дэталі. Але, пераканайцеся, што ён правільна так што мой код, у канчатковым рахунку аператыўнай і бяспечным, што будзе мець сэнс, перш чым доўгі. Цяпер, колькі аргументаў за ўсё, проста ясна, з'яўляецца функцыя, якая прымае запыт? Хто-небудзь хоча галасаваць за больш чым два? Тры? Вядома, чаму? Чаму тры? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Дакладна. Першая частка гэта радок. Другім аргументам з'яўляецца знак даляра падкрэсліваюць GET кранштэйн карыстальніка. І трэці аргумент з'яўляецца Тое ж самае, але толькі назва. Такім чынам, іншымі словамі, у цяперашні час калі б я меў вэб-форму што прыйшлося тэкставых палёў, адным імя карыстальніка карыстальніка, адным для яго ці яе імя, проста як вы ўбачыце ў сайт пры рэгістрацыі некаторыя вэб-сайт, гэта можа быць код, пазначаны на задняй часткі, што на самай справе ўстаўкі ў цяперашні час у базу дадзеных. Цяпер, наадварот, давайце хутка наперад. Выкажам здагадку, што карыстач зараз ўвайдзіце ў сістэму і Вы хочаце напісаць PHP код, які правярае, ці з'яўляецца чалавек, які толькі што ўвайшлі ў на самай справе карыстальнік, вы можаце выкарыстоўваць даволі просты сінтаксіс. Вы можаце сказаць, SELECT, скажам зорка, зорка, дзе азначае, што ўсе. Я не ведаю, што я хачу, так што проста даць мне усе слупкі з табліцы называецца карыстальнікаў, дзе, і гэта прыемна. Выберыце тое, што падтрымлівае называецца прэдыкатаў, які з'яўляецца як спосаб адборачнага што вы хочаце. Дзе імя карыстальніка роўны цытата, канец цытаты малая. Так і тут, я убудаваныя ўнутры аргументу у функцыі PHP, радкі кода SQL. І, што код SQL гэта Час літаральна збіраецца шукаць цытаты, канец цытаты малая. Зараз гэта не ўсё, што карысна, так што я збіраюся, каб прапусціць і я збіраюся прыбраць гэты савет ад Brady, і ісці і ўбудова замест знак пытання тут. Так, толькі каб быць ясна, якія Ці павінен мой другі аргумент калі хто-то будзе толькі ўвайшлі ў і I хочаце праверыць, калі ён ці яна на самай справе карыстальнік? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Так. Я чую знак падкрэслення даляр Атрымаць спецыяльная прапанова, канец цытаты карыстальніка. І што павінен вярнуцца да мяне любы з радкоў у маёй базе дадзеных якія маюць імя карыстальніка Малання. Цяпер, спадзяюся, я збіраюся вярнуцца нуля, калі малая ніколі не быў тут, або адзін, калі ў яго ёсць. Я не павінен вярнуцца два ці тры ці чатыры. Чаму? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Я сказаў, унікальным, ці не так? Прычына простая. Таму што я сказаў, што гэта павінен быць унікальным, проста лагічна, вы можаце мець толькі нуль або адзін Malans у дадзеным табліцы базы дадзеных. Цяпер, як у бок, толькі так вы бачылі гэта, хоць я працягваць выкарыстоўваць GET і хоць PSet6 толькі GET, можна, вядома, ёсць POST. І памятайце, што паведамленне з'яўляецца яшчэ адным тэхніка для прадстаўлення інфармацыі з формы, але не з'яўляецца ў URL. Гэта крыху больш бяспечным, вядома, для такія рэчы, як імёны карыстальнікаў і паролі, якія PSet7 будзе, на самай справе, звязаныя. Такім чынам, давайце рабіць гэта ў PHP MyAdmin і паглядзець, што адбываецца. Я збіраюся пайсці на ўкладку MySQL. І заўважце, што значэнне па змаўчанні для PHP MyAdmin, проста каб паспрабаваць, каб быць карысным, гэта выбраць зорку з карыстальнікаў, дзе адзін. Ну, адзін заўсёды дакладна, так гэта мае дурному эфектыўным проста выберыце ўсё. Але я збіраюся быць трохі больш педантычным і ўручную тыпу з SELECT, зорка з карыстальнікаў. Цяпер тэхнічна, вы можаце экрануе імя табліц. Гэта рэдкае, што ў вас ёсць, але звернеце ўвагу, гэта не Вашы нармальныя каціроўкі на клавіятуры ЗША. Гэта так званы Зваротны апостраф, які як правіла, на верхняй левай руцэ куце клавіятуры. Але гэта рэдка, што вы будзеце на самай справе трэба, каб важдацца з, што, так што я проста апусціць іх у любым выпадку. Так што цяпер, дазвольце мне ісці наперад і ўдарыў ісці. І колькі радкоў я павінен атрымаць таму, калі я выбраць зорку з карыстальнікаў? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Колькасць радкоў, вядома. Але колькі ў гэтым бетон гісторыя прама цяпер? Па-другое, таму што там было мне і было Роб. Так што, калі я націсніце кнопку Перайсці, я бачу, што візуальна Я атрымаў назад, на самай справе, два рады. Там вельмі шмат бязладзіцы на экранам, але я бачу толькі два радкі. Наадварот, калі я зраблю гэта зноў і зрабіць ВЫБАР зорка з карыстальнікаў, дзе імя карыстальніка роўная цытата, канец цытаты Малая, цяпер, калі я націсніце кнопку Перайсці, Я толькі збіраюся вярнуцца на адзін радок. І, нарэшце, калі я нешта накшталт гэтага, выкажам здагадку, што я не клапачуся аб атрымліваць усе, якая з'яўляецца своеасаблівай бессэнсоўна зараз, таму што ёсць толькі дзве калонкі. Гэта не тое, што я выбары велізарная колькасць дадзеных. Выкажам здагадку, я іду наперад і Дзеянні Выбар імя АД карыстальнікі, дзе імя карыстальніка раўняецца малая, тое, што прыемна пра SQL, шчыра кажучы, з'яўляецца тое, што гэта сапраўды проста робіць тое, што вы скажаце ёй зрабіць. Гэта даволі лаканічным, але вы літаральна проста скажыце яму, што вы хочаце зрабіць. Выберыце імя з карыстальнікаў, дзе імя карыстальніка, роўна малая. І гэта сапраўды так відавочна. Так, у цяперашні час, калі я ударыў ідзі, колькі Радкі я збіраюся вярнуцца? Адзін з іх, таму што гэта проста малая, спадзяюся. Або нуль, калі ён не ёсць, але максімальна. І колькі калонак я вярнуся? Колькі слупкоў? На гэты раз, я толькі збіраюся каб атрымаць адзін, таму што я не зрабіў выберыце зорку, якая ўсё. Цяпер я проста выбраўшы імя, таму я проста вярнуцца на адзін слупок і адзін радок. І, падобна, свайго роду належным чынам смешна, проста гледзячы супер маленькім, як гэты. Такім чынам, што ж адбываецца на самай справе? Пры выкананні SQL запыт з выкарыстаннем выберыце, тое, што вы атрымліваеце таму з базы дадзеных гэта як часовую табліцу са радкамі і слупкамі, магчыма, але апусціць нічога фактычна не абраны вамі. Такім чынам, як калі хто-то быў вялікі табліца ўсіх студэнтаў зарэгістравана некаторыя студэнт групы, а вы кажаце, даць мне ўсё, хто ўжо на першым курсе зарэгістравана нашай студэнцкай групы, тое, што Ваш калега ў студэнт групы маглі б зрабіць з'яўляецца яны маглі б проста перадаць Вы ўсё табліцы. Гэта, як кажуць зоркі абярыце. І гэта крыху раздражняе, калі Вы толькі хацелі пачаткоўца. І так, калі вы замест сказаў, выберыце зорка з табліцы базы дадзеных дзе год роўны цытата, канец цытаты першакурснік, Гэта як калі б ваш сябар у студэнцкай групе літаральна вылучаныя і скапіяваныя толькі пачаткоўца шэрагі, ўставіць іх у новы Google Табліца або файл Excel, і перадаў вам назад у выніку толькі файл. Гэта ўсё, што адбываецца на канцэптуальна тут. Такім чынам, у рэшце рэшт, мы можам зрабіць некаторыя даволі мудрагелістыя рэчы пры захоўванні рэчы, як імёны карыстальнікаў і паролі і да таго падобнае. Але, аказваецца, мы павінны зрабіць крыху па-іншаму, чым гэта. Гэта не тое, што разумныя, каб толькі захоўваць імя карыстальніка і пароль. Хто-то раней, я думаю, сюды, прапанаваў ID. Цяпер ідэнтыфікатар можа быць як Гарвардскі ID або Ельскага Net ID, але гэта можа быць яшчэ прасцей у нашым выпадку базы дадзеных. І на самай справе, агульны выпадак гэта яшчэ адзін слупок. І я збіраюся пайсці наперад і рэдагаваць табліцы. І калі вы пагуляць з гэта інтэрфейс для PSet7, Вы ўбачыце, што вы можаце праверыць гэтая кнопка тут і дадаць поле ў пачатку табліцы. І зараз, калі я націсніце кнопку Перайсці, гэта будзе каб даць мне адзін з тых формаў ад раней. Я збіраюся дадаць поле з імем ID. І я збіраюся зрабіць гэта лікавы тып. У мяне ёсць цэлы букет значэнняў для лікавых значэнняў. Я проста хачу, каб выбраць INT і Не турбуйцеся аб разрозненых памераў. Я не трэба паказваць даўжыня ці значэнне, таму што гэта будзе 32 біта незалежна ад таго, што. Атрыбуты, мы не бачылі раней. Любы цікавасць у любы з іх Опцыі меню на гэты раз? Для INT? Што вы прапануеце? Няма? У любога з іх сэнс? Так. Так, без знака, праўда? Наогул, калі мы збіраемся даць усё гэта унікальны нумар, які дзе гэтая гісторыя адбываецца, я сапраўды хачу толькі чалавек, каб мець нумар, як нуля і адзін і два, і тры, і чатыры. Мне не трэба, каб справа з адмоўнымі лікамі. Гэта толькі здаецца, што неапраўданай складанасці. Я хачу чатыры мільярды магчымых значэнняў, ня чатыры мільярды магчымых значэнняў, так што я проста падвоілі магутнасць майго INT. Як у баку, калі вы хочаце, каб звязаць гэта нешта накшталт Facebook, таму ў той дзень, калі мой Facebook упершыню выйшаў, Я лічу, што яны былі выкарыстоўваюць у сваёй базе дадзеных MySQL Каб захаваць карыстальніка Ідэнтыфікатар, быў проста INT. Але, вядома, ёсць шмат рэальных людзей у свеце. Там вельмі шмат падробленых Facebook рахункі ў свеце. І так у рэшце рэшт, Facebook захліснула памер у INT, А чатыры мільярды значэнне. Менавіта таму, калі вы паглядзіце вакол і ёсць сайты што магу сказаць вам, што Ваш унікальны ідэнтыфікатар. І калі вы ніколі не абралі імя карыстальніка ў Facebook, вы ўбачыце свой унікальны ID. Я думаю, што гэта кропка PHP профіль знак пытання ID роўны то. Гэта значыць цяпер нешта накшталт вялікай INT або доўга доўга, калі вы будзеце, які з'яўляецца 64-бітнае значэнне ці нешта супастаўныя. Такім чынам, нават у рэальным свеце рабіць гэта пытанні, у канчатковым рахунку, часам мае значэння. І атрымліваецца, тут, калі я даючы ўсе з маіх карыстальнікаў унікальны ідэнтыфікатар, Я хачу быць супер відавочнае і мінімальна зрабіць гэта поле унікальным. Але, аказваецца, ёсць адзін кавалак наменклатуры сёння занадта што гэта першасны ключ. Калі вы распрацоўваеце базы дадзеных стол і вы загадзя ведаеце, што адзін з слупкоў гэтай табліцы павінны і будуць адназначна ідэнтыфікаваць радкі ў табліцы, вы хочаце, каб паказаць яго і сказаць базы дадзеных, гэта мой першасны ключ. Там можа быць дублікаты ў іншых галінах, але я кажу базы дадзеных, што гэта гэта мая асноўная, мой самы важны поле, што гарантавана будзе унікальным. Цяпер, гэта здаецца залішнім. Я ў цяперашні час прапануе, што мы дадаць, націснуўшы Захаваць тут, поле called--, і я збіраюся ісці наперад і націсніце AI, мы вернемся да што ў цяперашні час, за выключэннем. Я прапаную зараз, мой стол выглядае так. У мяне ёсць полі пад назвай INT ID, поле CHAR называецца Імя карыстальніка, поле VARCHAR называецца імя, але ID, калі гэта асноўны і, такім чынам, унікальны, чаму я проста марнаваць Час ўвядзення што эфектыўна гэта Другая унікальная поле называецца ID, што яшчэ больш INT? Імя карыстальніка, нагадаем, быў ужо унікальны, мы сказалі. Так што лагічна, што вам не трэба любы вопыт базы дадзеных прычыне праз гэта, таму я мог бы ўвялі цэлалікавых ў якасці майго унікальнага ідэнтыфікатара, а? Што this-- раз сказаць? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Выпадковыя доступ лягчэй, то чаму? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Так, гэта проста доступе нумары. Так што, калі вы думаеце, гэтага сапраўды ўяўляе сабой табліцу, як масіў, Цяпер у мяне ёсць унікальныя ідэнтыфікатары што я магу скакаць. І лепш, чым да гэтага часу, што як вялікі прыведзены INT будзе зноў? 32 біт або байт. Чатыры Наколькі вялікая маё імя карыстальніка будзе? Максімальна? 16 байт. Так што, калі вы сапраўды клапаціцца аб прадукцыйнасць вашага кода, ўспомніце PSet5, вы б аддалі перавагу шукаць па кошту чатырох байтаў або 16 Значэнне байта, праўда? Гэта сапраўды так проста, як, што. Вы павінны зрабіць у чатыры разы больш працы шукаць імёны карыстальнікаў, таму што тыя 16 байт. Такім чынам, вы павінны літаральна параўнаць ўсе 16 байт, каб быць упэўнены, што так, гэта імя карыстальніка я хачу. У той час як для INT, вы можаце зрабіць гэта толькі з чатырма байтамі. І, як у бок для тых, зацікаўлены ў кампутарнай тэхнікі, Аказваецца можна размясціць нешта накшталт цэлалікавых або 32-бітнае значэнне ў чымсьці называецца рэгістрам ў кампутары Працэсара, што азначае, што супер, супер хуткі, нават пры самых нізкіх Ўзровень апаратнай часткі кампутара. Так, там проста ўсе вакол перавагі. Такім чынам, што ж гэта значыць? На самай справе, калі вы распрацоўваеце Табліца базы дадзеных, амаль увесь час вы будзеце мець не толькі дадзеныя, якія вы клапоціцеся аб, але таксама нешта накшталт унікальны ідэнтыфікатар таму што гэта будзе давайце рабіць іншыя рэчы. І давайце спатыкнуцца адной праблемы тут. Выкажам здагадку, што карыстачы не толькі імёны і назвы, але яны таксама маюць такія рэчы, як гарадоў і дзяржавы і паштовыя індэксы, па меншай меры, тут, у ЗША. Такім чынам, я збіраюся ісці наперад і проста хутка сказаць, даць мне больш трох слупкоў У канцы табліцы. І гэта будзе горад, гэта будзе дзяржава, і гэта будзе Zip. Цяпер віды горада, тое, што дадзеныя гэта павінна быць, можа быць? VARCHAR? Я не ведаю, што з доўгая назва горада. Дзе-то ў Амерыцы, ёсць верагодна, некаторыя смяхотна доўгае слова, так што давайце проста пайсці з 255, некалькі гістарычна або адвольным чынам. Раён, тое, што вы хочаце зрабіць? Суд выклік, ці не так? Што можа быць найбольш эфектыўным? Колькі сымбаляў? Можа быць, толькі два, калі мы можам сысці з рабіць проста, як М. А. на Масачусэтс і гэтак далей. Такім чынам, я збіраюся пайсці значэнне CHAR два. Індэкс гэта цікавым. Мы тут, у 02138, так што прапануе, мы павінны выкарыстоўваць тое, што? Гэта INT, праўда? INT, INT, кароткія? Кароткае будзе працаваць. Няма? ЗНАК ці пяць, але я хачу ў INT. Чаму адсунуць на INT? Пераканаеце мяне ад гэтага. Што па-дурному аб INT, маю ідэю? Так. АЎДЫТОРЫЯ: Вазьміце больш памяці. Дэвід малая: Вазьміце больш памяці. Чатыры байта, але вы прапанаваўшы паштовы індэкс як пяць байтаў або хтосьці быў у CHAR, які адчувае сябе падобна так, гэта на самай справе не выпадак. Ну, вясёлая гісторыя. Шмат гадоў таму, калі я выкарыстаў, каб выкарыстоўваць Microsoft Outlook для маёй электроннай пошце, У рэшце рэшт я хацеў, каб перайсці да Gmail. І так, я экспартаваў ўсе мае кантакты з Outlook, як файл CSV. Падзеленых коскамі значэнняў, які толькі азначае, што я былі ўсе мае сябры імёны і апошні імёны і тэлефонныя нумары і паштовыя індэксы і ўсё, што. І тады я зрабіў памылка адкрыцця яго у Excel, які з'яўляецца табліцы праграма, разумее CSV файлаў, як мы ўжо бачылі. Але тады, я павінен патрапілі, як, Каманда або кіравання S ў адным пункце. І, мабыць, Excel ў той час была асаблівасць: пры любым часу ўбачыў нумар, ён спрабаваў быць карысным. І калі гэта лік з пачатку нулі, ён проста будзе пазбавіцца ад іх. Чаму вы павінны вядучы нулі на цэлых? Яны бессэнсоўныя, матэматычна. Яны не бессэнсоўныя у ЗША паштовай сістэмы. Такім чынам, я меў на працягу многіх гадоў, па гэты дзень, я ўсё яшчэ ёсць сябры, якія, калі рэдкі выпадак, што мне трэба хтосьці звярнуцца ў гэтыя дні, Я да гэтага часу бачу, што я ёсць сябар у Кембрыджы, Масачусэтс, 2138. І гэта раздражняе, калі вы спрабуючы разабрацца ў праграмна генераваць канверты або проста запісаць яго. І гэта таму, што па гэтай прычыне, Я абраў няправільны тып дадзеных. Так, я люблю сваю ідэю. Давайце выкарыстоўваць поле CHAR. Пяць сімвалаў, за выключэннем ёсць куток выпадак. Калі вы ўсё яшчэ паслаць пошту, часам паштовых індэксаў у гэтыя дні, яны, як і, плюс чатыры. Такім чынам, мы павінны злучок, а затым мы павінны яшчэ чатыры лічбы. Такім чынам, каб быць сумленным, гэта можа перайсці шмат розных спосабаў. У цяперашні час, я іду, каб захаваць гэта проста, і я проста хачу сказаць, што гэта пяць значэнне CHAR і мы збіраюся прапусціць ўвесь працяжнік плюс чатыры. Але гэтыя віды кампрамісаў. І вы можаце думаць аб ж праблемы, якія ўзнікаюць з нумарамі тэлефонаў або іншых галінах. І зараз, гэта на самай справе дурны дарозе ісці ўніз. Выкажам здагадку, як Роб і я, і Ханна і Марыя, і [? Davon?] І Эндзі і іншыя на супрацоўнікаў ўсе жывем у Кембрыджы, штат Масачусэтс, 02138. Гэта на самай справе адчуваю сябе па-дурному, што я дадаючы да маёй табліцы карыстальнікаў, горад, дзяржава, і ZIP. Чаму? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: раз сказаць? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Яны заўсёды збіраюся ісці разам, ці не так? Калі высвятляецца, мы прывыклі думаць, гэта не было так, пакуль мы вычарпальна абшукаў увесь ЗША, і аказваецца, што некаторыя неадпаведнасці дзе некалькі гарадоў ёсць тое ж самае на маланкі, які з'яўляецца фантастычным. Але, калі мы прадугледжваюць, што ў цяперашні час 02138 Заўсёды Кембрыдж, штат Масачусэтс, чаму ў свеце вы захоўваеце ў база дадзеных Кембрыдж, М. А. і 02138 для мяне і для Ханны і для Адзежа і для [? Davon?], А для іншых, якія жывуць тут, у Кембрыджы, гэта зусім залішнім. Мы павінны сысці толькі з захоўвання, што? Проста паштовы індэкс. Але тады, калі мы захоўваем толькі паштовы індэкс, я хачу, напэўна, для майго сайта, каб даведацца, дзе знаходзіцца 02138. Так, мне трэба яшчэ адну табліцу. І гэта нармальна. І на самай справе, гэта адзін з праектаванне працэсаў праектавання табліц што вы будзеце рабіць у PSet7 а таксама праз Вы хочаце, каб вынесці агульныя дадзеныя. Гэтак жа, як мы былі факторизации агульны код і факторынг з агульнага стылі CSS з тут таксама ў базе дадзеных, калі мне трэба толькі, каб адназначна 02138 вызначыць чыю-то родны горад, не захоўваць Кембрыдж, Масачусэтс для кожны цыраваць карыстальнік ў табліцы. Замест гэтага, ёсць асобная табліца з імем Маланкі, якія павінны мець тое, што слупкі? Магчыма ідэнтыфікатар поля, проста таму, што для прынцыпы, якія мы гаворым пра цяпер. Магчыма поле маланкі для 02138. І тады, магчыма, што іншыя калонкі? Горад і дзяржава, але толькі адзін радок для 02138, па адной радку для 02139, адна радок для 90210. І гэта літаральна усе паштовыя індэксы, якіх я ведаю. Так што цяпер, што вы можаце зрабіць? Гэта праблематычна, паколькі зараз у мяне ёсць дзве табліцы. Такім чынам, мае карыстальнікі ў асноўным тут, але іх інфармацыя горад-дзяржава гэта тут. Такім чынам, атрымліваецца з SQL, ёсць на самай справе шлях, каб далучыцца інфармацыі, і вы ўбачыце гэта ў Pset. Але, аказваецца, можна зрабіць нешта накшталт гэтага. ВЫБАР зорка з карыстальнікаў, JOIN маланкі ПА карыстальнікі кропка паштовы роўная маланкі кропка маланку. Што крыху шматслоўныя, па агульным прызнанні, але гэта толькі азначае абярыце усё, што ад працэс прыняцця мой стол карыстальнікі і мой маланкі табліцы. Далучайцеся да іх на адной поле яны маюць у калонцы. Так, літаральна нешта рабіць як гэта, і аддай мне новая часовая табліца гэта шырэй, гэта больш, што мае ўсе калоны з абодвух. І, што, папросту кажучы, будзе Сінтаксіс для гэтага нешта накшталт гэтага. Так, значыць гэта наперад, але адбываецца каб быць і іншыя дызайнерскія рашэнні вы будзеце павінны зрабіць не толькі з індэксамі але таксама працуе ў задач. На самай справе, ёсць задача у любым праектавання баз дадзеных у выніку чаго часам два чалавекі, магчыма, захочаце доступ да тых жа радкі базы дадзеных Табліца. Такім чынам, гэта тое, што мы будзем сутыкнуцца ў PSet7 таксама. Але я думаў, што я гляджу на аднаго атака, што гэта магчыма ў SQL. Якія некаторыя з Праблемы, якія могуць узнікнуць? Такім чынам, вы будзеце сутыкацца ў гэтым PSet7. І мы кажам вам прама, што кадавання рашэнне для гэтай праблемы ёсць. Але калі вы бераце больш высокі клас узроўні, асабліва ў аперацыйных сістэмах, Вы будзеце сутыкацца з пытанне атамарнага, праблема спрабуе зрабіць некалькі рэчаў адразу без перапынку. І я думаў, што я прадставіць гэта Ідэя PSet7 з метафарай што я пазнаў сябе ў Марго CS164 аперацыйныя сістэмы Зэльцэр ў класа гадоў таму. Выкажам здагадку, што ў вас ёсць адзін з гэтых інтэрнаце халадзільнікі ў вашым нумары або ў інтэрнаце дома, і ў вас ёсць рэальны схільнасць да малака. І так, вы прыходзіце дадому з заняткаў у адзін цудоўны дзень, вы адкрываеце халадзільнік. О, чорт вазьмі. Там няма малака ў халадзільніку. Такім чынам, вы зачыніць халадзільнік, замкнуць дзверы, заблакаваць інтэрнат, хадзіць па куце у CVS, патрапіць у лініі, і пачаць правяраць за малаком. І гэта зойме час, таму што гэтыя праклятыя самакіравання касе лічыльнікі доўжыцца вечна, каб выкарыстоўваць у любым выпадку. Так у той час, ваш сусед па пакоі прыходзіць дадому. Ён ці яна сапраўды любіць малако, а таксама. Яны прыходзяць у пакоі інтэрната, адкрыць халадзільнік, ох, палкі. Там няма больш малака. Такім чынам, ён ці яна таксама ідзе не за гарамі. Але цяпер, паколькі ёсць як два ці тры ці чатыры CVSes побач, яны адбываюцца, каб перайсці да адной з розныя тыя на плошчы. І вось цяпер, праз некалькі хвілін Праз вас абодвух прыйшоў дадому і цьфу, самая вялікая праблема калі-небудзь. Зараз у вас ёсць занадта шмат малака таму што гэта будзе ісці кіслы. І вы любіце малако, але вы не люблю малако. Так што цяпер, гэта было дорага памылка, таму што вы абодва было прынята рашэнне, грунтуючыся на стан нейкі зменнай, быў у працэсе змяняецца ад вас, Ініцыятарам збіраецца атрымаць малако. Такім чынам, што такое магчыма, чалавек Рашэнне гэтай праблемы? АЎДЫТОРЫЯ: [неразборліва] Дэвід малая: Пакіньце запіску, праўда? Заўсёды пакінуць запіску, калі вы знаёмыя з гэтага шоў. Так, ёсць два з нас. Такім чынам, заўсёды пакінуць запіску або літаральна заблакаваць халадзільнік з нейкай замка ці то па-над, як, што. Але што на самой справе адбываецца, каб быць Ключавая праблема праектавання баз дадзеных, асабліва, калі вы, магчыма, прыйдзецца некалькі браўзэраў, некалькі ноўтбукаў, некалькі карыстальнікаў ўсе спрабуюць абнавіць інфармацыю адразу. Асабліва важная інфармацыя як фінансавай інфармацыі, у выніку чаго з біржавы гандлю Сайт, як вы будзеце будаваць, што, калі вы хочаце, каб праверыць, колькі грошай ў вас ёсць і тое, калі ў вас ёсць дастаткова, купіць акцыі? Але што, калі хтосьці яшчэ, хто мае сумесны рахунак з вамі адначасова спрабуючы гэта каб купіць акцыі? Такім чынам, ён ці яна правярае баланс рахунку, вы абодва вярнуцца тое ж самае Адказ, няма малака. Або вы абодва атрымаеце назад адказ, ў вас ёсць $ 100 на рахунку. Абодва вы спрабуеце зрабіць рашэнне купіць адну акцыю нейкай акцыі кампаніі. А цяпер, што адбываецца? У вас ёсць два акцыі? У вас няма акцый? Такія праблемы, як, што могуць узнікнуць. Такім чынам, мы будзем сутыкацца з гэтым. Атакі ін'екцыі SQL, на шчасце, што-то мы дапаможам вам з, але гэта жудасна часта ў гэтыя дні па-ранейшаму. Такім чынам, гэта ўсяго толькі прыклад. Я не раблю ніякіх прэтэнзій, што Сістэма Гарвардскага ПІН ўразлівыя да дадзенай атацы. Мы стараліся. Але, вы ведаеце, што мы ёсць поле, як гэта. І Ельскага Net ID мае аналагічны гледзячы экран у гэтыя дні. І аказваецца, што, магчыма, Сістэма ПІН ажыццяўляецца ў PHP. І калі гэта were-- гэта не-- яны можа ёсць код, які выглядае наступным чынам. Яны маюць дзве зменныя. Дайце мне імя карыстальніка і пароль ад пасады супер глабальнай зменнай што мы гаварылі раней. Можа быць, Гарвардзе запыт як SELECT, зоркі ад карыстальнікаў дзе імя карыстальніка роўная, што і пароль роўная, што. І заўважце, што я проста падлучыўшы яго пры дапамозе фігурная дужка абазначэння ад аднаго дзень, што азначае проста падключыце значэнне тут. Я не з дапамогай Пытанне тэхніка знак. Я не ў любую секунду ці трэці аргументы. Я проста літаральна пабудовы радок сам. Праблема, аднак, у тым, што калі хто-то падабаецца scroob, які з'яўляецца спасылкай на плёнцы, ўваходзіць у нешта накшталт гэтага, і я выдаліў пункту што, як правіла, прыкрыць паролі, што, калі ён асабліва шкоднасны і яго пароль можа быць 12345, за фільм пад назвай "Касмічныя яйкі", але ён крытычна друкуе апостраф пасля пяці гадоў, Затым літаральна слова або ў прасторы, а затым цытата, канец цытаты адзін складае адзін цытата, Але звярніце ўвагу, ён апушчаны, што? Ён апусціў цытату на права і ён апушчаны цытату злева. Таму што, калі гэта зламыснік прэзумпцыя scroob ў з'яўляецца тое, што людзі, якія пісалі гэта PHP код не так ярка, можа быць, яны проста ёсць некаторыя аднаго двукоссі інтэрпаляцыі зменнай у фігурныя дужкі? І так можа быць, ён мог роду поўнага сваю думку для іх, але такім чынам, што адбываецца каб дазволіць яму узламаў сістэму PIN-кода. Іншымі словамі, выкажам здагадку, што гэта код і зараз мы падключыць, што scroob набралі. І гэта чырвоны, таму што гэта дрэнна. І асноўны тэкст гэта тое, што ён набраў у, scroob можа падмануць сервер Гарвардскага універсітэта ў пабудове SQL запыту радок, якая выглядае як гэта. Пароль роўны 12345 або адзін складае адзін. Вынік, які, па логіцы, з'яўляецца тое, што гэта будзе ўвайсці scroob , Калі яго пароль 12345 або калі адзін роўна Адзін з іх, які, вядома, заўсёды дакладна, што азначае scroob заўсёды трапляе ў. І так, як выправіць гэта, як і ў большасці выпадкаў, было б напісаць на абароне. Каб выкарыстоўваць нешта накшталт нашага Рэальная функцыя запыту, які вы ўбачыце ў PSet7, дзе мы падключыць ў нешта накшталт пытання азначае тут. І прыгажосць Функцыя запыту, што мы даць вам гэта абараняе ад іх так званыя атакі ін'екцыі SQL, дзе хто падманвае свой код у ін'екцыйных свой уласны код SQL. Таму што тое, што функцыі запыту мы даем вам будзе на самой справе, калі вы выкарыстоўваеце сінтаксіс знак пытання і другі і трэці аргумент тут, гэта тое, што зрабіў гэта дадаць да ўваход, які карыстальнік ўмове? Тыя, зваротны слеш цытуе. Так, ён выслізгвае любы патэнцыйна небяспечныя персанажы. Гэта выглядае дзіўна, але гэта не ўразлівыя таму што гэта не змяніць логіку больш таму што ўся пароль Цяпер адзін цытата, гэта не так, на самай справе, пароль scroob ст. Так, там былі некаторыя жарты пра гэта на працягу многіх гадоў. Так, гэта было сфатаграфавацца якой вылюдка на стаянцы у якім вы, магчыма, ведаеце, што некаторыя гарады і дзяржавы спрабуюць сканаваць ваш ліцэнзію пласціна рахункі Вам ці квіток вы калі вы ідзяце праз без, як, рэч Е-Z Пасі. Такім чынам, гэта асоба, якое, як мяркуецца можа быць, што людзі, якія пішуць сістэмы E-Pass Z не так ярка, і, магчыма, яны проста аб'ядноўваюцца разам радок, так што ён ці яна не можа зламысна не толькі завяршыць сваю думку, але на самой справе выканаць каманду дрэннае, якія мы яшчэ не згадвалі, але вы, напэўна, здагадаліся. Гэта ў дадатак да выдаляць і Устаўка і абнаўленне і абярыце, ёсць таксама ключавое слова называецца падзенне, які літаральна выдаляе ўсе ў базе дадзеных, якая Асабліва дрэнна. Мы можам павялічыць на гэта, калі гэта трохі цяжка ўбачыць. Гэта, у цяперашні час, з'яўляецца вядомым мультфільм гэта дзіўна разумны ў цяперашні час і зразумела. [Смех] Так, крута. Выгляд з geeking. Такім чынам, гэтыя, тады, Атакі ін'екцыі SQL. І яны так лёгка пазбегнуць з дапамогай права код ці правы бібліятэкі. І вы ўбачыце ў PSet7, што гэта Таму мы даем вам функцыю запыту. Так, пару тізер што мы думалі, што мы даць вам тут, у нашым пакінутыя хвіліны разам. Так што, як вы памятаеце з нулявы тыдні, мы ўведзеныя гэтыя дзве лямпачкі, якія прыемна, не толькі таму, яны даволі і маляўнічыя, а таму, што яны падтрымліваюць то называецца API, прыкладанне Інтэрфейс праграмавання і у CS50 гэтага часу, мы у асноўным сканцэнтраваны на GET і POST, але, аказваецца, ёсць іншыя HTTP дзеясловы PUT. І на самай справе, гэта было слайд ад нуля тыдня у выніку чаго, калі вы пішаце код, які пасылае а-ля PSet6-запыт HTTP, што Падобна на тое, гэта з гэтым кавалкам тэксту у ніжняй, якая называецца JSON, ці JavaScript Object Notation што мы будзем казаць аб наступным тыдні, Вы можаце ўключыць або выключыць або змяніць колер агнёў, як такіх. Такім чынам, калі CS50 таксама мае ў дадатак да некаторых з тых лямпачак тут у Нью-Хейвене калі вы хочаце заняць ім для канчатковых праектаў, Таксама некаторыя Microsoft Паласы, якія, як сочыць за тым, вы носіце на запясце што аналагічна ёсць API, так што вы можаце напісаць ўласнае праграмнае забеспячэнне для іх. У нас ёсць запіс з Код IOS ад Apple, так што калі ў вас ёсць Apple Назіраць або iPhone або IPad або IPod, Вы можаце напісаць код, які на самай справе працуе на іх. У нас ёсць цэлы букет з Arduinos, якія малюсенькія кампутары без выпадкаў, па сутнасці, што вы можаце падключыць праз USB, як правіла, на свой уласны Mac ці PC, код, які выконваецца на гэтыя фізічныя напісаць Прылады, якія часта маюць датчыкі на іх так што вы можаце ўзаемадзейнічаць з рэальным светам. У нас ёсць цэлы букет прылад Leap Motion, якія з'яўляюцца USB прылады для кампутараў Mac і ПК, тут і зноў, у Нью-Хейвене. І калі вы падключыце яго да Mac, Вы можаце фактычна кіраваць кампутарам у пісьмовай форме праграмнае забеспячэнне што з дапамогай інфрачырвоных прамянёў, высвятляе, дзе вашыя чалавечыя рукі, нават не дакранаючыся клавіятуры. Мы думалі, што мы падзяляем хутка зазірнуць у гэта, напрыклад. [Гуляе музыка] Так, у нас ёсць цэлы куча з гэтых рэчаў, таксама называецца Міо павязкі якія вы паклалі над перадплечча а затым вы можаце кантраляваць рэальны свет ці віртуальны свет, як гэта. [Гуляе музыка] Або, мы таксама ёсць Google Кардон, які ў літаральным сэнсе, як, кардонная скрынка можна пакласці на вашым твар, але слайд ў вашым тэлефоне ў яго так што вы паставіць шклянку вашага тэлефон сапраўды блізка да вачэй. І Google Кардон вельмі танна ў $ 10 ці $ 20. І гэта мае мала лінзы што крыху не зруху малюнак на экране для вашага чалавека вочы, каб даць вам адчуванне глыбіні так што вы на самой справе ёсць 3D серада перад вамі. У нас таксама ёсць некаторыя Samsung Gear, якая гэта больш дарагі версіі гэтага, але гэта можа так жа слізгацення ў Android-тэлефон і даць вам ілюзію of-- ці даць вопыт віртуальнай рэальнасці. І ў нашых апошніх двух хвілін, мы думалі, што мы стараемся зрабіць гэта. Калі я магу выступаць, што Колтон мае тут проста каб падцяпліць апетыт, дазвольце мне ісці наперад і кінуць на вялікім экране тут. Дазвольце мне забіць агні. Колтон, вы хочаце, каб ісці наперад і паставіць на свой мабільны на імгненне і прыходзь да Сярэдзіна этапе? І вы хочаце, каб project-- гэта тое, што бачыць Колтон. Цяпер, Wi-Fi у тут не так моцная для гэтага прылады што гэта супер пераканаўчымі, але Колтон літаральна у гэтым чароўным месцы футурыстычны. Ён бачыць толькі адзін малюнак. Вы бачыце яго левага і правага вока што яго мозг будуць сшываючы у трохмерным асяроддзя на яго твары. Ён проста выбраў опцыю меню тут. І так зноў, ён носіць гэтую гарнітуру з Samsung тэлефон на ім, што гэта бесправоднае праецыяванне да нашай галавой. Цяпер вы на Марсе, я думаю? Колтон: Я так думаю. Я не ўпэўнены, што [неразборліва]. [Смех] Дэвід малая: Аказваецца Марс мае гэтыя меню. Колтон: [неразборліва] якой-небудзь класны месца, калі мы хочам ісці, мэтай якіх Дэвід малая: Дзе мы хочам ісці? Колтон: [неразборліва] Дэвід малая: І давайце паглядзім дзе Колтон бярэ з намі зараз. Колтон: [неразборліва] Дэвід малая: Такім чынам, ёсць так шмат розныя месцы, якія вы можаце ўзяць сабе. Там гэта FAPIs, праз які вы можаце пісаць гульні або узаемадзеянняў, якія бегчы, у канчатковым рахунку па тэлефоне. Такім чынам, вы на самой справе проста пісаць мабільнага тэлефона прыкладанне. Але дзякуючы праграмнага забеспячэння і графічныя магчымасці, Цяпер Колтон ў гэты малюсенькі домік. І на рызыку пераважная сябе, Колтон, і я буду прытрымлівацца вакол у той час як у канцы класа тут сёння калі вы хочаце, каб падысці і гуляць. І мы будзем вярнуць іх на наступным тыдні, а таксама. Без далейшага, ADO гэта на сёння. Мы будзем бачыць Вас на наступным тыдні. [МУЗЫКА - Ragga Twins, "дрэнны чалавек"]