[संगीत बजाना] डेविड मालन: ठीक है, इस CS50 है। इस सप्ताह आठ का अंत है। और आज, हम शुरू कुछ टुकड़े में भरने के लिए यह इमारत के लिए आता है वेब पर बातें। तो, सोमवार को याद है कि हम एक बहुत अधिक समय खर्च करते हैं पीएचपी, पर जो इस गतिशील है प्रोग्रामिंग भाषा है कि दूसरे के बीच, हमें उत्पादन की सुविधा देता है बातें, एचटीएमएल और अन्य ऐसी सामग्री हम देखना चाहता हूँ कि। लेकिन हम वास्तव में कैसे देखा नहीं है हम किसी भी जानकारी स्टोर करने के लिए जा रहे हैं। दरअसल, लगभग किसी भी है कि सुपर आप आज यात्रा दिलचस्प वेबसाइटों डेटाबेस किसी तरह का है वापस अंत पर, है ना? फेसबुक निश्चित रूप से डेटा के बहुत सारे भंडार है सब के बारे में हमें और जीमेल दुकानों के सभी अपने ईमेल की। और हां, तो कई अन्य साइटों ही नहीं हैं सूचना है कि स्थिर सामग्री। यह किसी तरह से वास्तव में गतिशील है। आप इनपुट, यह अद्यतन प्रदान अन्य लोगों के लिए पृष्ठों की है। आप भेजने, संदेश मिलता है बहुत आगे है संदेश, और। तो आज, हम पर करीब देखो एक परियोजना के आधार आप अगले में डुबकी हूँ कि सप्ताह, CS50 वित्त, जो वास्तव में आप का निर्माण किया जा रहा है नहीं सी में है, लेकिन PHP में कुछ और। एक लग रहा है कि एक वेबसाइट इस तरह छोटे से कुछ कि खरीदने और बेचने की अनुमति देता है वास्तव में कर रहे हैं कि कंपनियों के शेयरों वास्तविक समय पर आकर्षित करने के लिए जा रहा याहू वित्त से शेयर डेटा। और इसलिए अंत में, तुम होगा खुद के लिए और उपयोगकर्ताओं के लिए भ्रम आप वास्तव में खरीद और बेच रहे हैं कि शेयरों और लगभग वास्तविक समय हो रही है अपडेट, प्रबंध पोर्टफोलियो, जो सभी के लिए होने की आवश्यकता के लिए जा रहा है, अंत में, उपयोगकर्ताओं का एक डेटाबेस। तो, अपने खुद के शब्दों में, आप नहीं कर रहे हैं, खासकर अगर कंप्यूटर के साथ सुपर परिचित विज्ञान या डेटाबेस, क्या आप एक डेटाबेस में पता है होना करने के लिए अब ठीक है, nontechnical संदर्भ में? यह क्या है? आप इसका वर्णन कैसे करेंगे एक रूममेट या एक दोस्त के लिए? दर्शकों: [अश्राव्य] जानकारी [सुनाई] डेविड मालन: तो, जानकारी की एक सूची, या जानकारी की एक सूची store-- आप स्टोर करने के लिए चाहते हो सकता है कि एक प्रयोक्ता की तरह कुछ है, के बारे में। और उपयोगकर्ताओं के लिए क्या क्या उनके साथ जुड़े? आप फेसबुक या पर एक उपयोगकर्ता हैं जीमेल, लक्षण क्या हैं कि हम में से सभी उपयोगकर्ताओं के लिए है? की तरह, क्या कुछ हो सकता है स्प्रेडशीट में स्तंभों के लिए जो हम पिछली बार alluded? फिर, आप कर सकते हैं क्योंकि एक डेटाबेस के बारे में सोच वास्तव में एक फैंसी एक्सेल फ़ाइल या गूगल के रूप में स्प्रेडशीट या एप्पल संख्याओं का। तो, आप क्या सोचते हैं आप एक उपयोगकर्ता के बारे में सोच सकते हैं? उसके पास क्या है? वह क्या है? दर्शकों: एक नाम। डेविड मालन: एक नाम। यदि हां, तो नाम है, जैसे, डेविड मालन कुछ उपयोगकर्ता का नाम होगा। एक उपयोगकर्ता और क्या है? दर्शकों: एक आईडी। डेविड मालन: एक आईडी। तो, अपने हार्वर्ड की तरह एक आईडी नंबर, जैसे आईडी या अपने येल नेट आईडी या पसंद है। एक उपयोगकर्ता और क्या हो सकता है? दर्शकों: पासवर्ड। डेविड मालन: शायद एक एक पासवर्ड, पता है, शायद एक फोन नंबर, हो सकता है एक ईमेल पता। तो, खेतों और इस के गुच्छों वहाँ एक तरह से नियंत्रण से बाहर सर्पिल सकता जल्दी से जैसे ही आप शुरू के रूप में ओह, चलो इस दुकान करते हैं, को साकार और हम इस और उस की दुकान करते हैं। लेकिन हम कैसे है कि वास्तव में क्या करते हैं? तो फिर, मानसिक मॉडल आज के लिए है के रूप में हम वास्तविक एसक्यूएल में गोता, स्ट्रक्चर्ड क्वेरी लैंग्वेज, इस तरह दिखता है कि एक डेटाबेस है। यह सिर्फ पंक्तियों और स्तंभों है। और आप गूगल स्प्रेडशीट्स कल्पना कर सकते हैं या अन्य कार्यक्रमों के किसी भी संख्या। लेकिन जो है MySQL, के बारे में महत्वपूर्ण क्या है डेटाबेस सॉफ्टवेयर हम प्रयोग करने जा रहे हैं, स्वतंत्र रूप से खुले तौर पर फेसबुक का उपयोग करता है available-- यह और अन्य websites-- के किसी भी संख्या डेटाबेस संबंधित रूप से चीजों को संग्रहीत करता है। और एक संबंधपरक डेटाबेस सिर्फ इतना है कि सचमुच एक अर्थ है पंक्तियों और स्तंभों में अपने डेटा स्टोर। यह इतना सरल है। तो, ओरेकल जैसे भी कुछ है कि आप आमतौर पर के बारे में सुना है हो सकता है एक संबंधपरक डेटाबेस है। और हुड के नीचे, यह पंक्तियों और स्तंभों में स्टोर डाटा। और ओरेकल आप एक के आरोप पैसे की बहुत ऐसा करने के लिए, MySQL के आरोपों जबकि उसी के लिए आप कुछ भी नहीं है। तो, एसक्यूएल हमें देने के लिए जा रहा है कम से कम चार आपरेशनों। पढ़ने की तरह, डेटा का चयन करने की क्षमता डेटा, डालने, हटाने, और अद्यतन डेटा। दूसरे शब्दों में, उन लोगों के हैं वास्तव में चार प्रमुख आपरेशनों कि हमें बदलने के लिए अनुमति देने के लिए जा रहे हैं उन पंक्तियों और स्तंभों में सामान। हम विशेष रूप से आज का उपयोग करेंगे कि उपकरण एसक्यूएल सीखने के लिए और इसके साथ खेलने के लिए फिर पीएचपी myadmin कहा जाता है। यह वेब आधारित उपकरण है। कुल संयोग है कि यह PHP में लिखा है। लेकिन यह हमें एक ग्राफिकल देने जा रहा है यूजर इंटरफेस हम वास्तव में कर सकते हैं कि इतने इन पंक्तियों और स्तंभों को बनाने के और उसके बाद कोड के माध्यम से उन्हें बात करते हैं। तो, चलो अब शुरू करते हैं क्या मुझे लगता है कि स्पष्ट रूप से है की मजेदार प्रक्रिया की तरह वेबसाइटों के पीछे के अंत के निर्माण, यूजर्स को नहीं है कि भागों देखते हैं, लेकिन निश्चित रूप से के बारे में ध्यान करते हैं, क्योंकि है कि डेटा की जा रही है बल्कि। सी और एक को तो, समान कम पीएचपी जैसे छोटे, एसक्यूएल, या समर्थन करता है कि एक डेटाबेस एसक्यूएल, कम से कम इन आंकड़ों प्रकार है और दूसरों के गुच्छों। चार, varchar, पूर्णांक, BIGINT, दशमलव, और DATETIME। और एक पूरी वहाँ अन्य सुविधाओं का गुच्छा, लेकिन के द्वारा इस करते हैं वास्तविक उदाहरण के रास्ते। मैं CS50 आईडीई में जाने के लिए जा रहा हूँ जहां, अग्रिम में, मैं में लॉग इन किया है और मैं यह भी के लिए एक यूआरएल का दौरा किया पीएचपी myadmin नामक इस उपकरण। और इस समस्या को सात सेट में, हम बता देंगे आप वास्तव में कैसे इस इंटरफेस को पाने के लिए भी। शीर्ष बाएँ हाथ के कोने पर, नोटिस में यह व्याख्यान कहते हैं। और कहा कि सिर्फ मतलब है कि अग्रिम में, मैं बनाया एक खाली डेटाबेस बुलाया व्याख्यान कि अभी तक इसके बारे में कोई स्प्रेडशीट है। कोई पंक्तियों और स्तंभों नहीं है। क्योंकि पहले बात यह है कि हम क्या करने जा रहे हैं एक तालिका बनाने के लिए शुरू किया गया है कि हमारे उपयोगकर्ताओं को स्टोर करने के लिए जा रहा है। तो, सचमुच खत्म यहाँ सही करने के लिए, मैं कर रहा हूँ डेटाबेस में बताने जा रहा मैं एक मेज उपयोगकर्ता बुलाया चाहते हैं। तो, इस फाइल की तरह है कि मैं में अपने डेटा के सभी स्टोर करना चाहते हैं। और कितने कॉलम? ठीक है, चलो अब के लिए इसे सरल रखने दें। मैं सिर्फ एक तरह संग्रहीत करना चाहते हैं यूज़रनेम और एक उपयोगकर्ता के लिए एक नाम है। हम छोटे शुरू करेंगे। तो, मैं दो कॉलम की कुल चाहते हैं। और मुझे आगे जाना है और जाएँ क्लिक करने के लिए जा रहा हूँ। और फिर, के लिए इन कॉलम, मैं क्या जा रहा हूँ इस इंटरनेट यदि do-- को सब ठीक है, cooperates-- तो हम फिर से कोशिश करने के लिए जा रहे हैं। मैं एक तालिका बनाने के लिए जा रहा हूँ दो स्तंभों के साथ उपयोगकर्ताओं ठीक है, जाएँ क्लिक करें। अब हम यह वास्तव में तेजी से मिल गया है। बहुत अच्छी तरह से किया, धन्यवाद। ठीक है, तो हम क्या चाहते हो इन स्तंभों के नाम से जाना? तो, एक नाम के नाम से जाना जा रहा है। Here-- और इंटरफ़ेस तो, यह सब मैं देख रहा हूँ सच में, अंत में एक छोटे बदसूरत हो जाता है आप एक बार यह सब डाटा में लिखना प्रारंभ करें। लेकिन क्या अच्छा है की है कि तरह है विडंबना यह है कि मैं कॉलम पैदा कर रहा हूँ, लेकिन उपकरण मूर्खता है पंक्तियों में उन्हें बाहर रखी इतना है कि मैं इन स्तंभों विन्यस्त कर सकते हैं। तो, नाम के तहत दो कारतूस वहाँ नहीं है। और इन क्षेत्रों में से एक मैं प्रयोक्ता नाम बुलाया करना चाहते हैं, और अन्य क्षेत्र मैं नाम कॉल करना चाहते हैं। और अब मैं चयन करना है इन बातों के लिए डेटा प्रकार के। तो, एक्सेल में जबकि और गूगल स्प्रेडशीट्स, आप एक स्तंभ चाहते हैं, तो आप सचमुच सिर्फ नाम या उपयोगकर्ता नाम टाइप करें, हिट दर्ज करें। शायद आप इसे बोल्ड चेहरा बनाने सिर्फ स्पष्टता के लिए, लेकिन यह बात है। आप निर्दिष्ट नहीं करते स्तंभों के प्रकार। अब गूगल स्प्रेडशीट्स या एक्सेल आप में डेटा प्रदान की गई है कैसे निर्दिष्ट कर सकता है। आप स्वरूप मेनू के लिए जाना है, और आप कर सकता है इस तरह डॉलर के हस्ताक्षर दिखाने निर्दिष्ट कर सकते हैं, एक चल बिन्दु मूल्य की तरह इस शो। इसलिए, यह करने के लिए आत्मा में इसी तरह की है हम क्या करने के बारे में क्या कर रहे हैं कि, लेकिन यह वास्तव में मजबूर हो रहा है डेटा एक खास प्रकार किया जाना है। अब, यहां तक ​​कि एक पल पहले हालांकि मैं केवल कुछ ही डेटा प्रकार कहा कि वहाँ वहाँ वास्तव में एक पूरी बहुत कुछ है, और वे कर रहे हैं विशिष्टता की डिग्री बदलती में। और एक अलग रूप में, आप यहां तक ​​कि फैंसी बातें कर सकते हैं भंडारण geometries की तरह एक डेटाबेस के अंदर। आप चीजों को स्टोर कर सकते हैं जीपीएस निर्देशांक की तरह और वास्तव में, गणितीय, मिल दूसरों के लिए बंद कर रहे हैं कि अंक। लेकिन हम करने जा रहे हैं इस सुपर सरल रखना और, यहाँ तक की सब से ऊपर जाना तथाकथित स्ट्रिंग प्रकार के। तो, यहाँ एक की एक सूची है विकल्पों में से पूरी गुच्छा। चार, varchar, TINYTEXT, MEDIUMTEXT, LongText। और यह भारी की तरह है। और दुर्भाग्य से, कुछ हद तक विडंबना यह है कि सी को, एक चार वास्तव में एक चार नहीं है। आप एक डेटाबेस में निर्दिष्ट करते हैं अपने डेटा प्रकार CHAR है कि, कि हाँ, यह एक है कि इसका मतलब है चार, लेकिन यह एक या एक से अधिक घर का काम है। और अगर आप निर्दिष्ट करने के लिए कितने घर का काम आप चाहते हैं। तो, क्या एक ठेठ है एक उपयोगकर्ता नाम लंबाई? एक सीमा आम तौर पर देखते है? दर्शकों: [अश्राव्य] डेविड मालन: 16 हो सकता है? ऐसा कुछ। अगर आप फिर पता है, दिन, यह आठ हुआ करता था। कभी कभी यह 16 कभी कभी, है यह उस से भी अधिक है। और हां, यह नहीं करता है मुझे एक चार देना मतलब है। यह मैं निर्दिष्ट करने के लिए इसका मतलब है मैदान की लंबाई, और अब मैं 16 की तरह कुछ कह सकते हैं। और यहाँ एक व्यापार बंद है। तो, हम एक पल में देखेंगे इस एक मतलब यह है कि, हर उपयोगकर्ता नाम 16 अक्षर हो गया है। लेकिन एक मिनट, एम-ए-एल-ए-एन प्रतीक्षा करें। कि अगर अपने उपयोगकर्ता नाम और मैं केवल पाँच उपयोग कर रहा हूँ, आप डेटाबेस है कि क्या प्रस्ताव होगा अन्य 11 पात्रों के लिए क्या करना है कि मैं के लिए जगह सुरक्षित कर लिया है? आप क्या करेंगे? दर्शकों: [अश्राव्य] डेविड मालन: हाँ, बस उन सब को अशक्त बना। उन्हें रिक्त स्थान बनाओ। लेकिन शायद अशक्त, तो एक बैकस्लैश शून्य की बहुत। तो, एक हाथ पर, हम है अब अपने उपयोगकर्ता नाम निश्चित किया है कि 16 अक्षर से अधिक नहीं हो सकता है। और इस बात का दूसरा पहलू भी है कि मैं एक बहुत लंबा नाम था अगर या वास्तव में लंबे समय से चाहता आप में से कुछ की तरह यूजरनेम लोग है कि कॉलेज में हो सकता है या Yale.edu पर, आप एक नहीं हो सकता। और हां, वास्तव में, आप है, तो कभी एक वेबसाइट के लिए पंजीकृत और आप कह पर चिल्लाया हो अपना पासवर्ड बहुत लंबा है या अपने यूज़रनेम यह बात है, बहुत लंबा है बस एक प्रोग्रामर, क्योंकि जब अपने या अपने डेटाबेस को विन्यस्त, फैसला इस क्षेत्र होगा कि अब इस लंबाई से भी हो सकता है। ठीक है, तो क्या हुआ अगर हम नाम के लिए आगे बढ़ें? कितना समय चाहिए एक ठेठ मानव का नाम हो सकता है? कितने वर्ण, 16? मैं हम कर सकते थे लग रहा है इस कमरे में किसी की तलाश जहां पिछले उसके या उसके पहले Plus से नाम 16 वर्णों से अधिक है। तो, 17 से बेहतर है कि क्या हो रहा है? 18? 25? बड़ा? 30? दर्शकों: [अश्राव्य] डेविड मालन: 5000, हे भगवान। तो, कि शायद एक सभ्य है ऊपरी बाध्य करेगा हम कहते हैं। और यहाँ हम किस तरह का है एक निर्णय फोन बनाने के लिए। की तरह, यहाँ कोई सही जवाब नहीं है। अनंत, बहुत संभव नहीं है हम अंत में कर रहे हैं, क्योंकि हम कर रहे हैं have-- जा रहा स्मृति से बाहर चलाने के लिए जा रहा है। तो, हम एक बनाने के लिए है कुछ बिंदु पर निर्णय फोन। हो सकता है बहुत आम है, उदाहरण के लिए, use-- और मुझे यहां चार निर्दिष्ट जाने के लिए के रूप में before-- 255 सचमुच था इस डाटाबेस सॉफ्टवेयर पर ऊपरी सीमा बहुत साल पहले। और मनुष्यों की तो, एक बहुत बस ठीक कहते थे। 255 की सीमा है। चलो बस अधिकतम उपयोग करते हैं। और यह बहुत हास्यास्पद है। की तरह, आप किसी के टाइप कर रहे हैं, तो 200 से अधिक अक्षर के लिए नाम है, एक छोटे से हास्यास्पद है। लेकिन, आस्की नहीं है कि याद पात्रों के लिए केवल प्रणाली। और हां, विशेष रूप में एक एशियाई भाषाओं के बहुत पात्रों है, जहां हम नहीं कर सकते मेरी अमेरिका की तरह कीबोर्ड पर अभिव्यक्त कीबोर्ड, वास्तव में कुछ अक्षर 16 बिट के बजाय आठ बिट तक ले। और हां, तो यह वास्तव में सब है कि अनुचित नहीं है हम और अधिक जरूरत है अंतरिक्ष हम फिट करना चाहते हैं तो बहुत अमेरिका की तुलना में बड़ा पात्रों केंद्रित लोगों को हम पर चर्चा करने के लिए खड़ा कर दिया है। तो, हम कुछ ऊपरी सीमा की जरूरत है। मैं सबसे अच्छा एक है पता नहीं क्या लेकिन 255 आम तौर पर एक आम एक है। 25 कम लगता है। 16, 32 कम लग रहा है। मैं ओर गलती होगी उच्च कुछ की। लेकिन एक व्यापार के रूप में हमेशा की तरह, बंद नहीं है। , शायद, स्पष्ट है क्या 255 घर का काम आरक्षण का व्यापार बंद अपने डेटाबेस में हर किसी का नाम लिए? दर्शकों: [अश्राव्य] डेविड मालन: वह क्या है? दर्शकों: [अश्राव्य] डेविड मालन: यह एक है स्मृति की बहुत है, है ना? एम-ए-एल-ए-एन। मैं सिर्फ 250 बर्बाद किया है पात्रों सिर्फ मेरे नाम की दुकान के लिए रक्षा, बस के मामले में किसी को कक्षा में एक बहुत लंबा नाम है। यही कारण है कि एक अनुचित tradeoff की तरह लगता है। इसलिए, यह है, कि एसक्यूएल पता चला है इस डेटाबेस भाषा, वास्तव में कुछ का समर्थन करता है varchar, या परिवर्तनीय चार बुलाया। और यह कि इस में एक तरह से अच्छा है आप एक निश्चित नहीं निर्दिष्ट करने की अनुमति चौड़ाई, बल्कि, एक चर चौड़ाई। और अधिक विशेष रूप से एक क्षेत्र की अधिकतम चौड़ाई। तो, यह एक नाम कर सकते हैं कि इसका मतलब है कोई 250 से अधिक अक्षरों का होना, लेकिन यह निश्चित रूप से कम हो सकता है। और डेटाबेस स्मार्ट होने जा रहा है। आप एम-ए-एल-ए-एन में डाल दिया करते हैं, यह केवल पाँच का उपयोग करने के लिए जा रहा है के लिए शायद छह बाइट्स की तरह एक अनुगामी अशक्त चरित्र, और एक अतिरिक्त खर्च नहीं अनावश्यक रूप से 249 या 250 बाइट्स। तो, यह मुझे ऐसा करना चाहिए की तरह लगता है इस कहानी के साथ शुरू कर दिया है। लेकिन हमेशा एक tradeoff है। तो, एक हाथ पर, एक उपयोगकर्ता नाम मैं मुश्किल से 16 से कोडित किया जा करने के लिए निर्दिष्ट, और हो सकता है कि नहीं था सही कॉल, हो सकता है यह है, लेकिन क्यों उपयोग नहीं सब कुछ के लिए VARCHARs? यह एक कारण के लिए मौजूद है। क्यों हर क्षेत्र के लिए VARCHARs का उपयोग नहीं जिनकी लम्बाई आप पहले से पता नहीं है यह सही है, एक महान बात लगती है तो क्या होगा? उतना ही स्थान का प्रयोग करें आप इस सीमा तक की जरूरत है? दर्शकों: धीमी। डेविड मालन: स्पेलर? दर्शकों: धीमी बनाता है यह? डेविड मालन: ओह, यह धीमी है। अच्छा है, कि लगभग हमेशा इस सवाल का जवाब है, सच में। की तरह, tradeoff क्या है? यह या तो अधिक स्थान की लागत या इसे और अधिक समय खर्च होता है। इसलिए, इस मामले में, यह धीमी हो सकती है। क्यों? दर्शकों: [अश्राव्य] [अश्राव्य] का निर्धारण। डेविड मालन: अच्छा। तो, अगर आप भी से याद हो सकता है PSED5, अपने दृष्टिकोण के साथ खेल रहे हैं शब्दकोश, अगर आप के पास गतिशील स्मृति आवंटित या रखना कि, एक बफर बढ़ रही है वास्तव में धीमी गति से किया जा सकता है। आप malloc फोन करने के लिए है, तो हुड के नीचे और हो सकता है MySQL कि ऐसा है, क्या कर रहा है है निश्चित रूप से है कि मामला हो सकता है। आप जिस तरह से अगर आपको लगता वापस भी PSet-- या करने के लिए जैसे सप्ताह दो, हम किया था जब बातें द्विआधारी खोज या यहां तक ​​कि रैखिक खोज, हर शब्द के बारे में अच्छी चीजों में से एक एक कॉलम में एक डेटाबेस या हर शब्द में यहां तक ​​कि वास्तव में एक ही लंबाई किया जा रहा है यदि उन पात्रों की एक पूरी गुच्छा रिक्त हैं, तो आप उपयोग कर सकते हैं अपने डेटा पर रैंडम एक्सेस, है ना? आप हर जानते हैं कि शब्द, 16 वर्ण दूर है ताकि आप के लिए, सूचक गणित का उपयोग कर सकते हैं बात करते हैं, और हमें करने के लिए जाना 16, 32, 48, 64, और तुम सिर्फ कूद कर सकते हैं तुरन्त गणित का उपयोग अपने डेटाबेस में शब्दों के किसी भी करने के लिए। यह एक varchar है जबकि अगर, क्या आप के बजाय क्या करना है? [फोन बज रहा है] यह एक varchar है, तो आप रैंडम एक्सेस का उपयोग नहीं कर सकते हैं। क्या आप चाहते हैं या क्या करना है? हाँ? दर्शकों: [अश्राव्य] डेविड मालन: देखो whole-- ट्रेस के माध्यम से पूरी सूची के माध्यम से सबसे अधिक संभावना है, के लिए क्या देख रहे हैं? विशेष मूल्य किस तरह का? दर्शकों: [अश्राव्य] डेविड मालन: खोज रहे अशक्त Terminators के लिए कि शब्दों की जुदाई हदबंदी। तो फिर, एक tradeoff, और कोई सही जवाब नहीं है। लेकिन यह विशेष रूप से, जहां है अपने उपयोगकर्ताओं को कई होना करने के लिए मिलता है जब अपने सर्वर पर और अपने भार, लोगों की संख्या है, यह अधिक हो जाता है का उपयोग कर ये वास्तव में nontrivial निर्णय कर रहे हैं। तो, हम इस रूप में इन छोड़ देते हैं, लेकिन हो सकता है के सही करने के लिए नीचे स्क्रॉल यहां। अब, स्तंभों की एक जोड़ी है हम एक निर्णय फोन करना कहाँ है। यह एक उपयोगकर्ता की अनुमति देने के लिए समझ पड़ता है एक उपयोगकर्ता के यूज़रनेम या एक उपयोगकर्ता की, नाम है , अशक्त होने का नाम क्या है? यही कारण है कि अभी खाली है। एक छोटे अतर्कसंगत लगता है, तो मैं कर रहा हूँ उन बक्सों की जांच करने के लिए नहीं जा रहा। लेकिन यह एक में पता चला है डेटाबेस, आप कह सकते हैं, किसी वैकल्पिक यह मान सकते हैं। इस स्तंभ के पास नहीं है वास्तव में वहाँ होने के लिए। अब, मेनू नीचे इस ड्रॉप नहीं है। और मैं अभी भी कर रहा हूँ नोटिस वहाँ पहली पंक्ति में, इसलिए मैं अब उपयोगकर्ता नाम के बारे में बात कर रहा हूँ। और यह एक डाटाबेस पता चला है कि एक साधारण मात्र स्प्रेडशीट के विपरीत, अनुक्रमित बुलाया शक्तिशाली विशेषताएं है। और एक सूचकांक बताने का एक तरीका है अग्रिम में डेटाबेस मैं मानव कि आप की तुलना में होशियार हूँ। मैं, प्रश्नों का क्या प्रकार का चयन जानते , या डालने या हटाने या अद्यतन मेरे कोड को समाप्त करने के लिए जा रहा है कि इस डेटाबेस पर कर रही। मैं डेटा का एक बहुत पढ़ना चाहते हैं। मैं डेटा का एक बहुत सम्मिलित करना चाहते हैं। मैं लगातार करना चाहते हैं डेटा का एक बहुत हटा दें। मैंने सोचा कि मैं जा रहा हूँ जानते हैं कि एक बहुत प्रयोक्ता नाम की तरह एक क्षेत्र तक पहुँचने, मैं preemptively बता सकते हैं डेटाबेस, मैं तुम से ज्यादा जानते हैं और मैं डिक्री करना चाहते हैं कि आप सूचकांक इस क्षेत्र में होना चाहिए। एक क्षेत्र या एक स्तंभ अनुक्रमण कहाँ इसका मतलब है कि अग्रिम में डेटाबेस जैसे, से कुछ विचारों उधार लेना चाहिए, सप्ताह चार और पांच और छह CS50 से और वास्तव में ऊपर का निर्माण एक द्विआधारी खोज की तरह कुछ पेड़ या कुछ और आम तौर पर एक बी पेड़ बुलाया आप सीखना होगा कि एक वर्ग की तरह CS124 में हार्वर्ड में, एक एल्गोरिदम वर्ग, या अन्य स्थानों के किसी भी संख्या। डेटाबेस और स्मार्ट इसे लागू करने वाले लोग स्टोर करने के लिए कैसे पता लगाना होगा जानकारी के उस मेज स्मृति में तो यह है कि खोजों और अन्य कार्यों सुपर उपवास कर रहे हैं। आप ऐसा करने की जरूरत नहीं है। आप को लागू करने की जरूरत नहीं है रैखिक खोज या द्विआधारी खोज या ऐसा या चयन विलय प्रकार, उस के किसी भी। आपको बता यदि डेटाबेस यह तुम्हारे लिए है यह preemptively सूचकांक करने के लिए इस क्षेत्र। और तुम, वहाँ भी देख सकते हैं कुछ अन्य विशेषताओं हम डेटाबेस को लागू करने के लिए कह सकते हैं। मैं अनोखा चाहें तो इसका क्या मतलब हो सकता है इस सूची से, बस intuitively? हाँ? दर्शकों: [अश्राव्य] डेविड मालन: हाँ, उपयोगकर्ता नाम अनूठा हो गया है। यह एक अच्छी बात है या बुरी बात के लिए है उपयोगकर्ताओं के साथ एक वेबसाइट के लिए एक डेटाबेस? उपयोगकर्ता नाम अनूठा होना चाहिए? हां संभवत। अगर है कि क्या क्षेत्र हम में लॉग इन करने का उपयोग आप वास्तव में लोगों को होने नहीं करना चाहते हैं एक ही लग रहा है या एक ही उपयोगकर्ता नाम। तो, हम कर सकते हैं डेटाबेस इतना है कि लागू कि अब मेरे PHP कोड या किसी भी भाषा में, मैं, उदाहरण के लिए, की जांच करने के लिए नहीं है जरूरी इस उपयोगकर्ता नाम करता है मैं किसी के रजिस्टर जाने से पहले मौजूद हैं? डेटाबेस नाम के दो लोगों को नहीं होने देंगे डेविड या Malans इस मामले में रजिस्टर। और एक अलग रूप में, यहां तक ​​कि हालांकि इस मेनू केवल आप एक का चयन की सुविधा देता है, एक अद्वितीय सूचकांक है कि एक है सुपर फास्ट प्रदर्शन के लिए अनुक्रमित, लेकिन यह भी विशिष्टता लागू करता है। और हम करने के लिए वापस आ गया हूँ क्या बस एक पल में मतलब दो अन्य। इस बीच, मैं करने के लिए जाना है, तो मेरी दूसरी पंक्ति, जो उपयोगकर्ता का नाम है, मैं निर्दिष्ट करना चाहिए नाम अलग होना चाहिए कि? नहीं, आप निश्चित रूप से कर सकता है क्योंकि have-- कोई दो डेविड वहाँ इस कमरे में Malans, सबसे अधिक संभावना है। लेकिन हम एक अलग नाम चुनते हैं, हम निश्चित रूप से टकराव का हो सकता है। टेबल और जैसे हैश करने के लिए वापस लगता है। तो, हम निश्चित रूप से नहीं करना चाहते नाम क्षेत्र अनूठा बनाने के लिए। तो, हम सिर्फ छोड़ने के लिए जा रहे हैं कि पानी का छींटा, डैश, पानी का छींटा, कुछ भी नहीं है। और मुझे छोड़ने के लिए जा रहा हूँ अकेले सब कुछ। दरअसल, इन क्षेत्रों के सबसे हम के बारे में परवाह करने की जरूरत नहीं होगी। और मैं इस बचाने के लिए तैयार हूँ, इंटरनेट सहयोग करता है, तो मैं बहुत, बहुत, बहुत बचाने के लिए क्लिक करें, और धीरे-धीरे डेटाबेस बचाया प्राप्त करता है। और अब मैं यह करने के लिए वापस आ गया हूँ इंटरफेस है, जो वैसे, पहली नज़र में भारी है। लेकिन मैं क्या करने जा रहा हूँ सब क्लिक करें ऊपर छोड़ दिया पर उपयोगकर्ता शब्द पर। मैं यहाँ तक जाने के लिए जा रहा हूँ, क्लिक करें उपयोगकर्ता, और डिफ़ॉल्ट, यह , कुछ एसक्यूएल मार डाला गया है लेकिन उस पर और भी जानकारी कुछ क्षणों में। यहाँ मैं क्या किया था की सिर्फ एक सारांश है। और आप देख सकते हैं कि चिंता करने की नहीं यहां लैटिन और स्वीडिश का उल्लेख। उन सिर्फ डिफ़ॉल्ट हैं सेटिंग्स, मूल रूप में MySQL क्योंकि, या पीएचपी myadmin, दो में से एक हुआ कुछ स्वीडिश लोगों द्वारा लिखा होना चाहिए। लेकिन यह यहाँ हमारे मामले में अप्रासंगिक है। ठीक है, तो क्यों है यह सब दिलचस्प? यह पता चला है, मैं डेटा सम्मिलित कर सकते हैं कोड लिख कर एक डेटाबेस में। और मुझे आगे जाना है और कर रहा हूँ यहाँ मेरी फाइल में, मैं कर रहा हूँ आगे जाना है और इस तरह का नाटक करने के लिए जा रहा इस डेटाबेस है कि, के लिए अजीब है जो यह इस समय नहीं है, लेकिन यह होगा हम इस समस्या को पाने के सात सेट जब हो। और मैं आगे जाने के लिए जा रहा हूँ और , क्वेरी नामक एक समारोह निष्पादित जो हम इस समस्या में आपको दे देंगे कि, सात की वितरण कोड सेट कम से कम एक तर्क लेता है, जो सिर्फ एक स्ट्रिंग है। एसक्यूएल कोड के एक स्ट्रिंग। तो, आप कैसे करने के लिए सीख रहे हैं के बारे संरचित क्वेरी भाषा में लिखें। मैं में एक नई पंक्ति सम्मिलित करना चाहते हैं, तो मेरी डेटाबेस किसी प्रस्तुत कर दी है क्योंकि मेरे कोड को एक रूप है, मैं सचमुच होगा यूजर्स में डालने के बाद लिखने खेतों: उपयोगकर्ता नाम, अल्पविराम, नाम, मूल्यों, और अब मैं डालने की जरूरत है मालन, और बोली की तरह कुछ, गंदें शब्द बोलना 'डेविड मालन।' और अब यहां तक ​​कि एसक्यूएल के साथ अपरिचित उन लोगों के लिए, यही कारण है कि मैं एक उद्धरण का उपयोग कर रहा हूँ इस हरी स्ट्रिंग के अंदर? क्या कारण है कि यहां हो सकता है? मैं सह mingling दो भाषाओं हूँ सूचना है। क्वेरी, एक PHP समारोह है लेकिन यह एक बहस लेता है। और तर्क है कि खुद के लिए है हो सकता है नामक एक और भाषा में लिखा एसक्यूएल, संरचित क्वेरी भाषा। तो, सब कुछ है कि मैं बस यहाँ पर प्रकाश डाला है एसक्यूएल नामक इस भाषा है। तो, एकल उद्धरण के साथ क्या है, सिर्फ एक त्वरित मानसिक स्वास्थ्य की जांच के रूप में? आगे बढ़ें। वे तार कर रहे हैं। तो, बोली, गंदें शब्द बोलना मालन और बोली, गंदें शब्द बोलना डेविड मालन तार कर रहे हैं। और बस, अब intuitively सोच आप सी और पीएचपी के बारे में क्या जानते हैं, यह जानकर यही कारण है कि मैं यह कर, जो मैं आमतौर पर नहीं था तार के लिए इस्तेमाल होने वाले डबल उद्धरण? मैं ऐसा क्यों नहीं करना चाहता था? हाँ? दर्शकों: [अश्राव्य] डेविड मालन: बिल्कुल। मैं पहले से ही उपयोग कर रहा हूँ क्योंकि रास्ते पर डबल कोट्स तर्क के बाहर PHP समारोह को, मैं सिर्फ दुभाषिया भ्रमित करेगा। यह पता नहीं होगा, ये एक साथ जाना है? ये एक साथ जाना है? ये एक साथ जाना है? तो, मैं बजाय वैकल्पिक। या मैं इस तरह से कुछ कर सकता है बैकस्लैश बोली या बैकस्लैश बोली। सच कहूँ, कि बस शुरू होता है बहुत अस्पष्ट और बदसूरत मिलता है। लेकिन उस लक्ष्य को हासिल करेंगे के रूप में अच्छी तरह से एक ही परिणाम है। मैं थे तो, अगर इस पर अमल करने के लिए क्वेरी अब, चलो देखते हैं क्या होता। मैं अब और नहीं बल्कि आगे जाने के लिए जा रहा हूँ PHP कोड, अमल से जो आप खेलेंगे जहां है समस्या में, सात सेट मैं बजाय पीएचपी myadmin पर जाने के लिए जा रहा हूँ। और मैं स्वयं जा रहा हूँ एसक्यूएल टैब पर जाने के लिए, और मुझे इंटरफेस पर ज़ूम करते हैं। और मैं में पेस्ट करने के लिए जा रहा हूँ मैं सिर्फ टाइप बात। और रंग कोडिंग है अब एक छोटा सा बदल गया सिर्फ कार्यक्रम प्रारूपों क्योंकि चीजों को थोड़ा अलग तरह से। लेकिन यह सब मैंने किया है कि नोटिस है मैं उपयोगकर्ताओं में डालने, कहा है। मैं एक अल्पविराम में, फिर, निर्दिष्ट किया है अलग parenthesized सूची दो मैं सम्मिलित करना चाहते हैं कि खेतों, और तो मैं सचमुच कहा है मानों एक और कोष्ठक के द्वारा पीछा किया, और फिर दो मानों मैं प्लग-इन करने के लिए चाहते हैं, और अब अच्छे उपाय के लिए, मैं अंत में एक अर्धविराम डाल देता हूँ। तो, यह इस पीएचपी नहीं है सी में नहीं है। यह अब एसक्यूएल है, और मैं इसे चिपका रहा हूँ है कि इस वेब आधारित इंटरफेस में बस मुझे बताने के लिए जा रहा है, जैसे ही मैं जाने के लिए क्लिक करें, के रूप में डेटाबेस पर इस क्वेरी को निष्पादित CS50 आईडीई के अंदर चल रहा है। तो यह अच्छा है। कहा कि सूचना एक पंक्ति डाला, सुपर तेजी से चला गया 0.0054 सेकंड कि डाटा डालने के लिए। इसलिए, यह बहुत स्वस्थ लग रहा है। यह मेरे प्रश्न reformatted सिर्फ यह देखने के लिए यहां मेरे लिए रंग कोडित संस्करण की तरह में। लेकिन अब मैं क्लिक करते हैं ब्राउज़, भी, कि नोटिस अव्यवस्था का एक बहुत पर नहीं है, हालांकि स्क्रीन, मेरी मेज अब दो पंक्तियाँ है। तो, मुझे आगे जाना है और एक अन्य करते हैं। इस के बजाय, मुझे जाने दो फिर एसक्यूएल टैब पर जाएँ। और इस बार मैं ऐसा कुछ डालने देंगे रोब और उसका नाम रोब बोडेन हो जाएगा। बोडेन। सहेजें क्लिक करते हैं। ओह, बल्कि जाओ। फिर से क्लिक करें, ब्राउज़, और अब मैं दो पंक्तियों के नोटिस। तो, यह सिर्फ एक रास्ता और अधिक जटिल है खोलने गूगल स्प्रेडशीट का रास्ता और सिर्फ एक कॉलम में एक पंक्ति लिखकर। लेकिन महत्वपूर्ण यह है कि क्या हो रहा है हम अब वाक्य रचना है जिसके साथ कोड लिखने के लिए इतना है कि अंत में, हम वास्तव में कर सकता है कुछ और यह करते हैं। कि PHP का समर्थन करता याद है सुपर वैश्विक चर। डॉलर के अंदर क्या है पीएचपी में जाओ अंडरस्कोर हस्ताक्षर? हम एक पर एक नज़र लिया या दो सरल उदाहरण हैं। और PSet6 में, आप नमस्कार है याद इस चर का उपयोग करता है, जो डॉट पीएचपी। क्या वहाँ में चला जाता है? या फिर यह क्या है? थोड़ा जोर से। दर्शकों: [अश्राव्य] डेविड मालन: यह एक बर्फ है सरणी के बीज, जो एक कह रही है की सिर्फ एक अच्छा तरीका है कुंजी मान जोड़े है कि सरणी। और चाबी सांख्यिक नहीं हैं। वे शब्द या तार कर रहे हैं। और विशेष रूप से, क्या उन महत्वपूर्ण मूल्य जोड़े हैं? वे कहां से हैं? क्षमा करें? दर्शकों: [अश्राव्य] डेविड मालन: नहीं? जहां उन कुंजी करना मूल्य जोड़े से आते हैं? फिर से कहना? फिर से? मैं केवल एक ही सुनवाई कुछ कर रहा हूँ? [हँसी] यही कारण है कि हां, यह सही है? दर्शकों: [अश्राव्य] डेविड मालन: हाँ, वे क्वेरी स्ट्रिंग से आते हैं। तो, आप के लिए समय में उल्टा यदि हम गूगल के साथ खेला है जब और हम Google.com स्लेश करने के लिए चले गए हैं खोज सवालिया निशान क्यू, बिल्लियों के बराबर होती है मैं हिट करने के लिए गए थे दर्ज करें और यदि गूगल, पीएचपी में लागू किया गया गूगल ने लिखा है कि PHP कोड डॉलर के हस्ताक्षर करने के लिए उपयोग किया जाएगा जिनमें से अंदर पाने को रेखांकित एक प्रमुख बुलाया क्यू और एक मूल्य है यह तो उपयोग कर सकते हैं कि कहा जाता है, बिल्लियों के साथ एक वास्तविक खोज के लिए करते थे। तो, वास्तव में, मैं करने के लिए क्या जा रहा हूँ अब मेरे PHP कोड के लिए वापस जाना है आप फिर से PSet7 में अधिक देखना होगा कि। और बदले की plugging हार्ड कोडित मूल्यों में जो एक तरह प्रतीत नहीं होता बहुत गतिशील वेबसाइट, मैं आप में से एक नमूना देने के लिए जा रहा हूँ अपने वास्तविक कोड क्या करना होगा। आप दो में रखा जाएगा सवाल इस तरह के निशान। मैं उपयोगकर्ता नाम क्या है पता नहीं है। मैं नहीं जानता कि क्या नाम, होने जा रहा है लेकिन मुझे लगता है मैं कर सकता हूँ जानते हो गतिशील उन्हें मिलता है। तो, अब हम लिख रहे हैं कोड है, तो गूगल के सर्वर पर चल कोड, या इस हैलो डॉट है, तो PSet6 के साथ आता है जो पीएचपी, मैं में पारित करने के लिए जा रहा हूँ क्वेरी समारोह सिर्फ printf की तरह, दो अन्य तर्कों। बोली, जाओ, गंदें शब्द बोलना उपयोगकर्ता नाम, और बोली, गंदें शब्द बोलना नाम, मिलता है। और अब, क्या नोटिस सामान्य संरचना यहाँ है। मैं छोड़ दिया पर मिल गया है कॉल के हाथ की ओर, इस समारोह पीएचपी में क्वेरी बुलाया। मैं अभी भी एक पहले के रूप में है तर्क, पाठ का सिर्फ एक स्ट्रिंग। लेकिन पाठ की है कि स्ट्रिंग है एसक्यूएल नामक एक भाषा में लिखा है। और सच कहूँ तो, यह एक बड़ा भाषा नहीं है। हम केवल बारे में बात करने जा रहे हैं यह औपचारिक रूप से आज, वास्तव में। और फिर समस्या में सेट सात अपेक्षाकृत वहाँ हम कर रहे हैं कि कुछ सुविधाओं लाभ उठाने के लिए जा रहा है। प्रश्न चिह्न है, हालांकि, में प्लग मतलब एक और मूल्य में यहां मूल्य और प्लग यहां। और नोटिस, मैं लोप है क्या quote-- लानत भर से उद्धरण के आसपास it-- इस बार के निशान। मैं उद्धरण का लोप किया है प्रश्न चिह्न के आसपास के निशान, क्षमा करें, इस समय के आसपास। तो, इस बारे में क्या अच्छा है प्रश्न चिह्न सुविधा जो पीएचपी, रूबी का समर्थन करने के लिए जाता है और अजगर और अन्य भाषाओं, यह सिर्फ कुछ में प्लग का अर्थ है यहाँ महत्व देते हैं और आप क्या जानते हो? आप का उपयोग करने के लिए है कि क्या यह पता लगाने एकल उद्धरण या डबल उद्धरण। उन लोगों के साथ मुझे परेशान मत करो बौद्धिक रूप से शुष्क विवरण। लेकिन, यकीन है कि यह सही है बनाते हैं मेरे कोड अंततः इतना है कि परिचालन और सुरक्षित, जो लंबे समय से पहले एक अर्थ होगा। अब, कितने तर्क बस के लिए, कुल स्पष्ट होना, क्वेरी समारोह ले जा रहा है? किसी को भी दो से अधिक के लिए वोट करने के लिए करना चाहते हैं? तीन? अवश्य क्यों? क्यों तीन? दर्शकों: [अश्राव्य] डेविड मालन: बिल्कुल। पहले भाग स्ट्रिंग है। दूसरा तर्क डॉलर के हस्ताक्षर है प्राप्त ब्रैकेट उपयोगकर्ता नाम को रेखांकित। और तीसरा तर्क है एक ही बात है, लेकिन सिर्फ नाम। अब, तो दूसरे शब्दों में मैं एक वेब प्रपत्र था कि अगर कि, पाठ क्षेत्रों के लिए किया था उपयोगकर्ता का उपयोगकर्ता नाम के लिए एक, उसके लिए एक या एक से उसका नाम, बस जैसे आप एक वेबसाइट में देखना होगा आप के लिए रजिस्टर जब कुछ वेबसाइट, यह हो सकता है वापस अंत पर कोड हो कि वास्तव में प्रविष्टि अब करता है डेटाबेस में। अब इसके विपरीत, तेजी से आगे चलो। एक उपयोगकर्ता अब मान लीजिए में प्रवेश करने और आप चाहते हैं कि जांच कि PHP कोड लिखने के लिए बस में लॉग इन किया है जो व्यक्ति एक उपयोगकर्ता वास्तव में, आप कर सकते है बहुत सरल वाक्य रचना का उपयोग करें। आप हम कहते हैं, का चयन कह सकते हैं स्टार सब कुछ है, जहां स्टार। मैं नहीं जानता कि क्या मैं चाहते हैं, तो बस मुझे दे मेज से सभी स्तंभों उपयोगकर्ताओं को जहां कहा जाता है, और यह अच्छा है। चयन क्या समर्थन करता है है, जो एक विधेय बुलाया क्या आप चाहते हैं योग्यता का एक तरीका पसंद है। जहां उपयोगकर्ता नाम के बराबर होती है बोली, गंदें शब्द बोलना मालन। तो यहाँ भी, मैं एम्बेडेड है तर्क के अंदर एक PHP समारोह, एसक्यूएल कोड की एक पंक्ति के लिए। और कहा कि एसक्यूएल कोड इस समय सचमुच जा रहा है बोली के लिए खोज करने के लिए, मालन अनुद्धृत। अब जब कि, यह सब उपयोगी नहीं है इसलिए मुझे लगता है कि छोड़ जा रहा हूँ और मैं दूर रखा जा रहा हूँ ब्रैडी से इस टिप, और जाओ और प्लग में के बजाय यहां एक प्रश्न चिह्न। तो, बस, स्पष्ट होना क्या मेरा दूसरा तर्क चाहिए किसी को सिर्फ और मैं में लॉग इन किया है किया है, तो वह या वह वास्तव में है, तो जाँच करना चाहते हैं एक उपयोगकर्ता? दर्शकों: [अश्राव्य] डेविड मालन: हाँ। मैं डॉलर के हस्ताक्षर अंडरस्कोर सुनना बोली, गंदें शब्द बोलना उपयोगकर्ता नाम मिलता है। और कहा कि मेरे लिए वापस आ जाना चाहिए अपने डेटाबेस में पंक्तियों की किसी भी कि मालन के एक उपयोगकर्ता नाम है। अब उम्मीद है, मैं वापस पाने के लिए जा रहा हूँ शून्य मालन के यहाँ कभी नहीं किया गया, तो या एक वह है यदि। मैं वापस नहीं मिलना चाहिए दो या तीन या चार। क्यों? दर्शकों: [अश्राव्य] डेविड मालन: मैं सही, अद्वितीय कहा? सरल कारण है। मैंने कहा, क्योंकि यह करने के लिए मिल गया है सिर्फ तार्किक रूप से, अद्वितीय हो, आप केवल शून्य या एक Malans हो सकता है इस विशेष डेटाबेस तालिका में। अब तुम्हें देखा है एक अलग रूप में, बस इतना ही यह, मैं का उपयोग कर रखने भले ही प्राप्त और PSet6 ही इस्तेमाल किया, भले ही आप निश्चित रूप से पोस्ट किया है प्राप्त कर सकते हैं। और पोस्ट एक और है कि याद जानकारी प्रस्तुत करने के लिए तकनीक एक रूप से, लेकिन यह यूआरएल में नहीं दिखा है। यह निश्चित रूप से एक छोटे से अधिक सुरक्षित है उपयोगकर्ता नाम और पासवर्ड की तरह बातें, जो PSet7, वास्तव में, शामिल होगी। तो, चलो पीएचपी में यह करते हैं Myadmin और देखो क्या होता है। मैं MySQL टैब पर जाने के लिए जा रहा हूँ। और के लिए है कि डिफ़ॉल्ट मान नोटिस पीएचपी myadmin, बस, सहायक होने की कोशिश करने के लिए जहां उपयोगकर्ताओं को एक से स्टार का चयन है। खैर, एक तो, हमेशा सच है इस प्रभावी मूर्खतापूर्ण है की बस सब कुछ का चयन करें। लेकिन मैं एक छोटे से होने जा रहा हूँ अधिक पंडिताऊ और मैन्युअल प्रयोक्ताओं से चयन स्टार बाहर लिखें। अब तकनीकी रूप से, आप कर सकते हैं टेबल के नाम बोली। यह आप पर है कि दुर्लभ है, लेकिन इन नहीं कर रहे हैं नोटिस अमेरिका के कीबोर्ड पर अपनी सामान्य उद्धरण। इस तथाकथित backtick है, जो शीर्ष बाएं हाथ पर आम तौर पर है अपने कीबोर्ड के कोने। लेकिन यह आप हूँ कि दुर्लभ है वास्तव में उस के साथ चिंता करने की जरूरत है, इसलिए मैं सिर्फ वैसे भी उन्हें न आना देंगे। तो अब, मुझे आगे जाना है और जाना मारा। और कितनी पंक्तियाँ मैं मिलना चाहिए पहले मैं उपयोगकर्ताओं से स्टार का चयन करते हैं? दर्शकों: [अश्राव्य] डेविड मालन: यकीन पंक्तियों की संख्या,। लेकिन इस में कितने अब ठीक ठोस कहानी? दो, क्योंकि वहां गया था मुझे और रोब नहीं था। मैं जाने के लिए क्लिक करें तो, अगर मैं नेत्रहीन कि वहाँ मैं, वास्तव में, दो पंक्तियों मिल गया है। अव्यवस्था का एक बहुत पर नहीं है स्क्रीन है, लेकिन मैं सिर्फ दो पंक्तियों में देखते हैं। मैं फिर से ऐसा करते हैं और यदि इसके विपरीत, करना उपयोगकर्ताओं जहां उपयोगकर्ता नाम से चयन स्टार बोली, गंदें शब्द बोलना बराबर होती है मालन, अब मुझे जाना क्लिक करते हैं मैं केवल वापस एक पंक्ति पाने के लिए जा रहा हूँ। और अंत में, अगर मैं ऐसा कुछ इस तरह लगता है, मैं के बारे में परवाह नहीं है कि सब कुछ हो रही है, जो अब एक तरह से बेमानी है, केवल दो कॉलम है क्योंकि वहाँ। यह मैं चयन कर रहा हूँ की तरह नहीं है डेटा की एक बड़ी राशि है। मुझे आगे जाना है और मान लीजिए से नाम चयन करते हैं उपयोगकर्ता नाम मालन के बराबर होती है, जहां उपयोगकर्ताओं, क्या ईमानदारी से एसक्यूएल के बारे में अच्छा है, यह वास्तव में सिर्फ करता है आप क्या करते हैं यह बताने के लिए। यह बहुत संक्षिप्त है, लेकिन आप सचमुच बस आप क्या करना चाहते हैं यह बताने के। उपयोगकर्ता जहां से चयन नाम उपयोगकर्ता नाम मालन के बराबर होती है। और यह सच है कि स्पष्ट है। तो, अब मुझे जाना है, कितने मारा पंक्तियाँ मैं वापस पाने के लिए जा रहा हूँ? एक, यह सिर्फ इसलिए है क्योंकि मालन, उम्मीद है। या शून्य यदि वह नहीं है वहाँ है, लेकिन ज़्यादा से ज़्यादा है। और मैं वापस कितने कॉलम मिलेगा? कितने कॉलम? इस बार, मैं सिर्फ जा रहा हूँ मैं नहीं था क्योंकि एक पाने के लिए सब कुछ है, जो स्टार का चयन करें। अब मैं बस नाम का चयन है, तो मैं कर रहा हूँ सिर्फ एक स्तंभ और एक पंक्ति वापस मिलता है। और इस बात की उचित रूप से तरह लग रहा है हास्यास्पद, बस देख सुपर इस तरह छोटे। तो, वास्तव में क्या हो रहा है? आप एक एसक्यूएल निष्पादित करते हैं क्वेरी, चयन का उपयोग कर क्या तुम हो रही है वापस डेटाबेस से एक अस्थायी मेज की तरह है पंक्तियों और स्तंभों के साथ, हो सकता है, लेकिन लगता है कि कुछ भी न आना कि वास्तव में आप द्वारा चयनित नहीं किया गया था। इसलिए, यह किसी को एक बड़ा था कि अगर की तरह है सभी छात्रों की स्प्रेडशीट कुछ के लिए पंजीकृत छात्र समूह है, और तुम कहते हो, मुझे जो 've नए सब दे हमारे छात्र समूह के लिए पंजीकृत है, क्या में अपने सहयोगी छात्र समूह कर सकता है वे सिर्फ हाथ सकता है आप पूरे स्प्रेडशीट। लगता है कि चयन स्टार कह की तरह है। और अगर यह एक छोटे से परेशान है आप केवल नए चाहता था। और तो आप के बजाय, ने कहा, यदि डेटाबेस तालिका से चयन स्टार जहां साल के बराबर होती है बोली, गंदें शब्द बोलना नए, यह अपने दोस्त के रूप में यद्यपि है छात्र समूह में सचमुच प्रकाश डाला और नकल की है केवल नए पंक्तियाँ, एक नया गूगल में उन्हें चिपकाया स्प्रेडशीट या एक एक्सेल फ़ाइल, और तुम वापस सौंप दिया केवल फ़ाइल जिसके परिणामस्वरूप। यही हो रहा है वह सब है धारणात्मक यहां पर। तो अंत में, हम क्या कर सकते हैं कुछ बहुत फैंसी बातें उपयोगकर्ता नाम की तरह चीजों के भंडारण के द्वारा और पासवर्ड और पसंद है। लेकिन, यह पता चला है, हमें क्या करना चाहिए यह अलग से एक छोटे से। यह केवल करने के लिए है कि स्मार्ट नहीं है एक उपयोगकर्ता नाम और पासवर्ड की दुकान। पहले कोई है, मुझे लगता है कि यहाँ नीचे, एक आईडी का सुझाव दिया। अब एक आईडी एक तरह हो सकता है हार्वर्ड आईडी या येल नेट आईडी, लेकिन यह भी आसान हो सकता है हमारे डाटाबेस के मामले में। और वास्तव में, आम का मामला एक और स्तंभ के लिए है। और मैं जाने के लिए जा रहा हूँ आगे और मेरी मेज को संपादित करें। और आप के साथ खेलने के आसपास है, तो PSet7 के लिए इस इंटरफेस, क्या आप जाँच कर सकते हैं कि देखेंगे यहाँ इस बटन को और जोड़ने तालिका की शुरुआत में एक क्षेत्र। मैं जाने के लिए क्लिक करें अब, तो यह जा रहा है मुझे उन रूपों में से एक देने के लिए पहले से। मैं आईडी नामक एक क्षेत्र को जोड़ने के लिए जा रहा हूँ। और मुझे लगता है कि यह एक संख्यात्मक प्रकार बनाने के लिए जा रहा हूँ। मैं एक पूरी गुच्छा है के numerics के लिए महत्व देता है। मैं सिर्फ एक INT चयन करने के लिए जा रहा हूँ और असमान आकार के बारे में चिंता नहीं। मैं निर्दिष्ट करने के लिए नहीं है लंबाई या कोई मान यह होने जा रहा है क्योंकि 32 बिट्स कोई बात नहीं क्या। गुण, हम पहले नहीं देखा था। इनमें से किसी में कोई रुचि नहीं मेनू विकल्प इस समय? एक int के लिए? आप क्या प्रस्ताव किया? नहीं? इनमें से कोई मतलब है? हाँ। ठीक है, अहस्ताक्षरित, हाँ? हम जा रहे हैं, तो आम तौर पर, देने के लिए हर कोई एक अद्वितीय संख्या है, जो इस कहानी है, जहां है जा रहा है, मैं वास्तव में केवल चाहते हैं एक व्यक्ति को शून्य की तरह नंबर है और एक और दो और तीन और चार। मैं निपटने की जरूरत नहीं है ऋणात्मक संख्याओं के साथ। यह सिर्फ अनुचित जटिलता की तरह लगता है। मैं चार अरब संभव मूल्यों चाहते हैं, नहीं चार अरब संभावित मान इसलिए मैं सिर्फ दोगुनी मेरी int की क्षमता। एक तरफ, तुम संबंधित करना चाहते हैं के रूप में फेसबुक की तरह यह करने के लिए कुछ है, वापस अपने दिन जब की तरह में फेसबुक पहले बाहर आया मुझे लगता है वे क्या कर रहे थे विश्वास करते हैं उनकी डाटाबेस में उपयोग करते हुए एक उपयोगकर्ता की दुकान करने के लिए पहचानकर्ता, बस एक INT था। लेकिन ज़ाहिर है, वहाँ एक बहुत दुनिया में असली लोगों की। फर्जी फेसबुक का एक बहुत कुछ है दुनिया में खातों। और इसलिए अंत में, फेसबुक overflowed एक INT के आकार, एक चार अरब मूल्य। आप क्यों, देखो, तो कौन सा है के आसपास है और वहाँ वेबसाइटों है कि आप बता सकते हैं क्या अपनी अनूठी पहचान है। और आप में एक उपयोगकर्ता नाम चुना है अगर कभी नहीं फेसबुक, आप अपने अद्वितीय आईडी देखेंगे। मैं इसे प्रोफ़ाइल डॉट पीएचपी लगता है प्रश्न चिह्न आईडी कुछ के बराबर होती है। यही कारण है कि अब एक बड़ा की तरह कुछ है पूर्णांक, या लंबे समय तक अगर तुम जाएगा एक, एक 64-बिट मूल्य जो है या तुलनीय कुछ। तो, यहां तक ​​कि वास्तविक दुनिया में इन करना मुद्दों अंततः कभी कभी कोई फर्क। मैं कर रहा हूँ और अगर यह यहां पता चला है , अपने उपयोगकर्ताओं को एक अद्वितीय पहचान के सभी दे रही है मैं सुपर स्पष्ट होना चाहते हैं और न्यूनतम इस क्षेत्र अद्वितीय बनाते हैं। वहाँ एक है बाहर लेकिन यह बदल जाता है नामकरण आज का टुकड़ा भी कि एक प्राथमिक कुंजी है। आप एक डेटाबेस डिजाइन कर रहे हैं मेज और आप पहले से पता है उस तालिका में स्तंभों में से एक यह है कि और विशिष्ट पंक्तियों की पहचान करेगा चाहिए तालिका में, आप करना चाहते हैं यह निर्दिष्ट और डेटाबेस बताओ, यह मेरी प्राथमिक कुंजी है। डुप्लिकेट हो सकता है अन्य क्षेत्रों में, लेकिन मैं यह है कि डेटाबेस बता रहा हूँ मेरी प्राथमिक है, मेरी सबसे महत्वपूर्ण क्षेत्र है, कि अद्वितीय होने की गारंटी है। अब, यह बेमानी लगती है। मैं अब कि हम प्रस्ताव कर रहा हूँ यहां सहेजें क्लिक करके, जोड़, एक क्षेत्र called-- और मैं जा रहा हूँ आगे बढ़ो और एअर इंडिया के क्लिक करने के लिए, हम करने के लिए वापस आ गया हूँ एक पल में, सहेजें कि। अब मैं उस प्रस्ताव कर रहा हूँ मेरी मेज इस तरह दिखेगा। मैं आईडी नामक एक INT क्षेत्र है प्रयोक्ता नाम नामक चार क्षेत्र, एक varchar नाम बुलाया क्षेत्र है, लेकिन आईडी, यह प्राथमिक और इसलिए अनूठा है, यही कारण है कि मैं सिर्फ बर्बाद किया समय क्या शुरू प्रभावी रूप से अद्वितीय एक दूसरे नंबर पर है क्षेत्र एक INT है कि आईडी कहा जाता है? यूजर का नाम, याद है, था पहले से ही अनूठा, जैसा कि हमने कहा। तो बस तार्किक रूप से, आप की जरूरत नहीं कारण के लिए किसी भी डेटाबेस अनुभव , क्यों इस के माध्यम से मैं शुरू हो सकता है के रूप में अच्छी तरह से अपने अद्वितीय पहचानकर्ता के रूप में एक INT? है- फिर क्या कहना है? दर्शकों: [अश्राव्य] डेविड मालन: रैंडम पहुँच आसान है, क्यों? दर्शकों: [अश्राव्य] डेविड मालन: हाँ, यह है बस संख्या तक पहुँचने। तो, अगर आप वास्तव में इस के बारे में सोच एक मेज, एक सरणी की तरह है, अब मैं अद्वितीय पहचानकर्ता मैं चारों ओर कूद कर सकते हैं। और उस से भी बेहतर है कि अभी भी है कितना बड़ा एक INT फिर से होने जा रहा है? 32 बिट या चार बाइट्स। कितना बड़ा अपने उपयोगकर्ता नाम होने जा रहा है? ज़्यादा से ज़्यादा? 16 बाइट्स। तो क्या तुम सच के बारे में देखभाल कर रहे हैं अपने कोड का प्रदर्शन, आप पसंद करेंगे, वापस PSet5 करने के लिए लगता है एक चार बाइट मूल्य या 16 के लिए खोज करने के लिए बाइट मूल्य, है ना? यह सच में इतना आसान है। आप ज्यादा काम के रूप में चार बार करना है क्योंकि उन उपयोगकर्ता नाम के लिए खोज करने के लिए 16 बाइट्स हैं। तो, अगर आप सचमुच करना है होने के लिए सभी 16 बाइट्स तुलना हाँ ज़रूर, यह मैं चाहता हूँ कि उपयोगकर्ता नाम है। एक int के लिए, आप कर सकते हैं जबकि सिर्फ चार बाइट्स के साथ है। और एक तरफ उन लोगों के लिए के रूप में कंप्यूटर हार्डवेयर में रुचि रखते हैं, यह आप की तरह कुछ फिट कर सकते हैं पता चला है एक INT या कुछ में एक 32-बिट मूल्य एक कंप्यूटर में एक रजिस्टर बुलाया यह सुपर है, जिसका मतलब है सीपीयू, यहां तक ​​कि सबसे कम से कम, सुपर फास्ट कंप्यूटर के हार्डवेयर के स्तर पर। तो, सभी चारों ओर सिर्फ फायदे नहीं है। अच्छा तो इसका क्या मतलब है? वास्तव में, जब आप डिजाइन कर रहे हैं एक समय के लगभग सभी डेटाबेस तालिका तुम नहीं करने जा रहे हैं केवल आप के बारे में परवाह डेटा, की तरह है लेकिन यह भी कुछ एक अद्वितीय पहचानकर्ता इस वजह से करने जा रहा है हमें अन्य बातें करते हैं। और चलो यहाँ एक समस्या पर यात्रा करते हैं। उपयोगकर्ताओं को नहीं है कि मान लीजिए सिर्फ उपयोगकर्ता नाम और नाम, लेकिन वे भी शहरों की तरह बातें और राज्यों और ज़िप कोड, कम से कम यहाँ अमेरिका में। तो, मैं आगे जाने के लिए जा रहा हूँ और बस जल्दी से कहते हैं, मुझे तीन से अधिक स्तंभों देना तालिका के अंत में। और इस शहर के होने जा रहा है यही नहीं, राज्य होने जा रहा है और इस जिप होने जा रहा है। अब शहर, क्या डेटा प्रकार यह शायद, होना चाहिए? VARCHAR? मैं नहीं जानता कि क्या सबसे लंबे समय तक नाम शहर है। कहीं न कहीं अमेरिका में, वहाँ है शायद कुछ हास्यास्पद लंबे शब्द, इसलिए कुछ हद तक, चलो बस 255 के साथ चलते हैं ऐतिहासिक रूप से या मनमाने ढंग से। राज्य, तुम क्या करना चाहते हैं? निर्णय फोन, है ना? क्या सबसे कारगर हो सकता है? कितने वर्ण? हो सकता है कि सिर्फ दो, अगर हम कर सकते हैं बस कर के साथ भाग ले, जैसे, एमए मैसाचुसेट्स के लिए और बहुत आगे है। तो, मैं दो की एक चार मूल्य जाने के लिए जा रहा हूँ। पिन कोड एक दिलचस्प एक है। हम तो यह है कि, 02138 में यहाँ कर रहे हैं हम क्या उपयोग करना चाहिए पता चलता है? यह ठीक है, एक INT है? पूर्णांक, पूर्णांक, लघु? कम काम होता है। नहीं? चार या पांच, लेकिन मैं एक INT चाहते हैं। क्यों एक INT पर वापस धक्का? इस से मुझे मनाने। क्या एक INT, मेरे विचार के बारे में बेवकूफ है? हाँ। दर्शकों: अधिक स्मृति ले। डेविड मालन: अधिक स्मृति ले। चार बाइट्स, लेकिन आप कर रहे हैं एक ज़िप कोड का प्रस्ताव या पांच बाइट्स के रूप में किसी एक चार के रूप में था कि वास्तव में नहीं है, ना की तरह लगता है जो मामला। खैर, मजेदार कहानी है। सालों पहले, मैं का उपयोग करने के लिए प्रयोग किया जाता है जब अपने ईमेल के लिए माइक्रोसॉफ्ट आउटलुक, मैं अंत में जीमेल के लिए स्विच करना चाहता था। और हां, मैं के सभी निर्यात मेरी एक सीएसवी फ़ाइल के रूप में आउटलुक से संपर्क। अल्पविराम से अलग किये गए मान, जो सिर्फ मेरा मतलब मेरे सभी दोस्तों के नाम था और पिछले नाम और फोन नंबर और पिन कोड और यह सब। और फिर मैंने बनाया इसे खोलने की गलती Excel में, जो एक है स्प्रेडशीट प्रोग्राम है कि हमने देखा है के रूप में सीएसवी फाइल को समझता है। लेकिन फिर, मैं जैसे, मारा गया होगा एक बिंदु पर आदेश या नियंत्रण एस। और एक्सेल जाहिरा तौर पर समय पर किसी भी समय, जिससे एक विशेषता थी यह यह मददगार बनने की कोशिश की, एक नंबर देखा। और उस नंबर के साथ शुरू कर दिया है, तो शून्य, यह सिर्फ उनमें से छुटकारा मिल जाएगा। तुम क्यों प्रमुख की ज़रूरत है पूर्णांकों पर शून्य? वे गणितीय, व्यर्थ कर रहे हैं। वे व्यर्थ नहीं कर रहे हैं अमेरिकी डाक प्रणाली में। तो, मैं साल के लिए लिया है, इस दिन के लिए, मैं अभी भी दोस्तों कि जब मैं किसी की जरूरत है कि दुर्लभ मामला इन दिनों को संबोधित, मैं अभी भी है कि मैं देखता हूँ कैम्ब्रिज में एक दोस्त है मैसाचुसेट्स, 2138। आप कर रहे हैं और अगर यह कष्टप्रद है प्रोग्राम के की तरह की कोशिश कर लिफाफे उत्पन्न या बस इसे संक्षेप में लिख देना। और वह है, क्योंकि इस कारण से है मैं गलत डेटा प्रकार चुना है। तो, मैं अपने विचार प्यार करता हूँ। की एक चार क्षेत्र का उपयोग करते हैं। पांच पात्रों, सिवाय एक कोने मामला है। आप अभी भी मेल भेजने के लिए, कभी कभी इन दिनों कोड, ज़िप की तरह वे कर रहे हैं, के साथ साथ चार। तो, हम तो एक हाइफन और जरूरत हम चार और अधिक संख्या की जरूरत है। तो ईमानदार हो, यह हो सकता है कई अलग अलग तरीकों से जाना। अभी के लिए, मैं रखने के लिए जा रहा हूँ यह सरल और मैं अभी कर रहा हूँ यह एक है कि कहने के लिए जा रहा पाँच चार मूल्य और हम कर रहे हैं पूरे पानी का छींटा प्लस चार छोड़ करने के लिए जा रहा है। लेकिन इन tradeoffs के प्रकार के होते हैं। और आप सोच सकते हैं उत्पन्न होने वाले एक ही समस्या फोन नंबर या अन्य क्षेत्रों के साथ। और अब, यह वास्तव में है एक मूर्ख सड़क के नीचे जाने के लिए। रोब और मैं और हन्ना दोनों मान लीजिए और मारिया और [? Davon?] और एंडी और कर्मचारियों पर दूसरों सब रहते हैं कैम्ब्रिज, मैसाचुसेट्स, 02138 में। यह वास्तव में मैं कर रहा हूँ कि बेवकूफ लग रहा है अपने उपयोगकर्ताओं को तालिका में जोड़ने से, शहर, राज्य, और ज़िप। क्यों? दर्शकों: [अश्राव्य] डेविड मालन: फिर से कहो? दर्शकों: [अश्राव्य] डेविड मालन: वे हमेशा से रहे हैं ठीक है, एक साथ जाने के लिए जा रहे हैं? यह पता चला है, जब हम सोचते थे इस विस्तृत रूप से हम जब तक मामला था , पूरे अमेरिका की खोज और कहा कि वहाँ पता चला है कुछ विसंगतियां हैं जहां कई कस्बों है अजीब है, जो एक ही ज़िप,। लेकिन, अब हम 02138 उस के लिए निर्धारित करना है, तो , हमेशा कैम्ब्रिज, मैसाचुसेट्स है यही कारण है कि दुनिया में आप में स्टोर होगा अपने डेटाबेस कैम्ब्रिज और एमए और 02138 मेरे लिए और हन्ना के लिए और रोब के लिए और [के लिए? Davon?] और रहते हैं, जो दूसरों के लिए यहाँ कैम्ब्रिज में, यह है पूरी तरह से बेमानी। हम दूर हो जाना चाहिए बस क्या भंडारण के साथ? बस ज़िप कोड। लेकिन फिर, हम बस की दुकान करता है, तो ज़िप कोड, मैं, शायद, चाहते हैं 02138 है, जहां मेरी वेबसाइट के लिए पता करने के लिए। तो, मैं एक और मेज की जरूरत है। और वह ठीक है। और वास्तव में, इस में से एक है डिजाइनिंग टेबल के डिजाइन प्रक्रियाओं आप के रूप में अच्छी तरह जिससे PSet7 में करूँगा कि आप आम डेटा बाहर कारक करना चाहते हैं। बस हम बाहर फैक्टरिंग किया गया है की तरह आम कोड और बाहर फैक्टरिंग आम यहाँ, सीएसएस से शैलियों भी डेटाबेस में, मैं केवल विशिष्ट करने के लिए 02138 की जरूरत है तो किसी के गृहनगर की पहचान के लिए कैम्ब्रिज, मास की दुकान नहीं है अपनी तालिका में हर रफ़ू उपयोगकर्ता। इसके बजाय, नामक एक अलग टेबल है ज़िप होनी चाहिए कि क्या कॉलम? शायद एक आईडी क्षेत्र, बस के लिए, क्योंकि सिद्धांतों हम अब के बारे में बात कर रहे हैं। 02138 के लिए शायद एक जिप क्षेत्र। और फिर शायद क्या अन्य स्तंभों? शहर और राज्य है, लेकिन केवल एक ही है पंक्ति 02138 के लिए, 02139 के लिए एक पंक्ति, 90210 के लिए एक पंक्ति। और कहा कि सचमुच है सब मुझे पता ज़िप कोड। तो अब, आप क्या कर सकते हैं? इस वजह से समस्याग्रस्त है, अब मैं दो टेबल मिल गया है। तो, अपने उपयोगकर्ताओं को ज्यादातर यहां खत्म हो गई हैं, लेकिन उनके शहर राज्य सूचना है आस - पास। तो, यह वहाँ है, एसक्यूएल के साथ बाहर जाता है वास्तव में एक तरह से, जानकारी में शामिल होने के लिए और आप pset में यह देखेंगे। लेकिन यह आप कर सकते हैं पता चला है कुछ इस तरह करते हैं। प्रयोक्ताओं से चयन स्टार, पर ज़िप शामिल हों उपयोगकर्ता ज़िप ज़िप ज़िप डॉट बराबर होती डॉट। जो एक छोटे से wordy है, बेशक, लेकिन यह सिर्फ से चयन सब कुछ है अपने उपयोगकर्ताओं को तालिका में ले जाने की प्रक्रिया और मेरी ज़िप मेज। एक पर उन्हें शामिल हों क्षेत्र वे कॉलम में है। तो, सचमुच कुछ कर रही है इस तरह, और मुझे वापस दे दो एक नए अस्थायी तालिका कि, कि बड़ा है, व्यापक है उस का सब किया है उन दोनों से कॉलम। और कहा कि, काफी बस, हो सकता है इस तरह से कुछ करने के लिए सिंटेक्स। तो, आगे यह भी नहीं है लेकिन वहाँ जा रहा है अन्य डिजाइन निर्णय होने के लिए आप हूँ न केवल अनुक्रमित के साथ, बनाने के लिए है लेकिन यह भी चुनौतियों में चल रहा है। वास्तव में, वहाँ एक चुनौती है किसी भी डेटाबेस डिजाइन में जिससे कभी-कभी दो लोग चाहते हो सकता है डेटाबेस की एक ही पंक्तियों का उपयोग करने के लिए मेज। तो, यह कुछ है कि हम जाएगा के रूप में अच्छी तरह से PSet7 में मुठभेड़। लेकिन मुझे लगता है कि मैं एक को देखने लगा एसक्यूएल में संभव है कि हमला। कुछ क्या हैं पैदा कर सकते हैं कि समस्या है? तो, अगर आप PSet7 में इस मुठभेड़ हूँ। और हम एकमुश्त क्या आप बता इस समस्या के लिए कोडिंग समाधान है। लेकिन अगर आप एक उच्च स्तर की कक्षा लेते हैं, विशेष रूप से ऑपरेटिंग सिस्टम में, तुम मुठभेड़ करने के लिए जा रहे हैं atomicity का मुद्दा ऐसा करने की कोशिश की समस्या कई बातें सभी को एक बार बिना किसी रुकावट के। और मुझे लगता है कि मैं इस परिचय लगा एक रूपक के साथ PSet7 के लिए विचार मैं मार्गो में अपने आप को पता चला है कि जर्मनी का रासायनिक जल की CS164 ऑपरेटिंग सिस्टम पहले वर्ग साल। आप इन छात्रावास में से एक है कि मान लीजिए अपने छात्रावास के कमरे या घर में फ्रिज, और आप दूध के लिए एक असली लगन है। और हां, तो आप कक्षाओं से घर आते हैं एक दिन, आप फ्रिज खुला। धत तेरी। फ्रिज में कोई दूध नहीं है। तो, अगर आप फ्रिज बंद है, दरवाज़ा बंद अपने छात्रावास ताला, कोने के आसपास चलना सीवीएस करने के लिए लाइन में मिलता है, और कुछ दूध के लिए बाहर की जाँच शुरू। और यह एक समय लेने के लिए जा रहा है उन लानत स्वयं चेकआउट क्योंकि काउंटरों वैसे भी उपयोग करने के लिए हमेशा के लिए ले। तो इस बीच, अपने रूममेट घर आता है। वह या वह सच के रूप में अच्छी तरह से दूध पसंद करता है। वे छात्रावास के कमरे में आते हैं, फ्रिज खुला, ओह, यह रफ़ू। कोई और अधिक दूध नहीं है। तो, वह या वह भी कोने के आसपास हो जाता है। लेकिन अब, के बाद से दो की तरह नहीं है, या तीन या चार CVSes पास, वे में से एक के लिए जाने के लिए होता वर्ग में अलग अलग लोगों को। और हां, अब कुछ ही मिनटों आप के बाद, दोनों घर आते हैं और कभी ऊ, सबसे ज्यादा समस्या। अब आप बहुत ज्यादा दूध यह खट्टा जाना जा रहा है क्योंकि। और अगर आप दूध पसंद है, लेकिन आप वास्तव में दूध पसंद नहीं है। तो अब, यह एक महंगा था गलती तुम दोनों क्योंकि के आधार पर एक निर्णय लिया कुछ चर के राज्य कि की प्रक्रिया में था आप के द्वारा बदला जा रहा है, दूध पाने के लिए जा के सर्जक। तो, क्या शायद एक इंसान है उस समस्या का हल क्या है? दर्शकों: [अश्राव्य] डेविड मालन: ठीक है, एक नोट छोड़ दो? आप कर रहे हैं, तो हमेशा की तरह, एक नोट छोड़ उस शो के साथ परिचित। हाँ, हम दोनों के देखते हैं। तो, हमेशा एक नोट छोड़ दें, या सचमुच रेफ्रिजरेटर ताला ताला के साथ किसी तरह या लगता है कि जैसे शीर्ष पर कुछ और। लेकिन यह है कि वास्तव में होने जा रहा है डेटाबेस डिजाइन के साथ प्रमुख समस्या, हो सकता है आप विशेष रूप से जब कई ब्राउज़रों, कई लैपटॉप, एकाधिक उपयोगकर्ताओं सब करने की कोशिश कर एक बार में जानकारी का अद्यतन करें। विशेष रूप से संवेदनशील जानकारी वित्तीय जानकारी की तरह, जिससे एक शेयर ट्रेडिंग के साथ आप की तरह वेबसाइट का निर्माण किया जाएगा, आप कितना पैसा जाँच करना चाहते हैं तो क्या आप की है और उसके बाद आप पर्याप्त है, तो कुछ शेयर खरीदते हैं? लेकिन क्या अगर और कोई है जो आप के साथ एक संयुक्त खाता है एक साथ की कोशिश कर रहा है कुछ शेयर खरीदने के लिए? तो, वह या वह जाँच कर रहा है तुम दोनों के खाते का बैलेंस, एक ही वापस मिल जवाब है, कोई दूध नहीं है। या फिर आप दोनों के जवाब वापस मिल आप खाते में $ 100 है। तुम दोनों को निर्णय करने की कोशिश किसी कंपनी के शेयर का एक हिस्सा खरीदने के लिए। और अब, क्या होता है? आप दो शेयर हैं? आप कोई शेयर नहीं है? लगता है कि जैसे समस्याएं पैदा कर सकते हैं। तो, हम उस मुठभेड़ हूँ। एसक्यूएल इंजेक्शन हमलों, शुक्र है, हम साथ तुम्हारी मदद करेंगे कुछ कर रहे हैं, लेकिन इन atrociously हैं अभी भी आम इन दिनों। तो, यह सिर्फ एक उदाहरण है। मैं दावा नहीं करते हैं कि हार्वर्ड पिन प्रणाली है यह विशेष रूप से हमले की चपेट में। हम कोशिश की है। लेकिन, क्या आप जानते हैं कि हम उस इस तरह से एक क्षेत्र है। और येल के नेट आईडी एक समान है इन दिनों स्क्रीन देख रहे हैं। और यह पता चला है कि हो सकता है पिन प्रणाली पीएचपी में कार्यान्वित किया जाता है। यह were-- और अगर यह है कि वे not-- है इस तरह दिखता है कि कोड हो सकता है। वे दो चर है। मुझे यूज़रनेम और पासवर्ड दे पोस्ट सुपर वैश्विक चर से हम पहले भी इस बारे में बात करते हैं। हो सकता है कि हार्वर्ड एक क्वेरी है प्रयोक्ताओं से चयन स्टार की तरह जहां उपयोगकर्ता नाम कि बराबर होती है और पासवर्ड कि बराबर होती है। और मैं अभी कर रहा हूँ कि नोटिस का उपयोग करने में यह plugging दूसरे से घुंघराले ब्रेस संकेतन सिर्फ एक मूल्य में प्लग का मतलब है जो दिन, यहां। मैं का उपयोग नहीं कर रहा हूँ प्रश्न चिह्न तकनीक। मैं किसी दूसरे की जरूरत नहीं है या तीसरे तर्क। मैं सिर्फ शाब्दिक हूँ स्ट्रिंग अपने आप का निर्माण। समस्या है, हालांकि, वह यह है कि किसी एक scroob पसंद है, जो एक फिल्म के लिए एक संदर्भ है, इस तरह से कुछ के साथ में लॉग करता है, और मैं डॉट्स हटा दिया है आम तौर पर कवर किया है कि वह क्या करता है, तो पासवर्ड, विशेष रूप से दुर्भावनापूर्ण और उनके पासवर्ड शायद, 12345 है कहा जाता फिल्म के प्रति "Spaceballs," लेकिन उन्होंने समीक्षकों प्रकार एक पांच के बाद एकल बोली, तो सचमुच शब्द या अंतरिक्ष में, और फिर बोली, गंदें शब्द बोलना एक, बोली एक बराबर होती है लेकिन वह क्या लोप के नोटिस? उन्होंने कहा कि सही पर बोली छोड़ा गया है और वह छोड़ दिया पर बोली छोड़ा गया है। क्योंकि अगर इस हमलावर scroob का अनुमान लोग जो लिखा है वह यह है कि इस PHP कोड, बहुत उज्ज्वल नहीं थे शायद वे सिर्फ कुछ ही है प्रक्षेप के आसपास उद्धरण घुंघराले ब्रेसिज़ में एक चर का? और इसलिए हो सकता है, वह किस तरह कर सकता है के अपने विचार को पूरा उनके लिए, लेकिन एक तरह से कि जा रहा है उसे पिन प्रणाली में काट दिया जाने के लिए। दूसरे शब्दों में, लगता है इस कोड है कि और हम अब टाइप किया scroob क्या में प्लग। यह बुरा है क्योंकि यह लाल है। और अंतर्निहित पाठ , वह में टाइप क्या है scroob हार्वर्ड के सर्वर चाल सकता एक एसक्यूएल क्वेरी के निर्माण में इस तरह दिखता है कि स्ट्रिंग। पासवर्ड 12345 या एक के बाद एक बराबर होती है। जिनमें से परिणाम, तार्किक, इस scroob लॉग करेगा है अपने पासवर्ड है, तो में 12345 या यदि एक बराबर होती है हमेशा पाठ्यक्रम का सच है जो एक, जो scroob हमेशा में हो जाता है इसका मतलब है। और हां, जिस तरह से ठीक करने के लिए यही नहीं, बहुत से मामलों में के रूप में, अधिक रक्षात्मक लिखना होगा। तरह कुछ का उपयोग करने के लिए हमारे वास्तविक क्वेरी समारोह, जो आप हम में प्लग जहां PSet7 में देखेंगे सवाल की तरह कुछ यहाँ के निशान। और की सुंदरता क्वेरी समारोह है कि हम आप यह इन के खिलाफ बचाव है देना तथाकथित एसक्यूएल इंजेक्शन हमलों, जहां किसी में अपने कोड को धोखा देना है अपने या अपने एसक्यूएल कोड इंजेक्शन। क्या क्वेरी समारोह क्योंकि हम आप वास्तव में क्या होगा देना, आप प्रश्न चिह्न सिंटैक्स का उपयोग करता है, तो और एक दूसरे और यहाँ एक तीसरा तर्क, यह करने के लिए जोड़ दिया क्या है उपयोगकर्ता प्रदान की है कि इनपुट? उन बैकस्लैश उद्धरण। इसलिए, यह किसी भी संभावित पलायन खतरनाक अक्षर। यह अब अजीब लग रहा है लेकिन यह कमजोर नहीं है यदि ऐसा नहीं होता है, क्योंकि अब और तर्क परिवर्तन कहा कि पूरे पासवर्ड है क्योंकि अब नहीं है कि एक ही बोली, वास्तव में, scroob का पासवर्ड। तो, कुछ मजाक नहीं किया गया है पिछले कुछ वर्षों में इस बारे में। तो, यह एक फोटो लिया गया था एक पार्किंग में कुछ geek की जिससे आपको लगता है कि कुछ शहरों में पता कर सकते हैं और राज्यों के अपने लाइसेंस को स्कैन करने की कोशिश प्लेट आप या टिकट के लिए बिल के लिए आप आप चाहें, तो बिना के माध्यम से जाना है, ई-जेड दर्रा बात। तो, इस व्यक्ति को हो सकता है कि माना ई-जेड पास प्रणाली लिख लोग बहुत उज्ज्वल नहीं थे, और शायद वे सिर्फ एक स्ट्रिंग एक साथ concatenated, इतना है कि वह या वह दुर्भावनापूर्वक नहीं कर सका सिर्फ उनके विचार को पूरा नहीं, लेकिन वास्तव में एक बुरा आदेश पर अमल, जो हम अभी तक का उल्लेख नहीं किया है लेकिन आप शायद अनुमान लगा सकते हैं। इसके अलावा में उसे हटाने के लिए और डालने और अद्यतन और चयन, बूंद नामक एक कीवर्ड भी नहीं है, जो सचमुच सब कुछ हटाता डेटाबेस में जो विशेष रूप से बुरा है। हम इस पर अगर ज़ूम कर सकते हैं यह देखने के लिए थोड़ा मुश्किल है। यह अब एक प्रसिद्ध कार्टून है कि अब शानदार चालाक है और समझ में आता है। [हँसी] हाँ शांत। एक तरह से बाहर geeking। इन ऐसा है, तो कर रहे हैं, एसक्यूएल इंजेक्शन हमला करता है। और वे उपयोग कर से बचने के लिए इतना आसान कर रहे हैं सही कोड या सही पुस्तकालयों। और तुम, कि PSet7 में देखेंगे यही कारण है कि हम आप क्वेरी समारोह देते हैं। तो, टीज़र के एक जोड़े हम चाहते हैं कि सोचा था कि में यहाँ आपको दे हमारे एक साथ मिनट शेष। इसलिए, जब आप सप्ताह शून्य से याद है, हम इन दोनों के प्रकाश बल्ब शुरू की है जो कर रहे हैं अच्छा है, सिर्फ इसलिए नहीं वे सुंदर हो और रंगीन कर रहे हैं, लेकिन वे कुछ समर्थन करते हैं क्योंकि एक आवेदन, एक एपीआई बुलाया प्रोग्रामिंग इंटरफेस और CS50 में इस प्रकार अब तक, हम है ज्यादातर मिलता है, पर केंद्रित है और पोस्ट, लेकिन यह पता चला है डाल की तरह अन्य HTTP क्रियाएँ नहीं है। और वास्तव में, यह था सप्ताह शून्य से एक स्लाइड जिससे आप कोड लिखने कि अगर भेजता एक ला PSet6 एक HTTP अनुरोध है कि पाठ के इस टुकड़ा के साथ इस तरह दिखता है JSON कहा जाता है जो नीचे, पर, या जावास्क्रिप्ट वस्तु संकेतन कि हम अगले सप्ताह के बारे में बात करेंगे, आप को चालू या बंद कर देते हैं या परिवर्तन कर सकते हैं उन लोगों की तरह रोशनी के रंग। CS50 भी कुछ करने के अलावा है तो न्यू हेवन में यहां उन प्रकाश बल्ब की आप उधार ले करना चाहते हैं तो उन्हें अंतिम परियोजनाओं के लिए, यह भी कुछ माइक्रोसॉफ्ट की तरह हैं जो बैंड, आप अपनी कलाई के आसपास पहनना कि घड़ियां इसी तरह से इतना है कि एक एपीआई कि आप उनके लिए अपने स्वयं के सॉफ्टवेयर लिख सकते हैं। हम एक खाते के साथ है एप्पल के आईओएस कोड इसलिए कि आप एक एप्पल घड़ी या अगर आपके पास एक iPhone या एक iPad या एक आइपॉड, आप कोड लिख सकते हैं वास्तव में उन पर चलता है। हम एक पूरी गुच्छा है हैं, जिनमें से Arduinos, छोटे छोटे कंप्यूटर मामलों के बिना, अनिवार्य रूप से, आप USB के माध्यम से कनेक्ट कर सकते हैं, आम तौर पर अपने खुद के मैक या पीसी के लिए, इन शारीरिक पर चलता है कि कोड लिखने अक्सर उन पर सेंसर है कि उपकरणों इसलिए यदि आप असली दुनिया के साथ बातचीत कर सकते हैं। हम एक पूरी गुच्छा है लीप मोशन उपकरणों की, एमएसीएस के लिए यूएसबी उपकरणों जो कर रहे हैं और यहाँ और फिर, न्यू हेवन में पीसी,। और अगर आप अपने मैक से कनेक्ट करते हैं, आप वास्तव में अपने कंप्यूटर को नियंत्रित कर सकते हैं सॉफ्टवेयर लिख कर कि अवरक्त मुस्कराते हुए के माध्यम से, अपने मानव हाथ कर रहे हैं, जहां बाहर के आंकड़े, यहां तक ​​कि अपने कीबोर्ड को छूने के बिना। हम एक त्वरित का हिस्सा था उदाहरण के लिए, इस पर झलक। [संगीत बजाना] तो, हम एक पूरी है इन बातों का गुच्छा, भी, म्यो बाजूबंद बुलाया जो आप अपने प्रकोष्ठ के ऊपर रख दिया और फिर आप वास्तविक नियंत्रण कर सकते हैं दुनिया या इस तरह आभासी दुनिया। [संगीत बजाना] या, हम भी कुछ गूगल है जैसे, सचमुच है जो गत्ता, आप पर डाल सकता है एक गत्ता बॉक्स अपने इसे में अपने फोन में चेहरा, लेकिन स्लाइड इतना है कि आप में से गिलास में डाल अपने अपनी आंखों को बहुत करीब से फोन। और गूगल गत्ता है $ 10 या $ 20 पर बहुत सस्ते। और यह थोड़ा लेंस है कि थोड़ा बदलाव बंद अपने मानव के लिए स्क्रीन पर छवि आंखों आप गहराई की भावना देने के लिए ताकि आप वास्तव में एक 3 डी है आप के सामने पर्यावरण। हम भी कुछ सैमसंग गियर है, जो इस के अधिक महंगा संस्करण है, लेकिन लगता है कि इसी तरह से एक में स्लाइड कर सकते हैं एंड्रॉयड फोन है और आप भ्रम दे of-- या अनुभव दे आभासी वास्तविकता की। और हमारे अंतिम दो मिनट में, हम ऐसा करने की कोशिश लगा। मैं कोल्टन है क्या परियोजना कर सकते हैं यहां सिर्फ अपनी भूख को, मुझे आगे जाना है और फेंक दो यहां बड़े परदे पर। मुझे रोशनी मार डालो। कोल्टन, तुम आगे सौदे और एक पल के लिए अपने सेल पर डाल और के लिए खत्म पर आ मंच के बीच? और अगर आप project-- करना चाहते हैं इस कोल्टन क्या देखता है। अब, यहाँ में वाई-फ़ाई है इस डिवाइस के लिए इतनी मजबूत नहीं इस सुपर मजबूर है कि, लेकिन कोल्टन सचमुच है इस जादुई भविष्य जगह में। उन्होंने कहा कि केवल एक छवि देखता है। तुम उसकी बाईं और दाईं आंख से देख रहे हैं उसके मस्तिष्क में एक साथ सिलाई कर रहे हैं कि एक तीन आयामी में उसके चेहरे पर पर्यावरण। उन्होंने कहा कि अभी यहां एक मेनू विकल्प का चयन किया है। और तो फिर, वह इस हेडसेट पहने हुए है उस पर एक सैमसंग फोन के साथ कि वायरलेस तरीके से हमारी भूमि के ऊपर करने के लिए पेश। अब आप मंगल ग्रह पर, मुझे लगता है कि कर रहे हैं? COLTON: मुझे ऐसा लगता है। मैं [अश्राव्य] यकीन नहीं है। [हँसी] डेविड मालन: बाहर वर्षगांठ मंगल ग्रह इन मेनू है। COLTON: [अश्राव्य] कुछ शांत स्थानों हम है-- जाना चाहते हैं, तो डेविड मालन: हम कहाँ जाना चाहते हो? COLTON: [अश्राव्य] डेविड मालन: और चलो देखते हैं जहां कोल्टन चलो अब हमें ले रही है। COLTON: [अश्राव्य] डेविड मालन: तो, वहाँ बहुत सारे है अलग-अलग स्थानों आप अपने आप को ले जा सकते हैं। FAPIs वहाँ जो के माध्यम से आप कर सकते हैं खेल या बातचीत लिखते हैं कि फोन पर, अंततः, चलाते हैं। तो, अगर आप वास्तव में सिर्फ एक मोबाइल फोन एप्लिकेशन लेखन। लेकिन सॉफ्टवेयर के लिए धन्यवाद और ग्राफिक्स क्षमताओं, अब कोल्टन इस में है छोटे छोटे कुटीर। और के जोखिम में अपने आप को भारी, कोल्टन और मैं के लिए चारों ओर लकड़ी हूँ जबकि यहां वर्ग के अंत में आज आप आते हैं और खेलने के लिए चाहते हैं। और हम उन्हें लाती हूँ वापस अगले सप्ताह के रूप में अच्छी तरह से। आगे की हलचल के बिना ही आज के लिए इतना ही। हम अगले सप्ताह आप देखेंगे। [संगीत - Ragga जुड़वां, "BAD MAN"]