[Bermain muzik] DAVID MALAN: Baiklah, ini adalah CS50. Ini adalah akhir minggu lapan. Dan hari ini, kita bermula mengisi beberapa keping ketika datang ke bangunan perkara di web. Jadi, ingat bahawa pada hari Isnin kita menghabiskan masa yang banyak lagi pada PHP, yang dinamik ini bahasa pengaturcaraan yang membolehkan kita output, antara lain perkara, HTML dan kandungan sedemikian lain bahawa kita akan mahu melihat. Tetapi kita tidak benar-benar melihat bagaimana kita akan menyimpan apa-apa maklumat. Malah, hampir mana-mana yang super laman web yang menarik yang anda lawati hari ini mempunyai beberapa jenis pangkalan data pada akhir belakang, kan? Facebook pasti menyimpan banyak data tentang kita semua dan kedai Gmail semua e-mel anda. Dan sebagainya, banyak laman web yang lain bukan sahaja kandungan statik itulah maklumat. Ia sebenarnya dinamik dalam beberapa cara. Anda memberikan input, ia akan dikemaskini halaman untuk orang lain. Anda akan mendapat mesej, anda menghantar mesej, dan sebagainya. Jadi hari ini, kita melihat dengan lebih dekat yang asas projek bahawa anda akan menyelam ke seterusnya minggu, CS50 Kewangan, yang sebenarnya akan mempunyai anda membina sesuatu yang tidak dalam C, tetapi dalam PHP. Sebuah laman web yang kelihatan sedikit sesuatu seperti ini yang membolehkan untuk membeli dan menjual saham yang sebenarnya akan menarik suatu masa sebenar data saham daripada Yahoo Kewangan. Dan supaya akhirnya, anda akan mempunyai ilusi untuk diri sendiri dan untuk pengguna bahawa anda sebenarnya membeli dan menjual saham dan mendapat masa hampir sebenar kemas kini, menguruskan portfolio, semua yang akan memerlukan mempunyai, akhirnya, pangkalan data pengguna. Jadi, dalam perkataan anda sendiri, terutamanya jika anda tidak super biasa dengan komputer sains atau pangkalan data, apa anda tahu pangkalan data untuk menjadi sekarang, dari segi bukan teknikal? Apakah ia? Bagaimana anda menggambarkan ia kepada rakan sebilik atau rakan? PENONTON: [didengar] maklumat [didengar] DAVID MALAN: Jadi, senarai maklumat, atau store-- senarai maklumat yang anda mungkin mahu untuk menyimpan tentang sesuatu, seperti pengguna. Dan apa yang pengguna mempunyai yang berkaitan dengan mereka? Jika anda seorang pengguna di Facebook atau Gmail, apakah ciri-ciri bahawa kita semua pengguna mempunyai? Seperti, apa yang mungkin menjadi sebahagian daripada ruangan dalam spreadsheet yang kita menyebut masa lalu? Kerana sekali lagi, anda boleh berfikir pangkalan data yang benar-benar sebagai mewah fail Excel atau Google Hamparan atau Apple Nombor fail. Jadi, apa yang anda fikirkan apabila anda berfikir pengguna? Apa yang mereka ada? Apa itu? PENONTON: Nama A. DAVID MALAN: Nama A. Jadi, jika nama, seperti, David Malan akan menjadi nama beberapa pengguna. Apa lagi perkara yang pengguna ada? PENONTON: Satu ID. DAVID MALAN: Satu ID. Jadi, seperti nombor ID, seperti Harvard anda ID atau Yale ID bersih anda atau sebagainya. Apa lagi yang mungkin pengguna ada? PENONTON: Kata Laluan. DAVID MALAN: Kata laluan, mungkin yang alamat, mungkin nombor telefon, mungkin alamat e-mel. Jadi, ada tandan bidang dan ini semacam boleh lingkaran luar kawalan cepat sebaik sahaja anda mula menyedari, oh, mari kita menyimpan ini dan mari kita menyimpan dan ini. Tetapi bagaimana kita benar-benar berbuat demikian? Jadi sekali lagi, model mental untuk mempunyai untuk hari ini seperti yang kita menyelam ke dalam SQL sebenar, Bahasa Pertanyaan Berstruktur, adalah pangkalan data yang kelihatan seperti ini. Ia hanya baris dan lajur. Dan anda boleh bayangkan Google Spreadsheet atau apa-apa bilangan program lain. Tetapi apa yang penting tentang MySQL, yang merupakan perisian pangkalan data kita akan digunakan, secara bebas secara terbuka available-- kegunaan Facebook dan apa-apa bilangan websites-- lain pangkalan data menyimpan perkara relationally. Dan pangkalan data hubungan hanya bermakna satu yang benar-benar menyimpan data dalam baris dan lajur. Ia semudah itu. Jadi, walaupun sesuatu seperti Oracle yang anda telah umumnya mendengar adalah pangkalan data hubungan. Dan di bawah hood, ia menyimpan data dalam baris dan lajur. Dan Oracle mengenakan anda wang yang banyak untuk berbuat demikian, manakala caj MySQL anda apa-apa untuk yang sama. Jadi, SQL akan memberikan kita sekurang-kurangnya empat operasi. Keupayaan untuk memilih data, seperti membaca data, memasukkan, mengeluarkan, dan data maklumat. Dalam erti kata lain, mereka adalah benar-benar empat operasi utama yang akan membolehkan kita untuk menukar barangan dalam orang-orang baris dan lajur. Alat yang kita akan gunakan hari ini terutamanya belajar SQL dan bermain dengannya sekali lagi dipanggil PHP MyAdmin. Ia adalah alat berasaskan web. Jumlah kebetulan bahawa ia ditulis dalam PHP. Tetapi ia akan memberikan kita grafik yang antara muka pengguna supaya kita boleh sebenarnya membuat ini baris dan lajur dan kemudian bercakap dengan mereka melalui kod. Jadi, mari kita kini mula apa yang saya fikir adalah terus-terang jenis proses yang menyeronokkan dalam membina hujung belakang laman web, bahagian-bahagian yang pengguna tidak lihat, tetapi pasti mengambil berat tentang, kerana itulah agak data yang berterusan. Jadi, sama seperti C dan sedikit kurang seperti PHP, SQL, atau pangkalan data yang menyokong SQL, mempunyai jenis sekurang-kurangnya data ini dan tandan orang lain. CHAR, VARCHAR, INT, BIGINT, PERPULUHAN dan DATETIME. Dan ada keseluruhannya sekumpulan ciri-ciri lain, tetapi mari kita melakukan ini dengan Sebagai contoh yang sebenar. Saya akan pergi ke CS50 IDE di mana, terlebih dahulu, saya telah log masuk dan saya juga telah lawati URL untuk alat ini dikenali sebagai PHP MyAdmin. Dan dalam masalah menetapkan tujuh, kami akan memberitahu anda bagaimana untuk sampai ke antara muka ini juga. Pada bahagian atas sebelah kiri, menyedarinya kata syarahan. Dan itu hanya bererti bahawa terlebih dahulu, saya mencipta pangkalan data yang dikenali sebagai kuliah kosong yang tidak mempunyai hamparan dalam lagi. Tidak ada baris dan lajur. Kerana yang pertama perkara yang kita akan lakukan yang mula mencipta jadual yang akan menyimpan pengguna kami. Jadi, secara literal lebih di sini ke kanan, Saya akan memberitahu pangkalan data Saya mahu jadual yang dipanggil Pengguna. Jadi, ini adalah seperti fail yang saya mahu menyimpan semua data saya dalam. Dan berapa banyak tiang? Nah, mari kita memastikan ia mudah untuk sekarang. Saya hanya mahu menyimpan seperti nama pengguna dan nama untuk pengguna. Kami akan mula kecil. Jadi, saya mahu dua tiang jumlah. Dan saya akan pergi ke hadapan dan klik Pergi. Dan kemudian, untuk ini tiang, apa yang saya akan do-- jika ini cooperates-- semua hak, jadi kita akan cuba sekali lagi. Saya akan buat jadual yang dipanggil Pengguna yang mempunyai dua tiang, klik Pergi, OK. Sekarang kita telah mendapat ia benar-benar cepat. Terima kasih, sangat baik dilakukan. Baiklah, jadi apa yang kita mahu ruangan ini untuk dipanggil? Jadi, sesiapa yang akan dipanggil Nama pengguna. Jadi, apa yang saya lihat sini-- dan antara muka terus-terang mendapat sedikit hodoh akhirnya, sebaik sahaja anda mula menaip semua data ini. Tetapi apa yang baik adalah yang jenis paradoks, saya mewujudkan ruangan, tetapi alat itu mempunyai bodoh meletakkan mereka di dalam baris supaya saya boleh menyelaraskan ruangan ini. Jadi, ada dua tempat kosong di bawahnya Nama. Dan salah satu daripada bidang ini Saya mahu dipanggil Nama pengguna, dan bidang lain yang saya mahu untuk memanggil Nama. Dan sekarang saya perlu memilih jenis data untuk perkara-perkara ini. Jadi, manakala dalam Excel dan Google Spreadsheet, jika anda mahu lajur, anda benar-benar hanya menaip Nama atau Nama pengguna, tekan Enter. Mungkin anda membuat muka berani hanya untuk kejelasan, tetapi itu sahaja. Anda tidak menentukan jenis tiang. Sekarang dalam Google Spreadsheet atau Excel, anda mungkin menentukan bagaimana data yang diberikan. Anda boleh pergi ke menu Format, dan anda boleh menentukan menunjukkan tanda dolar seperti ini, menunjukkan ini seperti nilai mata terapung. Jadi, ia adalah sama dalam semangat untuk bahawa apa yang kita kira-kira untuk melakukan, tetapi ini sebenarnya akan memaksa data untuk menjadi jenis tertentu. Sekarang, walaupun masa yang lalu saya berkata hanya terdapat beberapa jenis data, ada sebenarnya banyak keseluruhan, dan mereka di pelbagai peringkat kekhususan. Dan sebagai diketepikan, anda juga boleh melakukan perkara-perkara mewah seperti geometri penyimpanan di dalam sistem database. Anda boleh menyimpan perkara-perkara seperti koordinat GPS dan benar-benar mencari, matematik, mata yang dekat dengan orang lain. Tetapi kita akan menyimpan ini super mudah dan pergi ke sini, semua jenis-jenis tali yang dipanggil. Jadi, di sini adalah senarai yang sejumlah besar pilihan. CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. Dan ia adalah jenis yang amat sangat. Dan malangnya, agak paradoks kepada C, CHAR yang tidak benar-benar CHAR a. Jika anda nyatakan di dalam sistem database bahawa jenis data anda CHAR, ini bermakna bahawa ya, ia adalah satu CHAR, tetapi ia satu atau lebih aksara. Dan anda perlu nyatakan berapa banyak aksara yang anda mahu. Jadi, apa yang biasa panjang untuk nama pengguna? Adakah terdapat had yang biasanya? PENONTON: [didengar] DAVID MALAN: 16 mungkin? Sesuatu seperti itu. Anda tahu, kembali dalam hari, ia digunakan untuk menjadi lapan. Kadang-kadang ia 16, kadang-kadang ia lebih daripada itu. Dan sebagainya, ini tidak bermakna memberi saya satu CHAR. Ini bermakna saya perlu nyatakan panjang lapangan, dan sekarang saya boleh berkata sesuatu seperti 16. Dan ada satu kekurangan di sini. Jadi, kita akan melihat dalam seketika bahawa ini bermakna satu, setiap nama pengguna mestilah 16 aksara. Tetapi tunggu satu minit, M-A-L-A-N. Jika itu nama pengguna saya dan saya hanya menggunakan lima, apa yang akan anda mencadangkan supaya pangkalan data perbuat yang lain 11 aksara yang Saya telah terpelihara ruang untuk? Apa yang akan anda lakukan? PENONTON: [didengar] DAVID MALAN: Ya, hanya membuat mereka semua null. Buat mereka ruang. Tetapi mungkin batal, jadi banyak sifar garis sendeng terbalik. Jadi, dalam satu tangan, kami telah sekarang memastikan bahawa nama pengguna saya boleh menjadi tidak lebih daripada 16 aksara. Dan sebelah flip iaitu bahawa jika saya mempunyai nama yang benar-benar panjang atau mahu benar-benar panjang nama pengguna seperti sebahagian dari kamu seorang lelaki mungkin mempunyai di kolej itu atau di Yale.edu, anda tidak boleh mempunyai satu. Dan sebagainya sebenarnya, jika anda telah pernah berdaftar untuk laman web dan anda dapat menjerit mengatakan kata laluan anda terlalu panjang atau nama pengguna anda terlalu panjang, ia semata-mata kerana seorang programmer, apabila mengkonfigurasi pangkalan data masing-masing, memutuskan bahawa bidang ini akan tidak lebih dari panjang ini. Baiklah, jadi bagaimana jika kita teruskan untuk menamakan? Berapa lama perlu yang nama manusia yang biasa menjadi? Berapa banyak aksara, 16? Saya meneka kita boleh mencari seseorang di dalam bilik ini di mana dengan ditambah pertama beliau lalu nama adalah lebih panjang daripada 16 aksara. Jadi, apa yang lebih baik daripada itu, 17? 18? 25? Lebih besar? 30? PENONTON: [didengar] DAVID MALAN: 5000, oh Tuhan saya. Jadi, itu mungkin yang baik atas terikat, boleh kita katakan. Dan di sini kita jenis mempunyai untuk membuat panggilan penghakiman. Seperti, ada jawapan ada di sini. Infinite tidak cukup mungkin, kerana kami akhirnya akan ada-- kami akan kehabisan memori. Jadi, kita perlu membuat panggilan penghakiman pada satu ketika. Sangat umum akan, sebagai contoh, untuk use-- dan biarlah saya nyatakan di sini CHAR kerana sebelum itu 255 adalah benar-benar yang had atas perisian pangkalan data ini tahun yang lalu. Dan sebagainya, banyak manusia hanya akan berkata, halus. 255 tidak terbatas. Mari kita hanya menggunakan maksimum. Dan ini adalah agak tidak masuk akal. Seperti, jika anda menaip seseorang yang menamakan 200 aksara plus, yang sedikit tidak masuk akal. Tetapi, ingat bahawa ASCII tidak sistem hanya untuk watak. Dan sebagainya, terutama dalam banyak bahasa Asia di mana ada watak-watak yang kita tidak boleh daftar pada papan kekunci seperti saya di AS papan kekunci, beberapa watak sebenarnya mengambil masa sehingga 16 bit bukan lapan bit. Dan sebagainya, ini sebenarnya tidak semua yang tidak munasabah bahawa kita memerlukan lebih banyak ruang jika kita mahu untuk muat watak-watak yang lebih besar daripada yang US orang-orang yang mengutamakan kami telah cenderung untuk berbincang. Jadi, kita perlu beberapa had atas. Saya tidak tahu apa yang salah satu yang terbaik adalah, tetapi 255 adalah biasanya satu yang sama. 25 berasa rendah. 16, 32 berasa rendah. Saya akan sesat di sebelah sesuatu yang lebih tinggi. Tetapi ada perdagangan di luar, seperti biasa. Apa yang, mungkin, jelas perdagangan kira tempahan 255 aksara untuk nama semua orang di dalam pangkalan data saya? PENONTON: [didengar] DAVID MALAN: Apa itu? PENONTON: [didengar] DAVID MALAN: Ia adalah satu banyak memori, bukan? M-A-L-A-N. Saya baru sahaja sia-sia 250 watak-watak hanya untuk menyimpan nama saya pertahanan, hanya dalam kes seseorang dalam kelas yang mempunyai nama yang benar-benar panjang. Yang seolah-olah seperti tradeoff yang tidak wajar. Jadi, ternyata bahawa SQL, bahasa pangkalan data ini, sebenarnya menyokong sesuatu dipanggil VARCHAR, atau ubah CHAR. Dan ini adalah jenis yang bagus di bahawa ini membolehkan anda untuk menentukan tidak tetap lebar, tetapi sebaliknya, lebar berubah-ubah. Dan lebih khusus, yang lebar maksimum lapangan. Jadi, ini bermakna bahawa nama yang boleh tidak lebih daripada 250 aksara, tetapi ia sudah tentu boleh menjadi kurang. Dan pangkalan data akan menjadi pintar. Jika anda dimasukkan ke dalam M-A-L-A-N, ia hanya akan menggunakan lima, mungkin enam bait untuk seperti watak null belakang, dan tidak membelanjakan tambahan 249 atau 250 bytes tidak perlu. Jadi, ini seolah-olah seperti saya perlu telah bermula dengan cerita ini. Tetapi selalu ada tradeoff. Jadi, dalam satu tangan, nama pengguna saya telah dinyatakan akan dikodkan pada 16, dan mungkin yang tidak panggilan yang betul, mungkin ia , tetapi mengapa tidak menggunakan VARCHARs untuk segala-galanya? Ia wujud untuk sebab. Mengapa tidak menggunakan VARCHARs untuk setiap bidang yang panjang anda tidak tahu terlebih dahulu jika ia seolah-olah menjadi satu perkara yang besar, bukan? Menggunakan ruang hanya sebanyak anda perlu sehingga had ini? PENONTON: perlahan. DAVID MALAN: Speller? PENONTON: Menjadikannya lebih perlahan? DAVID MALAN: Oh, ia lebih perlahan. Baik, yang hampir selalu jawapannya, terus-terang. Seperti, apa yang tradeoff? Ia sama ada kos lebih ruang atau ia kos lebih banyak masa. Jadi, dalam kes ini, ia mungkin menjadi lebih perlahan. Mengapa? PENONTON: [didengar] menentukan [didengar]. DAVID MALAN: Baik. Jadi, anda mungkin ingat dari walaupun PSED5, bermain dengan pendekatan anda kamus, jika anda perlu memperuntukkan memori dinamik atau menyimpan berkembang penampan, yang sebenarnya boleh menjadi perlahan. Jika anda perlu untuk memanggil malloc di bawah hood dan mungkin itulah yang MySQL lakukan, supaya pasti yang boleh menjadi kes itu. Dan jika anda berfikir cara kembali ke PSet-- atau minggu dua, apabila kita melakukan perkara-perkara seperti carian binari atau carian linear, salah satu perkara yang menarik mengenai setiap perkataan dalam pangkalan data atau setiap perkataan dalam lajur yang betul-betul sama panjang, walaupun jika sejumlah besar mereka watak-watak kosong, adalah bahawa anda boleh menggunakan capaian rawak kepada data anda, bukan? Jika anda tahu bahawa setiap perkataan adalah 16 aksara jauh, anda boleh menggunakan penunjuk aritmetik, jadi untuk berkata-kata, dan pergi kepada kita 16, 32, 48, 64, dan anda hanya boleh melompat serta-merta menggunakan aritmetik kepada mana-mana perkataan di dalam pangkalan data anda. Manakala jika ia VARCHAR yang, apa yang anda dan bukannya perlu lakukan? [Telefon deringan] Jika ia merupakan satu VARCHAR, anda tidak boleh menggunakan akses rawak. Apa yang anda perlu mencari atau lakukan? Ya? PENONTON: [didengar] DAVID MALAN: Mencari melalui jejak whole-- melalui senarai keseluruhan mencari apa, kemungkinan besar? Apakah jenis nilai istimewa? PENONTON: [didengar] DAVID MALAN: Mencari untuk terminators null yang menandakan pemisahan perkataan. Jadi sekali lagi, tradeoff, dan tidak ada jawapan yang betul. Tetapi ini adalah di mana, terutama apabila pengguna anda dapat menjadi banyak dan beban anda pada pelayan anda, Bilangan orang yang menggunakannya mendapat tinggi, ini sebenarnya keputusan nontrivial. Jadi, kita boleh meninggalkan ini kerana ini, tetapi mari kita tatal ke bawah ke kanan di sini. Sekarang, ada beberapa ruangan di mana kita perlu membuat panggilan penghakiman. Adakah masuk akal untuk membolehkan pengguna nama, nama pengguna pengguna atau pengguna nama, menjadi batal? Iaitu, hanya kosong. Berasa sedikit tidak masuk akal, jadi saya tidak akan menyemak kotak-kotak. Tetapi ternyata dalam pangkalan data, anda boleh berkata, seseorang boleh memilih untuk mempunyai nilai ini. Ruangan ini tidak mempunyai untuk benar-benar berada di sana. Sekarang, ada penurunan ini menu. Dan perhatikan saya masih di barisan pertama di sana, jadi saya bercakap tentang nama pengguna sekarang. Dan ternyata bahawa pangkalan data, tidak seperti hamparan semata-mata mudah, mempunyai ciri-ciri berkuasa dipanggil indeks. Dan indeks adalah satu cara untuk memberitahu pangkalan data terlebih dahulu bahawa saya manusia adalah lebih bijak daripada anda. Saya tahu apa jenis pertanyaan, pilih atau memasukkan atau memadam atau kemas kini, bahawa kod saya akan berakhir sehingga lakukan pada pangkalan data ini. Saya hendak membaca banyak data. Saya mahu memasukkan banyak data. Saya mahu sentiasa memadam banyak data. Jika saya tahu bahawa saya akan menjadi mengakses bidang seperti Nama pengguna banyak, Saya preemptively boleh memberitahu pangkalan data, saya tahu lebih daripada anda, dan saya mahu penetapan yang anda perlu indeks bidang ini. Di mana mengindeks bidang atau lajur bermakna bahawa pangkalan data terlebih dahulu perlu meminjam beberapa idea daripada, seperti, minggu empat dan lima dan enam dari CS50 dan benar-benar membina sesuatu seperti carian binari pokok atau sesuatu umumnya dipanggil pokok B bahawa anda akan belajar dalam CS124 seperti kelas di Harvard, kelas algoritma, atau apa-apa bilangan tempat-tempat lain. Pangkalan data dan pintar orang-orang yang melaksanakannya akan memikirkan bagaimana untuk menyimpan bahawa jadual maklumat dalam ingatan supaya carian dan operasi lain adalah super cepat. Anda tidak perlu melakukannya. Anda tidak perlu untuk melaksanakan carian linear atau carian binari atau bergabung jenis atau pilihan jenis, apa-apa itu. Pangkalan data ini tidak untuk anda jika anda memberitahu ia preemptively kepada indeks bidang ini. Dan anda boleh lihat juga, ada beberapa ciri-ciri lain kita boleh memberitahu pangkalan data untuk dikuatkuasakan. Apa yang ia mungkin bermakna jika saya memilih Unik dari menu ini, hanya gerak hati? Ya? PENONTON: [didengar] DAVID MALAN: Ya, yang nama pengguna mestilah unik. Adakah ini satu perkara yang baik atau buruk untuk pangkalan data, untuk laman web dengan pengguna? Sekiranya nama pengguna unik? Ya, mungkin. Jika itulah yang bidang yang kita gunakan untuk log masuk, anda tidak benar-benar mahu orang yang mempunyai rasa yang sama atau nama pengguna yang sama. Jadi, kita boleh mempunyai pangkalan data menguatkuasakan bahawa begitu yang kini kod PHP saya atau mana-mana bahasa, Saya tidak mempunyai, contohnya, daftar semestinya tidak nama pengguna ini wujud sebelum saya membiarkan orang mendaftar? Pangkalan data ini tidak akan membiarkan dua orang yang bernama Daud atau Malans mendaftar dalam kes ini. Dan sebagai diketepikan, walaupun ini Menu hanya membolehkan anda memilih satu, indeks unik adalah satu yang diindeks untuk prestasi super cepat, tetapi ia juga menguatkuasakan keunikan. Dan kami akan kembali kepada apa yang Dua lagi bermakna dalam hanya seketika. Sementara itu, jika saya pergi ke baris kedua saya, yang adalah nama pengguna, perlu saya nyatakan bahawa nama itu harus unik? Tidak, kerana anda boleh pasti ada-- tidak ada dua David Malans dalam bilik ini, yang paling mungkin. Tetapi jika kita memilih nama yang berbeza, kita pasti mungkin mempunyai pertembungan. Fikirkan kembali untuk hash meja dan sebagainya. Jadi, kita pasti tidak mahu untuk membuat medan nama yang unik. Jadi, kami hanya akan meninggalkan bahawa sebagai sengkang, dash, dash, apa-apa. Dan saya akan meninggalkan segala sesuatu yang lain semata-mata. Malah, sebahagian besar daripada bidang ini kita tidak akan mempunyai untuk mengambil berat tentang. Dan apabila saya bersedia untuk menyelamatkan ini, jika internet bekerjasama, Saya klik Simpan, dan sangat, sangat, sangat perlahan-lahan tidak pangkalan data disimpan. Dan kini saya kembali kepada ini antara muka, yang diakui, adalah amat menggalakkan pada pandangan pertama. Tetapi semua saya akan lakukan adalah klik kepada Pengguna perkataan di sebelah kiri atas. Saya akan pergi ke sini, klik Pengguna, dan secara lalai, ia telah melaksanakan beberapa SQL, tetapi lebih kepada yang dalam seketika. Di sini hanya ringkasan apa yang saya lakukan. Dan tidak perlu bimbang yang anda lihat menyebut Latin dan Sweden di sini. Mereka hanya lalai tetapan, kerana MySQL asalnya, atau PHP MyAdmin, salah satu daripada dua yang berlaku ditulis oleh beberapa orang Sweden. Tetapi ia tidak relevan dalam kes kami di sini. Baiklah, jadi mengapa ini semua menarik? Ternyata, saya boleh memasukkan data ke dalam pangkalan data dengan menulis kod. Dan saya pergi ke hadapan dan dalam fail saya di sini, saya akan pergi ke hadapan dan berpura-pura seperti ini berwayar kepada bahawa pangkalan data, yang ia tidak pada masa ini, tetapi ia akan menjadi apabila kita sampai ke masalah menetapkan tujuh. Dan saya akan pergi ke hadapan dan melaksanakan fungsi yang dipanggil pertanyaan, yang kami akan memberi anda dalam masalah menetapkan kod pengedaran tujuh, bahawa mengambil masa sekurang-kurangnya satu hujah, yang hanya rentetan. Rentetan daripada kod SQL. Jadi, anda akan belajar bagaimana untuk menulis Bahasa Pertanyaan Berstruktur. Jika saya mahu memasukkan baris baru ke dalam saya pangkalan data kerana seseorang telah mengemukakan borang untuk kod saya, saya akan betul-betul menulis INSERT INTO pengguna berikut medan: nama pengguna, koma, nama, nilai-nilai, dan sekarang saya perlu memasukkan sesuatu seperti Malan, dan petikan, unquote 'David Malan. Dan sekarang walaupun bagi mereka yang tidak biasa dengan SQL, mengapa saya menggunakan petikan tunggal dalam tali hijau? Apa yang mungkin menjadi sebab di sini? Perhatikan Saya percampuran dua bahasa. Pertanyaan adalah fungsi PHP, tetapi ia mengambil hujah. Dan hujah yang mempunyai kepada dirinya menjadi ditulis dalam bahasa lain yang dipanggil SQL, Structured Query Language. Jadi, semua yang saya baru sahaja ditonjolkan di sini adalah bahasa ini dipanggil SQL. Jadi, apa yang dengan petikan tunggal, hanya sebagai cek kewarasan cepat? Teruskan. Mereka tali. Jadi, quote, unquote Malan dan quote, unquote David Malan adalah rentetan. Dan hanya berfikir secara intuitif sekarang, mengetahui apa yang anda tahu tentang C dan PHP, mengapa saya tidak melakukan ini, yang saya biasanya petikan berganda digunakan untuk tali? Kenapa saya tidak mahu berbuat demikian? Ya? PENONTON: [didengar] DAVID MALAN: Tepat sekali. Oleh kerana saya telah menggunakan tanda petikan berganda dalam perjalanan luar hujah fungsi PHP, Saya hanya akan mengelirukan jurubahasa. Ia tidak akan tahu, ini pergi bersama-sama? Adakah ini pergi bersama-sama? Adakah ini pergi bersama-sama? Jadi, saya ganti sebaliknya. Atau saya boleh melakukan sesuatu seperti ini, quote garis sendeng terbalik atau garis sendeng terbalik quote. Terus terang, yang hanya mula menjadi sangat tidak boleh dibaca dan hodoh. Tetapi yang akan mencapai keputusan yang sama juga. Jadi, jika saya melaksanakan ini Pertanyaan sekarang, mari kita lihat apa yang berlaku. Saya akan pergi ke hadapan sekarang dan agak daripada melaksanakan kod PHP, yang adalah di mana anda akan bermain dalam masalah menetapkan tujuh, Saya akan sebaliknya pergi ke PHP MyAdmin. Dan saya secara manual akan pergi ke tab SQL, dan biarlah saya mengezum masuk pada antara muka. Dan saya akan paste perkara yang saya taip. Dan kod warna yang mempunyai berubah sedikit sekarang, hanya kerana format program perkara yang sedikit berbeza. Tetapi notis bahawa semua yang saya lakukan adalah yang saya katakan, masukkan ke dalam Pengguna. Saya telah dinyatakan, maka, dalam koma senarai dipisahkan diselit dua bidang yang saya mahu memasukkan dan itu saya benar-benar berkata nilai-nilai diikuti oleh paren lain, dan kemudian kedua-dua nilai Saya hendak plug-in, dan sekarang untuk menjadikannya lebih menarik, Saya akan meletakkan koma bernoktah di hujung. Jadi, ini bukan C. Ini bukan PHP. Ini kini SQL, dan saya tampal ke dalam ini antara muka berasaskan web itu hanya akan membiarkan saya, sebaik sahaja saya klik Pergi, melaksanakan pertanyaan ini pada pangkalan data berjalan di dalam CS50 IDE. Jadi ini adalah baik. Notis yang menyatakan satu baris dimasukkan, pergi super cepat, 0.0054 saat untuk memasukkan data tersebut. Jadi, yang berbunyi cukup sihat. Ia diformatkan semula pertanyaan saya untuk saya di sini hanya untuk melihat ia dalam jenis versi warna berkod. Tetapi sekarang saya klik Bebas, notis bahawa, walaupun walaupun ada banyak kekacauan di skrin, meja saya kini mempunyai dua baris. Jadi, biarlah saya teruskan niat lain. Daripada ini, biarlah saya pergi ke tab SQL lagi. Dan kali ini saya akan memasukkan sesuatu seperti Rob dan namanya akan Rob Bowden. Bowden. Mari kita klik Simpan. Oops, bukan Go. Klik Semak imbas sekali lagi, dan kini melihat saya mempunyai dua baris. Jadi, ini adalah hanya satu cara yang lebih kompleks cara membuka Google Spreadsheet dan hanya menaip berturut-turut ke dalam satu ruangan. Tetapi apa yang penting adalah bahawa kita kini mempunyai sintaks yang boleh digunakan untuk menulis kod supaya akhirnya, kita boleh sebenarnya melakukan dan ini. Ingat bahawa sokongan PHP pembolehubah super global. Maksud yang terkandung dalam dolar log garis bawah DAPATKAN dalam PHP? Kami mengambil lihat pada satu atau dua contoh mudah. Dan dalam PSet6, ingat anda mempunyai hello dot PHP yang menggunakan pembolehubah ini. Apa yang berlaku di sana? Atau apakah ia? A lebih kuat sedikit. PENONTON: [didengar] DAVID MALAN: Ia salji benih array, yang hanya cara mewah untuk mengatakan yang tatasusunan yang mempunyai pasangan nilai utama. Dan kekunci tidak angka. Mereka perkataan atau tali. Dan khususnya, apa yang adalah mereka pasangan nilai utama? Di manakah mereka datang? Maaf? PENONTON: [didengar] DAVID MALAN: Tidak? Di manakah orang-orang utama pasangan nilai datang? Katakanlah lagi? Sekali lagi? Adakah saya satu-satunya sesuatu pendengaran? [Ketawa] Betul, ya? PENONTON: [didengar] DAVID MALAN: Ya, mereka datang dari rentetan pertanyaan. Jadi, jika anda putar balik dalam masa untuk apabila kita telah bermain dengan Google dan kami telah pergi ke Google.com slash carian tanda tanya q sama kucing, jika saya tekan Enter dan jika Google telah dilaksanakan pada PHP, Kod PHP yang Google menulis akan mempunyai akses kepada tanda dolar menekankan GET di dalam yang adalah kunci dipanggil Q dan nilai yang dipanggil kucing yang ia boleh gunakan digunakan untuk melakukan carian sebenar dengan. Jadi, pada hakikatnya, apa yang saya akan lakukan sekarang ialah kembali kepada kod PHP saya yang sekali lagi akan melihat lebih banyak dalam PSet7. Dan bukannya memasang dalam nilai-nilai berkod keras yang tidak kelihatan seperti sangat laman web dinamik, Saya akan memberikan anda satu penggoda apa kod sebenar anda akan lakukan. Anda akan dimasukkan ke dalam dua soalan menandakan seperti ini. Saya tidak tahu apa nama pengguna itu. Saya tidak tahu apa yang namanya akan menjadi, tetapi saya tahu saya boleh mendapatkan mereka secara dinamik. Jadi, jika kod itu kita menulis sekarang adalah Kod yang dijalankan pada pelayan Google, atau jika ini adalah hello dot PHP, yang datang dengan PSet6, Saya akan masuk ke dalam fungsi pertanyaan seperti printf, dua hujah lain. GET, quote, nama pengguna unquote, dan GET, quote, nama unquote. Dan kini, melihat apa yang struktur umum di sini. Saya ada di sebelah kiri sebelah panggilan, fungsi ini dipanggil pertanyaan dalam PHP. Saya masih mempunyai sebagai pertama hujah, hanya rentetan teks. Tetapi itu rentetan teks ditulis dalam bahasa yang dipanggil SQL. Dan terus terang, ia bukan satu bahasa yang besar. Kami hanya akan bercakap tentang ia secara rasmi hari ini, benar-benar. Dan kemudian dalam masalah menetapkan tujuh, ada yang agak Beberapa ciri-ciri yang kami akan memanfaatkan. Tanda tanya, walaupun, bermaksud pasangkan nilai di sini dan palam dalam nilai lain di sini. Dan notis, saya telah ditinggalkan apa dari seluruh sialan quote-- kitab itu sekitar sebutharga menandakan masa ini. Saya telah ditinggalkan sebutharga markah sekitar tanda tanya, maaf, kali ini. Jadi, apa yang baik tentang ini tanda soal ciri yang PHP cenderung untuk menyokong, Ruby dan Python dan bahasa lain, ini hanya bermakna plug di beberapa nilai di sini dan anda tahu apa? Anda memikirkan sama ada untuk menggunakan petikan tunggal atau petikan berganda. Jangan mengganggu aku dengan orang-orang butiran intelektual tidak menarik. Tetapi, pastikan ia betul supaya kod saya akhirnya operasi dan selamat, yang akan mempunyai makna yang tidak lama lagi. Sekarang, bagaimana banyak hujah total, hanya untuk jelas, adalah pertanyaan pengambilan fungsi? Sesiapa pun mahu mengundi lebih daripada dua? Tiga? Pasti, mengapa? Mengapa tiga? PENONTON: [didengar] DAVID MALAN: Tepat sekali. Bahagian pertama adalah tali. Hujah kedua ialah tanda dolar menekankan GET nama pengguna kurungan. Dan hujah yang ketiga adalah Perkara yang sama, tetapi hanya nama. Jadi dalam erti kata lain, kini jika saya mempunyai borang web yang terpaksa medan teks, satu untuk nama pengguna pengguna, satu untuk atau namanya, hanya seperti yang anda lihat di dalam sebuah laman web apabila anda mendaftar untuk beberapa laman web, kekuatan ini menjadi kod pada hujung belakang yang sebenarnya tidak sisipan sekarang ke dalam pangkalan data. Sekarang sebaliknya, mari kita cepat ke hadapan. Katakan pengguna kini log masuk dan anda mahu untuk menulis kod PHP yang memeriksa sama ada orang yang baru sahaja log masuk sebenarnya pengguna, anda boleh menggunakan sintaks agak mudah. Anda boleh mengatakan SELECT, katakan bintang, di mana bintang bermakna segala-galanya. Saya tidak tahu apa yang saya mahu, jadi hanya memberi saya semua ruangan dari jadual dipanggil pengguna di mana, dan ini adalah bagus. Pilih menyokong apa yang dipanggil predikat, iaitu seperti cara untuk layak apa yang anda mahu. Di mana nama pengguna sama quote, unquote Malan. Jadi di sini juga, saya telah tertanam dalam hujah ke fungsi PHP, baris kod SQL. Dan bahawa kod SQL ini masa literal akan untuk mencari quote, unquote Malan. Sekarang bahawa bukan semua yang berguna, jadi saya akan melangkau yang dan saya akan meletakkan diri tip ini dari Brady, dan pergi dan plug-in dan bukannya tanda tanya di sini. Jadi, hanya untuk mengetahui dengan jelas apa yang sekiranya hujah kedua saya dapat jika seseorang baru sahaja log masuk dan saya mahu untuk memeriksa jika dia sebenarnya pengguna? PENONTON: [didengar] DAVID MALAN: Ya. Saya mendengar dolar tanda garis bawah DAPATKAN quote, nama pengguna unquote. Dan itu perlu kembali kepada saya mana-mana daripada baris dalam pangkalan data saya yang mempunyai nama pengguna Malan. Sekarang mudah-mudahan, saya akan kembali sifar jika ini Malan tidak ada di sini, atau salah jika dia mempunyai. Saya tidak boleh kembali dua, tiga dan empat. Mengapa? PENONTON: [didengar] DAVID MALAN: Saya berkata unik, bukan? Sebab mudah. Kerana saya berkata ia mendapat menjadi unik, hanya secara logik, anda hanya boleh mempunyai sifar atau satu Malans dalam jadual pangkalan data tertentu ini. Sekarang sebagai diketepikan, hanya jadi anda lihat ia, walaupun saya terus menggunakan GET dan walaupun PSet6 hanya digunakan GET, anda pasti boleh mempunyai POST. Dan ingat bahawa Post lain teknik kerana mengemukakan maklumat dari bentuk, tetapi ia tidak muncul dalam URL. Ia sedikit lebih selamat pasti untuk perkara seperti nama pengguna dan kata laluan, yang PSet7 akan, sebenarnya, melibatkan. Jadi, mari kita melakukan ini dalam PHP MyAdmin dan melihat apa yang berlaku. Saya akan pergi ke tab MySQL. Dan perhatikan bahawa nilai lalai untuk PHP MyAdmin, hanya untuk cuba untuk membantu, adalah untuk memilih bintang daripada pengguna di mana satu. Nah, satu selalunya benar, jadi ini mempunyai kuat kuasa bodoh hanya pilih segala-galanya. Tetapi saya akan menjadi sedikit lebih bengah dan secara manual menaip bintang SELECT FROM pengguna. Sekarang dari segi teknikal, anda boleh sebutkan nama jadual. Ia jarang berlaku bahawa anda perlu, tetapi notis ini tidak sebut harga biasa anda pada papan kekunci AS. Ini adalah backtick yang dipanggil, yang biasanya di tangan kiri atas sudut papan kekunci anda. Tetapi ia jarang berlaku bahawa anda akan sebenarnya perlu bersusah payah dengan itu, jadi saya hanya akan meninggalkan mereka juga. Oleh sebab itu, saya pergi ke hadapan dan tekan pergi. Dan berapa banyak baris saya perlu mendapatkan kembali apabila saya pilih bintang daripada pengguna? PENONTON: [didengar] DAVID MALAN: Bilangan baris, pasti. Tetapi berapa ramai dalam hal ini cerita konkrit sekarang? Dua, kerana terdapat saya dan ada Rob. Jadi, jika saya klik Pergi, saya melihat visual yang Saya telah mendapat kembali, sesungguhnya, dua baris. Ada banyak kekacauan di skrin, tetapi saya hanya melihat dua baris. Sebaliknya, jika saya melakukannya lagi dan jangan Bintang SELECT FROM pengguna, di mana nama pengguna sama quote, unquote Malan, sekarang jika saya klik Go, Saya hanya akan kembali satu baris. Dan akhir sekali, jika saya lakukan sesuatu seperti ini, rasa bahawa saya tidak mengambil berat tentang mendapat segala-galanya, yang jenis tidak bermakna sekarang, kerana hanya ada dua tiang. Ia tidak seperti saya memilih sejumlah besar data. Kira saya pergi ke hadapan dan jangan SELECT nama DARIPADA pengguna, di mana nama pengguna sama Malan, apa yang baik tentang SQL secara jujur, adalah bahawa ia benar-benar hanya melakukan apa yang anda beritahu ia lakukan. Ia agak ringkas, tetapi anda benar-benar hanya beritahu apa yang anda mahu lakukan. Pilih nama daripada pengguna di mana nama pengguna yang sama Malan. Dan ia benar-benar adalah yang jelas. Jadi, jika saya memukul Go, berapa ramai baris aku akan kembali? Satu, kerana ia hanya Malan, mudah-mudahan. Atau sifar jika dia tidak sana, tetapi satu maksima. Dan berapa banyak ruang saya akan kembali? Berapa banyak tiang? Kali ini, saya hanya akan untuk mendapatkan satu kerana saya tidak pilih bintang, yang merupakan segala-galanya. Sekarang saya memilih hanya nama, jadi saya hanya kembali satu ruang dan satu baris. Dan ia kelihatan semacam sewajarnya tidak masuk akal, super hanya mencari kecil seperti ini. Jadi, apa yang benar-benar berlaku? Apabila anda melaksanakan SQL yang Pertanyaan menggunakan pilih, apa yang anda mendapat kembali dari pangkalan data adalah seperti jadual sementara dengan baris dan lajur, mungkin, tetapi yang meninggalkan apa-apa yang sebenarnya tidak dipilih oleh anda. Jadi, ia adalah seperti jika seseorang mempunyai besar spreadsheet semua pelajar berdaftar untuk beberapa kumpulan pelajar, dan kamu berkata, memberi saya semua mahasiswa yang telah mendaftar untuk kumpulan pelajar kita, apa rakan sekerja anda dalam kumpulan pelajar mungkin melakukan adalah mereka hanya boleh menyerahkan anda seluruh hamparan. Itu seperti mengatakan pilih bintang. Dan ia sedikit menjengkelkan jika anda hanya mahu bayat itu. Dan sebagainya, jika anda sebaliknya berkata, pilih bintang daripada jadual pangkalan data mana tahun sama quote, bayat unquote, ia seolah-olah rakan anda dalam kumpulan pelajar literal diketengahkan dan hanya baris bayat disalin, ditampal mereka ke dalam Google baru Hamparan atau fail Excel, dan menyerahkan anda kembali menyebabkan fail sahaja. Itu sahaja yang akan pada konsep di sini. Jadi pada akhirnya, kita boleh melakukan beberapa perkara yang cukup mewah dengan menyimpan perkara-perkara seperti nama pengguna dan kata laluan dan sebagainya. Tetapi, ternyata, kita perlu melakukan sedikit berbeza daripada ini. Ia bukan yang bijak untuk hanya menyimpan nama pengguna dan kata laluan. Seseorang sebelum ini, saya rasa turun di sini, mencadangkan ID. Sekarang ID yang boleh menjadi seperti ID Harvard atau ID Net Yale, tetapi ia boleh menjadi lebih mudah dalam kes pangkalan data kami. Dan sesungguhnya, kes biasa adalah untuk mempunyai ruang yang lain. Dan saya akan pergi ke hadapan dan mengedit meja saya. Dan jika anda bermain-main dengan antara muka ini untuk PSet7, anda akan melihat bahawa anda boleh menyemak butang ini di sini dan menambah padang pada awal meja. Dan kini jika saya klik Pergi, ia akan untuk memberi saya salah satu bentuk dari awal. Saya akan menambah bidang yang dipanggil ID. Dan saya akan membuat ia satu jenis nombor. Saya mempunyai sejumlah daripada nilai-nilai untuk numerics. Saya hanya akan memilih INT dan bimbang tentang saiz berbeza. Saya tidak perlu nyatakan panjang atau nilai, kerana ia akan menjadi 32 bit tidak kira apa. Sifat-sifat, kita tidak melihat sebelum ini. Apa-apa kepentingan dalam mana-mana pilihan menu kali ini? Untuk INT yang? Apa yang anda cadangkan? Tidak? Adakah mana-mana masuk akal? Yeah. Ya, tidak ditandatangani, bukan? Secara umumnya, jika kita akan memberi semua orang nombor unik, yang adalah di mana cerita ini adalah pergi, saya benar-benar hanya mahu seseorang untuk mempunyai bilangan seperti sifar dan satu dan dua, tiga atau empat. Saya tidak perlu menangani dengan nombor negatif. Ia hanya kelihatan seperti kerumitan yang tidak wajar. Saya hendak empat bilion nilai yang mungkin, bukan empat bilion nilai yang mungkin, jadi saya hanya dua kali ganda kapasiti INT saya. Sebagai mengetepikan, jika anda mahu untuk mengaitkan ini kepada sesuatu seperti Facebook, kembali dalam bentuk hari saya apabila Facebook pertama keluar, Saya percaya apa yang mereka menggunakan dalam pangkalan data MySQL mereka untuk menyimpan pengguna pengecam, hanya INT yang. Tetapi sudah tentu, ada banyak orang sebenar di dunia. Ada banyak palsu Facebook akaun di dunia. Dan supaya akhirnya, Facebook melimpah saiz INT, satu empat bilion nilai. Itulah sebabnya, jika anda melihat sekitar dan ada laman web yang boleh memberitahu anda apa yang ID unik anda. Dan jika anda tidak memilih nama pengguna yang dalam Facebook, anda akan melihat ID anda yang unik. Saya fikir ia adalah Profil PHP dot tanda tanya ID sama sesuatu. Yang kini sesuatu seperti besar INT, atau yang panjang panjang jika anda akan, yang merupakan nilai 64-bit atau sesuatu yang setanding. Jadi, walaupun dalam dunia sebenar melakukan perkara- isu-isu akhirnya kadang-kadang perkara itu. Dan ternyata di sini, jika saya memberikan semua pengguna saya ID yang unik, Saya mahu menjadi super jelas dan minimum membuat bidang yang unik ini. Tetapi ternyata ada satu sekeping tatanama hari ini terlalu itu adalah satu kunci utama. Jika anda mereka bentuk pangkalan data meja dan anda tahu terlebih dahulu bahawa salah satu lajur dalam jadual yang harus dan unik akan mengenal pasti baris dalam jadual, anda mahu menentukan dan memberitahu pangkalan data, ini adalah kunci utama saya. Mungkin terdapat duplikasi dalam bidang-bidang lain, tetapi saya memberitahu pangkalan data ini adalah utama saya, bidang yang paling penting saya, yang yang dijamin unik. Sekarang, ini seolah-olah tidak diperlukan. Saya kini mencadangkan kita yang menambah, dengan mengklik Simpan sini, yang called-- bidang dan saya akan pergi ke hadapan dan klik AI, kita akan kembali kepada bahawa dalam seketika, Jimat. Saya mencadangkan sekarang bahawa meja saya kelihatan seperti ini. Saya mempunyai medan INT dipanggil ID, medan CHAR dipanggil Nama pengguna, medan VARCHAR dipanggil Nama, tetapi ID, jika ia adalah rendah dan oleh itu unik, mengapa saya hanya membuang masa memperkenalkan apa berkesan adalah unik kedua bidang dipanggil ID itulah INT? Nama pengguna, ingat, adalah sudah unik, kami berkata. Jadi hanya secara logik, anda tidak perlu apa-apa pengalaman pangkalan data untuk sebab melalui ini, mengapa mungkin saya telah memperkenalkan yang INT sebagai pengecam unik saya juga? Apa yang this-- katakan sekali lagi? PENONTON: [didengar] DAVID MALAN: Random akses yang lebih mudah, mengapa? PENONTON: [didengar] DAVID MALAN: Ya, ia hanya mengakses nombor. Jadi, jika anda berfikir ini benar-benar adalah meja, seperti pelbagai, kini saya mempunyai pengenalan diri yang saya boleh melompat-lompat. Dan lebih baik daripada yang lagi adalah bahawa berapa besar adalah satu INT akan menjadi lagi? 32 bit atau empat bait. Bagaimana besar adalah nama pengguna saya akan menjadi? Maksima? 16 bait. Jadi, jika anda benar-benar mengambil berat tentang prestasi kod anda, berfikir kembali ke PSet5, anda lebih suka untuk mencari nilai empat bait atau 16 nilai bait, bukan? Ia benar-benar adalah semudah itu. Anda perlu melakukan empat kali lebih banyak kerja-kerja untuk mencari nama pengguna kerana orang-orang 16 bait. Jadi, anda perlu benar-benar membandingkan semua 16 bait menjadi pasti ya, ini adalah nama pengguna saya mahu. Manakala bagi yang INT, anda boleh melakukannya dengan hanya empat bait. Dan sebagai diketepikan bagi mereka berminat untuk perkakasan komputer, ternyata anda boleh muat sesuatu seperti yang INT atau nilai 32-bit dalam sesuatu dipanggil suatu daftar dalam komputer CPU, yang bermakna ia adalah super, super cepat, walaupun pada yang terendah tahap perkakasan komputer. Jadi, ada hanya kelebihan di sekeliling. Jadi, apa maknanya? Malah, apabila anda mereka bentuk pangkalan data meja, hampir setiap masa yang anda akan tidak mempunyai hanya data yang anda mahu ketahui tetapi juga sesuatu seperti pengecam unik kerana ini akan marilah kita melakukan perkara-perkara lain. Dan mari kita tersandung satu masalah di sini. Katakan bahawa pengguna tidak mempunyai hanya nama pengguna dan nama, tetapi mereka juga mempunyai perkara-perkara seperti bandar-bandar dan negeri-negeri dan kod zip, sekurang-kurangnya di sini di Amerika Syarikat. Oleh itu, saya akan pergi ke hadapan dan hanya cepat berkata, memberi saya tiga tiang pada akhir jadual. Dan ini akan menjadi Bandar, ini akan menjadi Negeri, dan ini akan menjadi Zip. Sekarang jenis City, apa data ini harus, mungkin? VARCHAR? Saya tidak tahu apa yang nama terpanjang bandar. Di suatu tempat di Amerika, ada mungkin beberapa perkataan sungguh panjang, jadi mari kita hanya pergi dengan 255, agak sejarah atau sewenang-wenangnya. Negeri, apa yang ingin anda lakukan? Panggilan penghakiman, bukan? Apa yang mungkin yang paling berkesan? Berapa banyak watak-watak? Mungkin hanya dua, jika kita boleh terlepas melakukan hanya, seperti, MA untuk Massachusetts dan sebagainya. Jadi, saya akan pergi ke nilai CHAR dua. Poskod yang salah satu yang menarik. Kami sedia dalam 02138, supaya mencadangkan kita harus menggunakan apa? Ia INT yang, bukan? INT, INT, pendek? Pendek akan bekerja. Tidak? CHAR atau lima, tetapi mahu INT. Mengapa menolak kembali pada INT yang? Memujuk saya daripada ini. Apa yang bodoh tentang INT, idea saya? Yeah. PENONTON: Ambil lebih banyak memori. DAVID MALAN: Ambil lebih banyak memori. Empat bait, tetapi anda mencadangkan poskod lima bait atau seseorang adalah seperti char, yang berasa seperti eh, yang tidak benar-benar kes itu. Nah, cerita yang menyeronokkan. Tahun lalu, apabila saya pernah menggunakan Microsoft Outlook untuk e-mel saya, Saya akhirnya mahu bertukar kepada Gmail. Dan sebagainya, saya dieksport semua saya kenalan dari Outlook sebagai fail CSV. Dipisahkan oleh koma nilai, yang hanya bermakna saya mempunyai rakan-rakan saya dan nama-nama yang lalu nama dan nombor telefon dan kod zip dan semua itu. Dan kemudian saya membuat kesilapan membukanya sehingga dalam Excel, yang merupakan program spreadsheet yang memahami fail CSV seperti yang kita lihat. Tetapi kemudian, saya mesti telah melanda, seperti, Arahan atau Kawalan S pada satu titik. Dan Excel nampaknya pada masa yang mempunyai ciri-ciri yang mana bila-bila masa melihat nombor, ia cuba untuk membantu. Dan jika nombor yang bermula dengan sifar, ia hanya akan menyingkirkan mereka. Kenapa anda perlu membawa sifar pada bilangan bulat? Mereka tidak bermakna, secara matematik. Mereka bukan bermakna dalam sistem AS Pos. Jadi, saya mempunyai selama bertahun-tahun, hingga ke hari ini, saya masih mempunyai rakan-rakan bahawa apabila kes yang jarang berlaku yang saya memerlukan seseorang yang menangani hari ini, Saya masih akan melihat bahawa saya mempunyai rakan di Cambridge, Massachusetts, 2138. Dan ia adalah menjengkelkan jika anda cuba untuk menyusun program menetapkan menjana sampul surat atau hanya mencatat ke bawah. Dan itu kerana sebab ini, Saya memilih jenis data yang salah. Jadi, saya suka idea anda. Mari kita gunakan medan CHAR. Lima watak, kecuali terdapat kes sudut. Jika anda masih menghantar mel, kadang-kadang zip Kod hari ini, mereka, seperti, ditambah empat. Jadi, kita perlu sempang dan kemudian kita perlu empat nombor. Jadi untuk menjadi jujur, ia boleh pergi pelbagai cara. Buat masa ini, saya akan menjaga ia mudah dan saya hanya akan mengatakan bahawa ia adalah satu lima nilai CHAR dan kami akan melangkau seluruh dash campur empat. Tetapi ini adalah jenis melepas. Dan anda boleh memikirkan masalah yang sama timbul dengan nombor telefon atau bidang lain. Dan sekarang, ini sebenarnya jalan yang bebal turun ke bawah. Katakan kedua-dua Rob dan saya dan Hannah dan Maria dan [? Davon?] Dan Andy dan lain-lain pada kakitangan semua hidup di Cambridge, Massachusetts, 02138. Ini sebenarnya rasa bodoh bahawa saya menambah ke meja pengguna saya, bandar, negeri, dan zip. Mengapa? PENONTON: [didengar] DAVID MALAN: Katakanlah lagi? PENONTON: [didengar] DAVID MALAN: Mereka sentiasa akan pergi bersama-sama, bukan? Apabila ternyata, kita digunakan untuk berfikir ini adalah kes sehingga kita mendalam menggeledah seluruh Amerika Syarikat, dan ternyata bahawa terdapat adalah beberapa percanggahan di mana beberapa negeri yang zip yang sama, yang pelik. Tetapi, jika kita menetapkan untuk sekarang bahawa 02138 sentiasa Cambridge, Massachusetts, mengapa di dunia, anda akan simpan dalam pangkalan data anda Cambridge dan MA dan 02138 bagiku dan Hannah dan untuk Rob dan untuk [? Davon?] Dan untuk orang lain yang tinggal di sini di Cambridge, ia sempurna berlebihan. Kita harus lari dengan hanya menyimpan apa? Hanya kod zip. Tetapi, jika kita menyimpan hanya poskod, saya mahu, mungkin, untuk laman web saya untuk tahu di mana 02138 adalah. Jadi, saya perlu meja yang lain. Dan itu OK. Dan sebenarnya, ini adalah salah satu daripada proses reka bentuk mereka bentuk jadual bahawa anda akan lakukan dalam PSet7 dan juga di mana anda mahu untuk faktor keluar data yang sama. Sama seperti kita telah faktor keluar kod lazim dan pemfaktoran daripada biasa gaya dari CSS di sini terlalu dalam pangkalan data, jika saya hanya perlu ke 02138 unik mengenal pasti kampung halaman seseorang, tidak menyimpan Cambridge, Mass untuk setiap pengguna darn dalam jadual anda. Sebaliknya, mempunyai jadual yang berasingan yang dipanggil Zips yang perlu mempunyai apa tiang? Mungkin medan ID, hanya kerana, untuk prinsip-prinsip kita berbicara tentang sekarang. Mungkin medan zip untuk 02138. Dan kemudian mungkin apa lajur lain? Bandar dan negeri, tetapi hanya mempunyai satu baris untuk 02138, satu baris untuk 02139, satu baris untuk 90210. Dan itu adalah benar-benar semua kod zip saya tahu. Oleh sebab itu, apa yang boleh anda lakukan? Ini adalah masalah, kerana sekarang saya telah mendapat dua jadual. Jadi, pengguna saya kebanyakannya di sini, tetapi maklumat bandar negeri mereka yang dekat sini. Jadi, ternyata dengan SQL, ada sebenarnya cara untuk menyertai maklumat, dan anda akan melihat ini dalam pset. Tetapi ternyata anda boleh melakukan sesuatu seperti ini. Bintang SELECT FROM pengguna, JOIN zip ON pengguna dot zip sama zip dot zip. Yang merupakan panjang lebar sedikit, diakui, tetapi ini hanya bermakna pilih segala-galanya daripada proses mengambil meja pengguna saya dan meja zip saya. Sertai mereka pada satu bidang yang mereka mempunyai lajur. Jadi, secara literal melakukan sesuatu seperti ini, dan memberikan saya kembali meja sementara baru itulah yang lebih luas, yang lebih besar, yang mempunyai semua daripada lajur daripada kedua-dua mereka. Dan itu, agak mudah, akan menjadi sintaks untuk melakukan sesuatu seperti ini. Jadi, ini ke hadapan, tetapi ada akan menjadi keputusan reka bentuk lain yang anda akan perlu membuat, bukan sahaja dengan indeks tetapi juga berjalan ke cabaran. Malah, terdapat satu cabaran dalam mana-mana reka bentuk pangkalan data di mana kadang-kadang dua orang mungkin mahu untuk mengakses baris sama pangkalan data meja. Jadi, ini adalah sesuatu yang kita akan hadapi dalam PSet7 juga. Tetapi saya fikir saya akan melihat satu serangan itu mungkin dalam SQL. Apa adalah beberapa masalah yang boleh timbul? Jadi, anda akan menemui ini di PSet7. Dan kami memberitahu anda apa yang secara terang-terangan penyelesaian pengekodan bagi masalah ini adalah. Tetapi jika anda mengambil kelas tahap yang lebih tinggi, terutamanya dalam sistem operasi, anda akan menghadapi isu atomicity, masalah cuba lakukan pelbagai perkara sekaligus tanpa gangguan. Dan saya fikir saya akan memperkenalkan ini idea untuk PSet7 dengan metafora yang saya belajar diri saya dalam Margo Sistem operasi CS164 Seltzer ini tahun kelas lalu. Katakan anda mempunyai salah satu asrama ini peti sejuk di dalam bilik asrama atau rumah, dan anda mempunyai kegemaran sebenar untuk susu. Dan sebagainya, anda pulang ke rumah dari kelas satu hari, anda membuka peti sejuk. Oh, sialan. Tidak ada susu di dalam peti sejuk. Jadi, anda menutup peti sejuk, mengunci pintu, kunci asrama anda, berjalan sekitar sudut untuk CVS, dalam talian, dan mula check-out untuk susu. Dan ia akan mengambil sedikit masa, kerana orang-orang checkout diri sialan kaunter mengambil selama-lamanya untuk menggunakan juga. Jadi sementara itu, rakan sebilik anda datang rumah. Dia benar-benar suka susu juga. Mereka masuk ke dalam bilik asrama, membuka peti sejuk, oh, darn ia. Tidak ada lebih banyak susu. Jadi, dia juga pergi sekitar sudut. Tetapi sekarang, kerana tidak seperti dua tiga dan empat CVSes berdekatan, ia berlaku untuk pergi ke salah satu daripada orang-orang yang berbeza di dataran. Dan sehingga kini, beberapa minit kemudian, kedua-dua anda pulang ke rumah dan ugh, masalah paling teruk. Sekarang anda mempunyai susu yang terlalu banyak kerana ia akan pergi masam. Dan anda seperti susu, tetapi anda tidak benar-benar suka susu. Oleh sebab itu, ini adalah yang mahal kesilapan, karena kamu berdua membuat keputusan berdasarkan keadaan beberapa pembolehubah yang adalah dalam proses diubah oleh anda, pengasas akan mendapat susu. Jadi, apa yang mungkin manusia penyelesaian kepada masalah itu? PENONTON: [didengar] DAVID MALAN: Tinggalkan komen, betul? Sentiasa tinggalkan nota, jika anda biasa dengan rancangan itu. Ya, ada kami berdua. Jadi, sentiasa meninggalkan komen, atau literal mengunci peti sejuk dengan beberapa jenis mangga atau sesuatu yang lebih atas seperti itu. Tetapi itu sebenarnya akan menjadi masalah utama dengan reka bentuk pangkalan data, terutamanya apabila anda mungkin mempunyai pelayar pelbagai, pelbagai komputer riba, beberapa pengguna semua cuba untuk mengemaskinikan maklumat pada sekali. Maklumat sensitif seperti maklumat kewangan, mana dengan perdagangan saham laman web seperti anda akan berada di bangunan, bagaimana jika anda mahu untuk memeriksa berapa banyak wang anda ada dan kemudian jika anda mempunyai cukup, membeli saham? Tetapi bagaimana jika orang lain yang mempunyai akaun bersama dengan anda adalah pada masa yang sama cuba untuk membeli saham? Jadi, dia adalah memeriksa baki akaun kamu berdua kembali yang sama Jawapannya, tidak ada susu. Atau kedua-dua anda kembali jawapan, anda mempunyai $ 100 dalam akaun. Kedua-dua anda cuba untuk membuat keputusan untuk membeli satu saham beberapa saham syarikat. Oleh sebab itu, apa yang berlaku? Anda mempunyai dua saham? Anda tidak mempunyai saham? Masalah yang seperti itu boleh timbul. Jadi, kita akan menghadapi itu. Serangan suntikan SQL, bersyukur, adalah sesuatu yang kami akan membantu anda dengan, tetapi ini adalah atrociously umum hari ini masih. Jadi, ini adalah hanya satu contoh. Saya tidak membuat tuntutan yang Sistem PIN Harvard terdedah kepada serangan khusus ini. Kami telah cuba. Tetapi, anda tahu bahawa kita mempunyai bidang seperti ini. Dan ID Net Yale mempunyai sama skrin mencari hari ini. Dan ternyata, bahawa mungkin Sistem PIN dilaksanakan dalam PHP. Dan jika ia were-- ia tidak-- mereka mungkin mempunyai kod yang kelihatan seperti ini. Mereka mempunyai dua pembolehubah. Memberi saya nama pengguna dan kata laluan dari berubah-ubah global jawatan super yang kita bercakap tentang awal. Mungkin Harvard mempunyai pertanyaan seperti bintang SELECT FROM pengguna mana nama pengguna yang sama dan kata sama itu. Dan melihat bahawa saya hanya memasangnya menggunakan notasi kerinting dari yang lain hari, yang bermaksud hanya plug dalam nilai di sini. Saya tidak menggunakan soalan teknik tanda. Saya tidak mempunyai apa-apa kedua atau hujah-hujah ketiga. Saya hanya benar-benar membina tali diri saya sendiri. Masalahnya, walaupun, adalah bahawa jika seseorang suka scroob yang, iaitu merujuk kepada filem, log masuk dengan sesuatu seperti ini, dan saya telah dikeluarkan titik-titik yang biasanya menutup kata laluan, bagaimana jika dia terutamanya yang berniat jahat dan kata beliau mungkin adalah 12345, setiap filem yang dipanggil "Spaceballs," tetapi dia kritikal jenis yang petikan tunggal selepas lima, kemudian dapat perkataan itu atau di dalam ruang, dan kemudian quote, satu unquote sama quote satu, tetapi notis dia ditinggalkan apa? Dia ditinggalkan quote di sebelah kanan dan dia ditinggalkan petikan di sebelah kiri. Kerana jika penyerang ini anggapan scroob ini ialah orang-orang yang menulis kod PHP ini tidak begitu cerah, mungkin mereka hanya mempunyai beberapa tunggal memetik sekitar interpolasi pemboleh ubah dalam pendakap kerinting? Dan jadi mungkin, dia boleh jenis untuk melengkapkan pemikiran mereka untuk mereka, tetapi dengan cara yang yang akan membenarkan beliau menggodam sistem PIN. Dalam erti kata lain, katakan bahawa ini adalah kod dan kami kini pasangkan apa scroob ditaip. Dan ia merah, kerana ia tidak baik. Dan teks asas adalah apa yang dia ditaip dalam, scroob boleh menipu pelayan Harvard ke dalam membina pertanyaan SQL tali yang kelihatan seperti ini. Kata laluan bersamaan 12345 atau satu sama satu. Hasil yang, secara logik, adalah bahawa ini akan log scroob masuk jika kata laluannya adalah 12345 atau jika satu setaraf satu, yang sudah tentu sentiasa benar, yang bermaksud scroob sentiasa mendapat dalam. Dan sebagainya, cara untuk menetapkan ini, seperti dalam banyak kes, adalah untuk menulis lebih banyak bertahan. Untuk menggunakan sesuatu seperti kami fungsi Pertanyaan sebenar, yang anda akan lihat dalam PSet7, di mana kita pasangkan sesuatu seperti soalan menandakan sini. Dan keindahan fungsi pertanyaan yang kita memberi anda adalah ia mempertahankan terhadap mereka ini apa yang dikenali sebagai serangan suntikan SQL, di mana seseorang itu menipu kod anda ke dalam menyuntik kod SQL mereka sendiri. Kerana apa fungsi pertanyaan kami memberi anda benar-benar akan lakukan, jika anda menggunakan sintaks tanda tanya dan kedua dan hujah yang ketiga di sini, adalah apa yang ia menambah kepada input bahawa pengguna yang disediakan? Mereka backslash memetik. Jadi, ia terlepas sebarang berpotensi Watak berbahaya. Ini kelihatan pelik sekarang, tetapi ia tidak terdedah kerana ia tidak menukar logik lagi kerana itu kata keseluruhan adalah sekarang petikan tunggal yang tidak, sebenarnya, kata laluan scroob ini. Jadi, telah ada beberapa jenaka mengenai ini selama ini. Jadi, ini adalah gambar yang diambil beberapa geek di tempat letak kereta di mana anda mungkin tahu bahawa beberapa bandar-bandar dan negeri-negeri cuba untuk mengimbas lesen anda plat untuk menghantar bil kepada anda atau mana-tiket anda jika anda pergi melalui tanpa, seperti, perkara E-Z Pass. Jadi, orang ini dianggap bahawa mungkin rakyat menulis sistem E-Z Pas tidak begitu terang, dan mungkin mereka hanya dirangkaikan bersama-sama tali, supaya dia tidak boleh dengan niat jahat bukan hanya melengkapkan pemikiran mereka, tetapi sebenarnya melaksanakan arahan yang tidak baik, yang kita telah tidak disebut lagi, tetapi anda mungkin boleh meneka. Bahawa di samping menghapuskan dan memasukkan dan mengemaskini dan memilih, ada juga kata kunci yang dikenali sebagai drop, yang secara harfiah memadam segala-galanya dalam pangkalan data, yang amat buruk. Kita boleh mengezum masuk pada ini jika ia sedikit sukar untuk melihat. Ini, sekarang, adalah kartun terkenal itulah hebat pandai sekarang dan mudah difahami. [Ketawa] Yeah, sejuk. Jenis geeking keluar. Jadi ini, maka, adalah Serangan suntikan SQL. Dan mereka begitu mudah untuk mengelakkan dengan menggunakan kod yang betul atau perpustakaan yang betul. Dan anda akan melihat dalam PSet7, itu sebabnya kita memberikan anda fungsi pertanyaan. Jadi, beberapa penggoda yang kita fikir kita akan memberi anda di sini dalam kita baki minit bersama-sama. Jadi, seperti yang anda ingat daripada minggu sifar, kita diperkenalkan kedua-dua mentol lampu yang yang bagus, bukan hanya kerana mereka cantik dan berwarna-warni, tetapi kerana mereka menyokong sesuatu dipanggil API, Permohonan yang Antara Muka Pengaturcaraan Dan dalam CS50 setakat ini, kami telah kebanyakannya tertumpu kepada GET dan POST, tetapi ternyata ada kata kerja HTTP lain seperti PUT. Dan sebenarnya, ini adalah slaid dari minggu sifar di mana jika anda menulis kod yang menghantar a la PSet6 permintaan HTTP yang kelihatan seperti ini dengan sebahagian teks ini di bahagian bawah, yang dipanggil JSON, atau JavaScript Object Notation yang kita akan bercakap tentang minggu depan, anda boleh menghidupkan atau mematikan atau perubahan warna lampu seperti orang-orang. Jadi, jika CS50 juga sebagai tambahan kepada beberapa dari orang-orang mentol lampu di sini di New Haven jika anda mahu untuk meminjam mereka untuk projek-projek akhir, juga beberapa Microsoft Band, yang seperti jam tangan yang anda pakai di pergelangan tangan anda yang sama mempunyai API supaya anda boleh menulis perisian sendiri untuk mereka. Kami mempunyai akaun dengan Kod Apple iOS supaya bahawa jika anda mempunyai Apple Watch atau iPhone atau iPad atau iPod, anda boleh menulis kod yang sebenarnya berjalan di atas mereka. Kami mempunyai sejumlah daripada Arduinos, yang komputer kecil kecil tanpa kes, pada dasarnya, bahawa anda boleh menyambung melalui USB, biasanya untuk Mac anda sendiri atau PC, menulis kod yang berjalan di atas ini fizikal peranti yang sering mempunyai sensor pada mereka supaya anda boleh berinteraksi dengan dunia sebenar. Kami mempunyai sejumlah peranti Leap Motion, yang peranti USB untuk Mac dan PC, di sini dan sekali lagi, di New Haven. Dan jika anda menyambungkannya kepada Mac anda, anda sebenarnya boleh mengawal komputer anda dengan menulis perisian yang melalui rasuk inframerah, angka di mana tangan manusia anda berada, walaupun tanpa menyentuh papan kekunci anda. Kita fikir kita akan berkongsi yang cepat melihat pada ini, misalnya. [Bermain muzik] Jadi, kita mempunyai keseluruhannya sekumpulan perkara-perkara ini, juga dikenali sebagai Myo band lengan yang anda meletakkan ke atas lengan anda dan kemudian anda boleh mengawal sebenar dunia atau dunia maya seperti ini. [Bermain muzik] Atau, kita juga mempunyai beberapa Google Kadbod, yang secara harfiah, seperti, kotak kadbod anda boleh meletakkan pada anda muka, tetapi slaid dalam telefon anda ke dalamnya supaya anda meletakkan segelas anda telefon benar-benar dekat dengan mata anda. Dan Google kadbod adalah agak murah di $ 10 atau $ 20. Dan ia mempunyai kanta kecil yang sedikit off anjakan imej pada skrin untuk manusia anda mata untuk memberikan anda rasa kedalaman supaya anda benar-benar mempunyai 3D persekitaran di hadapan anda. Kami juga mempunyai beberapa Gear Samsung, yang adalah versi yang lebih mahal daripada ini, tetapi yang sama boleh slaid dalam Android telefon dan memberi anda ilusi daripada- atau memberi pengalaman realiti maya. Dan dalam dua kami minit terakhir, kita fikir kita akan cuba untuk melakukan ini. Jika saya boleh projek apa Colton mempunyai di sini hanya untuk membangkitkan selera anda, biarlah saya pergi ke hadapan dan membuang pada skrin besar di sini. Biarkanlah aku membunuh lampu. Colton, adakah anda mahu pergi ke hadapan dan memakai bimbit anda untuk seketika dan datang pula ke dalam pertengahan pentas? Dan adakah anda mahu project-- ini adalah apa yang Colton melihat. Kini, Wi-Fi di sini adalah tidak begitu kuat untuk peranti ini bahawa ini adalah super menarik, tetapi Colton literal di tempat ini futuristik ajaib. Dia hanya melihat satu imej. Anda melihat mata kiri dan kanan yang otaknya sedang menjahit bersama-sama dalam tiga dimensi persekitaran di wajahnya. Dia hanya memilih satu pilihan menu di sini. Dan demikian lagi, dia memakai alat dengar ini dengan telefon Samsung di atasnya itulah wayarles mengunjurkan overhed kami. Sekarang anda di Marikh, saya fikir? COLTON: Saya fikir begitu. Saya tidak pasti [didengar]. [Ketawa] DAVID MALAN: Rupa-rupanya Marikh mempunyai menu ini. COLTON: [didengar] beberapa sejuk tempat jika kita mahu pergi supaya- DAVID MALAN: Di mana kita mahu pergi? COLTON: [didengar] DAVID MALAN: Dan mari kita lihat mana yang Colton membawa kita sekarang. COLTON: [didengar] DAVID MALAN: Jadi, terdapat begitu banyak tempat yang berbeza anda boleh mengambil sendiri. Ada FAPIs melalui yang anda boleh menulis permainan atau interaksi yang berlari, akhirnya, di telefon. Jadi, anda benar-benar hanya menulis aplikasi telefon mudah alih. Tetapi terima kasih kepada perisian dan keupayaan grafik, sekarang Colton adalah dalam ini pondok kecil ini. Dan pada risiko hangat diri kita sendiri, Colton dan saya akan melekat di sekeliling untuk dan pada akhir kelas di sini hari ini jika anda ingin untuk datang dan bermain. Dan kita akan membawa mereka kembali minggu depan juga. Tanpa lanjut, ado itu sahaja untuk hari ini. Kita akan melihat lagi minggu depan. [MUZIK - RAGGA TWINS, "MAN BAD"]