[MUSIC CHƠI] DOUG LLOYD: Trong video của chúng tôi về chủ đề phát triển web, chúng tôi đã đề cập đến các khái niệm về một cơ sở dữ liệu một vài lần, phải không? Vì vậy, một cơ sở dữ liệu bạn có lẽ quen thuộc với từ nói bằng cách sử dụng Microsoft Excel hoặc Google Spreadsheets. Nó thực sự chỉ là một tổ chức thiết lập các bảng, hàng và cột. Và một cơ sở dữ liệu là nơi cửa hàng web của chúng tôi thông tin quan trọng cho trang web của chúng tôi để làm việc đúng cách. Một lần nữa, một ví dụ thực sự phổ biến ở đây được lưu trữ username và password trong một cơ sở dữ liệu, do đó khi một người dùng đăng nhập vào trang web của chúng tôi, cơ sở dữ liệu có thể được truy vấn để xem nếu người dùng tồn tại trong cơ sở dữ liệu. Và nếu họ đang có, kiểm tra xem mật khẩu của họ là đúng. Và nếu mật khẩu của họ là đúng, sau đó chúng tôi có thể cung cấp cho họ bất cứ trang họ đang yêu cầu. Vì vậy, có lẽ bạn đang, một lần nữa, quen thuộc với ý tưởng này từ Excel hoặc Google Spreadsheets. Chúng tôi có cơ sở dữ liệu, bảng, hàng và cột. Và đó là thực sự loại của tập cơ bản của sự cố phân cấp ở đây. Vì vậy, đây là một bảng tính Excel. Và nếu bạn đã từng mở này hoặc một chương trình khác tương tự bạn biết rằng đây là những rows-- 1, 2, 3, 4, 5, 6, 7. Đây là cột. Có lẽ ở đây, mặc dù bạn có thể không sử dụng tính năng này khủng khiếp much-- Tôi sẽ phóng to in-- chúng tôi có Ý tưởng này của một tờ. Vì vậy, có lẽ những tờ, nếu Tôi luân phiên qua lại, là bảng khác nhau mà tồn tại trong cơ sở dữ liệu của tôi. Và nếu chúng ta tiếp tục ví dụ tất cả cách, tên của cơ sở dữ liệu này là Book 1. Có lẽ tôi có Book 2 và 3 Book. Vì vậy, mỗi tập tin Excel là một cơ sở dữ liệu, mỗi tấm là một bảng, và bên trong của mỗi bảng tôi có Ý tưởng này của các hàng và cột. Vậy làm thế nào để tôi làm việc với cơ sở dữ liệu này? Làm thế nào để tôi nhận được thông tin từ nó? Cũng có một ngôn ngữ được gọi SQL-- mà tôi thường chỉ cần gọi Sequel-- và nó là viết tắt của các Structured Query Language. Và nó là một ngôn ngữ lập trình, nhưng đó là một chương trình khá hạn chế ngôn ngữ. Nó không hoàn toàn giống như những người khác rằng chúng tôi đã làm việc với. Nhưng mục đích của việc này ngôn ngữ lập trình là để truy vấn một cơ sở dữ liệu, để yêu cầu thông tin của một cơ sở dữ liệu, tìm kiếm thông tin trong một cơ sở dữ liệu, và như vậy. Chúng tôi cũng có, trong CS50-- và đó là một rất nền tảng phổ biến, nó được gọi là MySQL. Đó là những gì chúng tôi sử dụng trong khóa học. Đó là một mã nguồn mở nền tảng lập một cái gọi là database-- quan hệ một cơ sở dữ liệu, hiệu quả. Chúng tôi không cần phải nhận được vào chi tiết quá nhiều về những gì một CSDL quan hệ là. Nhưng ngôn ngữ SQL là rất giỏi trong việc làm việc với MySQL và khác tương tự phong cách của cơ sở dữ liệu quan hệ. Và nhiều cài đặt của MySQL đi kèm với một cái gì đó gọi là phpMyAdmin, mà là một người dùng đồ họa interface-- một GUI-- đó làm cho nó nhiều hơn một chút thân thiện với người sử dụng thực hiện truy vấn cơ sở dữ liệu, vì cơ sở dữ liệu không chỉ được sử dụng bởi các lập trình tiên tiến, phải không? Đôi khi có những các doanh nghiệp nhỏ, và họ không thể đủ khả năng để thuê một đội ngũ lập trình, nhưng họ vẫn cần phải lưu trữ thông tin trong một cơ sở dữ liệu. Một cái gì đó giống như phpMyAdmin làm cho nó rất dễ dàng cho ai đó người chưa bao giờ được lập trình trước để nhận và trở nên quen thuộc với cách để làm việc với một cơ sở dữ liệu. Vấn đề là, phpMyAdmin, trong khi đó là một công cụ tuyệt vời cho học tập về cơ sở dữ liệu, nó là thủ công. Bạn sẽ phải đăng nhập vào nó và thực hiện các lệnh và gõ mọi thứ trong tay. Và như chúng ta đã biết từ chúng tôi Ví dụ về lập trình web PHP, phải tự làm thứ trên trang web của chúng tôi, nếu chúng ta muốn có một năng động, chủ động đáp ứng trang web, có lẽ không phải là cách tiếp cận tốt nhất. Chúng tôi muốn tìm một cách để có lẽ tự động hoá này bằng cách nào đó. Và SQL sẽ cho phép chúng tôi làm điều này. Vì vậy, khi chúng tôi đang đi để bắt đầu làm việc với SQL, trước tiên chúng ta cần phải có một cơ sở dữ liệu để làm việc với. Tạo một cơ sở dữ liệu một cái gì đó bạn có thể sẽ làm trong phpMyAdmin, vì bạn sẽ chỉ cần phải làm điều đó một lần, và cú pháp để làm như vậy là rất nhiều đơn giản hơn. Nó dễ dàng hơn rất nhiều để làm điều đó trong một giao diện người dùng đồ họa hơn gõ nó ra như là một mệnh lệnh. Các lệnh có thể có được một chút rườm rà. Tương tự như vậy, việc tạo ra một bảng có thể nhận được khá một chút rườm rà là tốt. Và như vậy những thứ như việc tạo ra một cơ sở dữ liệu và tạo ra một bảng, trong đó bạn có lẽ chỉ đi làm once-- một lần cho mỗi bảng, một lần mỗi database-- đó là OK để làm điều đó trong một giao diện đồ họa. Trong quá trình tạo ra một bảng, bạn sẽ cũng phải xác định tất cả các cột rằng sẽ có trong bảng đó. Những loại thông tin nào bạn muốn lưu trữ trong bảng? Có lẽ tên của người dùng và ngày tháng năm sinh, mật khẩu, số lượng người sử dụng ID, và có lẽ thành phố và tiểu bang, phải không? Và mỗi khi chúng ta muốn thêm một người sử dụng cơ sở dữ liệu, chúng tôi muốn có được tất cả sáu những mẩu thông tin. Và chúng tôi làm điều đó bằng cách thêm hàng vào bảng. Vì vậy, đầu tiên chúng ta tạo ra một cơ sở dữ liệu, sau đó chúng tôi tạo ra một bảng. Là một phần của việc tạo ra một bảng, chúng tôi được yêu cầu để xác định mỗi cột đó chúng tôi muốn trong bảng này. Và sau đó khi chúng tôi bắt đầu để thêm thông tin cơ sở dữ liệu và truy vấn cơ sở dữ liệu hơn generally-- không chỉ cần thêm, nhưng mọi thứ khác chúng tôi do-- chúng ta sẽ đối phó với các hàng của bảng, mà là một thông tin của người dùng từ toàn bộ tập hợp. Vì vậy, mỗi cột SQL có khả năng giữ dữ liệu của một kiểu dữ liệu cụ thể. Vì vậy, chúng tôi sắp xếp của loại này Ý tưởng của các kiểu dữ liệu trong PHP, nhưng họ đang trở lại đây trong SQL. Và có rất nhiều loại dữ liệu. Dưới đây chỉ là 20 trong số họ, nhưng nó thậm chí không tất cả chúng. Vì vậy, chúng tôi có những ý tưởng như INTs-- Integers-- chúng ta có thể biết cột này có thể giữ nguyên. Và có những biến thể thereon-- SMALLINT, TINYINT, MEDIUMINT, bigint. Có lẽ chúng ta không luôn luôn cần bốn cắn. Có lẽ chúng ta cần tám byte, và vì vậy chúng tôi có thể sử dụng các biến thể trên các số nguyên để có nhiều không gian hơn một chút hiệu quả. Chúng tôi có thể làm các số thập phân, chúng tôi có thể làm nổi số điểm. Đây là khá tương tự. Có một số khác biệt, và nếu bạn làm thích nhìn lên SQL loại hướng dẫn, bạn có thể xem những gì nhẹ khác biệt giữa chúng. Có lẽ chúng ta muốn lưu trữ thông tin về ngày tháng và thời gian. Có lẽ chúng ta đang theo dõi các khi người dùng tham gia trang web của chúng tôi, và như vậy có lẽ chúng ta muốn để có một cột đó một thời gian ngày hay một dấu thời gian chỉ khi người sử dụng thực sự đăng kí. Chúng tôi có thể làm hình học và linestrings. Đây thực sự là khá mát mẻ. Chúng tôi có thể vạch ra một khu vực địa lý sử dụng GIS tọa độ để vẽ ra một khu vực. Vì vậy, thực sự có thể lưu trữ loại đó thông tin trong một cột SQL. TEXT chỉ là đốm màu khổng lồ của văn bản, có thể. Enums là loại thú vị. Họ thực sự tồn tại trong C. Chúng tôi làm không nói chuyện về họ bởi vì họ không khủng khiếp thường được sử dụng, ít nhất là CS50. Nhưng nó là một kiểu dữ liệu liệt kê, trong đó là khả năng nắm giữ các giá trị giới hạn. Một ví dụ thực sự tốt ở đây sẽ là để tạo ra một enum này bảy giá trị có thể là chủ nhật, thứ hai, Thứ Ba, Thứ Tư, Thứ Năm, Thứ Sáu, Thứ bảy, phải không? Đó là kiểu dữ liệu ngày của Tuần không tồn tại, nhưng chúng ta có thể tạo ra một kiểu dữ liệu liệt kê như vậy cột rằng chỉ có bao giờ có thể giữ một trong những bảy giá trị có thể. Chúng tôi đã liệt kê tất cả các của các giá trị có thể. Sau đó, chúng tôi có CHAR và VARCHAR, và tôi đã tô màu các màu xanh lá cây bởi vì chúng tôi đang thực sự sẽ mất một giây để nói về sự khác biệt giữa hai điều này. Vì vậy, CHAR, không giống như C, nơi CHAR là một nhân vật duy nhất, trong SQL một CHAR đề cập đến một chuỗi dài cố định. Và khi chúng ta tạo này cột, chúng tôi thực sự có thể xác định độ dài của chuỗi. Vì vậy, trong ví dụ này, chúng ta có thể nói CHAR (10). Điều đó có nghĩa rằng tất cả phần tử của cột đó sẽ bao gồm 10 byte thông tin. Không nhiều không ít. Vì vậy, nếu chúng ta cố gắng và đặt trong một 15 bit hoặc một yếu tố 15 ký tự hoặc giá trị vào cột này, chúng ta chỉ có được 10 người đầu tiên. Nếu chúng ta đặt trong hai giá trị lâu nhân vật, chúng ta sẽ có hai ký tự, và sau đó tám cắn null. Chúng tôi sẽ không bao giờ có hiệu quả hơn đó. Một VARCHAR là loại giống như khái niệm của chúng ta về một chuỗi mà chúng ta đã quen thuộc với từ C hoặc từ PHP. Đó là một chuỗi dài biến. Và khi bạn tạo cột này, bạn chỉ xác định độ dài tối đa có thể. Vì vậy có lẽ 99, hay thường 255. Đó sẽ là chiều dài tối đa. Và vì vậy nếu chúng được lưu trữ 15 chuỗi ký tự, chúng tôi sẽ sử dụng 15 byte, có thể 16 byte cho terminator null. Nếu chúng ta lưu trữ một ba chuỗi ký tự, chúng tôi sẽ sử dụng ba hay bốn byte. Nhưng chúng tôi sẽ không sử dụng đầy đủ các 99. Vì vậy, tại sao chúng ta có cả hai? Vâng, nếu chúng ta cần phải tìm ra cách cái gì đó dài là với một VARCHAR, chúng ta phải loại iterate qua nó chỉ giống như chúng tôi đã làm trong C và tìm ra nơi nó dừng lại. Trong khi đó nếu chúng ta biết rằng mọi thứ trong cột này là 10 byte, có thể chúng tôi biết thông tin đó, chúng ta có thể nhảy 10 byte, 10 byte, 10 byte, 10 byte, và luôn luôn tìm thấy bắt đầu của chuỗi. Vì vậy, chúng tôi có thể có một số không gian lãng phí với một CHAR, nhưng có lẽ có một thương mại off của việc có tốc độ tốt hơn trong điều hướng các cơ sở dữ liệu. Nhưng có lẽ chúng ta muốn linh hoạt của một VARCHAR thay vì having-- Nếu CHAR của chúng tôi là 255, nhưng hầu hết người sử dụng của chúng tôi chỉ được nhập vào ba hoặc bốn byte giá trị của thông tin hoặc ba hoặc bốn nhân vật có giá trị của thông tin. Nhưng một số người dùng đã sử dụng toàn bộ 255, có lẽ VARCHAR sẽ thích hợp hơn đó. Đó là sắp xếp của một thương mại giảm, và nói chung cho các mục đích của CS50, bạn không cần phải lo lắng quá nhiều về cho dù bạn sử dụng một CHAR hay VARCHAR. Nhưng trong thế giới thực, những điều này không quan trọng bởi vì tất cả các cột mất không gian vật lý thực tế. Và không gian vật lý, trong thế giới thực, đi kèm với một bảo hiểm. Vì vậy, một xem xét khác khi bạn đang xây dựng một bảng là để chọn một cột được những gì gọi là khóa chính. Và một khóa chính là một cột nơi mỗi giá trị duy nhất là duy nhất. Và điều đó có nghĩa rằng bạn có thể dễ dàng chọn ra một hàng duy nhất chỉ bằng cách nhìn tại các trọng điểm chính của hàng đó. Vì vậy, ví dụ, bạn nói chung, với người dùng, không muốn hai người dùng có số lượng người sử dụng cùng một ID. Và như vậy có lẽ bạn có rất nhiều thông tin, và có lẽ hai người sử dụng có thể có name-- cùng bạn có John Smith và John Smith. Đó không nhất thiết phải là một vấn đề, bởi vì có nhiều người trong thế giới tên là John Smith. Nhưng chúng tôi chỉ có một người sử dụng số ID 10, một người sử dụng ID số 11, 12, 13. Chúng tôi không có hai người dùng với cùng một số, và như vậy có lẽ số người sử dụng ID sẽ là một khóa chính tốt. Chúng tôi không có bất kỳ sự trùng lặp, và chúng tôi có thể bây giờ duy nhất xác định mỗi đơn hàng chỉ bằng cách nhìn vào cột đó. Chọn khóa chính có thể thực sự làm cho hoạt động bàn tiếp theo dễ dàng hơn rất nhiều vì bạn có thể tận dụng thực tế là hàng nhất định sẽ là duy nhất, hoặc một cột nào đó của cơ sở dữ liệu hoặc bảng của bạn sẽ là duy nhất để chọn ra các hàng cụ thể. Bạn cũng có thể có một chính doanh chìa khóa, mà bạn có thể tìm được một cớ để sử dụng, mà chỉ cần một là sự kết hợp của hai cột được đảm bảo là duy nhất. Vì vậy, có thể bạn có một cột đó là A và B, một cột đó là một, hai, và ba, nhưng bạn sẽ chỉ bao giờ có một A1 duy nhất, một đơn A2, và vv và vv. Nhưng bạn có thể có một B2, một C2, hoặc A1, A2, A3, A4. Vì vậy, bạn có thể có nhiều As, nhiều Bs, nhiều người, nhiều twos, nhưng bạn chỉ có thể bao giờ có một đơn A1, B2, C3, và như vậy. Vì vậy, như tôi đã nói, SQL là một ngôn ngữ lập trình, nhưng nó có một vốn từ vựng khá hạn chế. Nó không phải là khá rộng như C và PHP và các ngôn ngữ khác mà chúng ta nói trong khóa học. Đó là tiết nhiều hơn một ngôn ngữ hơn so với những gì chúng tôi sẽ nói về trong này video, bởi vì trong video này chúng ta sẽ nói về bốn hoạt động mà chúng ta có thể thực hiện trên một bảng. Hiện có hơn này. Chúng ta có thể làm nhiều hơn này, nhưng đối với mục đích của chúng tôi, nói chung chúng ta đang đi để được sử dụng chỉ bốn chèn operations--, chọn, cập nhật, và xóa. Và bạn có thể có thể trực giác đoán những gì tất cả bốn trong số những làm. Nhưng chúng ta sẽ đi vào một chút các chi tiết trên mỗi một. Vì vậy, mục đích của việc này video, chúng ta hãy giả chúng tôi đã hai sau đây bảng trong một cơ sở dữ liệu duy nhất. Chúng tôi có một bảng gọi là Người dùng có bốn columns-- số ID, tên người dùng, mật khẩu, và tên đầy đủ. Và chúng ta có một thứ hai bảng trong cơ sở dữ liệu tương tự được gọi là Mẹ mà chỉ cần lưu trữ thông tin về một tên người dùng và một người mẹ. Vì vậy, đối với tất cả các ví dụ trong video này, chúng tôi sẽ được sử dụng cơ sở dữ liệu này và cập nhật tiếp theo cho nó. Vì vậy, chúng ta hãy nói rằng chúng ta muốn thêm thông tin vào một bảng. Đó là những gì các hoạt động chèn không. Trong việc giải thích tất cả các lệnh này, tôi sẽ để cung cấp cho bạn một bộ xương nói chung để sử dụng. Bởi vì về cơ bản, các truy vấn sẽ nhìn khá giống nhau, chúng tôi chỉ cần đi để được thay đổi miếng hơi khác nhau của thông tin để làm những việc khác nhau với bảng. Vì vậy, cho INSERT, bộ xương trông loại như thế này. Chúng tôi muốn chèn vào một bảng cụ thể. Sau đó, chúng ta có một dấu ngoặc mở và một danh sách các cột mà chúng tôi muốn đưa các giá trị vào. Đóng ngoặc đơn, các sau các giá trị, và sau đó một lần nữa, chúng ta ra khỏi danh sách các giá trị chúng tôi muốn đặt trong bảng. Vì vậy, một ví dụ về điều này sẽ là như sau. Tôi muốn chèn vào bảng người sử dụng các columns-- sau Tên truy nhập, mật khẩu, và họ tên. Vì vậy, một hàng mới, nơi tôi đang đặt trong ba cột và chúng tôi sẽ đưa vào các giá trị Newman, USMAIL, và Newman. Vì vậy, trong trường hợp này, tôi đặt newman chữ thường vào cột tên truy cập, mật khẩu USMAIL, và vốn tên đầy đủ N Newman vào cột fullname. Vì vậy, đây là những gì các cơ sở dữ liệu trông giống như trước đây. Dưới đây là những gì các bảng người sử dụng trên đầu trông giống như trước khi chúng tôi đã làm điều này. Sau khi chúng tôi thực hiện điều này truy vấn, chúng tôi có được điều này. Chúng tôi đã thêm một hàng mới vào bảng. Nhưng cần chú ý một điều này mà tôi đã không xác định, nhưng bằng cách nào đó tôi đã có một giá trị cho, mà là 12 này ngay tại đây. Tôi không nói rằng tôi muốn đưa số ID trong đó. Tôi muốn đặt tên người dùng, mật khẩu, fullname. Và tôi đã làm điều đó, đó là tốt. Nhưng tôi cũng đã nhận 12 này. Tại sao tôi lại nhận được 12 này? Vâng, nó chỉ ra rằng khi bạn đang xác định một cột đó sẽ là của bạn khóa chính, mà thường là, như tôi đã nói, một số ID. Nó không phải luôn luôn cần thiết sẽ là một số ID, nhưng nó thường là một ý tưởng tốt để có một số loại giá trị số nguyên. Bạn có một tùy chọn trong phpMyAdmin khi bạn đang tạo ra cơ sở dữ liệu của bạn hoặc bảng của bạn để thiết lập đó cột như tự động incrementing. Đó là một ý tưởng thực sự tốt khi bạn đang làm việc với một khóa chính, bởi vì bạn muốn mỗi giá trị trong cột đó phải là duy nhất. Và nếu bạn quên để xác định nó cho nhiều hơn một người, bây giờ bạn có một tình huống mà cột đó không còn độc đáo. Bạn có hai khoảng trống, vì vậy bạn có thể không còn xác định duy nhất một column-- hoặc bạn có thể không còn độc đáo xác định một hàng dựa trên cột đó. Nó sẽ mất đi tất cả của nó giá trị như là một khóa chính. Và như vậy rõ ràng những gì tôi đã làm đây là cấu hình ID người dùng cột để tự động tăng để mỗi khi tôi thêm thông tin vào bảng, nó sẽ tự động cung cấp cho tôi một giá trị cho khóa chính. Vì vậy, tôi không bao giờ có thể quên làm điều đó bởi vì cơ sở dữ liệu sẽ làm điều đó cho tôi. Vì vậy, đó là loại tốt đẹp. Và đó là lý do tại sao chúng tôi nhận 12 trong đó, bởi vì tôi đã đặt cột lên để tự động tăng. Nếu tôi thêm một người khác nó muốn được 13, nếu tôi thêm người khác nó muốn được 14, và như vậy. Vì vậy, chúng ta hãy chỉ làm một chèn nhiều hơn. Chúng tôi sẽ chèn vào bảng các bà mẹ, trong Đặc biệt, tên người dùng và mẹ cột, các giá trị Kramer và Babs Kramer. Và vì vậy chúng tôi đã có điều này trước đây. Sau khi chúng tôi thực hiện mà Truy vấn SQL, chúng ta có điều này. Chúng tôi đã thêm Kramer và Babs Kramer vào bảng các bà mẹ. Vì vậy, đó là chèn. SELECT được chúng tôi sử dụng để trích xuất thông tin từ bảng. Vì vậy, đây là làm thế nào chúng ta có được thông tin từ các cơ sở dữ liệu. Và các lệnh để CHỌN đang có được rất thường xuyên được sử dụng trong chương trình. Tổng framework-- sự bộ xương nói chung trông như thế này. Chọn một tập các cột từ một bảng, và sau đó tùy chọn bạn có thể chỉ định một hoặc condition-- những gì chúng ta thường gọi một vị ngữ, thường là thuật ngữ chúng ta sử dụng trong SQL. Nhưng đó là những gì cơ bản hàng cụ thể mà bạn muốn nhận. Nếu bạn muốn, thay vì nhận được tất cả mọi thứ, thu hẹp nó xuống, đây là nơi mà bạn sẽ làm điều đó. Và sau đó tùy chọn, bạn cũng có thể đặt hàng bởi một cột cụ thể. Vì vậy, có thể bạn muốn có những thứ được sắp xếp theo bảng chữ cái dựa trên một cột hoặc chữ cái dựa trên khác. Một lần nữa, WHERE và ORDER BY là tùy chọn. Nhưng có lẽ họ sẽ được useful-- đặc biệt Đâu sẽ có ích cho thu hẹp, do đó bạn không có được toàn bộ cơ sở dữ liệu của bạn trở lại và phải xử lý nó, bạn chỉ nhận được các mảnh của nó mà bạn quan tâm. Vì vậy, ví dụ, tôi có thể muốn chọn Số ID và fullname từ người sử dụng. Vì vậy, điều này có thể trông như thế nào? Vì vậy, đây là bảng người dùng của tôi. Tôi muốn chọn idnum Họ và tên và từ người dùng. Tôi sẽ làm gì để có được? Tôi sẽ có được điều này. Tôi đã không thu hẹp nó xuống, vì vậy tôi được nhận số ID cho mỗi hàng và tôi nhận được đầy đủ tên từ mỗi hàng. ĐƯỢC. Nếu tôi muốn chọn mật khẩu từ những người dùng WHERE-- vì vậy bây giờ Tôi thêm một điều kiện, một predicate-- nơi idnum là ít hơn 12. Vì vậy, đây là cơ sở dữ liệu của tôi một lần nữa, người sử dụng bảng của tôi lên hàng đầu. Tôi sẽ làm gì để có được nếu tôi muốn chọn thông tin, mật khẩu, nơi ID người dùng hoặc idnum là ít hơn 12? Tôi sẽ có được điều này thông tin trở lại, phải không? Nó sẽ xảy ra rằng idnum là 10, ít hơn hơn 12, ID số 11 ít hơn 12. Tôi nhận được mật khẩu cho những hàng. Đó là những gì tôi yêu cầu. Cái này thì sao? Nếu tôi muốn chọn ngôi sao từ bảng các bà mẹ nơi tên người dùng bằng Jerry? OK, chọn sao là đặc biệt loại thẻ hoang dã được gọi là mà chúng tôi sử dụng để có được tất cả mọi thứ. Vì vậy, họ đang nói chọn username mẹ dấu phẩy, mà đã xảy ra được các chỉ hai cột của bảng này, Tôi chỉ có thể chọn sao và có được mọi thứ nơi tên người dùng bằng Jerry. Và đó là những gì tôi sẽ nhận được nếu tôi thực hiện truy vấn cụ thể. Bây giờ, cơ sở dữ liệu là tuyệt vời vì chúng cho phép chúng tôi tổ chức thông tin có lẽ một chút hiệu quả hơn so với chúng tôi nếu không có thể. Chúng ta không nhất thiết phải để lưu trữ mỗi mảnh có liên quan của thông tin về một người sử dụng trong cùng một bảng. Chúng tôi đã có hai bảng đó. Chúng ta cần lưu trữ Tên của mọi người mẹ, và có lẽ chúng ta không có an ninh xã hội số, chúng tôi có ngày sinh của họ. Điều đó không phải lúc nào cũng cần để được ở cùng một bảng. Miễn là chúng ta có thể xác định mối quan hệ giữa các tables-- và đó là nơi mà quan hệ hạn cơ sở dữ liệu loại đi kèm vào play-- miễn là chúng ta có thể xác định mối quan hệ giữa các bảng, chúng ta có thể loại compartmentalize hoặc những thứ trừu tượng một cách, nơi mà chúng ta chỉ có thông tin thực sự quan trọng chúng ta quan tâm trong bảng của người dùng. Và sau đó chúng tôi có thông tin phụ trợ hoặc thông tin thêm trong các bảng khác rằng chúng ta có thể kết nối lại với chính bảng người sử dụng một cách đặc biệt. Vì vậy, ở đây chúng tôi có hai bảng trên, nhưng có một mối quan hệ giữa chúng, bên phải? Nó có vẻ như username có thể là một cái gì đó tồn tại trong chung giữa hai bảng khác nhau. Vì vậy, nếu chúng ta bây giờ có một tình huống mà chúng ta muốn có được tên đầy đủ của người dùng từ bảng của người dùng, và mẹ của họ tên từ bảng mẹ? Chúng tôi không có một cách để có được mà như nó đứng, phải không? Không có bảng duy nhất có chứa cả tên đầy đủ và tên mẹ. Chúng tôi không có lựa chọn đó từ những gì chúng ta đã thấy cho đến nay. Và vì vậy chúng tôi phải giới thiệu ý tưởng về một JOIN. Và có lẽ JOIN các complex-- nhất nó thực sự hoạt động phức tạp nhất chúng ta sẽ nói về trong video. Họ là một chút phức tạp, nhưng một khi bạn nhận được hang của nó, chúng thật sự không phải là quá xấu. Nó chỉ là một trường hợp đặc biệt của một SELECT. Chúng tôi sẽ chọn một tập hợp các cột từ một bảng tham gia trong một bảng thứ hai trên một số vị ngữ. Trong trường hợp này, hãy nghĩ về nó như this-- bảng một là một vòng tròn trên đây, bảng hai là một vòng tròn trên đây. Và đó là một phần vị ngữ ở giữa, nó loại giống như nếu bạn nghĩ về như một sơ đồ Venn, những gì Họ có điểm gì chung? Chúng tôi muốn liên kết hai bảng dựa trên những gì họ có điểm chung và tạo bảng tính giả thuyết này đó là sự hợp nhất của hai cùng nhau. Vì vậy, chúng ta sẽ thấy điều này trong một ví dụ và có lẽ đó sẽ giúp xóa nó lên một chút. Vì vậy, có thể bạn muốn chọn user.fullname và moms.mother từ những người dùng tham gia vào các bảng các bà mẹ trong mọi tình huống nơi cột username là như nhau giữa chúng. Và đây là một mới cú pháp ở đây, người dùng này. và bà mẹ .. Nếu tôi đang làm nhiều bảng với nhau, tôi có thể chỉ định một bảng. Tôi có thể phân biệt ở trên đặc biệt mà về ở rất dưới đó. Tôi có thể phân biệt tên người dùng cột của bảng người dùng từ cột tên người dùng của bảng các bà mẹ, mà là otherwise-- nếu chúng ta chỉ nói bằng username Tên truy nhập, mà không thực sự có ý nghĩa gì. Chúng tôi muốn làm điều đó mà chúng phù hợp. Vì vậy, tôi có thể chỉ định các bảng và các Tên cột trong trường hợp của một tình huống nơi nó sẽ là không rõ ràng những gì tôi đang nói về. Vì vậy, đó là tất cả tôi đang làm có tôi nói cột này từ bảng này, và đang được rất rõ ràng. Vì vậy, một lần nữa, tôi chọn Tên đầy đủ và tên của người mẹ từ bảng người dùng liên kết với nhau với bảng các bà mẹ trong mọi tình huống nơi họ chia sẻ rằng column-- họ chia sẻ rằng tên người dùng khái niệm. Vì vậy, đây là những bảng chúng ta có trước. Đây là trạng thái của chúng tôi cơ sở dữ liệu như nó tồn tại ngay bây giờ. Những thông tin chúng tôi đang giải nén là này để bắt đầu. Đây là bảng mới, chúng tôi đang đi để tạo ra những kết hợp với nhau. Và lưu ý chúng tôi không làm nổi bật Hàng Newman trong bảng của người dùng, và chúng tôi không làm nổi bật Hàng Kramer trong bảng các bà mẹ vì không ai tồn tại trong cả sets-- ở cả hai bảng. Thông tin duy nhất mà là phổ biến giữa chúng là Jerry là ở cả hai bảng và gcostanza là ở cả hai bảng. Và như vậy khi chúng ta làm những SQL JOIN, những gì chúng tôi get-- và chúng tôi đang làm thực sự có được điều này. Đó là loại một biến tạm thời. Nó giống như một giả thuyết sáp nhập của hai bảng. Chúng tôi thực sự có được một cái gì đó như thế này, nơi chúng tôi đã sáp nhập với nhau các bảng trên thông tin mà họ có điểm chung. Vì vậy, nhận thấy rằng users.username và cột moms.username, đó là chính xác như nhau. Đó là thông tin mà đã được thống nhất từ ​​người sử dụng bảng và các bảng các bà mẹ. Và vì vậy chúng tôi kết hợp chúng lại với nhau. Chúng ta bỏ đi vì ông Kramer không tồn tại trong bảng người dùng, và chúng tôi bỏ đi Newman, bởi vì ông đã không tồn tại trong bảng các bà mẹ. Vì vậy, đây là việc sáp nhập giả sử dụng lệnh JOIN SELECT. Và sau đó, chúng tôi đang tìm kiếm các Tên đầy đủ của người dùng và mẹ của người dùng, và vì vậy đây là những thông tin mà chúng ta sẽ nhận được từ các truy vấn tổng thể mà chúng ta thực hiện với SELECT. Vì vậy, chúng tôi đã tham gia các bảng với nhau và chúng tôi lấy ra hai cột, và đó là những gì chúng tôi sẽ nhận được. Tuy nhiên, SQL JOIN một loại phức tạp. Bạn có thể sẽ không làm họ quá nhiều, nhưng chỉ có một số ý tưởng của bộ xương mà bạn có thể sử dụng để kết hợp hai bàn với nhau nếu bạn cần. Hai cuối cùng là một chút đơn giản tôi hứa. Vì vậy, việc cập nhật, chúng ta có thể sử dụng CẬP NHẬT thay đổi thông tin trong một bảng. Định dạng chung là một số CẬP NHẬT bảng, SET một số cột để một số giá trị ĐÂU một số vị là hài lòng. Vì vậy, ví dụ, chúng ta có thể muốn để cập nhật bảng người sử dụng và thiết lập mật khẩu để yada yada, nơi có số ID là 10. Vì vậy, trong trường hợp này, chúng tôi cập nhật các bảng người sử dụng. Số ID là 10 cho mà hàng đầu tiên ở đó, và chúng tôi muốn cập nhật mật khẩu để yada yada. Và đó là những gì sẽ xảy ra. Nó khá đơn giản, phải không? Nó chỉ là một rất đơn giản sửa đổi để bàn. DELETE được các hoạt động, chúng tôi sử dụng để xóa thông tin từ một bảng. DELETE FROM table WHERE một số vị là hài lòng. Chúng tôi muốn xóa từ bảng người dùng ví dụ nơi tên người dùng là Newman. Bạn có thể đoán những gì đang xảy đến xảy ra ở đây sau khi chúng tôi thực hiện SQL truy vấn, Newman đã biến mất khỏi bảng. Vì vậy, tất cả các hoạt động này, như tôi đã nói, rất dễ dàng để làm trong phpMyAdmin. Đó là một giao diện rất thân thiện với người sử dụng. Nhưng nó đòi hỏi nỗ lực của nhãn hiệu. Chúng tôi không muốn sử dụng nhãn hiệu nỗ lực. Chúng tôi muốn các chương trình của chúng tôi để làm điều này cho chúng ta, phải không? Vì vậy, chúng ta có thể muốn làm điều này lập trình. Chúng tôi muốn kết hợp SQL và có cái gì khác để làm điều này cho chúng ta. Nhưng những gì chúng tôi đã nhìn thấy rằng cho phép chúng ta phải lập trình làm một cái gì đó? Chúng tôi đã nhìn thấy PHP, phải không? Nó giới thiệu một số năng động vào các chương trình của chúng tôi. Và do đó, may mắn thay, SQL và PHP chơi rất độc đáo với nhau. Có một chức năng trong PHP gọi là truy vấn, mà có thể được sử dụng. Và bạn có thể vượt qua như các tham số hoặc các tham số để truy vấn một truy vấn SQL bạn muốn thực hiện. Và PHP sẽ làm điều đó thay cho bạn. Vì vậy, sau khi bạn đã kết nối cơ sở dữ liệu của bạn với PHP, có hai sơ bạn làm điều này. Có một cái gì đó gọi là MySQLi và một cái gì đó gọi là PDO. Chúng tôi sẽ không đi vào một lớn số lượng chi tiết đó. Trong CS50 chúng tôi sử dụng PDO. Sau khi bạn đã kết nối cơ sở dữ liệu của bạn, bạn sau đó có thể thực hiện các truy vấn cơ sở dữ liệu của bạn bằng cách thông qua các truy vấn như các đối số PHP functions. Và khi bạn làm điều đó, bạn lưu trữ các kết quả thiết lập trong một mảng kết hợp. Và chúng tôi biết làm thế nào để làm việc với mảng kết hợp trong PHP. Vì vậy, tôi có thể nói điều gì đó như this-- $ results-- đây là trong PHP-- bằng truy vấn. Và sau đó bên trong chức năng truy vấn rằng lập luận rằng tôi đang đi qua để truy vấn trông giống như SQL. Và trên thực tế đó là SQL. Đó là chuỗi truy vấn mà tôi sẽ muốn thực hiện trên cơ sở dữ liệu của tôi. Và như vậy trong màu đỏ, đây là PHP. Đây là SQL mà tôi tích hợp vào PHP bằng cách làm nó đối số cho hàm truy vấn. Tôi muốn chọn fullname từ người sử dụng trong đó số ID bằng 10. Và sau đó có lẽ sau khi tôi đã làm điều đó, Tôi có thể nói một cái gì đó như thế này. Tôi muốn in ra Cảm ơn nhắn để đăng nhập. Và tôi muốn nó interpolate-- tôi muốn để nội suy kết quả $ fullname. Và đó là cách tôi làm việc với điều đó mảng kết hợp mà tôi đã trở lại. $ fullname kết quả sẽ về cơ bản kết thúc việc in ra, cảm ơn cho đăng nhập, Jerry Seinfeld. Đó là tên đầy đủ nơi idnum bằng 10. Và vì vậy tất cả tôi đang làm là tôi đang now-- tôi lưu trữ truy vấn của tôi, kết quả truy vấn của tôi và kết quả là một mảng kết hợp, và họ tên là tên của cột tôi đã nhận được cho. Vì vậy, đó là chìa khóa của tôi vào các kết quả mảng kết hợp mà tôi muốn. Vì vậy, cám ơn cho đăng nhập, $ kết quả, fullname sẽ in ra, sẽ dính ngay trong giữa những xoăn niềng răng, Jerry Seinfeld. Và tôi sẽ muốn in ra thông điệp Cảm ơn cho đăng nhập vào Jerry Seinfeld. Bây giờ, chúng ta có lẽ không muốn cứng mã những điều như thế trong, phải không? Chúng tôi có thể muốn làm một cái gì đó như in f, nơi chúng tôi có thể thay thế và có thể thu thập thông tin khác nhau, hoặc có thể có quá trình truy vấn thông tin khác nhau. Và do đó, truy vấn, các chức năng truy vấn có khái niệm về loại thay thế rất giống với in f trăm s và phần trăm c, là dấu hỏi. Và chúng ta có thể sử dụng câu hỏi đánh dấu rất Tương tự in f để biến thay thế. Vì vậy, có lẽ người dùng của bạn đăng nhập trước đó, và bạn đã lưu số ID người dùng của họ trong $ _SESSION của PHP siêu toàn cầu trong ID chính. Vì vậy, có lẽ sau khi họ đăng nhập, bạn thiết lập $ _SESSION ID tương đương với 10, ngoại suy từ các ví dụ chúng ta chỉ thấy một giây trước đó. Và như vậy khi chúng tôi thực sự thực thi này truy vấn kết quả bây giờ, nó sẽ cắm 10, hoặc bất cứ giá trị ID $ _SESSION là. Và do đó cho phép chúng tôi có một chút năng động hơn. Chúng tôi không cứng mã hóa mọi thứ được nữa. Chúng tôi đang lưu thông tin một nơi nào đó và sau đó chúng ta có thể sử dụng thông tin đó một lần nữa để loại khái quát những gì chúng tôi muốn làm, và chỉ cần cắm vào và thay đổi hành vi của các trang của chúng tôi dựa trên những gì số ID của người dùng thực sự là sau khi họ đã đăng nhập. Nó cũng có thể, mặc dù, mà kết quả của bạn thiết lập có thể bao gồm nhiều hàng. Trong trường hợp đó, bạn có một mảng của arrays-- một mảng của các mảng kết hợp. Và bạn chỉ cần để lặp qua nó. Và chúng tôi biết làm thế nào để lặp thông qua một mảng trong PHP, phải không? Vì vậy, đây có lẽ là nhất điều phức tạp, chúng tôi đã nhìn thấy cho đến nay. Nó thực sự tích hợp ba ngôn ngữ với nhau. Ở đây trong màu đỏ, đây là một số mã HTML. Tôi dường như đang starting-- này là một đoạn của một số HTML mà tôi có. Tôi bắt đầu một đoạn mới nói rằng bà mẹ của Seinfeld TV. Và rồi ngay sau đó Tôi bắt đầu một bảng. Và rồi sau đó, tôi có một số PHP, phải không? Tôi có tất cả các mã PHP này trong đó. Tôi dường như đang đi làm cho một truy vấn. Và để thực hiện các truy vấn, tôi sẽ được sử dụng mẹ CHỌN TỪ bà mẹ. Vì vậy, đây là getting-- này là SQL. Vì vậy, các màu xanh là SQL. Các màu đỏ, chúng tôi thấy một giây trước đó là HTML. Và màu xanh lá cây ở đây là PHP. Vì vậy, tôi đang làm cho một truy vấn cơ sở dữ liệu của tôi, tôi chọn tất cả các các bà mẹ trong bảng các bà mẹ. Không chỉ thu hẹp nó xuống để cụ thể hàng, tôi yêu cầu cho tất cả chúng. Sau đó, tôi kiểm tra nếu kết quả là không bình đẳng bằng giả. Đây chỉ là cách tôi kiểm tra loại nếu các kết quả không bằng null, rằng chúng ta sẽ thấy c ví dụ. Về cơ bản này chỉ được kiểm tra để chắc chắc chắn rằng nó thực sự có dữ liệu trở lại. Bởi vì tôi không muốn để bắt đầu in ra dữ liệu nếu tôi không nhận được bất kỳ dữ liệu. Sau đó cho từng kết quả kết quả là cú pháp foreach từ PHP, tất cả tôi đang làm được in ra bà mẹ $ kết quả. Và do đó, tôi sẽ có được một bộ của tất cả các bà mẹ của each-- nó là một mảng của liên kết arrays-- và tôi in ra mỗi một khi hàng riêng của một bảng. Và đó là thực sự khá nhiều tất cả để có nó. Tôi biết có một chút bit xảy ra ở đây trong ví dụ cuối cùng này với mảng arrays-- mảng của các mảng kết hợp. Nhưng nó thực sự chỉ đun sôi xuống trong SQL để thực hiện một truy vấn, thường chọn sau khi chúng tôi đã đã đưa thông tin vào bảng, và sau đó chỉ cần kéo nó ra. Và điều này là chúng ta sẽ kéo nó trong trường hợp đặc biệt này. Chúng tôi sẽ trích xuất tất cả các cá nhân các bà mẹ từ bảng các bà mẹ. Chúng tôi có một tập hợp toàn bộ chúng, và chúng tôi muốn lặp qua và in ra mỗi cái. Vì vậy, một lần nữa, điều này có lẽ ví dụ phức tạp nhất chúng tôi đã nhìn thấy bởi vì chúng tôi đang trộn ba ngôn ngữ khác nhau với nhau, phải không? Một lần nữa, chúng tôi có HTML ở đây màu đỏ, trộn với một số SQL ở đây trong xanh, trộn với một số PHP trong xanh. Nhưng tất cả những đóng độc đáo với nhau, đó là chỉ là vấn đề của phát triển thói quen tốt để bạn có thể nhận được họ làm việc với nhau theo cách mà bạn muốn. Và cách duy nhất để thực sự làm điều đó là thực hành, thực tập, thực hành. Tôi Doug Lloyd, đây là CS50.