[音楽再生] DAVIDマラン:すべての権利、これはCS50です。 これは、8週目の終わりです。 そして今日、私たちは開始します いくつかの作品を記入します それは、建物に来るとき ウェブ上のもの。 だから、月曜日にそれを思い出します 我々はより多くの時間を費やします この動的であるPHP、上 プログラミング言語その 他の中で、私たちに出力することができます 物事、HTMLや他のそのようなコンテンツ 我々が見たいだろうと。 しかし、私たちは本当にどのように見ていません 我々はすべての情報を保存するつもりです。 確かに、ほとんどすべてのことのスーパー あなたが今日訪問興味深いウェブサイト データベースのいくつかの種類を持っています バックエンドで、右? Facebookは確かに大量のデータを保存します すべての私たちとGmailの店のすべて あなたの電子メールの。 だから、他の多くのサイトだけではありません 情報の静的コンテンツ。 これは、いくつかの方法で、実際に動的です。 あなたはそれを更新し、入力を提供 他の人のためのページ。 あなたが送ったメッセージを取得します などのメッセージ、および。 だから、今日、私たちは、よく見ます プロジェクトの基盤 あなたは、次に飛び込むだろうと 週、CS50金融、どの 実際にあなたが構築持ってしようとしています Cではないではなく、PHPで何か。 見えるウェブサイト このような小さなもの それは売買することができます 実際に株式 リアルタイムに頼るつもり ヤフーファイナンスから株価データ。 だから最終的に、あなたが持っているでしょう あなた自身のためのユーザーのための幻想 あなたが実際に売買していること 株式とほぼリアルタイムの取得 更新、管理 ポートフォリオ、全てが 持つ必要がしようとしています、 最終的に、ユーザーのデータベース。 だから、あなた自身の言葉で、 あなたはないです場合は特に コンピュータで超お馴染み 科学やデータベース、どのような あなたがするデータベースを知っていますか 今、非技術面で? それは何ですか? どのようにそれを記述することになります ルームメイトや友人に? 聴衆:[聞こえません] 情報[聞こえません] DAVIDマラン:だから、情報のリスト、 または情報のリストをstore-- あなたが保存したい場合があること ユーザーのようなもの、について。 そして、ユーザーは何がありますか それらに関連付けられていますか? あなたは、Facebookや上のユーザーの場合 Gmailでは、特性がどのようなもの 私たちのすべてのユーザーが持っていますか? 同様に、何がいくつかの可能性があります 私たちのスプレッドシートの列 前回触れましたか? 再び、あなたは可能性があるため データベースを考えます 本当にファンシーExcelファイルやGoogleなど スプレッドシートまたはApple番号ファイル。 だから、あなたはをどう思いますか あなたは、ユーザを考えるとき? 彼らは何を持っていますか? あれは何でしょう? 聴衆:名前。 DAVIDマラン:名前。 その場合は名前など、デビッド・マラン 一部のユーザーの名前になります。 ユーザーは他に何がありますか? 聴衆:ID。 DAVIDマラン:ID。 そのため、ID番号のような、あなたのハーバード大学のような IDまたはあなたのエールネットIDなど。 ユーザーが他に何を持っているのでしょうか? 聴衆:パスワード。 DAVIDマラン:パスワード、多分 多分住所、多分電話番号、 電子メールアドレス。 そこで、フィールドやその房があります 制御不能にスパイラルのようなものでした すぐにとすぐに始めると ああ、それでは、これを保管することができ、実現 とのは、これとそのを保存しましょう​​。 しかし、どのように我々は実際にそれを行うのですか? だからもう一度、メンタルモデル 今日のために持っているとして、我々 実際のSQLに飛び込みます、 構造化照会言語、 このようになりますデータベースです。 それはちょうど、行と列です。 そして、あなたはGoogleスプレッドシートを想像することができます または他の任意の数のプログラム。 しかし、何があるのMySQL、に関する重要です データベースソフトウェアは、我々が使用するつもり、 自由に公然と Facebookの利用をavailable-- それと他のwebsites--任意の数 データベースはリレーショナルなものを格納します。 リレーショナル・データベース 文字通りものをいいます 行と列にデータを格納します。 それはそれと同じくらい簡単です。 だから、でもOracleのようなものは、 あなたは、一般のことを聞いたかもしれません リレーショナルデータベースです。 そしてボンネットの下に、それを 行および列のデータを格納します。 そして、Oracleは、充電します それをする多くのお金、 MySQLの費用に対し、 同じのため、あなたは何もありません。 だから、SQLは、私たちを与えるために起こっています 少なくとも四つの操作。 リードのようなデータを選択する能力 データは、挿入、削除、および更新データ。 言い換えれば、それらは 本当に4キー操作 それは、私たちが変更することを可能としています これらの行と列のもの。 私たちは特に、今日使用しますツール SQLの学習し、それを再生します 再びPHP myadminという呼ばれています。 これは、Webベースのツールです。 その合計が一致 これはPHPで書かれています。 しかし、それは私たちに、グラフィカルを与えるために起こっています 私たちが実際にすることができますようにユーザーインターフェース これらの行と列を作成します し、コードを介して、彼らに話しています。 それでは、今に始めましょう 私は率直に言ってと思われるもの の楽しいプロセスの種類 ウェブサイトのバックエンドを構築し、 ユーザが使用しない部分 参照、しかし確実に気を行い、 それはだから、データのは、むしろ行きます。 そこで、CとAに類似 少しPHPのような、 SQL、またはサポートするデータベース SQLは、少なくともこれらのデータ型を有しています その他の房。 CHAR、VARCHAR、INT、BIGINT、 DECIMALおよびDATETIME。 そして、全体があります 他の機能の束、 しかしそれでは、することでこれをやらせます 実際の例として。 私はCS50 IDEに行くつもりです 事前に、私がログインしてきた場合は、 そして私はまたのURLを訪問しました PHP myadminという呼ばれるこのツール。 そして、問題は7を設定するには、我々が教えてあげましょう あなたは正確にどのようにこのインターフェイスに取得します 同様に。 左上隅には、 それは講義言う気づきます。 そして、それはちょうどことを意味 事前に、私が作成しました 講義と呼ばれる空のデータベース それはまだそれにはスプレッドシートを持っていません。 どの行と列はありません。 最初のため、 私たちがやろうとしているもの テーブルを作成するために開始され、 それは我々のユーザーを格納するために起こっています。 だから、文字通りオーバー ここで右に、私はよ データベースを言うつもり 私はテーブルのユーザーと呼ばれたいです。 だから、これは私のファイルのようなものです で私のすべてのデータを保存します。 そして、どのように多くの列? まあ、今のところそれをシンプルに保つてみましょう。 私は同じように保存したいです ユーザー名とユーザーの名前を入力します。 私たちは、小さな始めましょう。 だから、私は2つの列の合計を求めています。 そして、私は先に行くし、Goをクリックするつもりです。 そして、これらのための カラムは、私が何をつもりです このインターネット場合do--します 、すべての権利をcooperates-- だから我々は再びそれを試してみるつもりです。 私はと呼ばれるテーブルを作成するつもりです 2つの列を持つユーザーは、[OK]、[移動]をクリックします。 今、私たちはそれが本当に速いんです。 非常によくやった、ありがとうございます。 すべての権利なので、私たちが望む何をすべきか これらの列に呼び出されますか? そこで、一つはユーザー名と呼ばれることになるだろう。 だから、私はhere--参照すべてとのインタフェース 率直に言って、最終的には少し醜い取得します あなたはこのすべてのデータを入力し始めると。 しかし、何が素晴らしいのは、その種であります 逆説的に、私は列を作成しています、 しかし、このツールは、愚かに持っています 行でそれらをレイアウト 私はこれらの列を設定できるように。 だから、名前の下にそこに2つのブランクがあります。 そして、これらのフィールドのいずれかのI ユーザー名を呼ばれたいです、 およびその他のフィールドには、私は名前を呼びたいです。 そして今、私が選択する必要があります これらの事のためのデータ型。 そこで、Excelでのに対し そして、Googleスプレッドシート、 あなたが列をしたい場合、あなたは文字通り ちょうど名前またはユーザー名を入力し、Enterキーを押します。 たぶん、あなたはそれ大胆な顔をします ただ明確にするため、それはそれです。 あなたが指定されていません 列の型。 今GoogleスプレッドシートまたはExcelで、あなた データをレンダリングする方法を指定できます。 あなたは、[書式]メニューに移動し、あなたでした このようなドル記号を表示し指定することができ、 浮動小数点値のようにこれを示します。 だから、それはその精神において似ています 私たちがしようとしている何それ、 しかし、これは実際に強制しようとしています データは、特定のタイプです。 さて、たとえ一瞬前、私 わずか数のデータ型があると述べ、 実際にあります 全体の多く、彼らはしています 特異性の程度を変化させることです。 また余談として、あなた でも、派手なことを行うことができます ストレージの形状のような データベースの内部。 あなたは物事を保存することができます GPS座標のような 実際、数学的に、見つけます 他の人に近い点。 しかし、我々はするつもりです この超シンプルに保ちます そして、、ここまでのすべてを上がります いわゆる文字列型。 だから、ここのリストです オプションの全体の束。 CHAR、VARCHAR、すなわちTINYTEXT、 MEDIUMTEXT、LONGTEXT。 そして、それは圧倒的なのようなものです。 そして残念なことに、多少 逆説的にCに、 CHARは本当にCHARではありません。 あなたは、データベース内の指定した場合 データ型がCHARであること、 それは、はい、それはだということを意味 CHARが、それは一つ以上のCHARのです。 そして、あなたは指定する必要があります どのように多くのCHARのあなたが欲しいです。 そこで、典型的なものです ユーザ名の長さは? 制限は一般的にありますか? 聴衆:[聞こえません] DAVIDマラン:16多分? そのような何か。 あなたは後ろに、知っています 一日、それが8に使用されます。 時にはそれは時々、16です それはそれよりもさらにです。 だから、これはしていません 私は1 CHARを与える意味。 これは私が指定しなければならないことを意味 フィールドの長さ、 そして今私は16のようなものを言うかもしれません。 そして、ここにはトレードオフがあります。 だから、私たちはその瞬間に表示されます これはものを意味 すべてのユーザー名が16文字にする必要があります。 しかし分、M-A-L-A-Nを待ちます。それはだ場合 自分のユーザー名と私は唯一の5つを使用しています、 データベースがどのようなことを提案します そのほかの11文字に行うには 私はのためのスペースを予約しましたか? あなたならどうしますか? 聴衆:[聞こえません] DAVIDマラン:ええ、ちょうど それらすべてがnullにします。 それらのスペースを確認します。 しかし、おそらくヌルので、 バックスラッシュゼロがたくさん。 だから、一方では、我々はしました 今、私のユーザー名ことを確認しました 16文字以下になることはできません。 そして、それの裏返しです 私は本当に長い名前を持っていた場合に または本当に長いを望んでいました あなたのいくつかのようにユーザ名 人はその大学に持っている可能性がありますか Yale.eduで、1つを持つことはできません。 だから実際には、あなたがしている場合 これまでのウェブサイトのための登録 あなたが言って怒鳴られます パスワードの長すぎます または、あなたのユーザ名が長すぎる、それはです 単にとき、プログラマのため 彼または彼女のデータベースを構成します、 このフィールドがすることを決定 もはやこの長さよりもありません。 すべての権利なので、どのような場合 我々は名前に進みますか? どのくらい必要があります 典型的な人間の名前があ​​ること? どのように多くの文字、16? 私たちは可能性が推測しています この部屋に誰かを見つけます ここで、最後の彼または彼女の最初のプラス 名前は16文字より長いです。 だから、17よりも良い何ですか? 18? 25? ビガー? 30? 聴衆:[聞こえません] DAVIDマラン:5000、ああ私の神。 だから、それはおそらくまともです 上限、我々は言うものとします。 そしてここで私達は種類の持っています 審判の判定を行います。 同様に、ここには正しい答えはありません。 無限は、全く不可能です 我々は最終的にだから 私たちがしているhave--に行きます メモリが不足する予定。 そこで、我々は確認する必要があり ある時点で審判の判定。 非常に一般的には、例えば、になり、 use--と私はここにCHARを指定できるようにするには 255 before--文字通りあったように このデータベースソフトウェアの上限 数年前。 だから、人間の多く うまく、と言うでしょう。 255が限界です。 ちょうど最高を使用してみましょう。 そして、これはかなりばかげています。 同様に、あなたが誰かのを入力している場合 200プラス文字の名前、 少しばかげています。 しかし、ASCIIではないことを覚えておいてください 文字の唯一のシステム。 だから、特に中 アジア言語の多く 私たちができない文字がありますどこに 私のアメリカのようなキーボードで表現 キーボード、実際にいくつかの文字 16ビットの代わりに8ビットを取ります。 だから、これは実際に すべてのことは無理ではありません 我々はより多くを必要とすること スペース我々が収まるようにしたい場合 非常に米国よりも大きい文字 中心のもの、我々が議論する傾向があってきました。 だから、我々はいくつかの上限を必要としています。 私は、最良のものが何であるかを知りません しかし255は、一般的に一般的なものです。 25は低い感じ。 16、32は低い感じ。 私が側に誤ることになります 高い何かの。 しかし、貿易は、いつものように、オフあります。 明らかな、おそらく、どのようなものです 255文字を予約するのトレードオフ 私のデータベース内のすべての人の名前の? 聴衆:[聞こえません] DAVIDマラン:それは何ですか? 聴衆:[聞こえません] DAVIDマラン:それは メモリの多くは、右? M-A-L-A-N。私はちょうど250を無駄にしています 文字はちょうど私の名前を格納します 守備、念の誰か クラスで本当に長い名前を持っています。 それが過度のトレードオフのように思えます。 だから、それは、そのSQLが判明 このデータベース言語、 実際に何かをサポートしています VARCHARと呼ばれる、または変数CHAR。 そして、これは、この中の種のいいです あなたは固定されていないを指定することができます 幅、むしろ、可変幅。 より具体的には、 フィールドの最大幅。 だから、これは名前ができることを意味します これ以上250文字以下であること、 それは確かに少なくすることができます。 そして、データベースは、スマートになるだろう。 あなたは、M-A-L-A-Nに入れない場合は、 それは唯一の5つを使用するために起こっています、 等のための多分6バイト 末尾のnull文字、 追加を過ごすありません 不必要に249または250バイト。 だから、これは私がすべきのように思えます この話を始めました。 しかし、常にトレードオフがあります。 だから、一方では、ユーザ名私はしました ハード16で符号化されるように指定し、 多分それはありませんでした 右呼び出し、多分それを ですが、なぜ使用しません すべてのためのVARCHAR? それは理由のために存在します。 フィールド毎のVARCHARを使用しないのはなぜ その長さは事前に知っていません それは素晴らしいことであると思われる場合は、右? 同じくらい多くのスペースを使用します あなたはこの制限まで必要? 聴衆:遅いです。 DAVIDマラン:スペル? 観客は:それは遅くなり? DAVIDマラン:ああ、それは遅いです。 良い、それはほとんど常にです 答えは、率直に言って。 同様に、トレードオフは何ですか? このどちらかのより多くのスペースを要します またはそれはより多くの時間がかかります。 そこで、この場合には、遅いかもしれません。 なぜ? 聴衆:[聞こえません] [聞こえない]を決定します。 DAVIDマラン:良いです。 だから、あなたも、から思い出すかもしれません あなたのアプローチで遊んPSED5、 辞書に、あなたがしなければならない場合、 メモリを動的に割り当てるか、維持 バッファを成長させること 実際に遅くなることがあります。 あなたはmalloc関数を呼び出すようにしている場合 フードの下に多分 それはそう、MySQLがやっていることです 確かにそれはケースである可能性があります。 そして、あなたが道を考える場合 バックPSet--に、あるいは 私たちはのようなことをしました〜2週間、 バイナリ検索、あるいは線形検索、 すべての単語についての素晴らしいことの一つ 列内のデータベースまたはすべての単語で でも、全く同じ長さで これらの文字の全体の束の場合 空白になっている、あなたが使用できるということです あなたのデータのランダムアクセスは、右? あなたはすべてのことがわかっている場合 ワードは、16文字の距離です のようにあなたは、ポインタ演算を使用することができます 話し、私たちに行く16、32、48、64、 そしてあなただけのジャンプすることができます 瞬時に演算を使用して データベース内の単語のいずれかに。 それはVARCHARだ場合一方、 あなたの代わりに何をすべきかを持っているのですか? [電話が鳴っ] それはVARCHARだ場合、 ランダムアクセスを使用することはできません。 あなたは何を探したりしなければなりませんか? うん? 聴衆:[聞こえません] DAVIDマラン:見て whole--トレースを通じ リスト全体を通じ 最も可能性の高い、何を探していますか? 特別な値はどのような? 聴衆:[聞こえません] DAVIDマラン:探し ヌルターミネータ用 それは言葉の分離を画定します。 だからもう一度、トレードオフ、および 全く正しい答えはありません。 しかし、これは、特に、ここで ユーザーが多くのことを得るとき およびサーバー上の負荷、 それを使っている人の数が高くなり、 これらは、実際には非自明な意思決定です。 そこで、我々はこのように、これらを残すことができますが、 右に上を下にスクロールしてみましょう ここに。 さて、列のカップルがあります 我々は審判の判定を行う必要があり場所。 それは、ユーザのを可能にするために意味がありますか 名前、ユーザーのユーザー名またはユーザーの NULLに、名前は? それは、単に空白になっています。 少し無意味な感じ、私はよ これらのチェックボックスをオンにするつもりはありません。 しかし、それはで判明します データベース、あなたが言うことができ、 誰かが、必要に応じてこの値を持つことができます。 この列はありません 実際には存在しています。 さて、このドロップダウンメニューがあります。 そして、私はまだだ気付きます そこに最初の行で、 私は今、ユーザー名について話しています。 そしてそれは、データベースことが判明 シンプルな単なるスプレッドシートとは異なり、 インデックスと呼ばれる強力な機能を備えています。 そして、インデックスが伝えるの方法です 事前にデータベースI人間のこと あなたよりも賢いです。 私は、selectクエリの種類を知っています、 または挿入または削除または更新、 私のコードは、終了しようとしていること このデータベースにやって。 私は多くのデータを読みたいです。 私は多くのデータを挿入します。 私は常にしたいです 大量のデータを削除します。 私は私がするつもりだということがわかっている場合 ユーザー名のような多くのフィールドにアクセスし、 私は先制伝えることができます データベースには、私はあなたよりも多くを知っています、 私はその法令にしたいです あなたはインデックスこのフィールドをする必要があります。 フィールドまたは列に索引を付ける場合には つまり、事前にデータベース 等からいくつかのアイデアを借りる必要があり、 週4と5と6 CS50から 実際に構築 バイナリサーチのようなもの 木か何か 一般的に、Bツリーと呼ばれます あなたが学ぶだろうと CS124のようなクラスで ハーバード大学で、アルゴリズムクラス、 または他の場所の任意の数。 データベースとスマート それを実装人々 保存する方法を見つけ出すだろう 情報のテーブル メモリ内のように検索し、 他の操作は、超高速です。 あなたはそれを行う必要はありません。 あなたが実装する必要はありません 線形探索またはバイナリ検索 または並べ替えや選択をマージ 並べ替え、そのいずれかの。 あなたが言う場合はデータベースがあなたのためにそれをしません それは先制インデックスには、このフィールド。 そして、あなたはあります、あまりにも見ることができます いくつかの他の特性 我々は、データベースを強制するために伝えることができます。 私はユニークを選択した場合、それは何を意味するかもしれません このメニューから、ただ直感的に? うん? 聴衆:[聞こえません] DAVIDマラン:ええ、 ユーザー名は一意である必要があります。 これは良いことか悪いことのためであります ユーザーとWebサイトのデータベース、? ユーザ名は一意である必要がありますか? うん、たぶん。 それが何であれば フィールドは、我々は、ログインに使用 あなたが本当に持つ人にしたくありません 同じ感覚または同じユーザ名。 そこで、我々は持つことができます データベースには、その結果を施行 その今、私のPHPコードまたは任意の言語で、 私は、例えば、チェックする必要はありません 必ずしもこのユーザ名がありません 私は誰かが登録してみましょう前に存在していますか? データベースには、名前の二人をさせません デビッドまたはMalansは、この場合には登録してください。 そして、これにもかかわらず、脇など メニューは唯一、あなたがいずれかを選択できます 一意のインデックスだものです 超高速なパフォーマンスのためにインデックスを付け、 それはまた、一意性を強制。 そして、我々はに戻ってくるもの 他の2つは一瞬に意味します。 その間、私はに行く場合 私の2番目の行、これ ユーザーの名前であり、私は指定する必要があります その名前は一意である必要がありますか? いいえ、あなたは確かに可能性があるため、 have--どの2つのダビデはありません この部屋にMalans、最も可能性が高いです。 しかし、我々は別の名前を選択した場合、 我々は確かに衝突している可能性があります。 テーブルなどのハッシュに戻って考えてみてください。 だから、我々は確かにしたくありません 名前フィールドを一意にします。 だから、私達はちょうどままにするつもりです そのダッシュ、ダッシュ、ダッシュ、何として。 そして、私は残すつもりです 一人で他のすべて。 実際、これらのフィールドのほとんど 我々は気にする必要はありません。 そして、私はこれを保存する準備ができていたときに、 インターネット協働場合、 私は非常に、非常に、非常に保存]をクリックし、 ゆっくりとデータベースが保存されますありません。 そして今、私はこれに戻ってきました インタフェース、確かに、 一目見ただけで圧倒されます。 しかし、私はするつもりですすべてはクリックで 左上のワードユーザーに。 私は、クリック、ここに行くつもりです ユーザー、およびデフォルトでは、 、いくつかのSQLを実行したが、 現時点でその上より。 ここで私が何をしたかの要約だけです。 そして、あなたが見ることを心配しないように ここでラテン語とスウェーデン語の言及。 それらは単にデフォルトです 設定、もともとMySQLのため、 またはPHP myadminという、起こった二つのうちの一つ いくつかのスウェーデン人によって書き込まれます。 しかし、それは、ここで我々の場合には無関係です。 すべての権利は​​、なぜです このすべての面白いですか? それは結局のところ、私はデータを挿入することができます コー​​ドを記述することにより、データベースに。 そして、私は先に行くとよ ここに私のファイルで、私はよ 先に行くと同じようふりをするつもりは これは、そのデータベースに配線されています それは現時点ではありませんが、それはなります 私たちが問題に到達したときである7を設定します。 そして、私は先に行くつもりだし、 クエリと呼ばれる機能を実行し、 これは、私たちは問題にあなたを与えるだろう 7の流通コードを設定すること 少なくとも一つの引数を取り、 これは単なる文字列です。 SQLコードの文字列です。 だから、あなたはどのように学ぶしようとしています 構造化照会言語を記述します。 私に新しい行を挿入したい場合は データベース誰かが提出しているため、 私のコードの形、私は文字通りだろう ユーザーに次のようにINSERT書きます フィールド:ユーザー名、 カンマ、名前、値、 そして今、私は挿入する必要があります マランのようなもの、と見積もり、 引用終わり「デビッドマラン」。そしていま でも、SQLに慣れていない人のため、 なぜ私は一重引用符を使用しています この緑の文字列の内側? どのような理由がここにあるかもしれませんか? 私は共同混ざって二つの言語です注意してください。 クエリは、PHPの関数です。 それは引数を取ります。 そして、その引数は、それ自体になりました 呼ばれる別の言語で書かれました SQLは、構造化照会言語。 私だから、すべてのもの ちょうどここに強調​​しています SQLと呼ばれるこの言語です。 そこで、単一引用符とは何、 単に迅速な健全性チェックとして? 先に行く。 彼らは文字列です。 そこで、引用、引用終わりマランと見積もり、 引用終わりデビッド・マランは文字列です。 そして、ちょうど今、直感的に考えて、 あなたは、CとPHPについて知っていることを知って、 なぜ私は、私は通常、これを実行しませんでした 文字列の二重引用符を使用しますか? なぜ私はそれを行うにはしたくなかったのですか? うん? 聴衆:[聞こえません] DAVIDマラン:その通り。 私はすでに使用しているため、 途中で二重引用符 引数の外 PHPの関数に、 私は通訳を混乱させる。 それは知ることができません、これらは一緒に行くのですか? これらは一緒に行くのですか? これらは一緒に行くのですか? だから、私は代わりに交互に。 または私はこのような何かを行うことができ、 バックスラッシュを引用符やバックスラッシュを引用。 率直に言って、それはちょうどに開始します とても読めないと醜い得ます。 しかし、それは達成します 同様に同じ結果。 だから、私はこれを実行した場合 クエリは、それでは、何が起こるか見てみましょう。 私は今、かなり先に行くつもりです よりこれは、PHPコードを実行します あなたがプレーする場所です 問題に7を設定し、 私の代わりに、PHP myadminというに行くつもりです。 そして、私は手動で行きますよ [SQL]タブに移動し、 そして、私は、インターフェイス上でズームしてみましょう。 そして、私は内貼り付けるつもりです 私はちょうど入力したもの。 そして、カラーコードは持っています 今少し変更し、 単にプログラムのフォーマットがあるため 物事少し違いました。 しかし、すべて私がやったことに気付きます である私は、ユーザーへの挿入、言いました。 私はカンマで、その後、指定しました 括弧で囲まれたリスト2を分離 私は挿入するフィールド、 私は文字通り言った値 別の括弧が続きます、 そして、2つの値 私はプラグインにしたい、と 今良い測定のために、 私は最後にセミコロンを入れます。 だから、これはこれは、PHPではありませんCではありません。 これは今、SQLであり、私はそれを貼り付けています ですこのWebベースのインターフェイスに ちょうど私をさせるつもり、 すぐに私は行くをクリックすると、 データベースでこのクエリを実行します CS50 IDEの内部で実行されています。 だから、これは良いです。 一行を言っお知らせ 挿入された、超高速行き、 そのデータを挿入する0.0054秒。 だから、それは非常に健康に聞こえます。 それは私のクエリを再フォーマット ここに私のためにそれを参照するには 色分けされたバージョンのようなものです。 しかし、今私がクリックした場合 でも、閲覧、それに気付きます 乱雑の多くのがありますけれども 画面には、私のテーブルには2つの行を持っています。 だから、私は先に行くと、別の操作を行いましょう。 これに代えて、私を聞かせて 再びSQL]タブに移動します。 そして、この時間は、私のような何かを挿入します ロブと彼の名前はロブ・ボーデンとなります。 ボーデン。 保存]をクリックしてみましょう。 おっと、むしろ行きます。 もう一度[参照]をクリックし、 今私は2つの行を持って注意してください。 だから、これはただの方法より複雑です Googleスプレッドシートを開く方法 ちょうど列に行を入力します。 しかし、キーがということです何 我々は今の構文を持っています これでコードを記述することにより、 最終的に、我々は実際にできました いくつかと、これを行います。 そのPHPのサポートを思い出してください スーパーグローバル変数。 ドルの中には何ですか PHPでGET下線ログイン? 我々は1を見ていました または2つの簡単な例。 そしてPSet6に、あなたが持っているこんにちはリコール この変数を使用してドットPHP。 何がそこに行きますか? それとも、何ですか? 少し大きな声で。 聴衆:[聞こえません] DAVIDマラン:それは雪です 配列の種子、どの 言うだけの空想の方法です キーと値のペアを持つ配列。 そして、キーは、数値ではありません。 彼らは言葉や文字列です。 具体的には、どのような これらのキーと値のペアは何ですか? 彼らはどこから来るのか? ごめんなさい? 聴衆:[聞こえません] DAVIDマラン:いいえ? どここれらのキー操作を行います 値のペアから来るの? もう一回言って? またですか? 私は何かを聞くだけですか? [笑い] それははい、右ですか? 聴衆:[聞こえません] DAVIDマラン:ええ、彼ら クエリ文字列から来ます。 だから、あなたはまでの時間に巻き戻した場合 我々は、Googleでプレーしたとき 私たちはGoogle.comのスラッシュに行ってきました 検索疑問符qは、猫に等しいです 私が入力した場合にヒットした場合 Googleは、PHPで実装されました Googleが書いたPHPコード ドル記号へのアクセスを持っているでしょう その内側にGETを強調する Qと呼ばれるキーと値であり、 それはその後、使用することができますと呼ばれる猫 実際の検索を実行するために使用。 だから、実際には、どのような私はするつもりです 今、私のPHPコードに戻ってあるん あなたは再びPSet7内の多くを参照してくださいよということ。 そして、代わりに差し込みます これは、ハードコードされた値で ように見えるしていません 非常にダイナミックなウェブサイト、 私はあなたのお誘いを与えるつもりです あなたの実際のコードはどうなるのか。 次の2つに置きます 質問は次のようにマークされます。 私は、ユーザー名が何であるかを知りません。 私は何かわかりません 名前は、になるだろう しかし私は私ができる知っています 動的にそれらを得ます。 だから、私たちは今書いているコードがある場合 Googleのサーバー上で実行されるコード、 または、これはハロードットである場合 PSet6に付属しているPHP、 私が中を通過するつもりです クエリ機能 ちょうどprintfのような、他の二つの引数を指定します。 、引用、引用終わりにユーザ名を取得します、 そして、引用、引用終わり名を取得します。 そして今、何に気づきます 一般的な構造はここにあります。 私は左側に持っています コー​​ルの左側、 この関数はPHPでクエリと呼ばれます。 私はまだ、最初のように持っています 引数、テキストの単なる文字列。 しかし、テキストの文字列です SQLと呼ばれる言語で書かれました。 そして率直に言って、それは大きな言語ではありません。 私たちは、について話をするつもりです それ正式に今日、本当に。 そして、問題に​​設定 7は、比較的あります 私たちがしているいくつかの機能 活用する予定。 疑問符、しかし、プラグインを意味します 別の値で、ここでの値とプラグ ここに。 そして、通知は、私は省略したもの quote--いまいましい周りから 引用の周りit-- この時間をマーク。 私は二重引用符を省略しました 疑問符の周りのマーク、 申し訳ありませんが、この頃。 だから、このことについて素敵なものです 疑問符機能します PHPは、ルビーをサポートする傾向があり、 Pythonや他の言語、 これはいくつかのプラグインを意味 ここで値と​​あなたは何を知っていますか? あなたが使用するかどうかを見つけ出します 単一引用符または二重引用符。 それらで私を気にしないでください 知的つまらない詳細。 しかし、必ずそれが正しいです作ります 私のコードは、最終的になるように、 運用と安全、どの 長い前に意味を持つことになります。 さて、どのように多くの引数だけに、合計 明確にする、クエリ機能の撮影はありますか? 誰もが二つ以上のために投票したいですか? 3? 確かに、なぜですか? なぜ3? 聴衆:[聞こえません] DAVIDマラン:その通り。 最初の部分は文字列です。 二番目の引数は、ドル記号であります GETブラケットユーザ名を強調しています。 そして、3番目の引数があります 同じことが、ちょうど名前。 換言すれば、今 私は、Webフォームを持っていた場合 それは、テキストフ​​ィールドに持っていました ユーザーのユーザー名ごとに1つ、 ちょうど彼または彼女の名前のための1つ、 あなたのウェブサイトで見ることになるような 以下のためにあなたを登録するとき いくつかのウェブサイトは、このかもしれません そのバックエンドでコードであります 実際に今の挿入を行います データベースに。 今対照的に、早送りしてみましょう。 ユーザーが今あると仮定 ログインしてあなたが欲しいです かどうかをチェックするPHPコードを書くために ちょうどログインしていた人 ユーザーは実際に、あなたができることです 非常に単純な構文を使用します。 あなたは、SELECTは、のは言わせて言うことができます 星がすべてを意味する星、。 私は何を知らない私 たいので、ちょうど私を与えます テーブルのすべての列 どこのユーザーと呼ばれ、これはいいです。 選択は何をサポートしています ある述語を、と呼ばれます あなたが望む予選の方法のように。 どこにユーザ名が等しいです 引用、引用終わりマラン。 だからここでも、私が埋め込まれました 引数内部 PHPの関数、SQLコードの行に。 そして、そのSQLコードこの 時間は、文字通り起こっています 引用、引用終わりマランを検索します。 今では、すべてのことに有用ではありません 私はそれをスキップするつもりです 私は離れて置くつもりです ブレイディからこのヒントは、と行きます プラグインの代わりに ここに疑問符。 だから、単に明確にするために、どのような 私の二番目の引数はすべき 誰かがちょうど、私にログインしたことがあれば 彼または彼女が実際にあるかどうかを確認したいです ユーザー? 聴衆:[聞こえません] DAVIDマラン:うん。 私は、ドル記号、アンダースコアを聞きます 引用、引用終わりユーザ名を取得します。 そして、それは私に返す必要があります 私のデータベース内の行のいずれかの それは、マランのユーザー名を持っています。 今うまくいけば、私は戻って取得するつもりです ゼロマランのがここにはありませんでした場合、 または1つは、彼が持っている場合。 私は取り戻すべきではありません 2つまたは3つまたは​​4つ。 なぜ? 聴衆:[聞こえません] DAVIDマラン:私は右、ユニーク言いましたか? 単純な理由。 私はそれが持っていると言ったので ただ論理的に、一意であることが、 あなただけのゼロまたは1 M​​alansを持つことができます この特定のデータベース・テーブルインチ 今、あなたは見たことはさておき、ちょうどように、 私は、GETを使用し続けるにもかかわらずそれ、 そして、PSet6にのみ使用にもかかわらず、 GET、あなたは確かに、POSTを持つことができます。 そして、ポストが別であることを思い出します 情報を提出するための技術 フォームから、それ URLには表示されません。 それはのために確かに少しより安全です ユーザ名とパスワードのようなもの、 これPSet7が、実際には、関与します。 それでは、PHPでこれをやらせます myadminという、何が起こるかを参照してください。 私は、MySQLのタブに移動するつもりです。 そして、そのためのデフォルト値に気付きます PHP myadminという、ただ参考にしようとします、 1ユーザーからの星を選択することです。 さて、人はそのように、常に真であります これは、効果的な愚かなを持っています だけすべてを選択します。 しかし、私は少しもするつもりです より多くの知識をひけらかす、手動で ユーザーからのSELECT星を入力します。 今技術的に、次のことができます テーブルの名前を引用。 それはあなたがする必要があることは稀ですが、 しかし、これらはありません注意してください USキーボードの通常の引用符。 これは、いわゆるバッククォートです 左上に、一般的に キーボードのコーナー。 しかし、それはあなたがよことは稀です 実際にそれに気にする必要があり、 私はとにかくそれを省略します。 だから今、私は先に行くと行ってヒットしてみましょう。 そして、どのように多くの行私が取得する必要があります バック私は、ユーザーからの星を選択すると? 聴衆:[聞こえません] DAVIDマラン:必ず行数、。 しかし、この中でどのように多くの 今、具体的な話? 二、そこにされたため、 私とロブがありました。 私は、[移動]をクリックしますので、もし、私がいることを視覚的に参照してください。 私は、確かに、戻って2つの行を得ています。 混雑がたくさんあり​​ます 画面には、私は2つだけの行を参照してください。 これとは対照的に、私は再びこれを行うと行う場合 ユーザーからのSELECTスター、ユーザ名 引用、引用終わり等しいです マランは、今私は、[移動]をクリックした場合 私は1つ前の行を取得するつもりです。 そして最後に、私がしなければ このようなもの、と仮定 私は気にしないこと すべてを取得し、 これは今無意味の一種です、 2つの列のみ存在だからです。 それは私が選択しているようではありません 大量のデータ。 私は先に行くと仮定 から名前を選択ください ユーザ名はマランに等しいユーザー、 正直、SQLのいいものです、 それは実際にはないということです 何を行うには、それを伝えます。 それはかなり簡潔ですが、あなたは文字通り ちょうどあなたが何をしたいのか、それを教えてください。 ユーザーどこから名前を選択します ユーザ名はマランに等しいです。 そして、それは本当に、明示的です。 だから、今私は行く、何をヒットした場合 行は私が戻って取得するつもりですか? 一つは、それがうまくいけば、ちょうどマランだから。 それとも彼がいなかったらゼロ そこに、しかし最大限に1。 そして私はどのように多くの列を取り戻すのだろうか? どのように多くの列? 今回は、私は行きますよ 私はしませんでしたので、いずれかを取得します すべてだ星を、選択します。 今私は名前だけを選択するので、私です ただ一つの列と1行を取り戻します。 そして、それは一種の適切見えます とんでもない、見ているだけのスーパー このような小さな。 だから、実際に何が起きているのでしょうか? あなたは、SQLを実行すると クエリは、selectを使用して あなたは何を取得しています バックデータベースから 一時テーブルのようなものです 行と列と、多分、 それは何を省略しています 実際にあなたが選択しませんでした。 だから、それは誰かが大きなを持っていた場合のようなものです すべての学生のスプレッドシート いくつかのために登録 学生グループ、あなたが言います、 私にきた新入生のすべてを与えます 私たちの学生グループのために登録、何 であなたの同僚 学生グループが行う可能性があります 彼らは手ができています あなたスプレッドシート全体。 それは選択の星を言うようなものです。 場合そして、それは少し迷惑なんです あなただけの新入生を望んでいました。 だから、あなたが代わりに言った場合、 データベーステーブルからスターを選択 ここで、年に等しいです 引用、引用終わり新入生、 それはあなたの友達かのようです 学生グループで 文字通り強調表示され、 唯一の新入生の行をコピーし、 新しいGoogleにそれらを貼り付け スプレッドシートまたはExcelファイル、 あなたが戻さ ファイルのみを生じました。 それが起こっていることすべてです 概念的にここに。 そこで最後に、我々が行うことができます かなり凝ったもの ユーザー名のようなものを格納することにより、 やパスワードなどが挙げられます。 しかし、結局のところ、我々が行う必要があります 異なっこれより少し。 それだけに、そのスマートではありません ユーザー名とパスワードが保存されます。 誰かが以前、私は思います ダウンここで、IDを示唆しました。 今のIDは次のようにすることができ ハーバードIDやエールのネットID、 それがより簡単かもしれません 私達のデータベースの場合には そして実際、一般的なケース 別の列を持つことです。 そして、私は行くつもりです 先に、私のテーブルを編集します。 そして、あなたはで遊ぶ場合 PSet7ため、このインタフェース、 あなたがチェックすることができていることがわかります ここでは、このボタンと追加 テーブルの先頭にフィールド。 私は、[移動]をクリックします場合そして今、それが起こっています 私はそれらのいずれかの形式を与えるために 以前から。 私はID​​と呼ばれるフィールドを追加するつもりです。 そして、私はそれの数値型にするつもりです。 私は全体の束を持っています 数値の値の。 私は、INTを選択するつもりだと 異種のサイズを心配しないで。 私は指定する必要はありません 長さや値、 それがために起こっているので、 32ビットに関係なくどのような。 属性は、我々は前に見ませんでした。 これらのいずれかに興味 メニューオプションこの時間? INTのために? あなたは何を提案したのですか? なし? これらのいずれかが意味を作るのですか? うん。 うん、符号なし、右? 一般的に、我々は与えるつもりなら 誰も一意の番号、どの この話がどこにあるかであります 行く、私は実際にはしたいです ゼロのような番号を持っている人 そして、1と2と3と4。 私が対処する必要はありません 負の数を持ちます。 それはちょうど過度の複雑さのように思えます。 私は、40億の可能な値をしたいです、 ない40億の可能な値、 私はちょうど倍増しました 私のINTの容量。 さておき、あなたが関係する場合として、 このFacebookのようなものに、 バック時に私の一日のようなもので Facebookが最初に出てきました、 私は、彼らが何であったかと考えています 彼らのMySQLデータベースに使用して ユーザのを格納します 識別子は、単にINTました。 しかし、もちろん、たくさんあり​​ます 世界で実質の人々の。 偽のFacebookがたくさんあり​​ます 世界で占めています。 だから最終的に、Facebookがオーバーフローし INTのサイズ、40億 値。 あなたが見れば、理由であります 周りやウェブサイトがあります それはあなたを伝えることができるもの あなたのユニークなIDです。 そして、あなたがユーザ名を選択したことがない場合 Facebookは、あなたの一意のIDが表示されます。 私はそれがプロファイルドットPHPだと思います 疑問符のIDが何かに等しいです。 それは今すぐようなものです INT、または長い長いあなたがする場合は、 64ビット値は、あります または同等の何か。 だから、でも現実の世界でこれらの操作を行います 問題は最終的に、時には問題では。 私はあれば、それは、ここで判明します 、私のユーザー固有のIDのすべてを与えます 私はスーパー明示的になりたいと 最低限このフィールドが一意になります。 しかし、それは1つがありますが判明 命名の作品今日すぎます それは主キーです。 データベースを設計している場合 テーブルと事前に知っています その表の列の1 行を一意に識別しますする必要があります 表には、あなたがしたいです それを指定してデータベースを伝え、 これは私の主キーです。 重複があるかもしれません 他の分野で、 私は、このデータベースを言っています 私の主、私の最も重要な分野です、 それは一意であることが保証さです。 さて、これは冗長なようです。 私は今、我々が提案しています ここで[保存]をクリックして、追加、 フィールドcalled--と私は行きますよ 先に行くとAIをクリックし、 我々は戻ってくるだろう 瞬間に、保存していること。 私は今、その提案しています 私のテーブルには、このようにします。 私は、IDと呼ばれる、INTフィールドが ユーザー名と呼ばれるCHARフィールド、 VARCHAR名と呼ばれるフィールドが、ID、 それが主なので、ユニークな場合には、 なぜ私はちょうど無駄にしませんでした 時間何を導入します 効果的に二ユニークです フィールドはINTのIDと呼ばれますか? ユーザー名、リコール、でした すでにユニークな、我々が言いました。 だから論理的に、あなたがする必要はありません 理由に任意のデータベースの経験 このを通じて、なぜ 私が紹介している可能性があります 同様に私の一意の識別子としてINT? this--が再び言う何ですか? 聴衆:[聞こえません] DAVIDマラン:ランダム アクセスが容易になり、なぜですか? 聴衆:[聞こえません] DAVIDマラン:ええ、それはです 数字だけにアクセスします。 だから、あなたが本当にこの考える場合 テーブルには、配列のように、あります 今私は一意の識別子を持っています 私の周りにジャンプすることができ。 そして、それよりも良いがまだということです どのように大きなINTが再びになるだろうか? 32ビットまたは4バイト。 どのくらい自分のユーザー名は、になるだろうか? 最大限に? 16バイト。 だから、あなたが本当に気にしている場合 コー​​ドのパフォーマンス、 バックPSet5に思う、あなたが好むだろう 4バイト値または16を検索します バイト値、右? それは本当にそれと同じくらい簡単です。 あなたは多くの仕事の4倍をしなければなりません それらのためのユーザ名を検索します 16バイトです。 だから、あなたは文字通りに持っています されるすべての16のバイトを比較します はい確かに、これは私がしたいユーザ名です。 INTのため、あなたができるのに対し わずか4バイトでそれを行います。 それらのための脇とAS コンピュータのハードウェアに興味を持って、 それはあなたのようなものに合うことができる判明します INTか何かで32ビットの値 コンピュータ内のレジスタと呼ばれます それはスーパーであることを意味し、CPU、 でも最低でも、超高速 コンピュータのハードウェアのレベル。 だから、すべての周りだけの利点があります。 だから、これは何を意味するのでしょうか? 実際には、ときにあなたが設計しています データベーステーブル、ほとんどすべての時間の あなたが持っていないとしています あなたが気にデータのみ、 だけでなく、のようなものを 一意の識別子 このために起こっています 私たちは他のことをしましょう​​。 そしてのは、ここで一つの問題でつまずいてみましょう。 ユーザーが持っていないと仮定 ユーザ名と名前だけで、 彼らはまた、都市のようなものを持っています 少なくともと状態と郵便番号、 ここ米国インチ だから、私は先に行くつもりです ちょうどすぐに言います、 私は3以上の列を与えます テーブルの最後に。 そして、これは、都市になるだろう これは、国家になるだろう これは郵便番号になるだろう。 今市、どのようなデータ型 これは、おそらく、すべきですか? VARCHAR? 私は何かわかりません 最長の名前の都市です。 どこかアメリカでは、あります おそらくいくつかの途方もなく長い単語、 そう多少、ちょうど255で行ってみよう 歴史的にまたは任意。 国家、あなたが何をしたいのか? 審判の判定は、右? おそらく最も効率的な何ですか? どのように多くの文字? 多分ちょうど2つ、我々はできる場合 ただやって逃げます、 以下のように、マサチューセッツ州マサチューセッツ州のためなど。 だから、私は2つのCHAR値を行くつもりです。 郵便番号は、興味深いものです。 私たちはそのように、02138にここにいます 私たちは何を使用する必要がありますを示唆していますか? それは右、INTですか? INT、INT、短いですか? ショートは働くだろう。 なし? CHARまたは5が、私は、INTをしたいです。 なぜINTに押し戻しますか? このことから私を説得。 何がINT、私の考えについては愚かなのか? うん。 者:より多くのメモリを取ります。 DAVIDマラン:より多くのメモリを取ります。 4バイトが、あなたはしています 郵便番号を提案 または5バイトとして誰かが、CHARの通りでした それは本当にありません、ええように感じています ケース。 まあ、楽しい話。 数年前、私が使用するために使用された場合 私の電子メールのためのMicrosoft Outlook、 私は最終的にはGmailに切り替えたいと思いました。 だから、私は私のすべてをエクスポート CSVファイルとしてOutlookから連絡先。 コンマは、値を分離しました、 これはちょうど私のことを意味 すべての私の友人の名前を持っていた最後の 名前と電話番号と郵便番号 そしてそのすべて。 そして、私が作りました それを開くの間違い Excelで、これは、 スプレッドシートプログラムもの CSVファイルは、我々が見てきたように理解しています。 しかし、その後、私は次のように、ヒットしている必要があり、 一点でのコマンドまたはコントロールS。 およびExcelどうやら時 これにより、いつでも、それの機能を持っていました 番号を見て、それが参考にしてみました。 そして、その数はで開​​始した場合 ゼロは、それだけでそれらを取り除くでしょう。 なぜあなたは主要な必要があります 整数のゼロ? 彼らは数学的、無意味です。 彼らは無意味じゃありません 米国郵便システムインチ だから、私は何年も持っていました、 この日に、私はまだ ことを友人を持っている場合 私が誰かのを必要とするまれなケース これらの日に対処、 私はまだその私が表示されます ケンブリッジの友人を持っています、 マサチューセッツ州、2138年。 あなたがしている場合、それは迷惑なんです プログラムでの並べ替えしようとしています 封筒を生成したり、それを書き留めます。 そして、その理由は、このような理由のためです 私は間違ったデータ型を選択しました。 だから、私はあなたのアイデアが大好きです。 のは、CHARフィールドを使用してみましょう。 5文字を除きます コー​​ナーケースがあります。 それでもメールを送信する場合は、 時には、これらの日のコードを圧縮し、 彼らは次のように、だ、プラス4。 そこで、我々はその後、ハイフンを必要とし、 我々は、4つ以上の数字が必要です。 だから、正直に言うと、それができました 多くの異なった道を行きます。 今のところ、私は続けるつもりです それ簡単で、私はちょうどよ それはだと言うつもり 5 CHAR値と我々がいます 全体ダッシュプラス4をスキップする予定。 しかし、これらはトレードオフの一種です。 そして、あなたは考えることができ 同じ問題に起因 電話番号やその他のフィールドを持ちます。 そして今、これは実際にあります ダウンする愚かな道。 ロブと私とハンナの両方を仮定 マリアと[? Davon?]とアンディ ライブやスタッフの他はすべて ケンブリッジ、マサチューセッツ、02138インチ これは実際に私は愚かな感じ 私のユーザーテーブルに追加して、市、州、 そして、ジッパー。 なぜ? 聴衆:[聞こえません] DAVIDマランは:もう一度言って? 聴衆:[聞こえません] DAVIDマラン:彼らはいつもしています 右、一緒に行くつもり? それが判明した場合、我々は考えるために使用 これは徹底的に私たちまでそうでした 、全体の米国を検索 その存在が判明 いくつかの矛盾があります 複数の町が持っている場所 奇妙で、同じ郵便番号、。 しかし、我々は今では02138のために定めがある場合 いつもケンブリッジ、マサチューセッツ州で、 世界であなたは内に格納する理由 データベースケンブリッジとMAと02138 私のためにとハンナのためとロブのためにと [用? Davon?]と暮らす他の人のため ここケンブリッジで、それはです 完全に冗長。 私たちは離れて取得する必要があります ただ何を保存すると? ちょうど郵便番号。 しかし、その後、私たちは保存する場合 郵便番号、私はおそらく、したいですか、 02138がどこにあるか私のウェブサイトのために知っています。 だから、私は別のテーブルが必要です。 そして、それは大丈夫です。 実際には、これは次のいずれかであります テーブルを設計する設計プロセス あなたにもそれによってPSet7にやること あなたが共通のデータを考慮したいと思います。 我々はアウトファクタリングしてきたのと同じように 共通コードおよびファクタリングアウト共通 ここでは、CSSのスタイル あまりにデータベースで、 私は02138一意にする必要がある場合 誰かの故郷を特定し、 以下のためにマサチューセッツ州ケンブリッジを格納しません あなたのテーブルのすべてのくそユーザー。 その代わりに、と呼ばれる別のテーブルを持っています 何列を持つ必要がありジッパー? おそらくIDフィールドだけのために、理由 原則は、私たちは今の話をしています。 02138のためのおそらくジップフィールド。 そして、おそらく他の何列? 市や州が、一つだけを持っています 02138の行、02139のための1つの行、 90210のための1つの行。 そして、それは文字通りです 私が知っているすべての郵便番号。 だから今、あなたは何ができるのでしょうか? これは、問題です 今私は2つのテーブルを持っています。 だから、私のユーザーは主にここを超えています、 しかし、自分たちの街の状態情報の こっち。 だから、それがあります、SQLで判明します 実際の方法は、情報に参加します あなたはPSETでこれを見ることができます。 しかし、それはあなたができる判明します このような何かを。 ユーザーからのSELECTスター、ONジッパーを登録しよう ユーザーはジッパーがジッパーはジッパードット等しい点在しています。 少し長ったらしいどちらが、 確かに、これだけ からすべてを選択することを意味 私のユーザーテーブルを取る方法 私のジッパーテーブル。 1にそれらに参加 彼らが列を持っている分野。 だから、文字通り何かをすること このように、バック私を与えます 新しい一時テーブル すなわち、それは大きいです、広いです それがすべてを持っています それらの両方の列。 そして、それは、非常に単純であろう このような何かを行うための構文。 だから、これは前方にあり、 しかし、そこに起こっています 他の設計上の決定をすることが、あなたはよ 確認する必要があり、索引を持つだけでなく、 だけでなく、課題に実行しています。 実際には、課題があります 任意のデータベース設計で これにより、時には二人がお勧めします データベースの同じ行にアクセスするには テーブル。 だから、これは、我々がよものです 同様にPSet7に遭遇します。 しかし、私は私は1つを見てしようと思いました SQLで可能です攻撃。 のはどのようなものがあります 発生する可能性が問題? だから、あなたはPSet7でこれが発生します。 そして、我々は完全に何を伝えます この問題の解決策の符号化です。 しかし、あなたは、より高いレベルのクラスを取る場合、 特に、オペレーティングシステムにおいて、 あなたが遭遇するつもりです アトミックの問題、 やろうとしているの問題 複数のものを一度に 中断することなく。 そして私は私がこれを紹介しようと思いました メタファーとPSet7のアイデア 私がマーゴに自分自身を学んだこと セルツァーのCS164のオペレーティングシステム クラス数年前。 あなたはこれらの寮のいずれかを持っていると仮定 あなたの寮の部屋や家の中で冷蔵庫、 あなたは牛乳のための本当の好みを持っています。 だから、あなたはクラスから帰宅します ある日、あなたは冷蔵庫を開きます。 ああ、畜生。 冷蔵庫には牛乳はありません。 だから、あなたは冷蔵庫を閉じ、 ドアをロックし、あなたの寮をロックし、 角を回って歩きます CVSに、行の取得、 いくつかのミルクのためにチェックを開始。 そして、それはしばらく時間がかかるだろう、 それらのいまいましいセルフチェックアウトのため カウンタはとにかく使用することを永遠に取ります。 だからその間、あなたのルームメイトは帰宅します。 彼または彼女は本当にだけでなく、牛乳が好き。 彼らは寮の部屋に来て、 冷蔵庫を開け、ああ、それをくそ。 これ以上の牛乳はありません。 だから、彼または彼女はまた、 角を回って行きます。 しかし、今、2のようにありますので、 または3つまたは​​4つのCVSes近く、 彼らは次のいずれかに行くために起こります 広場に異なるもの。 そして今、数分 あなたの後に、両方の 帰宅とぐふ、史上最悪の問題。 今、あなたはあまりにも多くのミルクを持っています それは酸っぱい行くつもりだから。 そして、あなたは、あなたは牛乳を好きですが、 本当に牛乳が好きではありません。 だから今、これは高価でした あなたのために両方の間違い 基づいて決定しました いくつかの変数の状態こと のプロセスであっ あなたによって変更され、 牛乳を取りに行くのイニシエータ。 だから、おそらく人間のものです その問題を解決? 聴衆:[聞こえません] DAVIDマラン:右、メモを残しますか? あなたがいる場合には、必ず、メモを残します そのショーに精通しています。 はい、私たちの2があります。 だから、常にメモを残し、または 文字通り冷蔵庫をロック 南京錠のいくつかの種類を持ちますか そのようなトップの上に何か。 しかし、それは実際になるだろう データベース設計で重要な問題、 特にあなたが持っている可能性がある場合 複数のブラウザ、複数のラップトップ、 複数のユーザーが全員にしよう 一度に情報​​を更新します。 特に機密情報 財務情報のような、 これにより株式取引で あなたのようなウェブサイトが構築されます、 あなたはどのくらいのお金を確認したい場合はどのような あなたが持っていると、あなたは十分に持っている場合は、 いくつかの株式を購入しますか? しかし、どのような場合は他の誰か あなたと一緒に共同口座を持っています 同時にしようとしています いくつかの株式を購入しますか? だから、彼または彼女はチェックしています あなたの両方の口座残高、 同じ取り戻します 答えは、何のミルクありません。 あるいは、あなたの両方は、答えを取り戻します あなたが口座に$ 100があります。 あなたの両方が決定を作ってみます いくつかの会社の株式1株を購入します。 そして今、何が起こりますか? 次の2つの株を持っていますか? あなたは何の株式を持っていませんか? そのような問題が発生する可能性があります。 だから、我々はそれが発生します。 SQLインジェクション攻撃、ありがたいことに、 私たちがお手伝いしますものです、 これらはatrociouslyです まだ一般的なこれらの日。 そのように、これは単なる一例です。 私は請求をしないこと ハーバードPIN方式であります この特定の攻撃に対して脆弱。 我々は試してみました。 しかし、あなたが知っている私達その このようなフィールドを持っています。 そしてエールのNet IDは同じようなを持っています これらの日の画面を見て。 そして、それは、判明しているかもしれません PINシステムはPHPで実装されています。 そして、それはwere--場合、それは彼らnot--です このようなコードがあるかもしれません。 彼らは2つの変数を持っています。 私にユーザ名とパスワードを与えます ポストスーパーグローバル変数から 我々は以前の話をすることを。 たぶん、ハーバード大学は、クエリを持っています ユーザーからのSELECT星のように ユーザ名が等しいこと パスワードは、に等しいです。 そして、私はちょうどだと気付きます 使用して、それを差し込みます 他の中括弧表記 値だけでプラグインを意味し日、 ここに。 私が使用していませんよ 疑問符の技術。 私は、任意の秒を持っていません または3番目の引数。 私は文字通りです 文字列を自分で構築します。 問題は、しかし、ということです 誰かがscroobが好きなら、 これはフィルムへの参照です、 このようなものでログインし、 私は、ドットを削除しました 通常までカバーすること パスワード、彼がありますか 特に悪質な 彼のパスワードは多分、12345 「スペースボール」と呼ばれる映画あたり 彼批判のタイプ 5後に単一引用符、 その後、文字通り単語または 空間で、その後、引用、 引用終わり1は、引用符1に等しいです 彼は何を省略へのご注意しますか! 彼は右の引用符を省略しています 彼は左の引用を省略しています。 もしこのため、攻撃者 scroobの推定 人々は誰が書いたということです このPHPコードは、とても明るくはありませんでした おそらく彼らはいくつかのシングルを持っています 補間の前後に引用符 中括弧内の変数の? そしてそう多分、彼は親切でし 彼らの思考を完了 彼らのために、しかし、起こっている方法で、 彼は、PINシステムにハッキングできるようにします。 換言すれば、仮定 これはコードであること 私たちは今入力したscroobものの中に差し込みます。 それが悪いだから、それは、赤です。 また、基本となるテキスト 彼がで入力したもので、 scroobは、ハーバード大学のサーバーをだますことができ SQLクエリを構築するに このように見える文字列。 パスワードは12345、または1つ1に相当します。 その結果、論理的に、 これはscroobを記録するということです 自分のパスワードがある場合で 12345または1に等しい場合 もちろん常に真である1、 これscroobはいつもに入ったことを意味します。 だから、方法は修正します この、多くのケースのように、 ディフェンシブに書くことになります。 私たちのようなものを使用するには 実際のクエリ機能、どの あなたは私たちがプラグインPSet7、で表示されます 質問のようなものがここにマークします。 との美 我々のクエリ機能 あなたはそれがこれらを防御で与えます いわゆるSQLインジェクション攻撃、 誰かがにコードをだましています 彼または彼女自身のSQLコードを注入します。 どのようなクエリ機能ので、 私たちは、あなたが実際に行います与え、 あなたは疑問符の構文を使用している場合 第2および第ここで3番目の引数 それがに追加なかったものです ユーザーが提供したことを入力? これらのバックスラッシュ、引用符。 だから、それは潜在的にエスケープ 危険な文字。 これは、今奇妙に見えます それは脆弱ではありません それはしていませんので、 もうロジックを変更します その全体のパスワードですので、 今ではない単一引用符、 実際には、scroobのパスワード。 そこで、いくつかのジョークがあったです 年間でこのことについて。 そのように、これは、写真が撮影されました 駐車場でいくつかのオタクの それによってあなたはそのいくつかの都市を知っているかもしれません そして、の状態は、ライセンスをスキャンしよう あなたやあなたのチケットに料金を請求するためのプレート あなたのような、なしで通過すると、 E-Zパスの事。 だから、この人は多分と推定 人々は、E-Zパスシステムを書きます とても明るくはなかった、と多分彼ら 単なる文字列を連結さ、 彼または彼女が悪意を持っていないことができるように ちょうど彼らの思考を完了していません、 しかし、実際に悪いのコマンドを実行し、 これは、我々はまだ言及していませんでした、 しかし、あなたはおそらく推測することができます。 加えて、それは削除し、 挿入および更新を選択し、 ドロップと呼ばれるキーワードもあります、 これは文字通り、すべてを削除します データベースで、どの 特に悪いです。 我々は、この場合にズームインすることができます それは見るために少し厳しいです。 これは、今、有名な漫画です それが今、素晴らしく賢いです そして、理解しやすいです。 [笑い] クールな、うん。 種類のうちgeeking。 このように、その後、あります SQLインジェクション攻撃。 そして、彼らは使用して回避することがとても簡単です 右のコードまたは右のライブラリ。 そして、あなたは、それはだPSet7に表示されます なぜ私たちはあなたのクエリ機能を提供します。 だから、ティーザーのカップル 我々はだろうと思っていること 私たちのここであなたを与えます 一緒分を残り。 それで、あなたは週にゼロから覚えているように、我々 これら二つの電球を導入します いいです、ではないという理由だけで 彼らはきれいですし、カラフルです、 彼らは何かをサポートしているため アプリケーションは、APIと呼ばれます プログラミング・インターフェースと CS50でこれまで、我々はしました 主にGETに焦点を当て、 POSTは、それが判明します PUTのような他のHTTP動詞があります。 実際に、これがありました 0週目からスライド それによって、あなたが送信したコードを書く場合 ラPSet6 HTTPリクエスト テキストのこの塊とこのようになります JSONと呼ばれる下部にあります、 またはJavaScriptオブジェクト表記 ことを私たちは来週の話をします、 あなたがオンまたはオフにするか、変更することができます それらのようなライトの色。 CS50はまた、いくつかの他に持っているのであれば ニューヘブンのここで、これらの電球の あなたが借りたい場合 それらの最終プロジェクトのため、 また、一部のMicrosoft 以下のようなものですバンド、 あなたの手首に着用することを見て 同様になるように、APIを持っていることをあなた 彼らのためにあなた自身のソフトウェアを書くことができます。 私たちはアカウントを持っています AppleのiOSのコードので、 そのアップルウォッチかを持っている場合 iPhoneやiPadやiPod、 あなたはそのコードを書くことができます 実際にそれらの上で動作します。 私たちは、全体の束を持っています あるのArduinos、 小さな小さなコンピュータ 例のない、本質的に、 あなたはUSB経由で接続できること、 一般的に、あなた自身のMacやPCに、 これらの物理的に実行されるコードを書きます 多くの場合、それらのセンサーを持っているデバイス だから、現実の世界と対話することができます。 私たちは、全体の束を持っています リープモーションデバイスの、 Mac用USBデバイスであると ここにして再度、ニューヘブンのパソコン、。 そして、あなたがお使いのMacに接続した場合、 あなたが実際にあなたのコンピュータを制御することができます ソフトウェアを書くことにより、 その赤外線ビームを経由して、 あなたの人の手がどこにあるかを割り出し、 あなたのキーボードに触れることなく。 私たちは迅速に共有したいと思いました 例えば、これを垣間見ます。 [音楽再生] そこで、我々は、全体を持っています これらの事の束、 あまりにも、ミョーアームバンドと呼ばれます これはあなたがあなたの前腕の上に置きます そして、あなたは本当のを制御することができます 世界やこのような仮想世界。 [音楽再生] あるいは、我々はまた、いくつかのGoogleを持っています 以下のような、文字通りある段ボール、 あなたがあなたの上に置くことが段ボール箱 顔が、それにあなたの携帯電話でスライド あなたのガラスを置くように、 あなたの目には本当に近くに電話。 そしてGoogleの段ボールです $ 10〜$ 20におけるかなり安いです。 そして、それはほとんどのレンズを持っています その少しシフトオフ あなたの人間のためのスクリーン上の画像 あなたに奥行き感を与えるために、目 あなたが実際に3Dを持っているように、 あなたの前に環境。 我々はまた、いくつかのサムスンギアを持っています これのより高価なバージョンがあり、 それは同様にスライド可能 Androidの携帯電話とあなたの錯覚を与えます of--や経験を与えます バーチャルリアリティの。 そして、私たちの最後の2分で、 我々はこれをやろうと思いました。 私はコルトンが持っているものを投影することができる場合 ここに、ちょうどあなたの欲求を満たしてくれるために、 私が先に行くと投げてみましょう ここで大画面でアップ。 私がライトを殺してみましょう。 コルトン、あなたが先に行くしたいです そして、一瞬のためにあなたのセルに置きます とに渡って来ます ステージ中央? そして、あなたはproject--したいです これは、コルトンが見ているものです。 さて、ここでのWi-Fiがあります このデバイスのように強くありません これが超魅力的であること、 しかしコルトンは文字通りです この魔法のような未来的な場所です。 彼は唯一の1つの画像を見ています。 あなたは彼の左と右眼を見ています 彼の脳は、一緒にステッチされていること 3次元で 彼の顔に環境。 彼はちょうどここにメニューオプションを選択します。 だから、再び、彼はこのヘッドセットを装着しています だその上にサムスンの携帯電話で ワイヤレスで私たちのオーバーヘッドに突出します。 今、あなたは火星に、私は考えていますか? COLTON:私はそう思います。 私は[聞こえない]わかりません。 [笑い] DAVIDマラン:判明 火星はこれらのメニューを持っています。 COLTON:[聞こえない]いくつかのクールな 場所私たちが移動する場合to-- DAVIDマラン:私達は行きたいですか? COLTON:[聞こえません] DAVIDマラン:そして、見てみましょう コルトンのは、今私たちを取る場所。 COLTON:[聞こえません] DAVIDマラン:だから、非常に多くあります あなた自身を取ることができる別の場所。 することができます経由FAPIsがあります ゲームや相互作用を書きます 電話で、最終的には、実行します。 だから、あなたは本当にただ 携帯電話のアプリケーションを書きます。 しかし、ソフトウェアのおかげで そして、グラフィックス機能、 今コルトンは、この中にあります 小さな小さなコテージ。 そして、リスクのあります 自分自身を圧倒、 コルトンと私はのために固執します 今日ここクラスの最後にいる間 あなたが出てくるとプレイしたい場合。 そして、我々はそれらを持っていきます バック来週にも。 さらになければ、騒ぎ それは今日のためにそれです。 私たちは来週お会いしましょう​​。 [MUSIC - RAGGA TWINS、「BAD MAN」]