[השמעת מוסיקה] DAVID מלאן: בסדר, זה CS50. זהו סוף השבוע שמונה. והיום, אנחנו מתחילים למלא בכמה חתיכות כשזה מגיע לבניין דברים באינטרנט. אז, זוכר כי ביום שני אנחנו מבלים הרבה יותר זמן על PHP, שהוא דינמי זה שפת תכנות ש מאפשר לנו פלט, בין אחר דברים, HTML ותוכן כגון אחר שאנחנו רוצים לראות. אבל אנחנו לא באמת הסתכלנו על איך אנחנו הולכים לאחסון כל מידע. ואכן, כמעט כל שהסופר אתרים מעניינים שאתה מבקר היום יש איזשהו בסיס הנתונים על גב הסוף, נכון? פייסבוק בהחלט מאחסן המון נתונים על כל אחד מאיתנו וחנויות Gmail כל האימיילים שלכם. וכך, אתרים רבים אחרים הם לא רק תוכן סטטי זה מידע. זה בעצם דינמי בדרך כלשהי. אתה מספק קלט, הוא מעדכן הדפים לאנשים אחרים. אתה מקבל הודעות, אתה שולח הודעות, וכן הלאה. אז היום, אנחנו מסתכלים מקרוב על היסודות של פרויקט שאתה לצלול לתוך הבא שבוע, CS50 האוצר, ש הוא באמת מתכוון שיש לך לבנות משהו לא ב- C, אבל ב- PHP. אתר שנראה משהו קטן כמו זה המאפשר לקנות ולמכור מניות שהן למעשה הולך לשאוב בזמן אמת נתוני מלאי מYahoo Finance. וכך בסופו, יהיה לך אשליה לעצמך ולמשתמשים שאתה בעצם קנייה ומכירה מניות ומקבלים זמן כמעט אמיתי עדכונים, ניהול תיק, אשר כולם הוא הולך לדרוש שיש, סופו של דבר, בסיס הנתונים של משתמשים. אז, במילים שלך, במיוחד אם אתה לא סופר מוכר עם מחשב מדע או מאגרי מידע, מה אתה יודע מסד נתוני להיות עכשיו, במונחים פחות טכניים? מה זה? איך היית מתאר את זה לשותפה או חבר? קהל: [לא ברור] מידע [לא ברור] DAVID מלאן: אז, רשימה של מידע, או store-- רשימה של מידע שאולי אתה רוצה לאחסן על משהו, כמו משתמש. ולעשות את מה שיש לי המשתמשים הקשורים בם? אם אתה משתמש בפייסבוק או Gmail, מה הם המאפיינים כי לכולנו יש משתמשים? כמו, מה יכול להיות חלק מ עמודות בגיליון האלקטרוני שאליה אנו רמז בפעם האחרונה? כי שוב, אתה יכול חושב על מסד נתונים באמת כקובץ Excel מפואר או Google גיליון אלקטרוני או קובץ מספרי אפל. אז, מה אתה חושב על כאשר אתה חושב על משתמש? מה יש להם? מה זה? קהל: שם. DAVID מלאן: שם. אז אם שם, כמו, דוד מלאן יהיה שמו של איזה משתמש. מה עוד אין משתמשים יש? קהל: מזהה. DAVID מלאן: מזהה. אז, כמו מספר תעודת זהות, כמו הרווארד שלך זיהוי או תעודת הזהות הנקי ייל או משהו דומה. מה עוד שאולי יש לי משתמש? קהל: סיסמא. DAVID מלאן: סיסמא, אולי כתובת, אולי מספר טלפון, אולי כתובת דואר אלקטרוני. אז, יש צרורות של שדות וזה סוג של עלול לצאת מכלל שליטה במהירות ברגע שאתה מתחיל מימוש, הו, בואו לאחסן את זה ובואו לאחסן את זה ואת זה. אבל איך אנחנו באמת עושים את זה? אז שוב, המודל המנטלי יש להיום כפי ש לצלול לתוך SQL בפועל, שפת שאילתות מובנית, הוא מסד נתונים שנראים כך. זה פשוט שורות ועמודות. ואתה יכול לדמיין Google Spreadsheets או כל מספר של תוכניות אחרות. אבל מה מפתח על MySQL, שהוא תוכנת מסד הנתונים אנחנו הולכים להשתמש, בגלוי בחופשיות available-- שימושי פייסבוק זה וכל מספר של websites-- האחר מסד הנתונים מאחסן דברים בצורה יחסית. ומסדי נתונים יחסיים רק אומר שממש מאחסן את הנתונים בשורות ועמודות. זה פשוט כמו זה. אז, אפילו משהו כמו אורקל ש ייתכן שיש בדרך כלל שמע על הוא מסד נתונים יחסיים. ומתחת למכסה המנוע, זה מאחסן נתונים בשורות ועמודות. ואורקל מחייב אותך הרבה כסף כדי לעשות את זה, ואילו חיובי MySQL לך כלום עבור אותו. אז, SQL הולך לתת לנו לפחות ארבע פעולות. היכולת לבחור נתונים, כמו קריאה נתונים, להוסיף, למחוק, ולעדכן נתונים. במילים אחרות, הם אלה באמת ארבע פעולות עיקריות כי הם הולכים כדי לאפשר לנו לשנות דברים אלה בשורות ועמודות. הכלי שאנו משתמשים היום במיוחד ללמוד SQL ולשחק עם זה נקרא שוב MyAdmin PHP. זה כלי מבוסס אינטרנט. צירוף מקרים מוחלטים ש זה כתוב ב- PHP. אבל זה הולך לתת לנו גרפי ממשק משתמש, כך שלמעשה אנחנו יכולים ליצור שורות ועמודות אלה ולאחר מכן לדבר איתם באמצעות קוד. אז, בואו עכשיו להתחיל ל מה שאני חושב בכנות סוג של התהליך המהנה של בנייה בקצה האחורי של אתרים, החלקים שמשתמשים לא לראות, אבל אין ספק שיעשה אכפת, כי זה לא נתונים של הולכים. אז, דומה ל- C ו קצת פחות כמו PHP, SQL, או מסד נתונים התומכים ב SQL, יש סוגים לפחות נתונים אלה וצרורות של אחרים. CHAR, varchar, INT, bigint, עשרוני, וDATETIME. ויש כל חבורה של תכונות אחרות, אבל בואו נעשה את זה על ידי לדוגמא בפועל. אני הולך להיכנס לCS50 IDE שם, מראש, אני כבר מחובר ואני גם ביקרתי את כתובת אתר ל הכלי הזה שנקרא PHP MyAdmin. ובבעיה להגדיר שבע, אנחנו אגיד לי לך בדיוק איך להגיע לממשק זה גם כן. בפינה השמאלית העליונה, שמתי לב שזה אומר להרצות. וזה רק אומר ש מראש, אני יצרתי הרצאת מסד נתונים בשם ריקה שאין לו גיליונות אלקטרוניים בזה עדיין. אין שורות ועמודות. מכיוון הראשון דבר שאנחנו הולכים לעשות הוא מתחיל ליצור טבלה זה הולך לאחסן המשתמשים שלנו. אז, פשוטו כמשמעו, על כאן לימין, אני הולך לספר את מסד הנתונים אני רוצה טבלה בשם משתמשים. אז, זה כמו הקובץ ש רוצה לאחסן את כל הנתונים שלי ב. וכמה עמודים? ובכן, בואו נשמור את זה פשוט עבור החברה. אני רק רוצה לאחסן כמו שם משתמש ושם למשתמש. נתחיל קטן. אז, אני רוצה סך הכל שתי עמודות. ואני הולך קדימה ולחץ על חפש. ולאחר מכן, לאלה עמודות, מה אני הולך לdo-- אם אינטרנט זה cooperates-- בסדר, כך אנחנו הולכים לנסות את זה שוב. אני הולך ליצור טבלה בשם משתמשים עם שתי עמודות, לחץ על Go, אישור. עכשיו יש לנו את זה ממש מהר. תודה לך, יפה מאוד. בסדר, אז מה לעשות שאנחנו רוצים עמודים אלה שייקראו? אז, אחד הולך להיקרא שם משתמש. כאן-- אז, כל מה שאני רואה והממשק בכנות מקבל קצת מכוער סופו של דבר, ברגע שאתה מתחיל להקליד בכל הנתונים הללו. אבל מה נחמד הוא סוג של באופן פרדוקסלי, אני יוצר עמודות, אבל הכלי יש בטיפשות הניח אותם בשורות כך שאני יכול להגדיר את העמודות אלה. אז, יש שני כדורי סרק יש תחת שם. ואחד מהתחומים הללו אני רוצה נקרא שם משתמש, והתחום האחר שאני רוצה לקרוא לשם. ועכשיו אני צריך לבחור סוגי נתונים לדברים האלה. אז, בעוד ב- Excel ו, Google Spreadsheets אם אתה רוצה טור, אתה ממש פשוט הקלד שם או שם משתמש, לחץ על Enter. אולי אתה עושה את זה פנים מודגשים רק לבהירות, אבל זהו זה. אתה לא תציין סוגים של העמודות. עכשיו בGoogle Spreadsheets או Excel, אולי לציין כיצד הנתונים שניתנו. אתה יכול ללכת לתפריט העיצוב, ואתה ניתן לציין להראות סימן דולר כמו זה, להראות את זה כמו ערך נקודה צפה. אז, זה דומה ברוחו ל כי מה שאנחנו עומדים לעשות, אבל זה באמת הולך להכריח הנתונים להיות סוג מסוים. עכשיו, למרות שלפני רגע אמר שיש רק כמה סוגי נתונים, יש למעשה הרבה, והם בדרגות שונות של הספציפיות. וכמו בצד, אתה אפילו יכול לעשות דברים מפוארים כמו גיאומטריות אחסון בתוך מסד הנתונים. אתה יכול לאחסן דברים כמו GPS קואורדינטות ובעצם למצוא, מבחינה מתמטית, נקודות כי הם קרובים לאחרים. אבל אנחנו הולכים ל לשמור את זה פשוט סופר ולעלות לכאן, כל סוגי המחרוזת שנקרא. אז, הנה רשימה של כל חבורה של אפשרויות. CHAR, varchar, TINYTEXT, MEDIUMTEXT, LONGTEXT. וזה סוג של מכריע. ולמרבה הצער, מעט באופן פרדוקסלי ל- C, CHAR הוא לא ממש CHAR. אם תציין בבסיס נתונים שסוג הנתונים שלך הוא CHAR, זה אומר שכן, זה CHAR, אבל זה תווים אחד או יותר. ואתה צריך לציין כמה תווים שאתה רוצה. אז, מה טיפוסי אורך לשם משתמש? האם יש גבול בדרך כלל? קהל: [לא ברור] DAVID מלאן: 16 אולי? משהו כזה. אתה יודע, חזרה ב יום, זה היה אמור להיות שמונה. לפעמים זה 16, לפעמים זה אפילו יותר מזה. וכך, זה לא אומר לי CHAR אחד. זה אומר שאני צריך לציין אורכו של השדה, ועכשיו אני יכול להגיד משהו כמו 16. ויש את סחר כאן. אז, אנו רואים ברגע שזה אומר אחד, כל משתמש צריך להיות 16 תווים. אבל חכה רגע, M--L--N. אם זה שם המשתמש שלי ואני רק באמצעות חמש, מה היית מציע שבסיס הנתונים לעשות מזה 11 תווים האחרים ש אני כבר שמורות מקום ל? מה היית עושה? קהל: [לא ברור] DAVID מלאן: כן, רק לגרום להם כל null. לגרום להם רווחים. אבל כנראה null, כך הרבה אפסים קו נטוי. אז, מצד האחד, יש לנו עכשיו דאג ששם המשתמש שלי יכול להיות לא יותר מ 16 תווים. והצד השני של המטבע הוא ש שאם לא היה לי שם ארוך מאוד או רציתי באמת ארוך שם משתמש כמו שחלקכם בחורים שאולי יש לי במכללה שאו בYale.edu, אתה לא יכול להיות אחד. וכך למעשה, אם יש לך אי פעם נרשם לאתר ואתה מקבל צעק על אומר הסיסמה שלך ארוכה מדי או את שם המשתמש שלך ארוך מדי, זה פשוט כי מתכנת, כאשר קביעת תצורה של מסד הנתונים שלו או שלה, החליט שתחום זה יהיה להיות לא יותר מאשר אורך זה. בסדר, אז מה אם אנחנו ממשיכים לשם? כמה זמן צריך שמו של האדם הטיפוסי להיות? תווים כמה, 16? אני מנחש שיכולנו למצוא מישהו בחדר הזה שבו על ידי התוספת הראשונה שלו או שלה האחרונה שם הוא יותר מ -16 תווים. אז, מה יותר טוב מזה, 17? 18? 25? גדול יותר? 30? קהל: [לא ברור] DAVID מלאן: 5,000, הו אלוהים שלי. אז, זה כנראה הגון גבול עליון, יהיה לנו לומר. וכאן אנחנו סוג של יש לי כדי לבצע שיחת שיפוט. כמו, אין תשובה נכונה כאן. האינסוף הוא לא מן הנמנע, כי אנחנו סופו של דבר הולך לנו-- אנחנו הולך נגמרים של זיכרון. אז, אנחנו צריכים לעשות שיחת שיפוט בשלב מסוים. נפוץ מאוד יהיה, למשל, לuse-- ותנו לי לציין CHAR כאן כbefore-- 255 היו ממש גבול עליון על תוכנת מסד נתונים זה לפני שנים. וכך, הרבה בני אדם הייתי אומר רק, בסדר. 255 הוא הגבול. בואו פשוט להשתמש במקסימום. וזה די מגוחך. כמו, אם אתה מקליד מישהו שם 200 תווים בתוספת, שקצת מגוחך. אבל, זכור כי ASCII הוא לא המערכת רק לדמויות. וכך, במיוחד ב הרבה שפות אסיאניות שבו יש דמויות שאנחנו לא יכולים להביע על קלידים כמו ארה"ב מקלדת, כמה דמויות למעשה תופס 16 סיביות במקום שמונה סיביות. וכך, זה ממש לא כל כך בלתי סביר שאנחנו צריכים יותר חלל אם אנחנו רוצים להתאים דמויות גדולות מארה"ב מאוד ממוקדים אלה שכבר נטו לדון. אז, אנחנו צריכים כמה גבול עליון. אני לא יודע מה הוא אחד הטוב ביותר, אבל 255 הוא בדרך כלל אחד משותף. 25 מרגישים נמוכים. 16, 32 מרגישים נמוכים. הייתי לטעות בצד של משהו גבוה יותר. אבל יש את סחר, כמו תמיד. מה הוא, אולי, ברור סחר הנחה של 255 תווים בהזמנת לשם של כולם באתר שלי? קהל: [לא ברור] DAVID מלאן: מה זה? קהל: [לא ברור] DAVID מלאן: זה הרבה זיכרון, נכון? M--L--N. יש לי רק בזבזתי 250 דמויות רק כדי לאחסן את השם שלי בהתגוננות, רק למקרה שמישהו בכיתה יש לו שם ממש ארוך. זה נראה כמו פשרה מיותרת. אז, מתברר שSQL, שפה זו מסד הנתונים, למעשה תומך במשהו נקרא varchar, או CHAR משתנה. וזה סוג של נחמד שבזו מאפשר לך לציין לא קבוע רוחב, אלא, רוחב משתנה. ובאופן ספציפי יותר, רוחב מרבי של השדה. אז, זה אומר ששם יכול להיות לא יותר מ 250 תווים, אבל זה בהחלט יכול להיות פחות. ומסד הנתונים הולכים להיות חכם. אם אתה שם בM--L-A-N, זה הולך רק לשימוש חמש, אולי שישה בתים עבור כמו אופי null נגרר, ולא לבזבז נוסף 249 או 250 בתים שלא לצורך. אז, זה נראה כמו שאני צריך התחיל עם הסיפור הזה. אבל תמיד יש תחלופה. אז, מצד האחד, את שם משתמש של לי צוין להיות מקודדים קשה בגיל 16, ואולי זה לא היה השיחה הנכונה, אולי זה הוא, אבל למה לא להשתמש VARCHARs לכל דבר? קיים זה מסיבה. למה לא להשתמש VARCHARs לכל תחום שאורכו אתה לא יודע מראש אם זה נראה דבר גדול, נכון? השתמש רק בכמה שיותר מרחב כ אתה צריך עד לגבול זה? קהל: איטי יותר. DAVID מלאן: איות? קהל: עושה את זה לאט יותר? DAVID מלאן: אה, זה איטי יותר. טוב, זה כמעט תמיד התשובה, בכנות. כמו, מה הפשרה? זה גם עולה יותר מרחב או זה עולה יותר זמן. לכן, במקרה זה, זה יכול להיות איטי יותר. למה? קהל: [לא ברור] קביעה [לא ברור]. DAVID מלאן: טוב. אז, אתה אולי זוכר מאפילו PSED5, משחק עם הגישה שלך למילון, אם יש לך ל להקצות זיכרון דינמי או לשמור גדל חיץ, ש באמת יכול להיות איטי. אם אתה צריך להתקשר malloc מתחת למכסה המנוע, ואולי זה מה שהוא עושה MySQL, כך בוודאי שיכול להיות המקרה. ואם אתה חושב בדרך בחזרה לPSet-- או אפילו שבועות שני, דברים כשעשינו כמו חיפוש בינארי או אפילו חיפוש ליניארי, אחד הדברים נחמדים על כל מילה במסד נתונים או כל מילה בעמודה להיות בדיוק באותו האורך, אפילו אם חבורה של הדמויות האלה כל הם ריקים, הוא שאתה יכול להשתמש גישה אקראית על הנתונים שלך, נכון? אם אתה יודע שכל מילה היא 16 תווים משם, אתה יכול להשתמש בחשבון מצביע, כך ל לדבר, וללכת לנו 16, 32, 48, 64, ואתה יכול פשוט לקפוץ באופן מיידי באמצעות חשבון לכל אחת מהמילים במסד הנתונים שלך. לעומת זאת, אם זה varchar, מה שאתה במקום צריך לעשות? [צלצול טלפון] אם זה varchar, לא יכול להשתמש בגישה אקראית. מה יש לך לחפש או לעשות? כן? קהל: [לא ברור] DAVID מלאן: תראה דרך עקבות whole-- דרך כל הרשימה מחפש מה, סביר להניח? איזה סוג של ערך מיוחד קהל: [לא ברור] DAVID מלאן: מחפש למסיימי null שמסמן את ההפרדה של מילות. אז שוב, איזון, ו אין תשובה נכונה. אבל זה, מקום שבו במיוחד כאשר המשתמשים שלך להגיע להיות רב וטעינה שלך על השרתים שלך, מספר האנשים המשתמש שהוא מקבל גבוה, אלה הם בעצם החלטות טריוויאלי. אז, אנחנו יכולים לעזוב את אלה כמו זה, אבל בואו לגלול למטה מעל לימין כאן. עכשיו, יש כמה עמודות שבו אנו צריכים לבצע שיחת שיפוט. האם זה הגיוני לאפשר למשתמש של שם, שם המשתמש או של משתמש למשתמש של שם, להיות null? כלומר, רק ריק. מרגיש קצת שטותי, ולכן אני לא הולך לבדוק קופסות האלה. אבל מתברר ב מסד הנתונים, אתה יכול להגיד, מישהו יכול אופציונלי יש ערך זה. בטור זה אין להיות ממש שם. עכשיו, יש תפריט נפתח זו. ושים לב שאני עדיין בשורה הראשונה יש, על שם משתמש אז אני מדבר עכשיו. ומתברר שמאגר מידע, שלא כמו גיליון אלקטרוני בלבד פשוט, יש לו תכונות רבות עוצמה בשם אינדקסים. ומדד הוא דרך לומר מסד הנתונים מראש שאני האדם אני יותר חכם ממך. אני יודע מה סוגים של שאילתות, בחר או להוסיף או למחוק או עדכון, שהקוד שלי עומד להסתיים דבר עושה על מסד הנתונים הזה. אני רוצה לקרוא הרבה נתונים. אני רוצה להכניס הרבה נתונים. אני רוצה כל הזמן להסיר הרבה נתונים. אם אני יודע שאני הולך להיות גישה שדה כמו שם משתמש הרבה, אני יכול להגיד לי מנע מסד הנתונים, אני יודע יותר ממה שאתה, ואני רוצה צו ש אתה צריך אינדקס תחום זה. איפה אינדקס שדה או עמודה משמעות הדבר היא כי בבסיס הנתונים מראש צריך לשאול כמה רעיונות מ, כמו, שבוע ארבעה וחמישה ושש מCS50 ובעצם לבנות משהו כמו חיפוש בינארי עץ או משהו בדרך כלל נקרא עץ B שבו היית ללמוד בCS124 כמו כיתה בהרווארד, ברמת אלגוריתמים, או כל מספר של מקומות אחרים. מסד הנתונים וחכם אנשים שיישמו אותו יהיה להבין איך לאחסן שולחן שמידע בזיכרון, כך שחיפושים ו פעולות אחרות הן סופר מהירים. אתה לא צריך לעשות את זה. אתה לא צריך ליישם חיפוש ליניארי או חיפוש בינארי או למזג סוג או בחירה סוג, מכל זה. מסד הנתונים עושים את זה בשבילך אם אתה אומר לי זה מנע למדד תחום זה. ואתה יכול לראות גם, יש כמה מאפיינים אחרים אנחנו יכולים לספר לי מסד הנתונים לאכיפה. מה יכול זה אומר אם אני בוחר ייחודי מתפריט זה, רק באופן אינטואיטיבי? כן? קהל: [לא ברור] DAVID מלאן: כן, שם משתמש צריך להיות ייחודי. האם זה דבר טוב או דבר רע ל מסד הנתונים, לאתר אינטרנט עם משתמשים? צריכים שמות משתמש להיות ייחודיים? כן, כנראה. אם זה מה ש שדה אנו משתמשים כדי להתחבר, אתה לא באמת רוצה אנשים שיש אותו תחושה או באותו שם המשתמש. אז, יכול להיות לנו מסד נתוני אכיפה שכל כך כי עכשיו בקוד PHP שלי או כל שפה, אני לא צריך, למשל, לבדוק בהכרח עושה את שם המשתמש זה קיימות לפני שאני נותן למישהו להירשם? מסד הנתונים לא ינתנו שני אנשים בשם דוד או Malans לרשום במקרה זה. וכמו בצד, למרות שזה תפריט רק מאפשר לך לבחור אחד, אינדקס ייחודי הוא אחד זה אינדקס לביצועי סופר מהירים, אבל זה גם אוכף את הייחוד. ואנחנו נחזור למה ש אחר שני אומר ברגע. בינתיים, אם אני הולך ל בשורה השנייה שלי, ש שמו של המשתמש, עליי לציין ששם צריך להיות ייחודיים? לא, כי אתה בהחלט יכול נו-- אין שני דוד Malans בחדר הזה, סביר להניח. אבל אם אנו בוחרים בשם אחר, אולי בוודאי שיש לנו התנגשויות. היזכר חשיש שולחנות וכדומה. אז, אנחנו בהחלט לא רוצים כדי להפוך את שם תחום ייחודי. אז, אנחנו פשוט הולכים לעזוב כי כמקף, מקף, מקף, שום דבר. ואני הולך לעזוב הכל לבד אחר. ואכן, רוב השדות אלה אנו לא צריכים לדאוג. וכשאני מוכן להציל זה, אם האינטרנט משתף פעולה, אני לחץ על שמור, ומאוד, מאוד, מאוד לאט אין בסיס הנתונים לקבל נשמרו. ועכשיו אני חוזר לזה ממשק, שיש להודות, הוא מכריע במבט ראשון. אבל כל מה שאני הולך לעשות הוא קליק במילת המשתמשים בפינה השמאלית עליונה. אני הולך לעלות כאן, לחץ על משתמשים, וברירת מחדל, זה ביצע כמה SQL, אבל עוד על כך ברגע. הנה רק סיכום של מה שעשיתי. ולא לדאוג שאתה רואה להזכיר לטינית ושוודית כאן. אלה הם רק ברירת המחדל הגדרות, כי MySQL במקור, או PHP MyAdmin, אחד משני קרה להיכתב על ידי כמה אנשים שוודי. אבל זה לא רלוונטי במקרה שלנו כאן. בסדר, אז למה הוא זה כל מעניין? מתברר, שאני יכול להכניס נתונים לתוך מסד נתונים על ידי כתיבת קוד. ואני הולך קדימה ו בקובץ שלי כאן, אני הולך קדימה ולהעמיד פן כמו זה קווית למסד נתונים ש, ש זה לא באותו הרגע, אבל זה יהיה להיות כשנגיע לבעיה להגדיר שבע. ואני הולך קדימה ו לבצע פונקציה שנקראת שאילתא, שאנו נותנים לך בבעיה להגדיר קוד ההפצה של שבע, ש לוקח טיעון אחד לפחות, וזה רק מחרוזת. מחרוזת של קוד SQL. אז, אתה עומד ללמוד איך לכתוב שפת שאילתות מובנית. אם אני רוצה להוסיף שורה חדשה לי מסד הנתונים, כי מישהו הגיש טופס לקוד שלי, אני ממש היית לכתוב INSERT INTO המשתמשים הבאים שדות: שם משתמש, פסיק, שם, הערכים, ועכשיו אני צריך להכניס משהו כמו מלאן, וציטוט, "דוד מלאן." סוף ציטוט ועכשיו אפילו למי שלא מכיר SQL, למה אני משתמש בגרשיים בודדים בתוך מחרוזת ירוקה זה? מה יכול להיות הסיבה לכאן? שים לב אני שיתוף ערבוב שתי שפות. שאילתא היא פונקצית PHP, אבל זה לוקח טיעון. וטענה שיש לעצמו להיות כתוב בשפה אחרת שנקראה SQL, שפת שאילתות מובנית. אז, כל מה שאני עתה מודגש כאן היא השפה הזה שנקרא SQL. אז, מה עם הגרשיים בודדים, רק כבדיקת שפיות מהירה? לך על זה. הם מחרוזות. אז, ציטוט, מלאן וציטוט סוף ציטוט, סוף ציטוט דוד מלאן הם מחרוזות. ורק לחשוב באופן אינטואיטיבי עכשיו, לדעת מה שאתה יודע על C ו- PHP, למה לא לעשות את זה, שאני בדרך כלל מרכאות כפולות משומשות למיתרים? למה אני לא רוצה לעשות את זה? כן? קהל: [לא ברור] DAVID מלאן: בדיוק. כי אני כבר משתמש ב מרכאות כפולות בדרך מחוץ לוויכוח לפונקצית PHP, הייתי לבלבל את המתורגמן פשוט. זה לא יודע, אלה הולכים יחד? האם אלה הולכים יחד? האם אלה הולכים יחד? אז, אני חלופי במקום. או שאני יכול לעשות משהו כזה, ציטוט קו נטוי או ציטוט קו נטוי. למען האמת, שרק מתחיל לקבל מאוד קריא ומכוער. אבל זה היה להשיג את אותה התוצאה גם כן. אז, לאם היינו לבצע את זה שאילתא עכשיו, בואו לראות מה קורה. אני הולך קדימה ועכשיו לא מלבצע את קוד PHP, ש המקום שבו תוכל לשחק בבעיה להגדיר שבע, אני הולך ללכת במקום לMyAdmin PHP. ואני הולך באופן ידני ללכת לכרטיסיית SQL, ותן לי להתמקד על הממשק. ואני הולך להדביק ב הדבר אני רק הקלדתי. ויש לו את קידוד הצבע שינה קצת עכשיו, רק בגלל פורמטי התכנית דברים קצת אחר. אבל שם לב שכל מה שעשיתי הוא שאמרתי, להכניס לתוך משתמשים. אני כבר צוין, אז, בפסיק רשימת סוגריים מופרד שני שדות שאני רוצה להכניס, ו אז אני כבר אמרתי, פשוטו כמשמעו, ערכים אחרי סוגריים אחר, ולאחר מכן שני ערכים אני רוצה התוספת, ו עכשיו למען סדר טוב, אני אשים את נקודה-פסיק בסוף. אז, זה לא ג זה לא PHP. עכשיו זה SQL, ואני מדביק אותו לממשק מבוסס אינטרנט זה זה רק הולך לתת לי, ברגע שאני לוחץ על Go, לבצע שאילתא זו על בסיס הנתונים פועל בתוך IDE CS50. אז זה טוב. שים לב שאמרו שורה אחת הוכנס, הלך סופר מהיר, .0054 שניות להכניס נתונים ש. אז, זה נשמע די בריא. זה מחדש השאילתה שלי לי כאן רק כדי לראות אותו בסוג של גרסת צבע מקודד. אבל עכשיו אם אני לוחץ עיון, שם לב ש, אפילו למרות שיש הרבה עומס על המסך, השולחן שלי עכשיו יש לו שתי שורות. אז, תן לי ללכת קדימה ולעשות אחר. במקום זה, תן לי עבור לכרטיסיית SQL שוב. והפעם אני נכניס משהו כמו רוב ושמו יהיו רוב באודן. באודן. בואו לחצו על שמור. אופס, מעדיף ללכת. לחץ על עיון שוב, ו עכשיו שמתי לב שיש לי שתי שורות. אז, זה רק מורכב הרבה יותר דרך של פתיחת Google Spreadsheets ופשוט להקליד בשורה לעמודה. אבל מה מפתח הוא ש עכשיו יש לנו את התחביר עם שלכתוב קוד כדי ש סופו של דבר, אנחנו באמת יכולים לעשות קצת וזה. נזכיר כי תומך PHP משתני סופר גלובליים. מה יש בתוכו של דולר לחתום תחתון GET ב- PHP? אנחנו לקחנו להסתכל אחד או שתי דוגמאות פשוטות. ובPSet6, זוכר לך שלום הנקודה PHP אשר משתמש במשתנה זה. מה הולך שם? או מה זה? קצת יותר חזק. קהל: [לא ברור] DAVID מלאן: זה שלג זרע של מערך, ש הוא רק דרך מפוארת של אומר מערך שיש זוגות ערך מפתח. והמקשים אינם מספריים. הם מילות או מחרוזות. ובמיוחד, מה ש הם זוגות מפתח הערך אלה? מאיפה הם באו? מצטער? קהל: [לא ברור] DAVID מלאן: לא? לאן מפתח אלה זוגות הערך באו? תגיד שוב? שוב? אני משהו דיון אחד בלבד? [שחוק] זה נכון, כן? קהל: [לא ברור] DAVID מלאן: כן, הם מגיע ממחרוזת השאילתה. לכן, אם אתה אחורה בזמן ל כאשר אנו כבר שיחקנו עם Google ואנחנו כבר הלכנו לקו נטוי Google.com q סימן שאלת החיפוש שווה חתולים, אם הייתי על Enter ואם Google יושמו ב- PHP, קוד PHP שגוגל כתבה יצטרך גישה לסימן דולר מדגיש להיכנס פנימה ש הוא ש מפתח בשם וערך חתולים נקראים שלאחר מכן ניתן להשתמש ב נהג לעשות חיפוש בפועל עם. כך, למעשה, מה שאני הולך לעשות עכשיו הוא לחזור לקוד PHP שלי כי אתה שוב לראות יותר בPSet7. ובמקום חיבור בערכים מקודדים קשים ש לא נראה כמו מאוד אתר דינמי, אני הולך לתת לך טיזר של מה הקוד שלך בפועל היה עושה. היית שם בשני סימני שאלה כמו זו. אני לא יודע מה הוא שם המשתמש. אני לא יודע מה שם הולך להיות, אבל אני יודע שאני יכול לקבל אותם באופן דינמי. לכן, אם את הקוד שאנחנו כותבים עכשיו הוא הקוד רץ על השרתים של גוגל, או אם זה שלום נקודה PHP, אשר מגיע עם PSet6, אני הולך לעבור ל פונקצית השאילתה בדיוק כמו printf, שתי טענות אחרות. GET, ציטוט, שם משתמש סוף ציטוט, וGET, ציטוט, שם סוף ציטוט. ועכשיו, שים לב מה מבנה כללי הוא כאן. יש לי בצד השמאל צד של השיחה, פונקציה זו נקראת שאילתא ב- PHP. עדיין יש לי כראשון ויכוח, רק מחרוזת של טקסט. אבל מחרוזת שהטקסט היא כתוב בשפה שנקראת SQL. ולמען אמת, זה לא שפה גדולה. אנחנו הולכים רק לדבר על זה באופן רשמי היום, באמת. ולאחר מכן בבעיה להגדיר שבע, יש יחסית כמה תכונות שאנחנו הולך למנף. סימני השאלה, אם כי, מתכוונים חבר ערך כאן ותקע בערך אחר כאן. והודעה, אני כבר הושמט מה מרחבי הארורים quote-- it-- סביב הציטוט מסמן הפעם. אני כבר השמטתי את הציטוט סימנים סביב סימן השאלה, מצטער, הפעם. אז, מה שיפה זה תכונת סימן שאלה ש PHP נוטה לתמוך, רובי ו פייתון ושפות אחרות, זה רק אומר שתקע בכמה מעריך כאן ואתה יודע מה? לך להבין אם להשתמש ציטוטים בודדים או מרכאות כפולות. אל תטרח עם אלה פרטים אינטלקטואלי מעניינים. אבל, לוודא שזה נכון כך שהקוד שלי הוא סופו של דבר מבצעי ובטוח, ש תהיה משמעות לפני זמן רב. עכשיו, כמה טיעונים יסתכמו, רק כדי שיהיה ברור, היא לקיחת פונקצית השאילתה? כל אחד רוצה להצביע ליותר משני? שלוש? בטח, למה? למה שלוש? קהל: [לא ברור] DAVID מלאן: בדיוק. החלק הראשון הוא המחרוזת. הטיעון השני הוא סימן דולר להדגיש את שם משתמש של תושבת GET. והטיעון השלישי הוא אותו דבר, אבל רק שם. אז במילים אחרות, עכשיו אם היה לי טופס אינטרנט שנאלץ שדות טקסט, אחד לשם המשתמש של המשתמש, אחד לו או את שמה, רק כמו שהיית רואה באתר בעת הרישום ל כמה אתר אינטרנט, כוח זה להיות הקוד בקצה האחורי ש בעצם עושה את הכניסה החברה לתוך מסד הנתונים. עכשיו לעומת זאת, בואו מהר קדימה. נניח משתמש הוא עכשיו כניסה ואתה רוצה לכתוב קוד PHP שבודק אם האדם שפשוט מחובר הוא למעשה למשתמש, אתה יכול להשתמש בתחביר די פשוט. אתה יכול לומר SELECT, נניח כוכב, שבו כוכב אומר הכל. אני לא יודע למה אני רוצה, כל כך פשוט לתת לי כל העמודות מהטבלה בשם משתמשים בי, וזה נחמד. בחר תומך מה נקרא נשוא, שהוא כמו דרך של מוקדמות מה שאתה רוצה. איפה את שם המשתמש שווה ציטוט, מלאן סוף ציטוט. כך גם כאן, אני כבר מוטבע בתוך הוויכוח לפונקציה PHP, שורת קוד SQL. וזה שהקוד SQL הזמן הולך, פשוטו כמשמעו, לחפש ציטוט, סוף ציטוט מלאן. עכשיו זה לא כל כך שימושי, אז אני הולך לדלג ש ואני הולך לשים בצד טיפ זה בריידי, וללכת ותוספת במקום סימן שאלה כאן. אז, רק שיהיה ברור, מה צריך הטיעון השני שלי להיות אם מישהו רק מחובר ואני רוצה לבדוק אם הוא או היא היא למעשה משתמשים? קהל: [לא ברור] DAVID מלאן: כן. אני שומע תחתון סימן דולר קבל הצעה, שם משתמש סוף ציטוט. ושצריך לחזור אליי כל השורות במסד הנתונים שלי שיש לי שם משתמש של מלאן. עכשיו אני מקווה, אני הולך לחזור אפס אם מלאן של אף פעם לא היה כאן, או אחד אם יש לו. אני לא צריך לחזור שתיים או שלושה או ארבעה. למה? קהל: [לא ברור] DAVID מלאן: אמרתי ייחודי, נכון? סיבה פשוטה. כי אמרתי שהוא הגיע ל להיות ייחודי, רק מבחינה לוגית, אתה יכול להיות רק אפס או אחד Malans בטבלת מסד נתונים המסוימת הזה. עכשיו במאמר המוסגר, רק כדי שראית זה, למרות שאני אמשיך להשתמש GET ואף על פי שPSet6 משמש רק מקבל, אתה יכול בהחלט יש POST. ולזכור כי הודעה היא עוד טכניקה להגשת מידע מצורה, אבל זה לא יופיע ב- URL. זה קצת יותר בטוח בהחלט ל דברים כמו שמות משתמש וסיסמאות, שPSet7 יהיה, למעשה, כרוך. אז, בואו נעשיתי את זה ב- PHP MyAdmin ולראות מה קורה. אני הולך לכרטיסיית MySQL. ושים לב שערך ברירת המחדל עבור PHP MyAdmin, רק כדי לנסות להיות מועיל, הוא לבחור כוכב מהמשתמשים בו. ובכן, אחד הוא תמיד נכון, כל כך זה יש המטופש יעיל רק לבחור את הכל. אבל אני הולך להיות קצת יותר קפדן וידני הקלד את כוכב SELECT ממשתמשים. עכשיו מבחינה טכנית, אתה יכול לצטט את השם של השולחנות. זה נדיר שיש לך ל, אבל שמתי לב אלה אינם הציטוטים הרגילים שלך על המקלדת בארה"ב. זהו הסימן 'כביכול, ש הוא בדרך כלל בחלק העליון יד שמאל פינת המקלדת שלכם. אבל זה נדיר כי אתה באמת צריך להטריד עם זה, אז אני פשוט להשמיט אותם בכל מקרה. אז עכשיו, תן לי ללכת קדימה ופגעו ללכת. וכמה שורות אני צריך לקבל בחזרה כאשר אני בוחר כוכב ממשתמשים? קהל: [לא ברור] DAVID מלאן: מספר השורות, בטוח. אבל כמה זה ב סיפור קונקרטי עכשיו? שני, כי לא היה שלי ולא היה רוב. לכן, אם אני לוחץ על Go, אני רואה חזותי ש אני כבר קיבלתי בחזרה, אכן, שתי שורות. יש הרבה עומס על מסך, אבל אני רואה רק שתי שורות. לעומת זאת, אם אני עושה את זה שוב ולעשות כוכב SELECT ממשתמשים, שבו שם משתמש שווה ציטוט, סוף ציטוט מלאן, עכשיו אם אני לוחץ לך, אני רק הולך לחזור שורה אחת. ולבסוף, אם אני עושה משהו כזה, מניח שלא אכפת לי על מקבל הכל, שהוא סוג של חסר משמעות עכשיו, כי יש רק שתי עמודות. זה לא כמו שאני בחירה כמות הנתונים עצומה. נניח שאני הולך קדימה ו בוחר שם מ משתמשים, שבו שם משתמש שווה מלאן, מה שיפה SQL בכנות, הוא שזה באמת רק עושה מה אתה אומר את זה לעשות. זה די תמציתי, אבל אתה ממש רק תגיד לה מה שאתה רוצה לעשות. שם בחר ממשתמשים בי שם המשתמש שווה מלאן. וזה באמת כל כך מפורש. אז, עכשיו אם אני מכה לך, כמה שורות אני הולך לקבל בחזרה? אחד, כי זה פשוט מלאן, בתקווה. או אפס אם הוא לא שם, אבל אחד מקסימאלי. וכמה עמודות שאחזור? כמה עמודים? הפעם, אני רק הולך להשיג אחד כי אני לא בחר כוכב, שהוא הכל. עכשיו אני פשוט בחירה שם, אז אני רק לחזור עמודה אחת ושורה אחת. וזה נראה סוג של הולם סופר מגוחך, פשוט מחפש קטן כמו זה. אז, מה באמת קורה? כאשר אתה לבצע SQL השאילתה באמצעות בחר, מה אתה מקבל בחזרה מבסיס הנתונים כמו טבלה זמנית עם שורות ועמודות, אולי, אבל זה להשמיט כל דבר ש לא ממש נבחר על ידך. אז, זה כמו אם מישהו היה גדול גיליון אלקטרוני של כל התלמידים נרשם לכמה קבוצת סטודנטים, ואתה אומר, תן לי את כל השנה הראשונה שיש לי נרשם לקבוצת הסטודנטים שלנו, מה ש הקולגה שלך ב קבוצת סטודנטים יכולה לעשות הוא שהם יכולים רק למסור אתה כל הגיליון האלקטרוני. זה כמו לומר כוכב נבחרים. וזה קצת מעצבן אם אתה רק רצית הלימודים הראשונה. וכך, אם אתה במקום אמר, כוכב נבחרים מטבלה במסד נתונים שבו בשנה ששווה ציטוט, סוף ציטוט הלימודים הראשונה, זה כאילו חבר שלך בקבוצת הסטודנטים והדגיש, פשוטו כמשמעו, העתקנו רק את שורות הלימודים הראשונה, הדביק אותם לגוגל חדשה גיליון אלקטרוני או קובץ Excel, ונתתי לך בחזרה וכתוצאה מכך קובץ בלבד. זה כל מה שקורה על מושגית כאן. אז בסופו של הדבר, אנחנו יכולים לעשות כמה דברים די מפוארים על ידי אחסון דברים כמו שמות משתמש וסיסמאות וכדומה. אבל, מתברר, שאנחנו צריכים לעשות קצת שונה מזה. זה לא שחכם רק לאחסן את שם המשתמש וסיסמא. מישהו קודם לכן, אני חושב ש כאן למטה, הציע זהות. עכשיו מזהה יכול להיות כמו הרווארד זהות או תעודת הזהות הנקי של ייל, אבל זה יכול להיות אפילו יותר פשוט במקרה בסיס הנתונים של. ואכן, במקרה הנפוץ הוא שיש עמודה נוספת. ואני מתכוון ללכת קדימה ולערוך השולחן שלי. ואם אתה משחק איתי ממשק זה לPSet7, אתה תראה שאתה יכול לבדוק לחצן זה כאן ולהוסיף שדה בתחילת השולחן. ועכשיו אם אני לוחץ לך, זה הולך לתת לי אחת מצורות אלה מקודם. אני הולך להוסיף שדה שנקרא מזהה. ואני הולך לעשות את זה סוג מספרי. יש לי כל חבורה ערכים לnumerics. אני רק הולך לבחור INT ו לא לדאוג גדלים השונים. אני לא צריך לציין אורך או ערך, כי זה הולך להיות 32 סיביות ולא משנה מה. תכונות, שלא ראו בעבר. כל עניין בכל אחד מאלה אפשרויות תפריט הפעם? לINT? מה אתה מציע? לא? האם כל אלה הגיוניים? כן. כן, לא חתום, נכון? באופן כללי, אם אנחנו הולכים לתת לי כל מספר ייחודי, ה המקום שבו הסיפור הזה הוא הולך, אני באמת רק רוצה לאדם יש מספר כמו אפס ואחד ושתיים ושלושה וארבעה. אני לא צריך להתמודד עם מספרים שליליים. זה פשוט נראה כמו מורכבות מיותרות. אני רוצה ארבעה מליארד ערכים אפשריים, לא ארבעה מליארד ערכים אפשריים, אז אני פשוט הכפלתי את קיבולת של INT. במאמר מוסגר, אם אתה רוצה להתייחס למשהו הזה כמו פייסבוק, בחזרה בסוג של היום שלי כש פייסבוק הראשון יצא, אני מאמין במה שהם היו באמצעות במסד נתוני MySQL שלהם לאחסון למשתמש של מזהה, היה רק ​​INT. אבל כמובן, יש הרבה של אנשים אמיתיים בעולם. יש הרבה של פייסבוק המזויף החשבונות בעולם. וכך בסופו, עלה על גדותיו בפייסבוק הגודל של INT, ארבעה מיליארדים ערך. ולכן, אם אתה מסתכל מסביב ויש אתרים שיכול להגיד לך מה זיהוי הייחודי שלך הוא. ואם אתה לא בחרת את שם המשתמש ב פייסבוק, תראה זיהוי הייחודי שלך. אני חושב שזה PHP נקודת הפרופיל מזהה סימן שאלה שווה משהו. כי עכשיו משהו כמו גדול INT, או ארוך ארוך אם תרצה, שהוא ערך 64-bit או משהו דומה. לכן, גם בעולם האמיתי לעשות אלה סופו של דבר לפעמים נושאים חשובים. ומתברר כאן, אם אני נותן את כל המשתמשים שלי מזהה ייחודי, אני רוצה להיות סופר מפורש ו מינימאלי להפוך תחום זה ייחודי. אבל מתברר שיש אחד גם חתיכה של מינוח היום זה מפתח ראשי. אם אתה מעצב בסיס הנתונים שולחן ואתה יודע מראש שאחד מהעמודות בטבלה ש צריכים וייחודי לזהות שורות בטבלה, אתה רוצה לציין את זה ולספר את מסד הנתונים, זה הוא המפתח העיקרי שלי. אולי יש כפילויות בתחומים אחרים, אבל אני אומר לי מסד נתונים שזה הוא העיקרי שלי, תחום החשוב ביותר שלי, שמובטח להיות ייחודי. עכשיו, זה נראה מיותר. עכשיו אני מציע ש להוסיף, על ידי לחיצה על שמירה כאן, נקרא-- שדה ואני הולך ללכת קדימה ולחץ על AI, אנחנו נחזור ל כי ברגע, חוסכים. אני מציע עכשיו ש השולחן שלי נראה כמו זה. יש לי שדה INT נקרא זהות, שדה CHAR בשם משתמש, שדה varchar נקרא שם, אבל זהות, אם זה ראשוני ולכן ייחודי, למה אני פשוט לא אבזבז זמן החדרת מה יעילות הוא שני ייחודי השדה שנקרא מזהה זה INT? שם משתמש, כזכור, היה ייחודי כבר, אמרנו. אז רק באופן הגיוני, אתה לא צריך כל ניסיון מסד הנתונים לסיבה באמצעות זה, למה אולי יש לי הצגתי INT כמזהה הייחודית שלי גם כן? מה זה-- הוא אומר שוב? קהל: [לא ברור] DAVID מלאן: אקראי הגישה קלה יותר, מדוע? קהל: [לא ברור] DAVID מלאן: כן, זה רק גישה מספרים. לכן, אם אתה חושב על זה באמת טבלה, כמו מערך, עכשיו יש לי מזהה ייחודי שאני יכול לקפוץ בסביבה. ויותר טוב מזה עדיין הוא ש כמה גדול הוא INT הולך להיות שוב? 32 סיביות או ארבעה בתים. כמה גדול שם המשתמש שלי הולך להיות? מקסימאלי? 16 בתים. לכן, אם אתה באמת אכפת הביצועים של הקוד שלך, חושב לחזור לPSet5, היית מעדיף כדי לחפש ערך ארבעה בתים או 16 ערך בתים, נכון? זה באמת פשוט כמו ש. אתה צריך לעשות ארבע פעמים כהרבה עבודה כדי לחפש שמות משתמש, כי אלה 16 בתים. אז, יש לך, פשוטו כמשמעו, להשוות את כל 16 הבתים להיות בטוח שכן, זה שם משתמש שאני רוצה. ואילו לINT, אתה יכול לעשות את זה רק עם ארבעה בתים. וכמו בצד לאלה מעוניין בחומרת מחשב, מתברר שאתה יכול להתאים משהו כמו INT או ערך של 32 סיביות במשהו נקרא הרשמה במחשב מעבד, מה שאומר שהוא סופר, סופר מהיר, אפילו ברמה הנמוכה ביותר רמת החומרה של המחשב. אז, יש רק יתרונות בכל מקום. אז, מה זה אומר? למעשה, כאשר אתה מעצב טבלת מסד נתונים, כמעט כל הזמן אתה הולך לי לא רק את הנתונים שאכפת לך, אבל גם משהו כמו מזהה ייחודי כי זה הולך תן לנו לעשות דברים אחרים. ובואו למעוד על בעיה אחת כאן. נניח שמשתמשים לא רק שמות משתמש ושמות, אבל יש להם גם דברים כמו ערים ומדינות ומספרי מיקוד, לפחות כאן בארה"ב. אז, אני הולך קדימה ורק אומר במהירות, תן לי שלוש עמודות נוספות בקצה השולחן. וזה הולך להיות עיר, זה הולך להיות מדינה, וזה הולך להיות מיקוד. עכשיו סוגי העיר, מה שנתונים זה צריך להיות, אולי? Varchar? אני לא יודע מה הארוכה ביותר שם העיר היא. אי שם באמריקה, יש כנראה איזו מילה ארוכה עד כדי גיחוך, אז בואו פשוט ללכת עם 255, במידה מסוימת מבחינה היסטורית או באופן שרירותי. מדינה, מה אתה רוצה לעשות? שיחת דין, נכון? מה אולי היעילה ביותר? כמה דמויות? אולי רק שתיים, אם אנחנו לא יכולים לברוח עם עושה רק, כמו, תואר שני למסצ'וסטס וכן הלאה. אז, אני הולך ללכת ערך CHAR של שתיים. מיקוד זה מעניין. אנחנו כאן ב02138, כך ש מציע שאנחנו צריכים להשתמש במה? זה INT, נכון? INT, INT, קצר? קצר יעבוד. לא? CHAR או חמש, אבל אני רוצה INT. למה לדחוף בחזרה על INT? לשכנע אותי מזה. מה טיפשי על INT, הרעיון שלי? כן. קהל: קח יותר זיכרון. DAVID מלאן: קח יותר זיכרון. ארבעה בתים, אבל אתה מציע מיקוד כחמישה בתים או מישהו היה כCHAR, שמרגיש כמו אה, זה לא באמת המקרה. ובכן, סיפור משעשע. לפני שנים, כשנהגתי להשתמש Microsoft Outlook לדואר האלקטרוני שלי, סופו של דבר רצה לעבור ל- Gmail. וכך, אני מיוצא כולי אנשי קשר מ- Outlook כקובץ CSV. מופרד בפסיקים ערכים, שנועד רק לי היו כל שמות החברים שלי ואחרון שמות ומספרי טלפון ומספרי מיקוד ואת כל זה. ואז אני עשיתי את טעות לפתוח אותה ב- Excel, שבו הוא תוכנת גיליונות אלקטרוניים ש מבין קבצי CSV כפי שראינו. אבל אז, אני חייב פגעתי, כמו, פיקוד או הבקרה S בנקודה אחת. ו- Excel כנראה בזמן הייתה תכונה לפיה כל זמן זה ראה מספר, הוא ניסה להיות מועיל. ואם המספר שהתחיל עם אפסים, זה היה רק ​​להיפטר מהם. למה אתה צריך מוביל אפסים במספרים שלמים? הם חסרי משמעות, מבחינה מתמטית. הם לא חסרי משמעות במערכת ארה"ב הדואר. אז, היה לי במשך שנים, עד עצם היום הזה, אני עדיין יש לי חברים שכאשר מקרה נדיר שאני צריך מישהו לטפל בימים אלה, אני עדיין אראה לי ש יש לי חבר בקיימברידג ', מסצ'וסטס, 2,138. וזה מעצבן אם אתה מנסה למיין של תכנותי ליצור מעטפות או פשוט לרשום אותו. וזה בגלל סיבה זו, אני בחרתי את סוג הנתונים הלא נכון. אז, אני אוהב את הרעיון שלך. בואו להשתמש בשדה CHAR. חמש דמויות, למעט יש מקרה פינה. אם אתה עדיין לשלוח דואר, לפעמים zip קודים בימים אלה, הם, כמו, בתוספת ארבעה. אז, אנחנו צריכים מקף ולאחר מכן אנחנו צריכים ארבעה מספרים נוספים. אז אם להיות כנה, זה יכול ללכת בדרכים רבות ושונות. לעת עתה, אני הולך לשמור זה פשוט ואני רק הולך להגיד שזה חמש ערך CHAR ואנחנו הולך לדלג על כל המקף וארבעה. אבל אלה הם הסוגים של פשרות. ואתה יכול לחשוב על שלהן בעיות הנובעות עם מספרי טלפון או תחומים אחרים. ועכשיו, זה בעצם כביש מטופש לרדת. נניח שני רוב ואני וחנה ומריה ו[? דבון?] ואנדי ואחרים על צוות כל חיים בקיימברידג ', מסצ'וסטס, 02138. זה באמת מרגיש שאני טיפש הוספה לשולחן המשתמשים שלי, עיר, מדינה, ורוכסן. למה? קהל: [לא ברור] DAVID מלאן: תגיד שוב? קהל: [לא ברור] DAVID מלאן: הם תמיד הולך ביחד, נכון? כאשר מתברר, שנהגנו לחשוב זה היה המקרה עד שממצים חיפש כל ארה"ב, ומתברר שיש כמה חוסר עקביות שבו יש ערים רבות אותו zip, וזה מוזר. אבל, אם אנחנו קובעים לעת עתה ש02138 תמיד קיימברידג ', מסצ'וסטס, מדוע בעולם היית לאחסן ב מסד הנתונים שלך קיימברידג 'ותואר שני ו02138 עבורי ועבור חנה ולרוב ו בשביל ש [? דבון?] ועבור אחרים שחיים כאן בקיימברידג ', זה מיותר לחלוטין. אנחנו צריכים לברוח רק עם האחסון מה? רק המיקוד. אבל אז, אם אנו מאחסנים רק מיקוד, אני כנראה רוצה,, לאתר האינטרנט שלי לדעת איפה הוא 02138. אז, אני צריך שולחן אחר. וזה בסדר. ולמעשה, זה אחד תהליכי עיצוב של שולחנות עיצוב שתעשה כן לפיה בPSet7 אתה רוצה גורם מתוך נתונים משותפים. בדיוק כמו שאנחנו כבר פקטורינג החוצה קוד ופקטורינג החוצה נפוץ נפוצים סגנונות מCSS, כאן גם באתר, אם אני צריך רק 02138 לייחודי לזהות עיר הולדתו של מישהו, לא לאחסן קיימברידג ', מסצ'וסטס ל כל משתמש להטליא בשולחן שלך. במקום זאת, יש לי שולחן נפרד בשם רוכסנים שצריכים לקבל את מה שעמודות? כנראה שדה מזהה, רק בגלל, ל על החברה את העקרונות שאנחנו מדברים. כנראה שדה zip ל02138. ולאחר מכן כנראה מה אחר עמודות? עיר ומדינה, אבל יש לי אחד בלבד שורה עבור 02138, שורה אחת עבור 02,139, שורה אחת עבור 90210. וזה ממש כל מספרי המיקוד אני יודע. אז עכשיו, מה אתה יכול לעשות? זו היא בעייתית, משום ש עכשיו יש לי שני שולחנות. אז, המשתמשים שלי הם בעיקר לכאן, אבל מידע מדינת עירם של כאן. אז, מתברר עם SQL, יש למעשה דרך להצטרף למידע, ואתה רואה את זה בPSet. אבל מתברר שאתה יכול לעשות משהו כזה. כוכב SELECT ממשתמשים, הצטרפות רוכסנים ON משתמשי dot zip שווים רוכסנים נקודה מיקוד. שהוא קצת מלל, אמנם, אבל זה רק פירושו כל דבר בחר מ תהליך של לקיחת שולחן המשתמשים שלי ושולחן הרוכסנים שלי. להצטרף אליהם באחד שדה שיש להם בטור. אז, ממש עושה משהו כמו זה, ולתת לי בחזרה טבלה זמנית חדשה זה רחב יותר, זה גדול יותר, כי יש את כל עמודות משניהם. וזה, בפשטות, יהיה תחביר לעושה משהו כזה. אז, יש לפני זה, אבל יש הולך להיות החלטות עיצוב אחרות תמצאו צריך לעשות, לא רק עם מדדים אלא גם פועל לאתגרים. למעשה, יש אתגר בכל עיצוב בסיס הנתונים לפי לפעמים שני אנשים אולי ירצו כדי לגשת לאותו שורות של מסד הנתונים שולחן. אז, זה משהו שנוסיף ל נתקל בPSet7 גם כן. אבל חשבתי שאני רוצה להסתכל על אחד התקפה שאפשר ב- SQL. מה הם כמה מ בעיות שיכולים להתעורר? אז, אתה נתקל בזה בPSet7. ואנו אומרים לכם על הסף מה פתרון קידוד לבעיה זו הוא. אבל אם אתה לוקח בכיתה רמה גבוהה יותר, במיוחד במערכות הפעלה, אתה הולך להיתקל ב נושא של אטומי, הבעיה של מנסה לעשות דברים רבים בבת אחת ללא הפרעה. ואני חשבתי שאני רוצה להציג את זה רעיון לPSet7 עם מטפורה שלמדתי בעצמי מרגו מערכות ההפעלה CS164 של זלצר שנים לפני כיתה. נניח שיש לך אחד ממעונות אלה מקררים בחדר במעונות או בבית שלך, ויש לך נטייה אמיתית לחלב. וכך, אתה בא הביתה משיעורים יום אחד, אתה פותח את המקרר. אה, לעזאזל. אין חלב במקרר. אז, אתה סוגר את המקרר, לנעול את הדלת, לנעול המעונות שלך, ללכת מעבר לפינה לCVS, תקבל בשורה, ולהתחיל לבדוק לקצת חלב. וזה הולך לקחת זמן, כי הלקוחות הארורים עצמיים אלה מונים לקחת לנצח כדי להשתמש בכל מקרה. אז בינתיים, השותפה שלך מגיעה הביתה. הוא או היא באמת אוהבת חלב גם כן. הם נכנסו לחדר במעונות, לפתוח את המקרר, הו, לעזאזל. אין יותר חלב. אז, הוא או היא גם הולך מעבר לפינה. אבל עכשיו, שכן יש כמו שתי או שלושה או ארבעה CVSes סמוך, הם קורים כדי ללכת לאחד אלה שונים בכיכר. אז עכשיו, כמה דקות מאוחר יותר, שניכם באו הביתה ואיכס הבעיה, הגרועה ביותר אי פעם. עכשיו יש לך יותר מדי חלב כי זה הולך חמוץ. ואתה אוהב את חלב, אבל אתה לא ממש אוהב חלב. אז עכשיו, זה היה יקר טעות כי שניכם החלטה מבוססת על מדינה של כמה משתנה ש היה בתהליך של להיות שונה על ידי לך, היוזם הולך לקבל חלב. אז, מה הוא אולי אדם פתרון לבעיה ש? קהל: [לא ברור] DAVID מלאן: השאר פתק, נכון? תמיד להשאיר פתק, אם אתה מכיר את תכנית ש. כן, יש שתיים מאיתנו. לכן, תמיד להשאיר פתק, או פשוטו כמשמעו לנעול את המקרר עם איזה סוג של מנעול או משהו על הדף כמו ש. אבל זה באמת הולך להיות בעיה מרכזית עם עיצוב מסד נתונים, במיוחד כאשר ייתכן שיש לך מספר דפדפנים, מחשבים ניידים מרובים, מספר משתמשים כל ניסיון לעדכן את המידע בפעם אחת. מידע רגיש במיוחד כמו מידע פיננסי, לפי עם מסחר במניות אתר כמוך תהיה בנייה, מה אם אתה רוצה לבדוק כמה כסף יש לך ואז אם יש לך מספיק, לקנות מניות? אבל מה אם מישהו שאחר יש לו חשבון משותף איתך הוא בו זמנית מנסה כדי לקנות כמה מניות? אז, הוא או היא בודקת יתרת חשבון, שניכם לחזור באותו תשובה, אין חלב. או שניכם לחזור התשובה, יש לך 100 $ בחשבון. שניכם מנסים להפוך את ההחלטה לקנות מניה אחת של כמה מניות חברה. ועכשיו, מה קורה? יש לך שתי מניות? אין לך מניות? בעיות כמו שיכולות להתעורר. אז, אנחנו נתקלים בזה. התקפות הזרקת SQL, לשמחתי, הם משהו אנחנו נעזור לך עם, אבל אלה הם להחריד נפוצים בימים אלה עדיין. אז, זה רק דוגמא. אני לא עושה שום טענות ש מערכת הרווארד PIN היא פגיע להתקפה המסוימת הזה. אנחנו כבר ניסינו. אבל, אתה יודע שאנחנו יש שדה כזה. ויש לו תעודת הזהות הנקי של ייל דומה מחפש מסך בימים אלה. ומתברר, שאולי מערכת ה- PIN מיושמת ב- PHP. ואם זה were-- זה not-- הם אולי יש לי קוד שנראה כך. יש להם שני משתנים. תן לי את שם המשתמש וסיסמא ממשתנה גלובלי פוסט סופר שדיברנו עליו קודם לכן. אולי יש הרווארד שאילתא כמו כוכב SELECT ממשתמשים שם משתמש שווה ש וסיסמא שווה את זה. ושים לב שאני רק חיבור אותו בשימוש ב סימון הסד המתולתל מאחר יום, שרק אומר לחבר ערך כאן. אני לא משתמש טכניקת סימן שאלה. אין לי כל שנייה או טיעונים שלישיים. אני רק ממש בניית המחרוזת עצמי. הבעיה, אם כי, היא ש אם מישהו רוצה scroob, אשר היא התייחסות לסרט, יומנים עם משהו כזה, ואני כבר הסרתי את הנקודות כי בדרך כלל לכסות סיסמאות, מה אם הוא זדוני במיוחד ואת הסיסמה שלו אולי היא 12345, לסרט שנקרא "Spaceballs," אבל הוא ביקורתי סוגים ציטוט אחד אחרי חמש, לאחר מכן, פשוטו כמשמעו, את המילה או בשטח, ולאחר מכן הצעת מחיר, סוף ציטוט אחד שווה ציטוט אחד, אבל שימו לב שהוא השמיט את מה? הוא השמיט את הציטוט בצד הימין והוא השמיט את הציטוט בצד השמאל. כי אם תוקף זה ההנחה של scroob הוא שהאנשים שכתבו קוד PHP זה לא היה כל כך בהיר, אולי רק שיש להם כמה בודד מצטט סביב אינטרפולציה של משתנה בסוגריים מסולסלים? ואז אולי, הוא יכול סוג של השלמת המחשבה שלהם עבורם, אבל באופן שהולך לתת לו לפרוץ למערכת ה- PIN. במילים אחרות, תניח ש כי זה הקוד ועכשיו אנחנו לחבר מה scroob הקליד. וזה אדום, כי זה רע. ואת הטקסט הבסיסי זה מה שהוא הקליד ב, scroob יכול להערים השרת של הרווארד לבניית שאילתות SQL מחרוזת שנראית כך. סיסמא שווה 12345 או אחד שווה אחד. התוצאה של אשר, מבחינה לוגית, הוא שזה יהיה יומן scroob באם הסיסמה שלו היא 12345 או אם אחד שווה אחד, שהוא כמובן תמיד נכון, מה שאומר שscroob תמיד מקבל ב. וכך, דרך לתקן זה, כמו בהרבה מקרים, יהיה לכתוב בהגנה. כדי להשתמש במשהו כמו שלנו פונקצית שאילתא בפועל, ש תראה בPSet7, שבו אנחנו חבר משהו כמו סימני שאלה כאן. והיופי של פונקצית שאילתא ש לתת לך הוא זה מגן נגד אלה התקפות הזרקת SQL מה שנקרא, שבו מישהו הטעיית הקוד שלך ל הזרקת קוד SQL שלו או שלה. משום מה פונקצית השאילתה אנחנו נותנים לך למעשה תעשו, אם אתה משתמש בתחביר סימן השאלה ושנייה ושלישי טיעון כאן, זה מה שזה לא מוסיף ל קלט שהמשתמש סיפק? קו נטוי אלה מצטט. אז, הוא בורח כל פוטנציאל תווים מסוכנים. זה נראה מוזר עכשיו, אבל זה לא פגיע כי זה לא לשנות את ההיגיון יותר משום שכל הסיסמה עכשיו ציטוט אחד שלא, למעשה, הסיסמה של scroob. אז, יש כבר כמה בדיחות על זה במשך השנים. אז, זה היה תמונה שצולמה של כמה חנון במגרש חניה לפי שאתה אולי יודע שכמה ערים ומדינות מנסות לסרוק את הרישיון שלך צלחת כדי לחייב אותך או לכרטיסך אם אתה עובר ללא, כמו, דבר E-Z Pass. אז, האדם הזה הניח שאולי האנשים שכותבים את מערכת E-Z Pass לא היו כל כך בהיר, ואולי הם רק בשרשור יחד מחרוזת, כך שהוא או היא לא יכולה בזדון לא רק להשלים את המחשבה שלהם, אבל למעשה לבצע פקודה רעה, שאנחנו כבר לא הזכרנו עדיין, אבל אתם יכולים לנחש. כי בנוסף למחיקה ו הכנס ועדכון ובחר, יש גם מילת המפתח נקראת ירידה, אשר פשוטו כמשמעו מוחק הכל באתר, ש הוא רע במיוחד. אנחנו יכולים להתמקד על זה אם זה קצת קשה לראות. זה, עכשיו, הוא קריקטורה מפורסמת זה נפלא חכם עכשיו ומובן. [שחוק] כן, מגניב. סוג של geeking החוצה. אז אלה, אם כן, התקפות הזרקת SQL. והם כל כך קל להימנע על ידי שימוש ב הקוד הנכון או ספריות הנכונות. ותראה בPSet7, זה למה אנחנו נותנים לך את פונקצית השאילתה. אז, כמה טיזרים שחשבתי שהיינו לתת לך כאן בנו נותר דקות ביחד. אז, כפי שאתה זוכר משבוע אפס, אנחנו הציג שתי נורות אלה ש נחמד, לא רק בגלל ש הם די וצבעוניים, אבל בגלל שהם תומכים במשהו נקרא API, יישום וממשק תכנות בCS50 עד כה, יש לנו בעיקר התמקד בGET ו POST, אבל מסתבר יש פעלי HTTP אחרים כמו PUT. ואכן, זה היה שקופית מהשבוע אפס לפיה אם אתה כותב קוד ששולח לה PSet6 בקשת HTTP ש נראה כך עם נתח זה של טקסט בתחתית, הנקראת JSON, או סימון אובייקט JavaScript שנדברנו על השבוע הבא, אתה יכול להפעיל או לכבות או שינוי הצבע של האורות כמו אלה. אז אם CS50 יש גם בנוסף לכמה מאותם נורות כאן בניו הייבן אם אתה רוצה לשאול שלהם לפרויקטי גמר, גם כמה מיקרוסופט להקות, שהם כמו שעונים שאתה לובש סביב פרק ​​כף היד שלך שיש לי API כך שדומה לך יכול לכתוב תוכנה שלך עבורם. יש לנו חשבון עם קוד iOS של אפל כל כך שאם יש לך צפייה או אפל iPhone או iPad או iPod, אתה יכול לכתוב קוד ש למעשה פועל על אלה. יש לנו כל חבורה של Arduinos, שהם מחשבים קטנטנים ללא מקרים, בעצם, שאתה יכול להתחבר באמצעות USB, בדרך כלל ל- Mac שלך או מחשב, לכתוב קוד שפועל על פיזי אלה מכשירים שלעתים קרובות יש חיישנים עליהם כך שאתה יכול לתקשר עם העולם האמיתי. יש לנו כל חבורה מכשירי הקפיצה Motion, שהם התקני USB למחשבי מקינטוש ו מחשבים, כאן ושוב, בניו הייבן. ואם אתה מחבר אותו ל- Mac, למעשה אתה יכול לשלוט במחשב שלך על ידי כתיבת תוכנה שבאמצעות קרינת אינפרא אדום, דמויות שבו יד האדם שלך הן, אפילו בלי לגעת במקלדת. חשבנו שאנחנו רוצים לחלוק מהירים הצצה בשלב זה, למשל. [השמעת מוסיקה] אז, יש לנו כל חבורה של הדברים האלה, גם נקרא להקות זרוע מיו שאתה שם על הזרוע שלך ואז אתה יכול לשלוט אמיתי עולם או עולם הווירטואלי כמו זה. [השמעת מוסיקה] או, יש לנו גם כמה גוגל קרטון, שהוא, פשוטו כמשמעו, כמו, קופסא קרטון שאתה יכול לשים עליך פנים, אבל שקופיות בטלפון שלך לתוך זה כך שאתה מניח את הכוס שלך טלפון ממש קרוב לעיניים שלך. וגוגל הקרטון הוא די זול ב 10 $ או 20 $. ויש לו עדשות קטנות שמעט את המשמרת התמונה על המסך להאדם עיניים כדי לתת לך תחושה של עומק כך שלמעשה יש לך 3D סביבה מולך. יש לנו גם כמה סמסונג Gear, ש הגרסה יקרה יותר של זה, אבל זה דומה יכול להחליק ב טלפון אנדרואיד ולתת לך את האשליה ל-- או לתת את החוויה מציאות וירטואלית. ובשתי דקות האחרונות שלנו, חשבנו שכדאי לנסות לעשות את זה. אם אני יכול להקרין את מה שיש קולטון כאן רק כדי לגרות את התיאבון, תן לי ללכת קדימה ולזרוק על המסך הגדול כאן. תן לי להרוג את האורות. קולטון, אתה רוצה ללכת קדימה ולשים על הנייד שלך לרגע ותבואו על מעל ל מרכז הבמה? ואתה רוצה project-- זה מה שרואה קולטון. עכשיו, Wi-Fi בכאן הוא לא כל כך חזק עבור התקן זה כי זה סופר משכנע, אבל קולטון הוא, פשוטו כמשמעו, במקום הקסום הזה עתידני. הוא רק רואה תמונה אחת. אתה רואה את עינו השמאלית וימנית שהמוח שלו תופר יחד בשלושה ממדים סביבה על פניו. הוא רק נבחר אפשרות תפריט כאן. וכך שוב, הוא לובש אוזניות זה עם טלפון סמסונג על זה זה באופן אלחוטי מקרין לתקורה שלנו. עכשיו אתה על מאדים, אני חושב? COLTON: אני חושב שכן. אני לא בטוח [לא ברור]. [שחוק] מתברר: DAVID מלאן יש מאדים תפריטים אלה. COLTON: [לא ברור] כמה מגניב מקומות אם אנחנו רוצים ללכת צריכה-- DAVID מלאן: איפה אנחנו רוצים ללכת? COLTON: [לא ברור] DAVID מלאן: ובוא לראות שם קולטון של לוקחים אותנו עכשיו. COLTON: [לא ברור] DAVID מלאן: אז, יש כל כך הרבה מקומות שונים שאתה יכול לקחת את עצמך. יש FAPIs באמצעות שבו אתה יכול לכתוב משחקים או אינטראקציות ש לרוץ, סופו של דבר, בטלפון. אז, אתה באמת רק כתיבת אפליקציה לטלפון ניידת. אבל הודות לתוכנה ויכולות הגרפיקה, עכשיו קולטון הוא בזה קוטג 'קטנטן. ובסיכון של מכריע את עצמנו, קולטון ואני נישאר בסביבה ל בעוד בסוף הכיתה כאן היום אם אתה רוצה לבוא ולשחק. ואנו נביא אותם נחזור בשבוע הבא גם כן. ללא נוסף, ADO זהו זה להיום. נתראה בשבוע הבא. [MUSIC - תאומי ragga, "איש רע"]