>> [MÜZİK OYUN]
DAVID MALAN: Pekala, bu CS50 olduğunu.
Bu haftanın sekiz sonudur.
Ve bugün, başlangıç Bazı parçalar halinde doldurmak için
o binaya geldiğinde Web'de şeyler.
Yani, Pazartesi günü hatırlamak biz çok fazla zaman harcamak
PHP, hangi bu dinamik programlama dili
Diğer yanı, bizi çıkışı sağlar şeyler, HTML ve benzeri içeriğin
Görmek istediğimiz edeceğiz.
Ama biz gerçekten nasıl bakmadım biz herhangi bir bilgi depolamak için gidiyoruz.
Nitekim, hemen hemen her o süper Bugün ziyaret ilginç web siteleri
veritabanının çeşit var arka ucunda, değil mi?
Facebook kesinlikle büyük miktarda veri depolayan yaklaşık hepimizin ve Gmail mağazaları her
E-postalarınızın.
>> Ve böylece, pek çok diğer siteler sadece değil bilgilendirici olduğunu statik içerik.
Bu bir şekilde, aslında dinamik.
Sen girdi, bu güncellemeleri sağlamak diğer insanlar için sayfaları.
Gönderdiğiniz mesajları almak benzeri mesajları ve.
Yani bugün, daha yakından bakmak Bir projenin temelleri
Bir sonraki dalmak edeceğiz Hafta, CS50 finans, burada
aslında inşa sahip oluyor değil C ama PHP şey.
Bir görünen bir web sitesi Böyle küçük bir şey
Bu satın almak ve satmak için izin verir aslında stokları
Gerçek zamanlar çekmek için gidiyor Yahoo Finance hisse verileri.
Ve böylece sonuçta, gerekecek Kendiniz için ve kullanıcılar için yanılsama
aslında alış ve satış konum hisse senetleri ve neredeyse gerçek zamanlı oluyor
güncellemeler, yönetme portföy, her biri
sahip gerektirecek gidiyor, sonuçta, bir kullanıcı veri tabanı.
>> Yani, kendi sözleriyle, sen değilsin özellikle
bilgisayar ile süper tanıdık bilim veya veritabanları ne
Eğer bir veritabanı biliyor musunuz olmak Şu anda, teknik olmayan bakımından?
Bu ne?
Bunu nasıl tarif edeceğini Bir oda arkadaşı ya da bir arkadaşınıza?
>> HEDEF KİTLE: [duyulamaz] bilgi [duyulamaz]
>> DAVID MALAN: Yani, bir bilgi listesi ya da bilgilerin bir listesini store--
Saklamak istediğiniz olabilir Bir kullanıcı gibi bir şey hakkında.
Ve kullanıcılar var ne bunlarla ilişkili?
Facebook veya bir kullanıcı iseniz Gmail, özellikleri nelerdir
Bu hepimiz kullanıcımız var?
Gibi, ne bazı olabilir e-tablodaki sütunları hangi biz
Geçen sefer ima?
Tekrar yapabilirsiniz Çünkü Bir veritabanı düşünüyorum
Gerçekten fantezi Excel dosyası ya da Google gibi Elektronik Tablo veya Apple Numaraları dosyası.
>> Peki, ne düşünüyorsunuz Eğer bir kullanıcı düşündüğüm zaman?
Ne var?
Bu da ne?
>> HEDEF KİTLE: Bir isim.
>> DAVID MALAN: bir isim.
Yani eğer adı gibi, David Malan Bazı kullanıcı adı olacaktır.
Bir kullanıcı başka ne var?
>> HEDEF KİTLE: Bir kimlik.
>> DAVID MALAN: Bir kimlik.
Yani, Harvard gibi bir kimlik numarası gibi Kimlik veya Yale Net ID veya benzeri.
Bir kullanıcı başka ne olabilir?
>> HEDEF KİTLE: Şifre.
>> DAVID MALAN: belki bir şifre, adres, belki bir telefon numarası, belki
Bir e-posta adresi.
Yani, alanlar ve bu demet var çeşit kontrol dışına çıkması
hızla kısa sürede başlar başlamaz oh, bunu saklamak edelim, hayata
ve en bu ve bu depolamak.
>> Ama nasıl biz aslında böyle yapıyorsunuz?
Yani yine, zihinsel modeli bugün için var biz
Gerçek SQL içine dalış, Yapılandırılmış sorgu dili,
Şöyle bir veritabanı.
Sadece satır ve sütun var.
Ve Google Spreadsheets hayal edebiliyorum veya diğer programlara herhangi bir sayı.
Ama olan MySQL, hakkında önemli ne veritabanı yazılımı, biz kullanmak için gidiyoruz,
serbestçe açıkça Facebook kullandığı available--
o ve diğer websites-- herhangi bir sayı Veritabanı ilişkisel şeyler saklar.
Ve bir ilişkisel veritabanı sadece kelimenin tam anlamıyla bir anlamı
satırlar ve sütunlar halinde depolar.
O kadar basit.
>> Yani, Oracle gibi bile bir şey olduğunu genellikle duymuş olabilir
ilişkisel veritabanı.
Ve başlık altında, o satır ve sütunlarda verileri saklar.
Ve Oracle seni bir şarj çok para yapmak,
MySQL ücretleri ise Aynı sizin için hiçbir şey.
Yani, SQL bize verecek en az dört işlemleri.
Okuma gibi, verileri seçmek için yeteneği veri ekleme, silme ve güncelleme veri.
Diğer bir deyişle, olanlardır Gerçekten dört temel işlemleri
Bu bizi değiştirmek için izin için gidiyoruz Bu satırlar ve sütunlar şeyler.
>> Özellikle bugün kullanacağız aracı SQL öğrenmek ve onunla oynamak
Yine PHP myadmin olarak adlandırılır.
Bu web tabanlı bir araçtır.
Toplam tesadüf olduğunu PHP ile yazılmış oluyor.
Ama bize bir grafiksel vermek için gidiyor Kullanıcı arayüzü biz aslında can böylece
Bu satırlar ve sütunlar oluşturmak ve daha sonra kodu ile onlarla konuşmak.
Yani, şimdi başlayalım Ne bence açıkçası
eğlenceli sürecinin tür web sitelerinin arka ucunu bina,
Kullanıcıların yok parçalar görüyoruz, ama mutlaka ilgili bakım yapmak,
çünkü o veri sitesinin gidiyor yerine.
C ve a nedenle benzer az PHP gibi küçük,
SQL veya destekleyen bir veri tabanı SQL, en azından bu veriler türleri vardır
ve diğerleri salkımları.
CHAR, VARCHAR, INT, BIGINT, DECIMAL ve DATETIME.
Ve bir bütün var diğer özellikleri demet,
ama en bu yapalım Gerçek örnek yol.
>> Ben CS50 IDE içine gidiyorum nerede, önceden, ben giriş yaptıktan
ve ben de bir URL ziyaret ettiğiniz PHP MyAdmin denilen bu alet.
Ve sorun yedi set içinde, biz söyleyeceğim Eğer tam olarak nasıl bu arabirime almak
de.
Sol üst köşesinde, fark bu ders diyor.
Ve bu sadece anlamına gelir peşin, benim yarattığım
Boş bir veritabanı olarak adlandırılan ders O henüz hiçbir elektronik tabloları vardır.
Hiçbir satır ve sütun var.
İlk Çünkü şey yapacağız
bir tablo oluşturmaya başlayabilirsiniz olduğunu bizim kullanıcılara depolamak için gidiyor.
>> Yani, kelimenin tam anlamıyla üzerinde Burada sağa, ben
veritabanını söyleyecek Ben bir tablo Kullanıcılar denir istiyorum.
Yani, bu dosyanın gibi olduğunu ben benim tüm verileri depolamak istiyor.
Ve kaç sütun?
Peki, şimdi basit tutalım.
Ben sadece böyle saklamak istediğiniz kullanıcı adı ve bir kullanıcı için bir isim.
Biz küçük başlayacağız.
Yani, iki sütun toplam istiyorum.
Ve ben go ahead ve Git'i tıklatın gidiyorum.
Sonra, bu sütunlar, ne gidiyorum
Bu internet eğer sanıyor- için , tamam cooperates--
bu yüzden tekrar denemek için gidiyoruz.
Ben adında bir tablo oluşturmak için gidiyorum Iki sütun, sahip kullanıcılar Tamam, Git seçeneğini tıklatın.
Şimdi biz gerçekten hızlı var.
Çok iyi yapılması, teşekkür ederiz.
Pekala, bizim istediğimiz ne Bu sütunlar çağrılacak?
>> Yani, bir kullanıcı adı çağrılacak gidiyor.
Burada-- ve arayüz Yani, tüm gördüğüm Açıkçası, sonunda biraz çirkin olur
Size bir kez tüm bu veriler yazmaya başlayın.
Ama ne güzel bu tür bir paradoksal, ben sütunlar oluşturma,
ancak aracı aptalca vardır sıralar halinde bunları ortaya koydu
böylece bu sütunları yapılandırabilirsiniz.
Yani, adı altında iki boşlukları orada var.
Ve bu alanlardan biri ben Adı denilen istiyorum
ve diğer alan ben İsim aramak istiyorum.
>> Ve şimdi seçim yapmak zorunda bunlar için veri türleri.
Yani, Excel'de ise ve Google E-Tablolar,
Eğer bir sütun istiyorsanız, kelimenin tam anlamıyla Sadece adı veya Kullanıcı Adı yazın Enter tuşuna basın.
Belki bunu kalın yüz yapmak Sadece açıklık için, ama o kadar.
Sen belirtmeyen sütun türleri.
Artık Google Spreadsheets veya Excel size, içinde veri işlenir nasıl belirtebilirsiniz.
Biçim menüsüne gidin ve olabilir Böyle dolar işaretini göstermek belirtebilirsiniz,
Bir kayan nokta değeri gibi bunu gösteriyor.
>> Yani, ruhu içinde benzer Yapmamız hakkında ne konum olduğunu,
ama bu aslında zorlamak için gidiyor veri belirli bir tip olmak.
Şimdi, hatta bir an önce olsa yalnızca birkaç veri tipleri var dedi
Aslında orada bir sürü, ve onlar konum
özgüllük değişen derecelerde.
Ve bir kenara, sen Hatta fantezi şeyler yapabilirler
Depolama geometrileri gibi Bir veritabanı içinde.
Bir şeyleri saklayabilirsiniz GPS koordinatları gibi
ve aslında matematiksel bulmak diğerlerine yakın noktalar.
Ama biz gidiyoruz Bu süper basit tutmak
ve burada tüm kadar gitmek Sözde dize türleri.
>> Yani, burada bir listesi var seçeneklerin sürü.
CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT.
Ve bu ezici tür.
Ve ne yazık ki, biraz paradoksal C,
CHAR gerçekten CHAR değildir.
Eğer bir veritabanında belirtirseniz Veri türü CHAR olduğunu,
evet, bu bir var demektir CHAR, ancak bir veya daha fazla chars var.
Ve belirtmek zorunda Kaç chars istediğiniz.
Peki, bir tipik Bir kullanıcı adı için uzunluk?
Bir sınır tipik var mı?
>> HEDEF KİTLE: [duyulamaz]
>> DAVID MALAN: 16 belki?
Bunun gibi bir şey.
Siz geri, biliyorum gün, sekiz olmak için kullanılır.
Bazen 16, bazen var o bile daha var.
Ve böylece, bu değil Bana bir CHAR ver demek.
Bu benim belirtmek zorunda anlamına gelir alanın uzunluğu,
ve şimdi 16 gibi bir şey diyebilirsiniz.
Ve burada kapalı bir ticaret var.
Yani, bir an görürsünüz bu demektir ki,
Her kullanıcı adı 16 karakterden olmak zorunda.
Ancak bir dakika, E-A-L-A-N bekleyin. Bu buysa Benim kullanıcı adı ve ben sadece beş kullanıyorum,
veritabanı bu ne önerirsiniz Diğer 11 karakter yapmak için bu
Ben için yer ayırttım?
Ne yapardın?
>> HEDEF KİTLE: [duyulamaz]
>> DAVID MALAN: Evet, sadece hepsini boş olun.
Onlara boşluk yapın.
Ama muhtemelen null, yani bir Ters eğik çizgi sıfır sürü.
Yani, bir yandan, ettik şimdi benim kullanıcı adı emin yaptı
16 karakterden fazla olabilir.
Ve bu flip tarafı ben gerçekten uzun bir isim olsaydı
ya da gerçekten uzun istedik sizin gibi bazı kullanıcı adı
adamlar üniversitede olabilir veya yale.edu at, birini olamaz.
Ve böylece aslında, yasiyorsaniz Hiç bir web sitesi için kayıtlı
ve diyorsun bağırdı şifreniz çok uzun
ya da adınız bu kadar, çok uzun sadece bir programcı, çünkü ne zaman
onun veritabanı yapılandırılması, karar bu alan olacak ki
Artık bu uzunluğundan daha ol.
>> Pekala, ne olur Biz isim devam?
Ne zamandır gereken bir tipik bir insan ismi olabilir mi?
Kaç karakter, 16?
Ben biz olabilir tahmin ediyorum Bu odada birini bulmak
nerede son onun ilk artı ile adı 16 karakterden daha uzun.
Yani, 17 Bundan daha iyi ne?
18?
25?
Büyük?
30?
>> HEDEF KİTLE: [duyulamaz]
DAVID MALAN: 5000, Tanrım oh.
Yani, bu muhtemelen iyi bir var Üst, bağlı mıyız söylüyorlar.
Ve burada biz tür var Bir karar arama yapmak için.
Gibi, burada hiçbir doğru cevap var.
Sonsuz, pek mümkün değildir biz sonunda çünkü
Biz konum have-- olacak bellek tükendi gidiyor.
Yani, bir yapmak zorunda bir noktada yargı çağrısı.
>> Olacaktır Çok sık, örneğin, use-- ve beni burada CHAR belirtmek izin
olarak before-- 255 tam anlamıyla Bu veritabanı yazılımı hakkında üst sınırı
Yıllar önce.
Ve insanlar bu yüzden, bir sürü gayet söyleyebilirim.
255 sınırı.
Sadece maksimum kullanalım.
Ve bu oldukça saçma.
Mesela, birisi var yazarak eğer 200 artı karakterler için isim,
biraz saçma olduğunu.
>> Ama, ASCII olmadığını unutmayın karakterler için tek sistemdir.
Ve böylece, özellikle bir Asya dilleri sürü
karakter olduğu yerde biz değil Benim ABD gibi klavyelerde ifade
Klavye, aslında bazı karakterler 16 bit yerine sekiz bit kadar sürebilir.
Ve böylece, bu aslında Tüm bu mantıksız değildir
daha fazla ihtiyacımız olduğunu Uzay biz sığdırmak istiyorsanız
Çok ABD'den daha büyük karakterler merkezli olanları tartışmak eğiliminde ettik.
Yani, biz bazı üst sınır gerekir.
Ben, en iyisi olduğunu bilmiyorum ancak 255 genellikle yaygın olanıdır.
25 düşük hissediyor.
16, 32 düşük hissediyorum.
Ben tarafında err ediyorum yüksek bir şey.
Ama ticaret her zaman olduğu gibi, kapalı var.
, Belki de açıktır nedir 255 chars saklı kapalı ticaret
benim veritabanında herkesin adını?
>> HEDEF KİTLE: [duyulamaz]
>> DAVID MALAN: Bu nedir?
>> HEDEF KİTLE: [duyulamaz]
>> DAVID MALAN: Bu bir var bellek yeri, değil mi?
M-A-L-A-N. Ben sadece 250 israf var karakterler sadece ismimi saklamak için
Savunmaya ihtimale karşı birisi sınıfta gerçekten uzun bir adı vardır.
Bu gereksiz bir tradeoff gibi görünüyor.
>> Yani, bu, o SQL çıkıyor Bu veritabanı dili,
aslında bir şey destekler VARCHAR, ya da Değişken CHAR çağırdı.
Ve bu, bu tür güzel Eğer sabit bir değil belirlemenizi sağlar
genişliği, daha ziyade, bir değişken genişlik.
Ve daha da özel olarak ise, bir alanın maksimum genişliği.
Yani, bu bir ad olabilir anlamına gelir en fazla 250 karakter olabilir,
ama kesinlikle daha az olabilir.
Ve veritabanı akıllı olacak.
M-A-L-A-N koymak yoksa, sadece, beş kullanmak için gidiyor
belki altı bayt gibi Bir sondaki boş karakter,
ve ek bir harcama değil Gereksiz yere 249 veya 250 bayt.
>> Yani, bu benim gerektiği gibi görünüyor Bu hikaye ile başladı.
Ama her zaman bir takas var.
Böylece, bir yandan, bir kullanıcı adı I ettik sabit 16 ° kodlanacak belirtilen
ve belki de bu değildi Doğru çağrı, belki o
ama neden kullanmayın Her şey için varchars?
>> Bir nedeni var.
Neden her alan için varchars kullanmayın uzunluğu önceden bilmiyorum
Doğru, harika bir şey gibi görünüyor eğer?
Sadece kadar alanı kullanın Bu limite kadar ihtiyacınız var?
>> HEDEF KİTLE: Yavaş.
DAVID MALAN: Speller?
HEDEF KİTLE: yavaş o yapar?
DAVID MALAN: Oh, bu daha yavaş.
İyi, neredeyse her zaman Cevap, açıkçası.
Gibi, takas nedir?
Ya daha fazla alan maliyeti ya da daha fazla zaman maliyeti.
Bu nedenle, bu durumda, daha yavaş olabilir.
Neden?
>> HEDEF KİTLE: [duyulamaz] [inaudible] belirlenmesi.
>> DAVID MALAN: İyi.
Yani, hatta gelen çağırmak olabilir PSED5, yaklaşımınız ile oynarken
sözlüğe, Eğer varsa dinamik bellek ayrılamadı veya tutmak
bu, bir tampon büyüyen aslında yavaş olabilir.
Eğer malloc aramak varsa Kaputun altında ve belki
o MySQL, böylece ne yapıyor elbette bu durumda olabilir.
Ve eğer yol düşünüyorsanız geri bile PSet-- veya
gibi haftalar iki yaptığımız şeyler ikili arama ya da doğrusal arama,
Her kelimenin hakkında güzel şeylerden biri Bir sütunda bir veritabanı veya her kelimede
Hatta, tam olarak aynı uzunlukta olması eğer bu karakterler bir sürü
boş, kullanabilirsiniz olduğunu verilerinizi rasgele erişim, değil mi?
>> Her biliyorsanız kelime, 16 karakter uzaklıkta
Eğer bu yüzden, işaretçi aritmetiği kullanabilirsiniz konuşan ve bize gidin 16, 32, 48, 64,
ve sadece atlayabilir Anında aritmetiğini kullanarak
senin veritabanında kelimelerin herhangi.
Bir VARCHAR eğer Oysa, ne yerine yapmam gerekiyor?
>> [TELEFON Çınlayan]
>> Bir VARCHAR var ise, rasgele erişim kullanamazsınız.
Ne bakmak veya yapmak zorunda?
Evet?
>> HEDEF KİTLE: [duyulamaz]
>> DAVID MALAN: Bakın whole-- iz yoluyla
Bütün liste boyunca büyük olasılıkla, ne arıyorsun?
Özel değerin ne tür?
HEDEF KİTLE: [duyulamaz]
DAVID MALAN: Looking boş sonlandırıcılar için
bu kelime ayrılmasını ayırmak.
Yani yine bir değiş tokuş ve Hiçbir doğru cevap var.
Ancak bu, özellikle, nerede Kullanıcıların pek olmayı olsun
senin sunucularda ve yük, insanların sayısı, yüksek olur kullanarak
Bu aslında nontrivial kararlardır.
Yani, biz bu kadar bu bırakın, ancak hakkı üzerinde aşağı kaydırma izin
İşte.
Şimdi, sütunların bir çift var Biz karar arama yapmak için sahip olduğu.
Bir kullanıcının izin mantıklı mı Bir kullanıcının kullanıcı adı veya kullanıcının, isim
null olmak ismi?
Yani, sadece boştur.
Biraz saçma geliyor, bu yüzden ben Bu onay kutularını gitmiyor.
Ama dışarı çıkıyor Veritabanı, sen söyleyebiliriz
Birisi, isteğe bağlı olarak bu değere sahip olabilir.
Bu sütun yok aslında orada olmak.
>> Şimdi, menü aşağı bu damla var.
Ve ben hâlâ fark Orada ilk satırda,
bu yüzden şimdi kullanıcı adı bahsediyorum.
Ve bu, bir veritabanı çıkıyor Basit sadece e-tablo aksine,
indeksler olarak adlandırılan güçlü özelliklere sahiptir.
Ve bir dizin söylüyorum bir yoludur Önceden veritabanı I insan olduğunu
Senden daha zeki değilim.
>> Ben, sorgularının hangi tür seçin biliyorum ya eklemek veya silmek veya güncelleme
Benim kod sona gidiyor Bu veritabanı üzerinde yapıyor.
Ben çok fazla veri okumak istiyorum.
Ben çok fazla veri eklemek istediğiniz.
Sürekli istiyorum çok veri silin.
Ben olmak için gidiyorum biliyorsanız bir sürü adı gibi bir alan erişme,
Ben preemptively söyleyebilirim Veritabanı, ben senden daha fazla bilgi
ve ben kararname istediğiniz Eğer endeks bu alanı olmamalıdır.
Bir alan veya sütunu dizine Nerede anlamına gelir peşin veritabanı
gibi, bazı fikirler ödünç gerekir, Haftanın dört ve beş ve altı CS50 gelen
ve aslında kurmak ikili arama gibi bir şey
ağaç ya da bir şey genellikle B ağacı denilen
öğrenmek olacağını Bir sınıf gibi CS124 içinde
Harvard'da bir algoritma sınıfı, ya da herhangi bir başka yerlerde sayısı.
>> Veritabanı ve akıllı Onu hayata insanlar
saklamak için nasıl anlamaya olacak bilgi bu tabloda
bellekte böylece arar ve diğer işlemler süper hızlı.
Bunu yapmak zorunda değilsin.
Sen uygulamak zorunda değilsiniz doğrusal arama veya ikili arama
veya sıralama veya seçimi birleştirme sıralama hiçbirini.
Eğer söylersen veritabanı sizin için yapar o preemptively dizine bu alan.
>> Ve sen, orada da görebilirsiniz Bazı diğer özellikleri
Biz veritabanı zorlamak için söyleyebilirim.
Ben Unique seçerseniz ne anlama olabilir Bu menüden, sadece sezgisel?
Evet?
>> HEDEF KİTLE: [duyulamaz]
DAVID MALAN: Evet, Kullanıcı adı özgü olması gerekmektedir.
Bu iyi bir şey mi yoksa kötü bir şey için kullanıcıları ile bir web sitesi için bir veritabanı?
Adlarını benzersiz olmalıdır?
Evet, muhtemelen.
Işte ne olur alan biz oturum açmak için kullandığınız
Gerçekten insanların sahip istemiyorum Aynı hissediyorum ya da aynı kullanıcı adı.
Yani, biz olabilir Veritabanı böylece zorlamak
şimdi benim PHP kodu veya herhangi bir dilde, Ben, örneğin, denetlemek zorunda değilsiniz
mutlaka bu adı yok Birinin kayıt izin önce var?
Veritabanı adlı iki kişiyi izin vermez David ya Malans Bu durumda kayıt olun.
>> Ve bir kenara olarak, bu bile olsa menü sadece birini seçmenize olanak sağlar,
benzersiz bir dizin var biridir süper hızlı performans için endeksli,
ama aynı zamanda teklik zorlar.
Ve biz geri geleceğiz neler sadece bir an ortalama iki.
Bu arada, ben gidersem benim ikinci sıra, hangi
Kullanıcının adı, ben belirtmelidir adı benzersiz olmalıdır?
Hayır, kesinlikle olabilir çünkü have-- hiçbir iki Davut var
Bu odada Malans, büyük olasılıkla.
Ama biz farklı bir ad seçerseniz, biz kesinlikle çarpışmalar olabilir.
>> Tablolar ve benzeri karma geri düşünün.
Yani, biz kesinlikle istemiyoruz adını alan benzersiz yapmak için.
Yani, biz sadece bırakmak için gidiyoruz Bu çizgi, çizgi, çizgi, hiçbir şey.
Ve ben bırakacağım yalnız her şey.
Nitekim, bu alanların çoğu Biz umurumda zorunda kalmazsınız.
Ve ben bu kurtarmaya hazır olduğumda, internet işbirliği halinde
Çok, çok, çok Kaydet'i tıklatın ve yavaş yavaş veritabanı kurtardı olsun demek.
Ve şimdi ben bu geri döndüm arayüzü, hangi kuşkusuz,
ilk bakışta çok zor.
Ama yapacağım tüm tıklama sol üst kısmında kelime Kullanıcıları.
Buraya gitmek için gidiyorum, tıklayın Kullanıcılar ve varsayılan, o
Bazı SQL yürüttü ancak bir anda bu konuda daha fazla.
İşte ne yaptım sadece bir özetini sunuyoruz.
Ve gördüğünüz endişe etmeyin Burada Latince ve İsveççe söz.
Bunlar sadece varsayılan olarak ayarları, başlangıçta MySQL, çünkü
veya PHP MyAdmin, ikisinden biri oldu Bazı İsveçli insanlar tarafından yazılacak.
Ama burada bizim durumumuzda alakasız.
>> Pekala, neden Bu tüm ilginç?
Bu çıkıyor, ben veri ekleyebilirsiniz kod yazarak bir veritabanına.
Ve ben go ahead ve kulüpler Burada benim dosyasında, ben
go ahead ve benzeri taklit edecek Bu bu veritabanına, kablolu olan
şu anda değil, ama olacak Biz sorunun olsun yedi ayarladığınızda olacak.
Ve ben önde gidiyorum ve Sorgu adında bir işlevi yürütmek
hangi biz sorun size verecektir Bu yedi dağıtım kodunu ayarlamak
En az bir argüman alır, hangi sadece bir dizedir.
SQL kodu bir dize.
Peki, nasıl öğrenmek üzereyiz Structured Query Language yazın.
>> Ben yeni bir satır eklemek istiyorsanız, benim Veritabanı birisi sunmuştur çünkü
kodumu bir form, ben tam anlamıyla olur Kullanıcılar INSERT INTO aşağıdaki bilgileri
alanlar: username, virgül, isim, DEĞERLER,
ve şimdi eklemek gerekir Malan ve alıntı gibi bir şey,
Alıntı sonu 'David Malan.' Ve şimdi Hatta SQL aşina olanlar için,
neden tek tırnak kullanıyorum Bu yeşil dize içinde?
Ne nedeni burada olabilir?
>> Ben eş-karışarak iki dil olduğumu dikkat edin.
Sorgu, bir PHP fonksiyonu ancak bir argüman alır.
Ve bu argüman kendisine sahip olmak adında başka bir dilde yazılmış
SQL, Structured Query Language.
Yani, her şey ben Sadece burada sermiştir
SQL denilen bu dildir.
Yani, tek tırnak ne, sadece hızlı aklı kontrol gibi?
Devam et.
Onlar dizeleri konum.
Yani, alıntı, unquote Malan ve alıntı, unquote David Malan dizeleri vardır.
Ve sadece şimdi sezgisel düşünme C ve PHP hakkında bildiklerini bilmek,
Neden bunu, hangi genellikle vermedi dizeleri için kullanılan çift tırnak?
Neden bunu yapmak istemedi?
Evet?
>> HEDEF KİTLE: [duyulamaz]
DAVID MALAN: Kesinlikle.
Ben zaten kullanıyorum çünkü Yolda çift tırnak
Tartışmanın dışında PHP fonksiyonu,
Ben sadece tercüman karıştırmayın olacaktır.
O bilmeyecek, bu arada gidiyorsun?
Bu arada gidiyorsun?
Yani, ben onun yerine alternatif.
>> Yoksa ben, böyle bir şey yapabileceğini ters eğik çizgi alıntı veya ters eğik çizgi alıntı.
Açıkçası, bu sadece başlar Çok okunmaz ve çirkin olsun.
Ama bu elde edeceğini hem de aynı sonucu.
>> Ben olsaydım Yani, bu yürütmek için Sorgu şimdi, ne olduğunu görelim.
Ben şimdi ve oldukça önde gidiyorum PHP kodu, çalıştırmak daha hangi
Eğer oynayacağız nerede probleminde, yedi set
Bunun yerine PHP myadmin gitmek için gidiyorum.
Ve ben elle gidiyorum SQL sekmesine gitmek için,
ve bana arayüzünde yakınlaştırmak edelim.
Ve ben yapıştırmak için gidiyorum Ben sadece yazdığınız şey.
Ve renk kodlaması vardır Şimdi biraz değişti
Sadece program formatları nedeniyle işler biraz farklı.
Ama bütün Yaptığım fark I Kullanıcılar takın, söyledim.
Ben bir virgül, daha sonra, belirttiğiniz ayrılmış parantezli liste iki
Ben eklemek istediğiniz alanları ve Sonra ben tam anlamıyla söylediğim değerler
Başka bir parantez, ardından ve daha sonra iki değer
Ben plug-in istiyoruz ve Şimdi iyi ölçmek için,
Ben sonunda bir noktalı virgül koymak gerekir.
Yani, bu Bu PHP değil C değil.
Bu artık SQL ve ben yapıştırarak ediyorum var bu web tabanlı arayüzüne
bana izin verecek, en kısa sürede ben Git düğmesini tıklatın olarak,
veritabanında bu sorguyu yürütmek CS50 IDE içinde çalışan.
>> Yani bu iyi.
Dedi Bildirimi bir satır takılı, süper hızlı gitti
0.0054 saniye bu verileri eklemek için.
Yani, bu oldukça sağlıklı görünüyor.
Benim sorgu reformasyon sadece onu görmek için buraya beni için
renk kodlu sürümü tür.
Ama şimdi ben tıklarsanız İnsanlar, hatta fark
Darmadağın bir sürü orada olsa Ekran, benim masa şimdi iki satır vardır.
>> Yani, bana go ahead ve başka yapalım.
Bunun yerine, bana izin Yine SQL sekmesine gidin.
Ve bu sefer böyle bir şey eklemek gerekir Rob ve onun adını Rob Bowden olacak.
Bowden.
En Kaydet'i tıklatın edelim.
Üzgünüz, yerine gidin.
>> Yine Gözat'ı tıklatın ve Şimdi iki satır var dikkat edin.
Yani, bu sadece bir yol daha karmaşıktır açılması Google E-Tablolar yolu
ve sadece sütuna bir satır yazarak.
Ama anahtar olduğunu ne Şimdi sözdizimi var
hangi kod yazmak, böylece sonuçta, biz aslında olabilir
Bazı ve bunu.
Bu PHP destekleri hatırlayın Süper global değişkenler.
>> Doların içeride nedir PHP GET çizgi oturum?
Biz tek bir göz attım ya da iki basit örnekler.
Ve PSet6 içinde, merhaba var çağırmak Bu değişkeni kullanır nokta PHP.
Ne oraya gidiyor?
Ya da nedir?
Biraz daha yüksek sesle.
>> HEDEF KİTLE: [duyulamaz]
>> DAVID MALAN: Bu bir kar var Dizinin tohumu, burada
Bir söyleyerek sadece süslü bir yoludur Anahtar değer çiftlerini sahip dizi.
Ve tuşlar sayısal değildir.
Onlar kelime veya dizeleri konum.
Ve özel olarak ise, ne bu anahtar değer çiftleri nelerdir?
Onlar nereden geliyor?
Maalesef?
>> HEDEF KİTLE: [duyulamaz]
DAVID MALAN: Hayır?
Nerede o anahtar yapmak değer çiftleri geliyor?
Tekrar söyle?
Yine mi?
Ben sadece bir işitme şey miyim?
>> [KAHKAHA]
>> Doğru, evet mi?
>> HEDEF KİTLE: [duyulamaz]
David MALAN: Evet, Sorgu dizesi geliyor.
Yani, zaman içinde geri sarma durumunda Biz Google ile oynadım zaman
ve biz Google.com çizgi gittin Arama soru işareti q, kediler eşittir
Ben vurmak olsaydı girin ve eğer Google, PHP uygulanmıştır
Google yazdı PHP kodu dolar işareti erişim olurdu
hangi iç GET altını anahtar olarak adlandırılan Q ve bir değer
daha sonra kullanabileceğiniz denilen kediler ile gerçek bir arama yapmak için kullanılır.
>> Yani, aslında, ben ne gidiyorum Şimdi benim PHP kodu geri dönmek yapmak
Yine PSet7 içinde daha fazla görürsünüz.
Ve yerine takıp sabit kodlanmış değerleri olan
Bir gibi görünmüyor çok dinamik web sitesi,
Sana bir teaser vereceğim Gerçek kod ne yapacağını.
Siz iki vereceğini Soru böyle işaretler.
Ben adı nedir bilmiyorum.
Ne olduğunu bilmiyorum isim, olacak
ama ben can biliyorum dinamik onları.
>> Peki, şimdi yazıyoruz kod ise Google'ın sunucularında çalışan kod,
veya bu merhaba nokta ise PSet6 ile gelen PHP,
Ben geçmek için gidiyorum sorgu işlevi
sadece printf gibi, diğer iki argüman.
Alıntı, GET, unquote adınızı, ve alıntı unquote isim, GET.
Ve şimdi, ne fark genel yapısı burada.
Ben solda var aramanın taraftaki,
Bu işlev PHP sorgu denir.
Hala ilk olarak sahip argüman, metnin sadece bir dize.
>> Ama metnin bu dizedir SQL adında bir dilde yazılmış.
Ve açıkçası, büyük bir dil değil.
Biz sadece hakkında konuşmak için gidiyoruz resmen bugün gerçekten.
Ve sonra sorunun set Yedi nispeten var
Biz konum bazı özellikler kaldıraç olacak.
Soru işaretleri olsa da, fiş demek başka bir değere bir değer ve fiş burada
İşte.
Ve haber, ben ihmal şeyden quote-- lanet yerinden
tırnak etrafında bu-- Bu sefer işaretler.
Ben alıntıyı ihmal ettik soru işareti etrafında işaretleri,
Üzgünüm, bu sefer.
>> Peki, bu konuda güzel Soru işareti özelliği olan
PHP, Ruby desteklemek eğilimindedir ve Python ve diğer diller,
Bu sadece bazı fişi demektir Burada değer ve ne biliyor musun?
Sen kullanmak isteyip anlamaya Tek tırnak veya çift tırnak.
Bu beni rahatsız etmeyin entelektüel ilginç ayrıntılar.
Ama, emin doğru olduğunu yapmak benim kod sonuçta böylece
operasyonel ve güvenli olan uzun zaman önce bir anlamı olacaktır.
>> Şimdi, kaç argüman lazım, toplam açık, sorgu işlevi alma nedir?
Herkes ikiden fazla oy vermek ister misin?
Üç?
Tabii, neden?
Neden üç?
>> HEDEF KİTLE: [duyulamaz]
DAVID MALAN: Kesinlikle.
İlk bölüm dizedir.
İkinci argüman dolar işaretidir GET braket adınızı altını çizmektedir.
Ve üçüncü argümanı Aynı şey, ama sadece isim.
Şimdi, diğer bir deyişle Yani Ben bir web formu olsaydı
Bu, metin alanlarına vardı Kullanıcının adı için bir,
onun için bir ya onun adı, sadece gibi bir web sitesi görürdünüz
Eğer kayıt sırasında Bazı web sitesi, bu kudreti
arka ucunda kodu olması Aslında ekleme şimdi yok
veritabanına.
>> Şimdi aksine, hızlı ileri bakalım.
Bir kullanıcı artık varsayalım oturum ve istediğiniz
olmadığını denetler PHP kodu yazmak için Sadece giriş var kişi
Bir kullanıcı aslında yapabilirsiniz olduğunu oldukça basit bir sözdizimi kullanın.
Sen diyelim, SEÇ söyleyebiliriz Yıldız her şey demektir, nerede yıldızı.
Ne olduğunu bilmiyorum ben istiyoruz, bu yüzden bana ver
tablodan tüm sütunlar Kullanıcıların nerede denir ve bu güzel.
Seç ne destekler olan, bir öncül olarak adlandırılan
Ne istediğinizi eleme bir yol gibi.
Nerede adı eşittir alıntı, unquote Malan.
Yani burada da, ben gömülü ettik argüman içinde
Bir PHP işlevi, SQL kod satırına.
Ve bu SQL kodunu bu Zaman anlamıyla gidiyor
alıntı aramak için, Malan unquote.
>> Şimdi, tüm bu yararlı değil bu yüzden o atlamak için gidiyorum
ve ben uzağa koymak için gidiyorum Brady bu uç ve git
ve plug-in yerine Burada bir soru işareti.
Yani, sadece temiz olması ne benim ikinci argüman gerekir
Birisi sadece ve I oturum açtı olması durumunda o aslında olmadığını denetlemek istiyor
Bir kullanıcı?
HEDEF KİTLE: [duyulamaz]
DAVID MALAN: Evet.
Ben dolar işareti çizgi duymak Alıntı, unquote adınızı GET.
Ve bu benim dönmelidir benim veritabanında satır herhangi
Bu Malan bir kullanıcı adı var.
Şimdi umarım ben geri almak için gidiyorum Sıfır Malan burada hiç varsa,
veya bir o varsa.
Geri dönmem gerektiğini iki ya da üç ya da dört.
Neden?
>> HEDEF KİTLE: [duyulamaz]
>> DAVID MALAN: Doğru, benzersiz söyledi?
Basit bir nedeni.
Dediğim Çünkü ilgisi var Sadece mantıklı, benzersiz,
Sadece sıfır ya da bir Malans olabilir Bu özel veritabanı tablosu.
Şimdi gördüm bir kenara, sadece bu yüzden olduğu gibi o, ben kullanmaya devam olsa GET
ve PSet6 sadece kullanılan olsa bile , Kesinlikle POST olabilir GET.
Ve Mesaj başka olduğunu hatırlamak bilgi göndererek tekniği
formdan ancak URL görünmüyor.
Bunun için kesinlikle biraz daha güvenlidir kullanıcı adı ve şifre gibi şeyler,
bu PSet7, aslında, içerecektir.
>> Yani, PHP bunu yapmasına izin Myadmin ve ne olduğunu görün.
MySQL sekmesine gitmek için gidiyorum.
Ve o varsayılan değer fark PHP MyAdmin, sadece yardımcı olmaya çalışın
nerede kullanıcıların tek yıldızı seçmektir.
Peki, biri çok, her zaman doğrudur Bu etkili aptal vardır
sadece her şeyi seçin.
Ama ben biraz olacağım daha bilgiçlik elle
Kullanıcılar SELECT yıldızını yazın.
>> Şimdi teknik olarak yapabilirsiniz tablo adını alıntı.
Bu zorunda nadir, ancak bu değildir fark
ABD klavyede normal tırnak.
Bu sözde ters tırnak, olduğu Sol üst taraftan genellikle
Klavyenizin köşesi.
Ama bu olacak o nadir aslında ile rahatsız etmek gerek,
bu yüzden sadece zaten onları ihmal edeceğiz.
Yani şimdi, ben go ahead ve gidip değmesine izin.
Ve kaç satır I almalısınız geri ben kullanıcılardan yıldızı seçtiğinizde?
>> HEDEF KİTLE: [duyulamaz]
DAVID MALAN: Emin satır sayısı.
Ama bu kaç Şu anda somut bir hikaye?
İki vardı çünkü Ben ve Rob vardı.
Ben Git'i tıklatın Yani, ben görsel olarak görüyorum Ben, gerçekten, geri iki satır aldım.
Darmadağın bir sürü üzerinde var Ekran, ama ben sadece iki satır görürsünüz.
Ben tekrar yapmak ve eğer aksine, do Kullanıcılar, nerede adı SELECT yıldız
alıntı, Alıntı sonu eşittir Malan, şimdi ben, Git seçeneğini tıklatın eğer
Ben sadece geri bir satır almak için gidiyorum.
Ve son olarak, ben yaparsam Böyle bir şey, herhalde
Ben umurumda değil bu Her şeyi alıyorum,
hangi şimdi biraz anlamsızdır, Sadece iki sütun var çünkü.
Ben seçerek ediyorum gibi değil veri büyük miktarda.
Devam edin ve varsayalım DAN adını SELECT edebilirim
kullanıcı adı Malan eşittir kullanıcıları, Ne dürüstçe SQL hakkında güzel,
gerçekten sadece yapmasıdır ne yapmak bunu söylemek.
Oldukça özlü, ama tam anlamıyla sadece ne yapmak istediğinizi söylemek.
Kullanıcılar nerede seçin ismi kullanıcı adı Malan eşittir.
Ve gerçekten bu açık olduğunu.
Yani, şimdi ben Git, kaç vurmak satırları Ben geri almak için gidiyorum?
Bir, sadece çünkü Malan, umarım.
Veya sıfır o değilse Orada, ama maksimum tek.
>> Ve geri kaç sütun alacaksınız?
Kaç sütun?
Bu sefer, ben sadece gidiyorum Ben yapmadım çünkü bir tane almak
her şey, hangi yıldızı seçin.
Şimdi ben sadece adını seçerek, bu yüzden yapıyorum Sadece bir sütun ve bir satır geri almak.
Ve bunun uygun çeşit görünüyor gülünç, sadece bakarak süper
Bu gibi küçük.
Peki, gerçekten neler oluyor?
Bir SQL çalıştırdığınızda Sorgu seçeneğini kullanarak
ne alıyorsanız Geri veritabanından
geçici bir tablo gibi satırlar ve sütunlar ile belki,
ama bu bir şey ihmal olduğunu aslında sizin tarafınızdan seçilen değildi.
Yani, o kimse büyük bir olsaydı gibi Tüm öğrencilerin elektronik tablo
Bazı kayıtlı Öğrenci grubu, ve sen diyorsun,
Bana ettik freshman tüm vermek Öğrenci grubu için kayıtlı ne
sizin meslektaşım öğrenci grubu yapabilir
onlar sadece el olabilir edilir Eğer bütün elektronik tablo.
Yani seçme yıldızı demek gibi.
Ve eğer biraz can sıkıcı Sadece çaylak istedi.
Ve böylece yerine, söz konusu olursa veritabanı tablosundan seçin yıldız
Nerede yıl eşittir alıntı, unquote birinci,
o arkadaşın sanki bulunuyor Öğrenci grubu
kelimenin tam anlamıyla vurgulanan ve Kopyalanan sadece birinci satır,
Yeni Google içine yapıştırılan Elektronik tablo veya bir Excel dosyası,
ve geri teslim Sadece dosyayı açar.
Yani gidiyor hepsi bu kavramsal burada.
>> Yani sonunda biz yapabiliriz bazı oldukça süslü şeyler
adları gibi şeyler saklayarak ve şifreler ve benzeri.
Ama, o çıkıyor, biz yapmalıyız farklı bu biraz daha.
Sadece o zeki değil Bir kullanıcı adı ve şifre saklayın.
Daha önce biri, sanırım Buraya, bir kimlik önerdi.
Hemen Kimliği gibi olabilir Harvard kimlik veya Yale'in Net ID,
ama bu bile basit olabilir Bizim veritabanı durumda.
Ve gerçekten de, ortak dava Başka bir sütuna sahip olmaktır.
Ve ben gidiyorum önde ve masamı düzenleyin.
Ve etrafında oynarsa PSet7 için bu arayüz,
Eğer kontrol edebilirsiniz görürsünüz Burada bu düğmeye ekleyin
masanın başında bir alan.
Ben Git'i tıklatın şimdi Ve eğer gidiyor Bana şu formlardan birini vermek
önceki.
Ben kimliği adında bir alan eklemek için gidiyorum.
Ve ben bir sayısal tür yapmak için gidiyorum.
>> Ben bir sürü var ve numerics için değerleri.
Ben sadece bir INT seçmek için gidiyorum ve farklı boyutlarda dert.
Ben belirtmek zorunda değilsiniz uzunluğu veya bir değer,
o olacak çünkü 32 bit ne olursa olsun.
Nitelikler, biz daha önce görmedim.
Bunlardan herhangi birinde herhangi bir faiz menü seçenekleri bu sefer?
Bir INT için?
Ne teklif mi?
Hayır mı?
Bunlardan herhangi mantıklı mı?
Evet.
Doğru, imzasız, tamam mı?
>> Biz gidiyoruz Genellikle vermek Herkesin benzersiz bir numaradır, hangi
Bu hikaye nerede gidiş, ben gerçekten sadece istiyorum
Bir kişinin sıfır gibi numarasına sahip olacak ve bir ve iki ve üç ve dört.
Ben uğraşmak gerek yok Negatif sayılarla.
Sadece aşırı karmaşıklığı gibi görünüyor.
Ben dört milyar olası değerleri istiyorum, değil dört milyar olası değerler,
bu yüzden ben sadece iki katına Benim INT kapasitesi.
Bir kenara, sen ilişkilendirmek istiyorsanız itibariyle Facebook gibi bu bir şey,
geri günün ne zaman sıralamada Facebook ilk çıktı
Ben ne olduğunu inanıyorum Onların MySQL veritabanı kullanan
Bir kullanıcının saklamak için tanımlayıcı, sadece bir INT oldu.
Ama tabii, çok şey var Dünyada gerçek insanlar.
Sahte Facebook bir çok şey var Dünyada hesaplar.
Ve böylece sonunda, Facebook taştı Bir INT boyutu, bir dört milyar
değer.
Neden, bakarsanız Hangi etrafında ve web siteleri var
size söyleyebilirim benzersiz bir kimliktir.
Ve sen bir kullanıcı adı seçti asla eğer Facebook, size benzersiz kimlik numaranızı göreceksiniz.
Ben profil nokta PHP düşünüyorum soru işareti kimliği şey eşittir.
O şimdi büyük bir gibi bir şeydir INT, ya da uzun uzun eğer sen bir,
64-bit değeri hangi veya benzer bir şey.
>> Yani, hatta gerçek dünyada bu do konular sonuçta bazen önemli.
Ben eğer Ve, burada çıkıyor Benim kullanıcıları benzersiz bir kimliği tüm veriyor
Ben süper açık olmak istiyorum ve Minimal bu alan benzersiz yapın.
Bir tane var dışarı Ama döner isimlendirme bugün yerin çok
Bu birincil anahtar.
Eğer veritabanı tasarlama ediyorsanız masa ve önceden biliyor
Bu tablodaki sütunlardan biri olduğunu ve benzersiz satırları belirleyecektir gerekir
Tabloda, istediğiniz Bunu belirtmek ve veritabanı söyle,
Bu benim birincil anahtardır.
Çiftleri olabilir diğer alanlarda,
ama bu bu veritabanını söylüyorum Benim birincil, benim en önemli alan,
benzersiz olmasını garanti ediyor.
>> Şimdi, bu gereksiz görünüyor.
Ben şimdi biz öneriyorum Burada Kaydet tıklayarak, eklemek,
alan called-- ve ben gidiyorum go ahead ve AI tıklayın,
Biz geri geleceğiz bir anda, Save söyledi.
Ben şimdi öneriyorum Benim tablo bu gibi görünüyorsun.
Ben, ID adında bir INT alana sahip Kullanıcı adında bir CHAR alanı,
Bir VARCHAR adı denilen alan ancak kimlik, birincil ve bu nedenle benzersiz ise,
Sadece neden israf etmedi Zaman ne tanıtan
etkin bir şekilde benzersiz bir ikinci alan bir INT var kimliği aradı?
>> Kullanıcı adı, hatırlama, oldu zaten eşsiz, dedik.
Yani sadece mantıksal, sana ihtiyacım yok nedenle herhangi bir veritabanı deneyimi
Neden bu yolla Ben tanıttı olabilir
benim de benzersiz bir tanımlayıcı olarak INT?
Bu-- yine ne yazıyor?
>> HEDEF KİTLE: [duyulamaz]
>> David MALAN: Rastgele erişim kolay, neden?
>> HEDEF KİTLE: [duyulamaz]
DAVID MALAN: Evet, var Sadece sayıları erişme.
Yani, eğer gerçekten bu düşün Bir masa, bir dizi gibi olan
şimdi benzersiz tanımlayıcılar Etrafa atlayabilir.
Ve bundan daha iyisi olduğunu ne kadar büyük bir INT yine olacak?
32 bit ya da dört bayt.
>> Ne kadar büyük adımı olacak?
Maksimum?
16 bayt.
>> Yani gerçekten, hakkında bakmakta eğer kodunuzu performans,
Eğer tercih ediyorum, geri PSet5 düşünüyorum dört bayt değeri ya da bir 16 aramak için
bayt değeri, değil mi?
Gerçekten bu kadar basit.
Sen çok eser olarak dört kez yapmak zorunda Bu çünkü adları aramak için
16 bayt.
Yani, kelimenin tam anlamıyla var olmak üzere tüm 16 bayt karşılaştırmak
evet tabii, bu benim istediğim kullanıcı adı olduğunu.
Bir INT için şunları yapabilirsiniz Oysa sadece dört byte ile bunu.
>> Ve bir kenara olanlar olduğu gibi Bilgisayar donanımı ile ilgilenen,
Eğer böyle bir şey sığabilecek çıkıyor Bir INT ya da bir şey bir 32-bit değeri
Bir bilgisayarda bir kayıt olarak adlandırılan Süper demektir CPU,
Hatta en az, süper hızlı Bilgisayarın donanım seviyesi.
Yani, her yerinde sadece avantajları var.
Peki, bu ne anlama geliyor?
Aslında, ne zaman tasarlarken bir Zaman, hemen hemen tüm veritabanı tablosu
değil sahip olacak Sadece umurumda veriler,
gibi aynı zamanda bir şey benzersiz bir tanımlayıcı
Bu çünkü gidiyor Bizi diğer şeyler yapalım.
Ve burada tek sorun düşmeyeceği edelim.
>> Kullanıcıların değil ki varsayalım sadece adları ve isimler,
ama onlar da şehirler gibi şeyler var ve devletler ve posta kodları, en azından
Burada ABD'de.
Yani, ben önde gidiyorum ve sadece hızlı bir şekilde söylemek,
Bana üç sütun daha vermek Tablonun sonunda.
Ve bu, Şehir olacak Bu, Devlet olacak
ve bu Zip olacak.
>> Şimdi şehir, hangi veri tipleri Bu, belki de, olmalı?
VARCHAR?
Ne olduğunu bilmiyorum En uzun isim şehridir.
Somewhere Amerika'da, var muhtemelen bazı gülünç uzun kelime,
bu yüzden biraz, Sadece 255 ile gidelim tarihsel ya da keyfi.
Devlet, ne yapmak istiyorsun?
Yargı çağrısı, değil mi?
Ne en verimli belki değil mi?
Kaç karakter?
Belki sadece iki, eğer biz Sadece yapıyor paçayı,
gibi, MA Massachusetts ve benzeri.
Yani, ben ikisinin bir CHAR değerini gidiyorum.
>> Posta kodu ilginç biri.
Biz böylece 02138 yılında buradayız Biz ne kullanmalısınız önerir?
Doğru, bir INT değil mi?
INT, INT, kısa?
Kısa çalışacak.
Hayır mı?
CHAR ya da beş, ama ben bir INT istiyorum.
Neden INT geri itin?
Bu beni ikna.
Ne INT, benim fikir aptalca değil mi?
Evet.
>> HEDEF KİTLE: Daha fazla bellek alın.
>> DAVID MALAN: daha fazla bellek alın.
Dört bayt, ama sen Bir posta kodu öneren
ya da beş bayt olarak birisi, bir CHAR olarak oldu bu gerçekten değil, eh gibi hissediyor
dava.
>> Peki, eğlenceli hikayesi.
Yıllar önce, ben kullanmak için kullanıldığında Benim e-posta için Microsoft Outlook,
Sonunda Gmail'e geçmek istedim.
Ve böylece, ben tüm ihraç benim CSV dosyası olarak Outlook kişileri.
Virgül ayrılmış değerler, hangi sadece ben demek
Bütün arkadaşlarım isimleri vardı ve son isimler ve telefon numaraları ve posta kodları
ve bütün.
Ve sonra yapılan o kadar açılması hata
Excel'de, hangi is a elektronik tablo programı o
Gördüğümüz olarak CSV dosyalarını anlar.
Ama sonra, ben, gibi, vurmak gerekir Bir noktada Komuta Kontrol S veya.
Ve görünüşe göre Excel anda Herhangi bir zamanda bu sayede bir özelliği vardı o
o yararlı olmaya çalıştım, bir dizi gördüm.
Ve bu sayı ile başladıysanız sıfır, sadece onlardan kurtulmak istiyorum.
Neden lider gerek yok tamsayılar sıfır?
Bunlar matematiksel, anlamsız değil.
Onlar anlamsız değil ABD Posta sisteminde.
Yani, ben yıllardır yaşadım, bu güne kadar, ben hala
Bu arkadaşlar varsa Birisi var ihtiyacım nadir vaka
bu gün ele, Ben hala o ben görürsünüz
Cambridge bir arkadaşım var Massachusetts 2138.
Sen ve eğer sinir bozucu programlı sıralamak için çalışıyor
zarfları oluşturmak ya da sadece aşağı zerre.
Ve bu, çünkü bu nedenle var Yanlış veri türü seçti.
Yani, senin fikrin seviyorum.
En CHAR alanını kullanalım.
Beş karakter hariç Köşe durum var.
Hala posta göndermek için, Bazen bu gün kodları zip,
Onlar gibi konum, artı dört.
Yani, daha sonra bir tire ve ihtiyacınız Biz dört tane daha numaralar ihtiyacımız var.
Yani dürüst olmak gerekirse, elinden Birçok farklı yollara gitmek.
>> Şimdilik, ben devam edeceğim basit ve ben sadece
Bir olduğunu söylemek için gidiyoruz Beş CHAR değer ve biz konum
Bütün çizgi artı dört atlamak için gidiyoruz.
Ancak bu tradeoffs türü vardır.
Ve aklınıza gelebilecek doğan aynı sorunları
telefon numaraları ya da diğer alanları ile.
>> Ve şimdi, bu aslında Bir aptalca bir yol aşağı gitmek.
Rob ve ben ve Hannah hem varsayalım Maria ve [? Davon?] Ve Andy
ve personel diğerleri canlı Cambridge, Massachusetts, 02138 yılında.
Bu aslında ben olduğumu aptal gibi hissediyorum Benim kullanıcıların tabloya eklenmesi, şehir, eyalet,
ve zip.
Neden?
>> HEDEF KİTLE: [duyulamaz]
>> DAVID MALAN: Tekrar söyle?
HEDEF KİTLE: [duyulamaz]
>> DAVID MALAN: Hep sen Doğru, birlikte gidecek?
Çıkıyor, biz düşünmek için kullanılan Bu ayrıntısına kadar biz böyleydi
tüm ABD arandı ve orada çıkıyor
bazı tutarsızlıklar vardır Nerede birden kasabalar var
garip Aynı zip.
Ama biz şu an 02138 bunun için şart eğer her zaman Cambridge, Massachusetts olduğu
neden dünyada sen depolamak veritabanı Cambridge ve Yüksek Lisans ve 02138
Benim için ve Hannah ve Rob ve [için? Davon?] Ve canlı diğerleri için
Burada Cambridge, bu kadar mükemmel gereksiz.
>> Biz kurtulmak gerekir Sadece ne depolayan?
Sadece posta kodu.
Ama sonra, biz sadece depolamak eğer posta kodu, ben, muhtemelen, istiyorsun
02138 nerede benim web sitesi için bilmek.
Yani, başka bir tablo gerekir.
Ve bunda bir sorun yok.
Ve aslında bu biridir tasarlama tabloların tasarım süreçleri
Siz de bu sayede PSet7 yapmak edeceğiz ortak verileri faktör istiyorum.
Sadece biz faktoring oldum gibi ortak kod ve dışarı faktoring ortak
Burada, CSS gelen stilleri Çok veritabanında,
Ben sadece benzersiz için 02138 gerekirse Birinin memleketi belirlemek
için Cambridge, Mass saklamayın masanızdaki her lanetlemek kullanıcı.
>> Bunun yerine, adında ayrı bir tablo var Fermuarı olması gerektiğini sütunları?
Muhtemelen bir ID alanı, sadece için, çünkü ilkeler şimdi bahsediyoruz.
02138 Muhtemelen bir zip alanı.
Ve sonra muhtemelen diğer sütunları?
Şehir ve devlet, ancak yalnızca bir tane var Satır 02138 için, 02139 için bir satır,
90210 için bir satır.
Ve bu tam anlamıyla Biliyorum tüm posta kodları.
>> Yani şimdi, ne yapabilirim?
Bunun nedeni, problemlidir Şimdi iki tablo var.
Yani, benim kullanıcılar çoğunlukla burada bitti, ama onların şehir devleti bilgidir
buraya.
Yani, orada, SQL ile çıkıyor aslında bir yol, bilgi katılmak için
ve Pset bu görürsünüz.
>> Ama yapabilirsiniz çıkıyor Böyle bir şey yapmak.
Kullanıcılar SELECT yıldız, ON fermuarlar JOIN Kullanıcıların zip fermuarlar zip nokta eşittir nokta.
Hangi biraz uzun olduğunu, Kuşkusuz, ama bu sadece
seçin her şey demektir Benim kullanıcıların tablo alma süreci
ve benim fermuarlar tablo.
Birinde onlara katılın Alan onlar sütununda var.
Yani, kelimenin tam anlamıyla bir şey yapıyor Bu gibi ve bana geri ver
yeni bir geçici tablo Bu, o büyük olan, geniş var
bütün bunlar vardır İkisinden de sütunlar.
Ve bu, oldukça basit olurdu Böyle bir şey yapmak için sözdizimi.
>> Yani, ileride bu var ama orada oluyor
diğer tasarım kararları olmak sen edeceğiz sadece dizinleri ile, yapmak zorunda
ama aynı zamanda zorluklar içine koşuyor.
Aslında, bir meydan okuma var herhangi bir veritabanı tasarımı
bu sayede bazen iki kişi isteyebilirsiniz veritabanının aynı satırları erişmek için
tablo.
Yani, bu bir şey olduğunu yaparız olduğunu yanı sıra PSet7 karşınıza.
>> Ama ben bir bakmak düşündüm SQL mümkün saldırı.
Bazıları nelerdir ortaya çıkabilir sorunlar?
Yani, PSet7 bu karşılaşırsınız.
Ve biz düpedüz ne diyeceğim Bu sorun için kodlayan bir çözümdür.
Ama bir üst düzey sınıf alırsak, Özellikle işletim sistemlerinde,
Eğer karşılaşmaya gidiyoruz atomicity bir sorun,
yapmaya çalışıyor sorunu Birden fazla şeyler bir anda
kesintisiz.
>> Ve ben bu tanıtmak düşündüm Bir metafor ile PSet7 fikri
Ben Margo kendimi öğrendim Seltzer en CS164 işletim sistemleri
önce sınıf yıl.
Bu yurt birine sahip olduğunu varsayalım senin yurt odasında ya da evde buzdolabı,
ve süt için gerçek bir tutku var.
Ve böylece, sınıfların eve Bir gün, sen buzdolabı açın.
Ah, kahretsin.
Buzdolabında hiç süt yok.
Yani, buzdolabı kapatın Kapıyı kilitlemek için yurt kilit,
köşeyi dolaşmak CVS, hat olsun,
ve bazı süt için kontrol başlar.
Ve bu, bir süre almaya gidiyor o lanet öz ödeme nedeniyle
sayaçlar zaten kullanmak için sonsuza kadar sürer.
Yani arada, senin oda arkadaşı eve gelir.
O gerçekten de süt seviyor.
Onlar yurt odasına gelip, buzdolabı açmak, oh, kahretsin.
Artık süt var.
>> Yani, o da köşeyi gider.
Ama şimdi, çünkü ikisi gibi var ya üç ya da dört CVSes yakın,
onlar birine gitmek için ne meydanda farklı olanlar.
Ve şimdi, bir kaç dakika Size daha sonra, her ikisi de
eve gelip hiç ugh, kötü sorun.
Şimdi çok süt var ekşi gidecek çünkü.
Ve Süt gibi, ama sen Gerçekten süt sevmiyorum.
>> Yani şimdi, bu bir pahalı hata her ikiniz için
dayalı bir karar Bazı değişkenin devlet olduğunu
sürecinde oldu Sizin tarafınızdan değiştiriliyor,
süt almak için gidiyoruz başlatıcı.
Peki, belki de bir insandır Bu sorunun çözümü?
HEDEF KİTLE: [duyulamaz]
DAVID MALAN: sağ, bir not Leave?
Sen eğer daima bir not bırakın O gösterisi ile tanıdık.
Evet, ikimiz vardır.
Yani, her zaman bir not bırakın, ya da kelimenin tam anlamıyla buzdolabı kilidi
asma kilit çeşit veya Böyle üstünden bir şey.
Ama bu aslında olacak veritabanı tasarımı anahtar sorun,
aklınıza gelebilecek özellikle birden fazla tarayıcı, çoklu dizüstü bilgisayarlar,
Birden kullanıcıların tüm çalışırken bir kerede bilgilerinizi güncelleyin.
Özellikle hassas bilgileri finansal bilgiler gibi,
bu sayede bir stok ticaret ile Senin gibi web bina olacak,
ne kadar para kontrol etmek istiyorsanız neyi Eğer varsa ve daha sonra yeterli varsa,
Bazı hisse senedi satın?
>> Ama ne olursa başkası Sizinle ortak bir hesabı var
Aynı anda çalışıyor ise Bazı hisse senedi satın almak için?
Yani, o kontrol olduğunu İkiniz de hesap bakiyesi,
Aynı geri almak cevap, hayır süt var.
Yoksa ikiniz de, cevabı geri almak Eğer hesabınızda 100 $ var.
İkiniz de karar deneyin Bazı şirket hisse senedini satın almak.
>> Ve şimdi, ne olur?
İki paya sahip?
Hiç paya sahip?
Böyle sorunlar ortaya çıkabilir.
Yani, biz o karşılaşma olacak.
SQL enjeksiyon saldırıları, minnetle, Biz size yardımcı olacak bir şey vardır,
ancak bu kötü şekilde olan hala yaygındır bugünlerde.
Yani, bu sadece bir örnektir.
Ben hiçbir iddiada olduğu Harvard PIN sistemi
Bu özel saldırıya karşı savunmasız.
Biz denedik.
Ama, biliyorsunuz biz o Böyle bir alan var.
Ve Yale Net ID benzer var Bugünlerde ekranını arıyorum.
Ve o çıkıyor, belki PIN sistemi PHP uygulanmaktadır.
>> O were-- ve eğer onlar Ben- var Bu gibi görünüyor koda sahip olabilir.
Onlar iki değişken vardır.
Bana adınızı ve şifrenizi verin Mesajı süper küresel değişkeni
Daha önce hakkında konuştuk.
Belki Harvard sorgu var Kullanıcılar SELECT yıldız gibi
nerede adı olduğunu eşittir ve şifre o eşittir.
Ve ben sadece fark kullanarak takarak
diğerinden kaşlı ayraç notasyonu Sadece bir değer fiş demektir gün
İşte.
Ben kullanmıyorum Soru işareti tekniği.
Ben herhangi bir saniyemiz yok ya da üçüncü argümanlar.
Ben sadece tam anlamıyla değilim dize kendimi inşa.
>> Sorun olsa, yani Birisi bir scroob isterseniz,
hangi bir film için bir referanstır, Böyle bir şey günlükleri,
ve ben noktalar kaldırdık Genellikle örtbas olduğunu
O ne olursa şifreler, Özellikle kötü niyetli
ve onun şifre, belki 12.345 olduğunu denilen film başına "Spaceballs,"
ama o kritik türleri beşten sonra tek tırnak,
Daha sonra tam anlamıyla kelime veya Uzayda ve ardından teklif,
unquote biri, alıntı birine eşit ama ne o ihmal olduğunu fark?
O sağdaki alıntı kullanılamaması ve geride alıntı kullanılamaması.
>> Çünkü eğer bu saldırgan scroob en karine
insanlar kim yazdı olduğunu Bu PHP kodu, çok parlak değildi,
belki onlar sadece bazı tek sahip interpolasyon etrafında tırnak
küme parantezi bir değişkenin?
Ve böylece belki, o tür olabilir onların düşünce tamamlamak
Onlar için, ama bir şekilde o gidiyor Onu PIN sistemine kesmek izin.
Diğer bir deyişle, varsayalım Bu kodu olduğunu
ve biz şimdi yazdığınız scroob ne takın.
Kötü çünkü Ve bu, kırmızı.
>> Ve altta yatan metin O yazdığınız ne
scroob Harvard sunucu kandırmak olabilir Bir SQL sorgusu inşa içine
Bu gibi görünüyor dize.
Şifre 12345 veya tek tek eşittir.
Sonuç olan, mantıklı Bu scroob oturum olacaktır
Onun şifre eğer 12345 veya eğer biri eşittir
Her zaman elbette doğrudur biri, bu scroob zaman alır anlamına gelir.
>> Ve böylece, yol düzeltmek için Bu, birçok durumda olduğu gibi,
savunmaya yazmak olacaktır.
Gibi bir şey kullanmak için bizim Gerçek sorgu işlevi, hangi
biz fişi PSet7, göreceğiniz soru gibi bir şey burada işaretler.
Ve güzellik sorgu işlevi biz
Eğer bu karşı savunur olduğunu vermek Sözde SQL enjeksiyon saldırıları,
Birisi içine kodunuzu kandırma kendi SQL kodu enjekte.
Ne sorgu işlevi Çünkü Biz aslında yapacağız vermek,
Eğer soru işareti sözdizimi kullanırsanız ve ikinci ve burada üçüncü argüman,
o eklemek vermedi ne Kullanıcı sağladığı girdi?
Bu ters eğik çizgi tırnak.
>> Yani, herhangi bir potansiyel kaçar Tehlikeli karakterler.
Bu, artık tuhaf görünüyor ama savunmasız değil
öyle değil, çünkü Artık mantık değiştirmek
bu bütün şifre çünkü Şimdi değil bir tek tırnak,
Aslında, scroob parolası.
Yani, bazı espriler var oldu yılda bu konuda.
Yani, bu bir fotoğraf çekilmiş oldu Bir otoparkta bazı geek
böylece bunu bazı şehirleri biliyor olabilir ve devletler lisansınızı taramayı deneyin
Plaka size ya da bilet fatura Sizin Eğer gibi olmadan geçmesi durumunda,
E-Z Geçiş şey.
Yani, bu kişinin belki tahmin E-Z Geçiş Sistemi yazma insanlar
çok parlak değildi ve belki de Sadece bir dize birlikte birleştirilmiş,
Böylece o kötü niyetli yapamadım sadece kendi düşünce tamamlayamayan,
ama aslında kötü bir komutu çalıştırmak, hangi biz henüz belirtilmeyen ettik
ama muhtemelen tahmin edebilirsiniz.
Ayrıca bu silme ve yerleştirin ve güncelleme seçin,
Damla adında bir anahtar kelime de var, hangi kelimenin tam anlamıyla her şeyi siler
Veri, hangi özellikle kötü.
>> Biz eğer bu zoom yapabilirsiniz onu görmek için biraz zor.
Bu, artık ünlü bir karikatür şimdi harika zeki
ve anlaşılabilir.
>> [KAHKAHA]
>> Serin, evet.
Tür dışarı geeking.
Bu yüzden, o, vardır SQL enjeksiyon saldırıları.
Ve onlar kullanarak önlemek için çok kolay değil Doğru kod veya sağ kütüphaneler.
Ve sen, işte PSet7 görürsünüz neden biz size sorgu işlevini verir.
Yani, teaserlar bir çift biz diye düşündüm o
burada size bizim Birlikte dakika kalan.
Yani, gibi haftaya sıfır hatırlıyorum, biz Bu iki ampulleri tanıttı
olan güzel, değil sırf onlar güzelsin ve renkli,
ama onlar bir şey desteklemesi nedeniyle Bir Uygulama, bir API olarak adlandırılan
Programlama Arayüzü Ve CS50 böylece kadar, ettik
Çoğunlukla GET odaklanmış ve POST, ama çıkıyor
PUT gibi diğer HTTP fiillerini var.
>> Ve aslında, bu oldu Haftanın sıfırdan bir slayt
bu sayede kod yazarsanız o gönderir a la PSet6 bir HTTP isteği olduğunu
Bu metin öbek ile bu gibi görünüyor JSON olarak adlandırılan alt kısmında,
veya JavaScript Object Notation biz önümüzdeki hafta bahsedeceğiz,
Eğer açmak veya kapatmak veya değiştirmek olabilir olduğu gibi ışıkların rengi.
CS50 de bazı ek varsa Yani New Haven burada bu ampullerden
ödünç isterseniz Onları son projeler için,
Ayrıca bazı Microsoft Gibi Bantları,
Eğer bileğine giymek olduğunu saatler Benzer şekilde bir API var sen
Onlar için kendi yazılım yazabilirsiniz.
>> Biz bir hesap ile var Apple'ın iOS kodu yani
Bu bir Apple Ürünü ya da varsa bir iPhone veya iPad veya iPod,
Eğer kod yazabilirsiniz aslında bu çalışır.
Biz bir sürü var vardır ve Arduinos,
minicik bilgisayarlar durumlarda olmadan, esas olarak,
Eğer USB üzerinden bağlayabilirsiniz ki tipik kendi Mac veya PC'ye,
Bu fiziksel çalışır kod yazmak sık sık onlara sensörler cihazlar
böylece gerçek dünya ile etkileşimde bulunabilirsiniz.
Biz bir sürü var Leap Motion cihazları,
Mac'ler için USB aygıtları olan ve Burada tekrar, New Haven PC'ler.
Ve Mac bağlamak durumunda, aslında bilgisayarınızı kontrol edebilirsiniz
yazılım yazarak Bu kızılötesi kirişler aracılığıyla,
insan elleri nerede rakamlar, Hatta klavye dokunmadan.
Biz hızlı bir paylaşmak düşündüm Örneğin, bu da bakış.
>> [MÜZİK OYUN]
Yani, biz bir bütün var Bunlardan demet,
çok Myo kol bantları denilen hangi kolunuzun üzerine koymak
ve daha sonra gerçek kontrol edebilirsiniz Dünya ya da bunun gibi sanal dünya.
>> [MÜZİK OYUN]
Ya da, biz de bazı Google var Gibi kelimenin tam anlamıyla Karton,
Eğer koymak olabilir bir karton kutu senin içine telefonunuzda yüz, ama slayt
böylece cam koymak senin gözlerinize gerçekten yakın telefon.
Ve Google Karton olduğunu 10 $ veya 20 $ oldukça ucuz.
Ve bu küçük lens vardır O biraz vardiya kapalı
senin insan için ekrandaki görüntü Gözleri size derinlik hissi vermek için
yani aslında bir 3D var Önünüzde ortamı.
Biz de bazı Samsung Dişli, sahip olduğu Bu daha pahalı versiyonu,
ancak, benzer şekilde, bir kayabilir Android telefon ve size izlenimi vermek
of-- veya deneyim kazandırmak Sanal gerçeklik.
Ve son iki dakika içinde, Biz bunu denemek istiyorum düşündüm.
Ben Colton neler proje Eğer Burada sadece iştah uyandırmak için,
Beni go ahead ve atmak izin Burada büyük ekranda.
Bana ışıkları öldüreyim.
Colton, sen devam etmek istiyoruz ve bir an için hücreye koymak
ve gel aşamada orta?
Ve project-- istiyorsun Bu Colton gördüğü şeydir.
>> Şimdi, burada Wi-Fi Bu cihaz için o kadar kuvvetli
Bu süper zorlayıcı olduğunu, ama Colton tam anlamıyla
Bu büyülü fütüristik bir yerde.
O sadece bir resim görür.
Onun sol ve sağ göz görüyoruz beyni birlikte dikiş olduğunu
üç boyutlu bir bölgesindeki Yüzünde bir ortam.
O sadece burada bir menü seçeneği seçilir.
Ve böylece yine, o bu kulaklığı giyiyor Üzerinde Samsung telefonu ile de bu
kablosuz bizim havai projelendirme.
Şimdi Mars'ta, sanırım, değil mi?
COLTON: Ben öyle düşünüyorum.
Ben [duyulamaz] emin değilim.
[KAHKAHA]
>> DAVID MALAN: çıkıyor Mars bu menüleri vardır.
>> COLTON: [duyulamaz] bazı serin yerlerde biz Şeye gitmek istiyorum
>> DAVID MALAN: Nereye gitmek istiyorsun?
>> COLTON: [duyulamaz]
DAVID MALAN: Ve bakalım nerede Colton şimdi bizi alarak.
COLTON: [duyulamaz]
>> DAVID MALAN: Yani, bu kadar çok var Farklı yerlerde kendinizi alabilir.
FAPIs Orada hangi aracılığıyla yapabilirsiniz bulunuyor oyunlar veya etkileşimleri yazmanız
Telefonda, sonuçta çalıştırın.
Yani, gerçekten sadece bir cep telefonu uygulaması yazma.
Ama yazılım sayesinde ve grafik yetenekleri,
Şimdi Colton Bunun içinde minik yazlık.
Ve riski Kendimizi ezici,
Colton ve ben buralarda olacağım burada iken sınıfın sonunda bugün
Eğer gelip oynamak isterseniz.
Ve biz onları getireceğim geri gelecek hafta da.
Daha fazla uzatmadan Bu bugün için bu kadar.
Gelecek hafta görüşürüz.
>> [MÜZİK - Ragga TWINS, "BAD MAN"]