>> [Грає музика]
Девід Малан: Гаразд, це CS50.
Це кінець тижня восьмій.
І сьогодні, ми починаємо щоб заповнити деякі шматки
коли справа доходить до будівництва речі в Інтернеті.
Так, нагадаємо, що в понеділок ми витрачаємо набагато більше часу
на PHP, який є ця динаміка мова програмування, який
дозволяє нам вихід, серед інших речі, HTML і інші такі матеріали
що ми хочемо бачити.
Але ми насправді не подивився на те, як ми збираємося зберігати будь-яку інформацію.
Справді, майже нічого з цього супер цікаві сайти ви відвідуєте сьогодні
є якийсь бази даних на задньому кінці, вірно?
Facebook, безумовно, зберігає безліч даних про всіх нас і Gmail магазинах все
з ваших листів.
>> І так, багато інших сайтів не тільки статичний контент це інформаційний.
Це насправді динаміка в деякому роді.
Ви надаєте вхід, він оновлює сторінки для інших людей.
Ви отримуєте повідомлення, ви посилаєте Повідомлення, і так далі.
Таким чином, сьогодні ми подивимося ближче на основами проекту
що ви будете занурюватися в наступному тиждень, CS50 Фінанси, які
насправді відбувається, щоб ви побудувати щось не в C, але в PHP.
Сайт, який виглядає дещо як це
що дозволяє купувати і продавати запаси, які фактично
збирається залучити на реальному часі дані про запаси від Yahoo Finance.
І так, в кінцевому рахунку, ви будете мати ілюзія для себе і для користувачів,
що ви насправді купівля та продаж акції та отримувати майже в реальному часі
Оновлення, Управління Портфель, всі з яких
вимагатиме, що мають, в кінцевому рахунку, база даних користувачів.
>> Так, у ваших власних слів, особливо якщо ви не
супер знайомі з комп'ютером наука чи бази даних, те, що
Ви знаєте, бази даних, щоб бути Прямо зараз, в нетехнічних термінах?
Що це?
Як би Ви описали його в сусіда або друга?
>> АУДИТОРІЯ: [нерозбірливо] Інформація [нерозбірливо]
>> Девід Малан: Таким чином, перелік інформації, або store-- перелік інформації,
що ви, можливо, захочете, щоб зберегти про щось, як користувач.
І те, що роблять користувачі мають пов'язаних з ними?
Якщо ви користувач Facebook або на Gmail, які характеристики
що всі з нас мають користувачі?
Мовляв, те, що можуть бути деякі з стовпці в таблиці, до якої ми
посилався останній раз?
Бо знову ж таки, ви можете думаю, бази даних
дійсно, як фантазії Excel файлу або Google Таблиця або Apple, номери файлів.
>> Отже, що ви думаєте про коли ви думаєте про користувач?
Що вони мають?
Що це?
>> АУДИТОРІЯ: Ім'я.
>> Девід Малан: Ім'я.
Так що, якщо ім'я, як Девід Малан буде ім'я якого-небудь користувача.
Що ще є користувач?
>> АУДИТОРІЯ: ID.
>> Девід Малан: ID.
Так що, як ідентифікаційний номер, як ваш Гарварді ID або ваш Єльського Net ID тощо.
Що ще може користувач має?
>> АУДИТОРІЯ: Пароль.
>> Девід Малан: Пароль, може бути, адреса, може бути, номер телефону, може бути,
адресу електронної пошти.
Так, є букети полів і це може роду вийти з під контролю
швидко, як тільки ви починаєте розуміючи, про, давайте зберігати це
і давайте зберігати це і це.
>> Але як ми насправді це зробити?
Отже, ще раз, то ментальна модель щоб на сьогоднішній день, як ми
зануритися в реальному SQL, Мова Структурованих Запитів,
являє собою базу даних, яка виглядає як це.
Це просто рядків і стовпців.
І ви можете собі уявити 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.
Чому?
>> АУДИТОРІЯ: [нерозбірливо]
>> Девід Малан: раз сказати?
АУДИТОРІЯ: [нерозбірливо]
>> Девід Малан: Вони завжди збираюся йти разом, чи не так?
Коли з'ясовується, ми звикли думати, це не було так, поки ми вичерпно
обшукав весь США, і виявляється, що
деякі невідповідності де кілька міст є
те ж саме на блискавці, який є фантастичним.
Але, якщо ми передбачають, що в даний час 02 138 Завжди Кембридж, штат Массачусетс,
чому в світі ви зберігаєте в база даних Кембридж, М. А. і 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, через який ви можете писати гри або взаємодій, які
бігти, в кінцевому рахунку по телефону.
Таким чином, ви насправді просто писати мобільного телефону додаток.
Але завдяки програмного забезпечення і графічні можливості,
Тепер Колтон в цей крихітний будиночок.
І на ризик переважна себе,
Колтон, і я буду дотримуватися навколо в той час як наприкінці класу тут сьогодні
якщо ви хочете, щоб підійти і грати.
І ми будемо повернути їх на наступному тижні, а також.
Без зайвого галасу це на сьогодні.
Ми будемо бачити Вас на наступному тижні.
>> [МУЗИКА - Ragga Twins, "погана людина"]