1 00:00:00,000 --> 00:00:02,405 >> [MUSIC CHƠI] 2 00:00:02,405 --> 00:00:10,439 3 00:00:10,439 --> 00:00:11,980 DAVID Malan: Được rồi, đây là CS50. 4 00:00:11,980 --> 00:00:13,740 Đây là phần cuối của tuần tám. 5 00:00:13,740 --> 00:00:15,887 Và hôm nay, chúng ta bắt đầu để điền vào một số mảnh 6 00:00:15,887 --> 00:00:17,720 khi nói đến xây dựng những thứ trên web. 7 00:00:17,720 --> 00:00:20,020 Vì vậy, nhớ lại rằng vào thứ Hai chúng tôi dành nhiều thời gian hơn 8 00:00:20,020 --> 00:00:22,530 trên PHP, đó là năng động này ngôn ngữ lập trình 9 00:00:22,530 --> 00:00:26,872 cho phép chúng ta ra, trong số khác điều, HTML và nội dung khác như 10 00:00:26,872 --> 00:00:27,830 rằng chúng ta sẽ muốn xem. 11 00:00:27,830 --> 00:00:30,871 Nhưng chúng tôi đã không thực sự nhìn như thế nào chúng ta sẽ lưu trữ bất kỳ thông tin. 12 00:00:30,871 --> 00:00:34,477 Thật vậy, hầu như bất kỳ của các siêu các trang web thú vị mà bạn đến thăm hôm nay 13 00:00:34,477 --> 00:00:36,560 có một số loại cơ sở dữ liệu trở lại vào cuối, phải không? 14 00:00:36,560 --> 00:00:39,540 Facebook chắc chắn lưu trữ rất nhiều dữ liệu về tất cả chúng ta và tất cả các cửa hàng Gmail 15 00:00:39,540 --> 00:00:40,210 các email của bạn. 16 00:00:40,210 --> 00:00:44,150 >> Và như vậy, nhiều trang web khác không chỉ nội dung tĩnh đó là thông tin. 17 00:00:44,150 --> 00:00:45,640 Nó thực sự năng động trong một số cách. 18 00:00:45,640 --> 00:00:48,480 Bạn cung cấp đầu vào, nó cập nhật các trang cho người khác. 19 00:00:48,480 --> 00:00:50,620 Bạn nhận được tin nhắn, bạn gửi thông điệp, và vv. 20 00:00:50,620 --> 00:00:54,250 Vì vậy, ngày hôm nay, chúng ta nhìn kỹ hơn nền tảng của một dự án 21 00:00:54,250 --> 00:00:57,330 rằng bạn sẽ nhảy vào tiếp theo tuần, CS50 Tài chính, 22 00:00:57,330 --> 00:01:00,509 được thực sự sẽ có bạn xây dựng một cái gì đó không có trong C, nhưng trong PHP. 23 00:01:00,509 --> 00:01:02,550 Một trang web trông giống một chút gì đó như thế này 24 00:01:02,550 --> 00:01:05,810 cho phép mua và bán cổ phiếu có thực sự 25 00:01:05,810 --> 00:01:09,044 đi để vẽ theo thời gian thực dữ liệu cổ phiếu từ Yahoo Finance. 26 00:01:09,044 --> 00:01:11,960 Và như vậy cuối cùng, bạn sẽ có ảo giác cho chính mình và cho người sử dụng 27 00:01:11,960 --> 00:01:14,550 rằng bạn đang thực sự mua và bán cổ phiếu và nhận được thời gian gần thực 28 00:01:14,550 --> 00:01:16,800 cập nhật, quản lý một danh mục đầu tư, tất cả đều 29 00:01:16,800 --> 00:01:20,310 là sẽ yêu cầu có, cuối cùng, một cơ sở dữ liệu của người sử dụng. 30 00:01:20,310 --> 00:01:23,330 >> Vì vậy, nói cách riêng của bạn, đặc biệt là nếu bạn không 31 00:01:23,330 --> 00:01:25,670 siêu quen thuộc với máy tính khoa học hoặc cơ sở dữ liệu, những gì 32 00:01:25,670 --> 00:01:30,790 bạn có biết một cơ sở dữ liệu được ngay bây giờ, trong điều kiện không kỹ thuật? 33 00:01:30,790 --> 00:01:32,300 Nó là gì? 34 00:01:32,300 --> 00:01:36,882 Làm thế nào bạn sẽ mô tả nó cho một người bạn cùng phòng hay một người bạn? 35 00:01:36,882 --> 00:01:40,100 >> Đung [Không nghe thấy] thông tin [không nghe] 36 00:01:40,100 --> 00:01:44,430 >> DAVID Malan: Vì vậy, một danh sách các thông tin, hoặc một store-- một danh sách các thông tin 37 00:01:44,430 --> 00:01:47,160 mà bạn có thể muốn lưu trữ về một cái gì đó, giống như một người sử dụng. 38 00:01:47,160 --> 00:01:50,190 Và những gì người dùng có liên kết với chúng? 39 00:01:50,190 --> 00:01:53,160 Nếu bạn là một người sử dụng trên Facebook hay Gmail, đặc điểm là những gì 40 00:01:53,160 --> 00:01:54,940 rằng tất cả chúng ta phải sử dụng? 41 00:01:54,940 --> 00:01:58,530 Giống như, những gì có thể là một số trong những cột trong bảng tính mà chúng tôi 42 00:01:58,530 --> 00:01:59,390 ám chỉ thời gian qua? 43 00:01:59,390 --> 00:02:01,140 Bởi vì một lần nữa, bạn có thể suy nghĩ của một cơ sở dữ liệu 44 00:02:01,140 --> 00:02:05,810 thực sự là một ưa thích Excel tập tin hoặc Google Bảng tính hoặc Apple tập Numbers. 45 00:02:05,810 --> 00:02:08,280 >> Vì vậy, những gì bạn nghĩ khi bạn nghĩ về một người sử dụng? 46 00:02:08,280 --> 00:02:11,290 Họ có những gì? 47 00:02:11,290 --> 00:02:11,790 Cái gì thế? 48 00:02:11,790 --> 00:02:12,470 >> Đung A tên. 49 00:02:12,470 --> 00:02:13,303 >> DAVID Malan: Một tên. 50 00:02:13,303 --> 00:02:16,840 Vì vậy, nếu tên, như, David Malan sẽ là tên của một số người dùng. 51 00:02:16,840 --> 00:02:17,980 Không một người sử dụng có gì khác? 52 00:02:17,980 --> 00:02:18,770 >> Đung An ID. 53 00:02:18,770 --> 00:02:19,561 >> DAVID Malan: Một ID. 54 00:02:19,561 --> 00:02:23,320 Vì vậy, như một số ID, như Harvard của bạn ID hay Yale ID Net của bạn hoặc tương tự. 55 00:02:23,320 --> 00:02:24,923 Những gì người khác có thể một người dùng có? 56 00:02:24,923 --> 00:02:25,890 >> Đung Password. 57 00:02:25,890 --> 00:02:29,240 >> DAVID Malan: Một mật khẩu, có thể một địa chỉ, có thể một số điện thoại, có thể 58 00:02:29,240 --> 00:02:30,050 một địa chỉ email. 59 00:02:30,050 --> 00:02:32,640 Vì vậy, có chùm và các lĩnh vực này thể loại vượt ra ngoài tầm kiểm soát 60 00:02:32,640 --> 00:02:34,760 một cách nhanh chóng ngay sau khi bạn bắt đầu nhận ra, oh, chúng ta hãy lưu này 61 00:02:34,760 --> 00:02:36,190 và chúng ta hãy lưu này và đó. 62 00:02:36,190 --> 00:02:37,657 >> Nhưng làm thế nào để chúng ta thực sự làm điều đó? 63 00:02:37,657 --> 00:02:39,740 Vì vậy, một lần nữa, các mô hình về tinh thần để có ngày hôm nay như chúng ta 64 00:02:39,740 --> 00:02:42,320 nhảy vào SQL thực tế, Structured Query Language, 65 00:02:42,320 --> 00:02:44,186 là một cơ sở dữ liệu mà trông như thế này. 66 00:02:44,186 --> 00:02:45,310 Nó chỉ hàng và cột. 67 00:02:45,310 --> 00:02:48,309 Và bạn có thể tưởng tượng Google Spreadsheets hoặc bất kỳ số lượng các chương trình khác. 68 00:02:48,309 --> 00:02:52,130 Nhưng quan trọng về MySQL, đó là những gì phần mềm cơ sở dữ liệu, chúng tôi đang sử dụng, 69 00:02:52,130 --> 00:02:54,920 sự tự do công khai available-- sử dụng Facebook 70 00:02:54,920 --> 00:02:59,200 nó và bất kỳ số websites-- khác cơ sở dữ liệu lưu trữ những thứ relationally. 71 00:02:59,200 --> 00:03:01,770 Và một cơ sở dữ liệu quan hệ chỉ có nghĩa là một nghĩa đen 72 00:03:01,770 --> 00:03:03,672 lưu trữ dữ liệu trong các hàng và cột. 73 00:03:03,672 --> 00:03:04,630 Đó là đơn giản như vậy. 74 00:03:04,630 --> 00:03:07,230 >> Vì vậy, ngay cả một cái gì đó giống như Oracle bạn có thể đã nghe nói về chung 75 00:03:07,230 --> 00:03:08,271 là một cơ sở dữ liệu quan hệ. 76 00:03:08,271 --> 00:03:10,929 Và bên dưới mui xe, nó lưu trữ dữ liệu trong các hàng và cột. 77 00:03:10,929 --> 00:03:12,970 Và Oracle tính phí cho bạn một rất nhiều tiền để làm điều đó, 78 00:03:12,970 --> 00:03:15,550 trong khi đó chi phí MySQL bạn không có gì cho nhau. 79 00:03:15,550 --> 00:03:18,790 Vì vậy, SQL sẽ cung cấp cho chúng tôi ít nhất bốn hoạt động. 80 00:03:18,790 --> 00:03:23,190 Khả năng chọn dữ liệu, như đọc dữ liệu, chèn, xóa, và cập nhật dữ liệu. 81 00:03:23,190 --> 00:03:25,525 Nói cách khác, những người đang có thực sự bốn hoạt động chính 82 00:03:25,525 --> 00:03:28,950 mà sẽ cho phép chúng ta thay đổi công cụ trong những hàng và cột. 83 00:03:28,950 --> 00:03:33,250 >> Các công cụ mà chúng ta sẽ sử dụng ngày nay đặc biệt để tìm hiểu SQL và chơi với nó 84 00:03:33,250 --> 00:03:34,627 một lần nữa được gọi là PHP MyAdmin. 85 00:03:34,627 --> 00:03:35,460 Đó là công cụ dựa trên web. 86 00:03:35,460 --> 00:03:38,200 Tổng số ngẫu nhiên mà nó được viết bằng PHP. 87 00:03:38,200 --> 00:03:42,400 Nhưng nó sẽ cung cấp cho chúng ta một đồ họa giao diện người sử dụng để chúng tôi có thể thực sự 88 00:03:42,400 --> 00:03:46,054 tạo ra các hàng và cột và sau đó nói chuyện với họ thông qua mã. 89 00:03:46,054 --> 00:03:47,970 Vì vậy, bây giờ chúng ta bắt đầu những gì tôi nghĩ là thẳng thắn 90 00:03:47,970 --> 00:03:51,000 loại của quá trình thú vị của xây dựng kết thúc trở lại của trang web, 91 00:03:51,000 --> 00:03:54,580 những phần mà người dùng không nhìn thấy, nhưng chắc chắn làm những chăm sóc về, 92 00:03:54,580 --> 00:03:56,170 bởi vì đó là thay của dữ liệu đi. 93 00:03:56,170 --> 00:03:59,570 Vì vậy, tương tự như C và một chút ít như PHP, 94 00:03:59,570 --> 00:04:04,954 SQL, hoặc một cơ sở dữ liệu hỗ trợ SQL, có loại ít nhất là những dữ liệu 95 00:04:04,954 --> 00:04:05,870 và chùm của người khác. 96 00:04:05,870 --> 00:04:08,107 CHAR, VARCHAR, INT, bigint, Thập phân, và DATETIME. 97 00:04:08,107 --> 00:04:09,940 Và có một toàn bộ loạt các tính năng khác, 98 00:04:09,940 --> 00:04:11,940 nhưng chúng ta hãy làm điều này bằng một ví dụ thực tế. 99 00:04:11,940 --> 00:04:16,450 >> Tôi sẽ đi vào CS50 IDE nơi, trước, tôi đã đăng nhập 100 00:04:16,450 --> 00:04:19,372 và tôi cũng đã đến thăm một URL cho công cụ này được gọi là PHP MyAdmin. 101 00:04:19,372 --> 00:04:22,580 Và trong vấn đề thiết lập bảy, chúng tôi sẽ cho bạn biết chính xác làm thế nào để có được giao diện này 102 00:04:22,580 --> 00:04:23,200 cũng. 103 00:04:23,200 --> 00:04:25,640 Ở góc trên bên tay trái, nhận thấy nó nói giảng. 104 00:04:25,640 --> 00:04:27,610 Và điều đó chỉ có nghĩa là trước, tôi tạo ra 105 00:04:27,610 --> 00:04:31,360 một cơ sở dữ liệu được gọi là bài giảng rỗng mà không có bảng tính trong nó được. 106 00:04:31,360 --> 00:04:32,600 Không có các hàng và cột. 107 00:04:32,600 --> 00:04:34,308 Bởi vì đầu tiên điều chúng tôi đang đi làm 108 00:04:34,308 --> 00:04:37,100 được bắt đầu để tạo ra một bảng đó là sẽ lưu trữ người dùng của chúng tôi. 109 00:04:37,100 --> 00:04:39,100 >> Vì vậy, theo nghĩa đen hơn đây về bên phải, tôi 110 00:04:39,100 --> 00:04:42,070 sẽ nói cho các cơ sở dữ liệu Tôi muốn có một bảng gọi là Người dùng. 111 00:04:42,070 --> 00:04:44,845 Vì vậy, điều này cũng giống như các tập tin mà tôi muốn để lưu trữ tất cả các dữ liệu của tôi trong. 112 00:04:44,845 --> 00:04:45,720 Và có bao nhiêu cột? 113 00:04:45,720 --> 00:04:47,740 Vâng, chúng ta hãy giữ cho nó đơn giản cho bây giờ. 114 00:04:47,740 --> 00:04:51,855 Tôi chỉ muốn lưu trữ như một tên người dùng và tên cho một người sử dụng. 115 00:04:51,855 --> 00:04:53,020 Chúng tôi sẽ bắt đầu nhỏ. 116 00:04:53,020 --> 00:04:55,370 Vì vậy, tôi muốn tổng hai cột. 117 00:04:55,370 --> 00:04:57,360 Và tôi sẽ đi trước và bấm Go. 118 00:04:57,360 --> 00:04:59,210 Và sau đó, đối với các cột, những gì tôi sẽ 119 00:04:59,210 --> 00:05:04,576 để do-- nếu internet này cooperates-- tất cả các quyền, 120 00:05:04,576 --> 00:05:05,950 vì vậy chúng tôi sẽ cố gắng một lần nữa. 121 00:05:05,950 --> 00:05:09,180 Tôi sẽ tạo ra một bảng gọi là Người sử dụng với hai cột, nhấn Go, OK. 122 00:05:09,180 --> 00:05:10,520 Bây giờ chúng tôi đã có nó thực sự nhanh chóng. 123 00:05:10,520 --> 00:05:12,065 Cảm ơn bạn, thực hiện rất tốt. 124 00:05:12,065 --> 00:05:14,440 Được rồi, vì vậy những gì chúng ta muốn các cột được gọi là? 125 00:05:14,440 --> 00:05:16,080 >> Vì vậy, một trong những sẽ được gọi là Tên đăng nhập. 126 00:05:16,080 --> 00:05:19,480 Vì vậy, tất cả tôi thấy here-- và giao diện thẳng thắn được một chút xấu xí cuối cùng, 127 00:05:19,480 --> 00:05:21,270 một khi bạn bắt đầu gõ vào tất cả các dữ liệu này. 128 00:05:21,270 --> 00:05:27,450 Nhưng mà sắp xếp của những gì tốt đẹp là nghịch lý, tôi là tạo cột, 129 00:05:27,450 --> 00:05:29,977 nhưng công cụ này đã ngu ngốc đặt chúng ra thành hàng 130 00:05:29,977 --> 00:05:31,560 vì vậy mà tôi có thể cấu hình các cột. 131 00:05:31,560 --> 00:05:33,550 Vì vậy, có hai khoảng trống đó dưới danh. 132 00:05:33,550 --> 00:05:36,180 Và một trong những lĩnh vực tôi muốn gọi Username, 133 00:05:36,180 --> 00:05:38,000 và các lĩnh vực khác mà tôi muốn gọi tên. 134 00:05:38,000 --> 00:05:40,340 >> Và bây giờ tôi phải chọn kiểu dữ liệu cho những điều này. 135 00:05:40,340 --> 00:05:42,330 Vì vậy, trong khi trong Excel và Google Spreadsheets, 136 00:05:42,330 --> 00:05:45,531 nếu bạn muốn có một cột, bạn có nghĩa chỉ cần gõ Tên hoặc Tên đăng nhập, nhấn Enter. 137 00:05:45,531 --> 00:05:48,030 Có thể bạn làm cho nó đậm chỉ cho rõ ràng, nhưng đó là nó. 138 00:05:48,030 --> 00:05:50,140 Bạn không chỉ định loại của các cột. 139 00:05:50,140 --> 00:05:53,790 Bây giờ trong Google Spreadsheets hoặc Excel, bạn có thể xác định cách dữ liệu được trả lại. 140 00:05:53,790 --> 00:05:58,120 Bạn có thể vào menu Format, và bạn có thể xác định có dấu hiệu đồng đô la như thế này, 141 00:05:58,120 --> 00:05:59,900 hiển thị này như một giá trị dấu chấm động. 142 00:05:59,900 --> 00:06:01,990 >> Vì vậy, đó là tinh thần tương tự rằng những gì chúng tôi sắp làm, 143 00:06:01,990 --> 00:06:04,740 nhưng điều này thực sự sẽ buộc dữ liệu là một loại nhất định. 144 00:06:04,740 --> 00:06:07,750 Bây giờ, mặc dù lúc nãy tôi cho biết chỉ có một vài kiểu dữ liệu, 145 00:06:07,750 --> 00:06:11,120 có thực sự là một toàn bộ rất nhiều, và họ 146 00:06:11,120 --> 00:06:12,910 ở mức độ đặc hiệu khác nhau. 147 00:06:12,910 --> 00:06:14,970 Và như một sang một bên, bạn thậm chí có thể làm những điều ưa thích 148 00:06:14,970 --> 00:06:17,520 như hình học lưu trữ bên trong một cơ sở dữ liệu. 149 00:06:17,520 --> 00:06:19,250 Bạn có thể lưu trữ những thứ như tọa độ GPS 150 00:06:19,250 --> 00:06:22,420 và thực sự tìm thấy, toán học, điểm được gần những người khác. 151 00:06:22,420 --> 00:06:24,128 Nhưng chúng ta sẽ giữ này siêu đơn giản 152 00:06:24,128 --> 00:06:26,800 và đi lên đến đây, tất cả các cái gọi là kiểu chuỗi. 153 00:06:26,800 --> 00:06:29,240 >> Vì vậy, đây là một danh sách của một bó toàn bộ các tùy chọn. 154 00:06:29,240 --> 00:06:32,740 CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. 155 00:06:32,740 --> 00:06:34,110 Và đó là loại áp đảo. 156 00:06:34,110 --> 00:06:37,610 Và thật không may, phần nào nghịch lý đến C, 157 00:06:37,610 --> 00:06:40,120 một CHAR là không thực sự là một CHAR. 158 00:06:40,120 --> 00:06:44,170 Nếu bạn chỉ định trong cơ sở dữ liệu rằng kiểu dữ liệu của bạn là CHAR, 159 00:06:44,170 --> 00:06:47,390 điều đó có nghĩa rằng, vâng, đó là một CHAR, nhưng nó là một hoặc nhiều ký tự. 160 00:06:47,390 --> 00:06:49,630 Và bạn phải xác định có bao nhiêu ký tự bạn muốn. 161 00:06:49,630 --> 00:06:51,636 Vì vậy, những gì là một điển hình chiều dài cho một tên người dùng? 162 00:06:51,636 --> 00:06:52,760 Có giới hạn thông thường? 163 00:06:52,760 --> 00:06:53,920 >> Đung [Không nghe thấy] 164 00:06:53,920 --> 00:06:55,050 >> DAVID Malan: 16 có thể? 165 00:06:55,050 --> 00:06:55,990 Một cái gì đó như thế. 166 00:06:55,990 --> 00:06:57,948 Bạn biết đấy, trở lại trong ngày, nó được sử dụng để được tám. 167 00:06:57,948 --> 00:07:00,289 Đôi khi đó là 16, đôi khi nó thậm chí còn nhiều hơn thế. 168 00:07:00,289 --> 00:07:02,080 Và như vậy, điều này không có nghĩa là cung cấp cho tôi một CHAR. 169 00:07:02,080 --> 00:07:04,730 Điều này có nghĩa là tôi phải xác định chiều dài của lĩnh vực này, 170 00:07:04,730 --> 00:07:07,402 và bây giờ tôi có thể nói một cái gì đó giống như 16. 171 00:07:07,402 --> 00:07:08,610 Và có một thương mại giảm ở đây. 172 00:07:08,610 --> 00:07:11,360 Vì vậy, chúng ta sẽ thấy trong một thời điểm rằng điều này có nghĩa là một, 173 00:07:11,360 --> 00:07:14,620 mỗi tên người dùng có được 16 ký tự. 174 00:07:14,620 --> 00:07:18,720 Nhưng chờ một phút, M-A-L-A-N. Nếu đó là tên người dùng của tôi và tôi chỉ sử dụng năm, 175 00:07:18,720 --> 00:07:23,070 những gì bạn sẽ đề xuất rằng các cơ sở dữ liệu để làm cho 11 nhân vật khác mà 176 00:07:23,070 --> 00:07:24,471 Tôi đã dành không gian cho? 177 00:07:24,471 --> 00:07:25,220 Bạn sẽ làm gì? 178 00:07:25,220 --> 00:07:26,480 >> Đung [Không nghe thấy] 179 00:07:26,480 --> 00:07:27,160 >> DAVID Malan: Vâng, chỉ cần làm cho họ tất cả null. 180 00:07:27,160 --> 00:07:28,290 Làm cho họ không gian. 181 00:07:28,290 --> 00:07:30,816 Nhưng có lẽ null, do đó, một rất nhiều số không dấu gạch chéo ngược. 182 00:07:30,816 --> 00:07:33,190 Vì vậy, một mặt, chúng tôi đã bây giờ làm chắc chắn rằng tên người dùng của tôi 183 00:07:33,190 --> 00:07:34,780 có thể không nhiều hơn 16 ký tự. 184 00:07:34,780 --> 00:07:37,590 Và mặt trái của việc đó là rằng nếu tôi có một cái tên rất dài 185 00:07:37,590 --> 00:07:39,940 hoặc muốn có một thực sự lâu dài username như một số bạn 186 00:07:39,940 --> 00:07:44,840 chàng trai có thể có trong trường đại học mà hay tại Yale.edu, bạn không thể có một. 187 00:07:44,840 --> 00:07:47,177 Và do đó, trong thực tế, nếu bạn đã bao giờ đăng ký cho một trang web 188 00:07:47,177 --> 00:07:49,385 và bạn nhận được mắng nói mật khẩu của bạn quá dài 189 00:07:49,385 --> 00:07:52,710 hoặc tên người dùng của bạn quá dài, nó đơn giản chỉ vì một lập trình viên, khi 190 00:07:52,710 --> 00:07:55,500 cấu hình cơ sở dữ liệu của mình, quyết định rằng lĩnh vực này sẽ 191 00:07:55,500 --> 00:07:57,150 không dài hơn chiều dài này. 192 00:07:57,150 --> 00:08:00,580 >> Được rồi, vì vậy những gì nếu chúng tôi tiến hành để đặt tên? 193 00:08:00,580 --> 00:08:05,240 Bao lâu nên một tên điển hình của con người được? 194 00:08:05,240 --> 00:08:07,492 Có bao nhiêu ký tự, 16? 195 00:08:07,492 --> 00:08:09,450 Tôi đoán chúng ta có thể tìm một người nào đó trong căn phòng này 196 00:08:09,450 --> 00:08:13,210 nơi của cộng đầu tiên của mình cuối cùng tên dài hơn 16 ký tự. 197 00:08:13,210 --> 00:08:14,850 Vì vậy, những gì là tốt hơn so với đó, 17? 198 00:08:14,850 --> 00:08:17,040 18? 199 00:08:17,040 --> 00:08:18,830 25? 200 00:08:18,830 --> 00:08:20,350 Lớn hơn? 201 00:08:20,350 --> 00:08:20,980 30? 202 00:08:20,980 --> 00:08:21,855 >> Đung [Không nghe thấy] 203 00:08:21,855 --> 00:08:23,700 DAVID Malan: 5.000, lạy Chúa. 204 00:08:23,700 --> 00:08:26,309 Vì vậy, có lẽ đó là một phong nha trên ràng buộc, chúng ta cũng sẽ nói. 205 00:08:26,309 --> 00:08:28,350 Và ở đây chúng tôi có loại để thực hiện một cuộc gọi phán quyết. 206 00:08:28,350 --> 00:08:30,400 Giống như, không có câu trả lời đúng ở đây. 207 00:08:30,400 --> 00:08:32,740 Infinite là không hoàn toàn có thể, bởi vì chúng ta cuối cùng 208 00:08:32,740 --> 00:08:34,781 sẽ have-- chúng tôi sẽ chạy ra khỏi bộ nhớ. 209 00:08:34,781 --> 00:08:36,909 Vì vậy, chúng ta phải thực hiện một cuộc gọi phán quyết tại một số điểm. 210 00:08:36,909 --> 00:08:41,010 >> Rất phổ biến sẽ được, ví dụ, để use-- và hãy để tôi chỉ định CHAR đây 211 00:08:41,010 --> 00:08:46,050 như before-- 255 là nghĩa đen giới hạn trên các phần mềm cơ sở dữ liệu này 212 00:08:46,050 --> 00:08:46,700 nhiều năm về trước. 213 00:08:46,700 --> 00:08:48,575 Và như vậy, rất nhiều người chỉ nói tốt. 214 00:08:48,575 --> 00:08:49,420 255 là giới hạn. 215 00:08:49,420 --> 00:08:50,620 Hãy chỉ sử dụng tối đa. 216 00:08:50,620 --> 00:08:51,870 Và điều này là khá vô lý. 217 00:08:51,870 --> 00:08:55,060 Giống như, nếu bạn gõ một ai đó đặt tên cho 200 ký tự cộng, 218 00:08:55,060 --> 00:08:56,140 rằng một chút vô lý. 219 00:08:56,140 --> 00:08:59,624 >> Nhưng, hãy nhớ rằng không phải là ASCII hệ thống chỉ dành cho các nhân vật. 220 00:08:59,624 --> 00:09:01,540 Và như vậy, đặc biệt là trong một rất nhiều ngôn ngữ châu Á 221 00:09:01,540 --> 00:09:04,248 nơi có nhân vật chúng ta không thể thể hiện trên bàn phím như Mỹ của tôi 222 00:09:04,248 --> 00:09:08,209 bàn phím, một số nhân vật thực sự mất 16 bit thay vì tám bit. 223 00:09:08,209 --> 00:09:10,250 Và như vậy, điều này thực sự không có gì là không hợp lý 224 00:09:10,250 --> 00:09:12,250 rằng chúng ta cần nhiều hơn không gian, nếu chúng ta muốn để phù hợp với 225 00:09:12,250 --> 00:09:16,252 nhân vật lớn hơn rất Mỹ những trung tâm chúng tôi đã có xu hướng để thảo luận. 226 00:09:16,252 --> 00:09:17,460 Vì vậy, chúng tôi cần một số ràng buộc trên. 227 00:09:17,460 --> 00:09:21,470 Tôi không biết những gì tốt nhất là, nhưng 255 nói chung là một trong những phổ biến. 228 00:09:21,470 --> 00:09:22,700 25 cảm thấy thấp. 229 00:09:22,700 --> 00:09:23,857 16, 32 cảm thấy thấp. 230 00:09:23,857 --> 00:09:25,690 Tôi sẽ phạm sai lầm ở một bên của một cái gì đó cao hơn. 231 00:09:25,690 --> 00:09:27,330 Nhưng có một thương mại giảm, như mọi khi. 232 00:09:27,330 --> 00:09:31,902 Là gì, có lẽ, rõ ràng thương mại giảm của 255 ký tự đặt 233 00:09:31,902 --> 00:09:33,360 cho tên của tất cả mọi người trong cơ sở dữ liệu của tôi? 234 00:09:33,360 --> 00:09:34,230 >> Đung [Không nghe thấy] 235 00:09:34,230 --> 00:09:34,510 >> DAVID Malan: Đó là gì? 236 00:09:34,510 --> 00:09:35,430 >> Đung [Không nghe thấy] 237 00:09:35,430 --> 00:09:37,138 >> DAVID Malan: Đó là một nhiều bộ nhớ, phải không? 238 00:09:37,138 --> 00:09:42,280 M-A-L-A-N. Tôi vừa lãng phí 250 nhân vật chỉ để lưu trữ tên của tôi 239 00:09:42,280 --> 00:09:46,000 phòng thủ, chỉ trong trường hợp một người nào đó trong lớp có một tên thực sự dài. 240 00:09:46,000 --> 00:09:47,940 Đó dường như là một sự đánh đổi không đáng có. 241 00:09:47,940 --> 00:09:52,040 >> Vì vậy, nó chỉ ra rằng SQL, ngôn ngữ cơ sở dữ liệu này, 242 00:09:52,040 --> 00:09:55,480 một cái gì đó thực sự hỗ trợ gọi là VARCHAR, hay biến CHAR. 243 00:09:55,480 --> 00:09:59,390 Và đây là loại tốt đẹp ở chỗ này cho phép bạn chỉ định không phải là một cố định 244 00:09:59,390 --> 00:10:01,900 chiều rộng, nhưng đúng hơn, có chiều rộng biến. 245 00:10:01,900 --> 00:10:05,060 Và đặc biệt hơn, một chiều rộng tối đa của lĩnh vực này. 246 00:10:05,060 --> 00:10:08,901 Vì vậy, điều này có nghĩa là một tên có thể không được vượt quá 250 ký tự, 247 00:10:08,901 --> 00:10:10,150 nhưng chắc chắn nó có thể ít hơn. 248 00:10:10,150 --> 00:10:11,733 Và cơ sở dữ liệu sẽ được thông minh. 249 00:10:11,733 --> 00:10:14,860 Nếu bạn đặt vào M-A-L-A-N, nó chỉ sẽ sử dụng năm, 250 00:10:14,860 --> 00:10:18,120 có lẽ sáu byte cho như một ký tự null dấu, 251 00:10:18,120 --> 00:10:23,330 và không dành thêm 249 hoặc 250 byte không cần thiết. 252 00:10:23,330 --> 00:10:27,380 >> Vì vậy, điều này có vẻ như tôi nên đã bắt đầu với câu chuyện này. 253 00:10:27,380 --> 00:10:29,140 Nhưng luôn luôn có một sự cân bằng. 254 00:10:29,140 --> 00:10:33,024 Vì vậy, một mặt, một tên người dùng Tôi đã quy định phải được mã hóa cứng ở tuổi 16, 255 00:10:33,024 --> 00:10:34,940 và có lẽ đó là không cuộc gọi phải, có thể nó 256 00:10:34,940 --> 00:10:40,040 là, nhưng tại sao không sử dụng Varchars cho tất cả mọi thứ? 257 00:10:40,040 --> 00:10:42,020 >> Nó tồn tại vì một lý do. 258 00:10:42,020 --> 00:10:46,200 Tại sao không sử dụng varchars cho mọi lĩnh vực có chiều dài bạn không biết trước 259 00:10:46,200 --> 00:10:48,180 nếu nó có vẻ là một điều tuyệt vời, đúng không? 260 00:10:48,180 --> 00:10:50,482 Chỉ sử dụng không gian nhiều như bạn cần lên đến giới hạn này? 261 00:10:50,482 --> 00:10:51,271 >> Đung chậm. 262 00:10:51,271 --> 00:10:52,146 DAVID Malan: Speller? 263 00:10:52,146 --> 00:10:53,120 Đung Làm cho nó chậm hơn? 264 00:10:53,120 --> 00:10:53,970 DAVID Malan: Oh, nó chậm hơn. 265 00:10:53,970 --> 00:10:55,720 Tốt, đó là hầu như luôn luôn câu trả lời, thẳng thắn. 266 00:10:55,720 --> 00:10:56,520 Giống như, sự cân bằng là gì? 267 00:10:56,520 --> 00:10:58,570 Nó hoặc tốn nhiều không gian hơn hoặc nó tốn nhiều thời gian hơn. 268 00:10:58,570 --> 00:11:00,111 Vì vậy, trong trường hợp này, nó có thể chậm hơn. 269 00:11:00,111 --> 00:11:00,920 Tại sao? 270 00:11:00,920 --> 00:11:05,830 >> Đung [Không nghe thấy] xác định [không nghe được]. 271 00:11:05,830 --> 00:11:06,640 >> DAVID Malan: Tốt. 272 00:11:06,640 --> 00:11:09,670 Vì vậy, bạn có thể nhớ lại từ thậm chí PSED5, chơi với cách tiếp cận của bạn 273 00:11:09,670 --> 00:11:12,750 vào từ điển, nếu bạn phải cấp phát bộ nhớ động hoặc giữ 274 00:11:12,750 --> 00:11:14,630 phát triển một bộ đệm, mà thực sự có thể được làm chậm. 275 00:11:14,630 --> 00:11:16,963 Nếu bạn phải gọi malloc bên dưới mui xe và có thể 276 00:11:16,963 --> 00:11:19,610 đó là những gì MySQL làm, để chắc chắn rằng có thể là trường hợp. 277 00:11:19,610 --> 00:11:22,430 Và nếu bạn nghĩ rằng cách trở lại PSet-- hoặc thậm chí 278 00:11:22,430 --> 00:11:26,340 tuần hai, khi chúng tôi đã làm những việc như tìm kiếm nhị phân hoặc thậm chí tìm kiếm tuyến tính, 279 00:11:26,340 --> 00:11:30,690 một trong những điều tốt đẹp về mọi lời trong một cơ sở dữ liệu hoặc từng chữ trong một cột 280 00:11:30,690 --> 00:11:33,690 được chính xác chiều dài tương tự, thậm chí nếu một bó toàn bộ những nhân vật 281 00:11:33,690 --> 00:11:37,390 đang trống, là bạn có thể sử dụng truy cập ngẫu nhiên trên dữ liệu của bạn, phải không? 282 00:11:37,390 --> 00:11:40,310 >> Nếu bạn biết rằng mỗi từ 16 ký tự đi, 283 00:11:40,310 --> 00:11:46,460 bạn có thể sử dụng con trỏ số học, do đó, để nói chuyện, và đi với chúng ta 16, 32, 48, 64, 284 00:11:46,460 --> 00:11:49,589 và bạn chỉ có thể nhảy ngay lập tức sử dụng số học 285 00:11:49,589 --> 00:11:51,130 để bất kỳ từ nào trong cơ sở dữ liệu của bạn. 286 00:11:51,130 --> 00:11:54,280 Trong khi đó, nếu đó là một VARCHAR, điều gì làm bạn thay vì phải làm gì? 287 00:11:54,280 --> 00:11:55,960 >> [PHONE Ringing] 288 00:11:55,960 --> 00:11:58,680 >> Nếu đó là một VARCHAR, bạn không thể sử dụng truy cập ngẫu nhiên. 289 00:11:58,680 --> 00:12:01,341 Những gì bạn có để tìm kiếm hay làm gì? 290 00:12:01,341 --> 00:12:01,840 Yeah? 291 00:12:01,840 --> 00:12:03,240 >> Đung [Không nghe thấy] 292 00:12:03,240 --> 00:12:04,310 >> DAVID Malan: Nhìn thông qua các dấu vết whole-- 293 00:12:04,310 --> 00:12:06,518 thông qua toàn bộ danh sách tìm kiếm những gì, có khả năng nhất? 294 00:12:06,518 --> 00:12:08,356 Những loại giá trị đặc biệt? 295 00:12:08,356 --> 00:12:09,230 Đung [Không nghe thấy] 296 00:12:09,230 --> 00:12:11,105 DAVID Malan: Nhìn cho Terminators rỗng 297 00:12:11,105 --> 00:12:13,637 mà phân chia ranh giới phân tách các từ. 298 00:12:13,637 --> 00:12:15,720 Vì vậy, một lần nữa, một sự cân bằng, và không có câu trả lời đúng. 299 00:12:15,720 --> 00:12:18,380 Nhưng đây là nơi, đặc biệt là khi người dùng của bạn có được nhiều 300 00:12:18,380 --> 00:12:21,700 và tải của bạn trên máy chủ của bạn, Số người sử dụng nó được cao, 301 00:12:21,700 --> 00:12:23,650 thực tế đây là quyết định không tầm thường. 302 00:12:23,650 --> 00:12:26,640 Vì vậy, chúng ta có thể để lại những vì điều này, nhưng hãy di chuyển xuống trên bên phải 303 00:12:26,640 --> 00:12:27,332 chỗ này. 304 00:12:27,332 --> 00:12:30,290 Bây giờ, có một vài cột nơi mà chúng tôi phải thực hiện một cuộc gọi phán quyết. 305 00:12:30,290 --> 00:12:35,170 Liệu nó có ý nghĩa để cho phép một người sử dụng của tên, tên đăng nhập của người dùng hoặc một người sử dụng của 306 00:12:35,170 --> 00:12:36,370 name, là null? 307 00:12:36,370 --> 00:12:37,610 Đó là, chỉ trống. 308 00:12:37,610 --> 00:12:40,360 Cảm thấy một chút vô nghĩa, vì vậy tôi không đi kiểm tra những hộp. 309 00:12:40,360 --> 00:12:42,670 Nhưng hóa ra trong một cơ sở dữ liệu, bạn có thể nói, 310 00:12:42,670 --> 00:12:44,620 ai đó có thể tùy chọn có giá trị này. 311 00:12:44,620 --> 00:12:47,180 Cột này không có để thực sự có mặt ở đó. 312 00:12:47,180 --> 00:12:48,570 >> Bây giờ, có thả này down menu. 313 00:12:48,570 --> 00:12:50,810 Và nhận thấy tôi vẫn còn trong hàng đầu tiên ở đó, 314 00:12:50,810 --> 00:12:52,520 vì vậy tôi đang nói về tên người dùng hiện nay. 315 00:12:52,520 --> 00:12:56,290 Và nó chỉ ra rằng một cơ sở dữ liệu, không giống như chỉ một bảng tính đơn giản, 316 00:12:56,290 --> 00:12:58,520 có tính năng mạnh mẽ được gọi là chỉ số. 317 00:12:58,520 --> 00:13:02,600 Và một chỉ là một cách để kể cơ sở dữ liệu trước rằng tôi là con người 318 00:13:02,600 --> 00:13:03,900 là thông minh hơn bạn. 319 00:13:03,900 --> 00:13:10,430 >> Tôi biết những gì loại của các truy vấn, chọn hoặc chèn hoặc xóa hoặc cập nhật, 320 00:13:10,430 --> 00:13:13,182 rằng mã của tôi sẽ kết thúc lên làm trên cơ sở dữ liệu này. 321 00:13:13,182 --> 00:13:14,390 Tôi muốn đọc rất nhiều dữ liệu. 322 00:13:14,390 --> 00:13:15,681 Tôi muốn chèn rất nhiều dữ liệu. 323 00:13:15,681 --> 00:13:17,530 Tôi muốn liên tục xóa rất nhiều dữ liệu. 324 00:13:17,530 --> 00:13:21,520 Nếu tôi biết rằng tôi sẽ được truy cập vào một lĩnh vực như Username rất nhiều, 325 00:13:21,520 --> 00:13:24,770 Tôi đánh phủ đầu có thể nói cho cơ sở dữ liệu, tôi biết nhiều hơn bạn, 326 00:13:24,770 --> 00:13:29,220 và tôi muốn nghị định bạn nên chỉ số lĩnh vực này. 327 00:13:29,220 --> 00:13:33,200 Trường hợp lập chỉ mục một trường hoặc một cột có nghĩa là các cơ sở dữ liệu trước 328 00:13:33,200 --> 00:13:37,040 nên vay mượn một số ý tưởng từ, như, tuần thứ tư và năm và sáu từ CS50 329 00:13:37,040 --> 00:13:39,240 và thực sự xây dựng một cái gì đó giống như một tìm kiếm nhị phân 330 00:13:39,240 --> 00:13:41,560 cây hoặc một cái gì đó thường gọi là cây B 331 00:13:41,560 --> 00:13:43,410 rằng bạn sẽ tìm hiểu trong một lớp học như CS124 332 00:13:43,410 --> 00:13:46,710 tại Đại học Harvard, một lớp các thuật toán, hoặc bất kỳ số nơi khác. 333 00:13:46,710 --> 00:13:49,570 >> Các cơ sở dữ liệu và thông minh những người thực hiện nó 334 00:13:49,570 --> 00:13:53,880 sẽ tìm ra cách để lưu trữ mà bảng thông tin 335 00:13:53,880 --> 00:13:57,061 trong bộ nhớ để tìm kiếm và các hoạt động khác là siêu nhanh. 336 00:13:57,061 --> 00:13:58,060 Bạn không cần phải làm điều đó. 337 00:13:58,060 --> 00:14:00,640 Bạn không cần phải thực hiện tìm kiếm tuyến tính hoặc tìm kiếm nhị phân 338 00:14:00,640 --> 00:14:03,300 hoặc hợp nhất phân loại hoặc lựa chọn sắp xếp, bất kỳ đó. 339 00:14:03,300 --> 00:14:06,590 Các cơ sở dữ liệu nào đó cho bạn nếu bạn nói nó đánh phủ đầu để chỉ số lĩnh vực này. 340 00:14:06,590 --> 00:14:09,100 >> Và bạn có thể nhìn thấy quá, có một số đặc điểm khác 341 00:14:09,100 --> 00:14:11,010 chúng ta có thể nói với các cơ sở dữ liệu để thực thi. 342 00:14:11,010 --> 00:14:16,431 Những gì nó có thể có nghĩa là nếu tôi chọn Unique từ trình đơn này, chỉ bằng trực giác? 343 00:14:16,431 --> 00:14:16,930 Yeah? 344 00:14:16,930 --> 00:14:17,889 >> Đung [Không nghe thấy] 345 00:14:17,889 --> 00:14:19,930 DAVID Malan: Yeah, Tên người dùng có phải là duy nhất. 346 00:14:19,930 --> 00:14:23,330 Đây có phải là một điều tốt hay điều xấu cho một cơ sở dữ liệu, cho một trang web với người sử dụng? 347 00:14:23,330 --> 00:14:24,965 Tên người dùng phải là duy nhất? 348 00:14:24,965 --> 00:14:25,880 Ừ, có lẽ. 349 00:14:25,880 --> 00:14:27,800 Nếu đó là những gì lĩnh vực chúng tôi sử dụng để đăng nhập, 350 00:14:27,800 --> 00:14:31,867 bạn không thực sự muốn mọi người có những cảm nhận tương tự hoặc tên người dùng. 351 00:14:31,867 --> 00:14:33,700 Vì vậy, chúng ta có thể có các cơ sở dữ liệu thực thi mà như vậy 352 00:14:33,700 --> 00:14:37,880 mà bây giờ trong mã PHP của tôi hoặc bất kỳ ngôn ngữ, Tôi không phải, ví dụ, kiểm tra 353 00:14:37,880 --> 00:14:41,490 nhất thiết không tên người dùng này tồn tại trước khi tôi để cho một người nào đó đăng ký? 354 00:14:41,490 --> 00:14:46,690 Các cơ sở dữ liệu sẽ không để cho hai người được đặt tên David hoặc Malans đăng ký trong trường hợp này. 355 00:14:46,690 --> 00:14:50,030 >> Và như một sang một bên, mặc dù điều này menu chỉ cho phép bạn chọn một, 356 00:14:50,030 --> 00:14:54,550 một chỉ số duy nhất là một trong đó là lập chỉ mục cho hiệu suất siêu nhanh, 357 00:14:54,550 --> 00:14:56,100 nhưng nó cũng thực thi độc đáo. 358 00:14:56,100 --> 00:14:58,850 Và chúng tôi sẽ trở lại với những gì hai người kia có nghĩa là chỉ trong một khoảnh khắc. 359 00:14:58,850 --> 00:15:00,930 Trong khi đó, nếu tôi đi đến hàng thứ hai của tôi, mà 360 00:15:00,930 --> 00:15:06,230 là tên của người sử dụng, tôi nên xác định rằng tên nên là duy nhất? 361 00:15:06,230 --> 00:15:09,550 Không, bởi vì bạn có thể chắc chắn have-- không có hai David 362 00:15:09,550 --> 00:15:11,050 Malans trong căn phòng này, có khả năng nhất. 363 00:15:11,050 --> 00:15:14,290 Nhưng nếu chúng ta chọn một tên khác nhau, chúng tôi chắc chắn có thể có va chạm. 364 00:15:14,290 --> 00:15:16,130 >> Hãy suy nghĩ lại để băm bảng và các loại tương tự. 365 00:15:16,130 --> 00:15:18,604 Vì vậy, chúng tôi chắc chắn không muốn để làm cho lĩnh vực tên duy nhất. 366 00:15:18,604 --> 00:15:21,270 Vì vậy, chúng tôi chỉ đi để lại đó là dấu gạch ngang, dấu gạch ngang, dấu gạch ngang, không có gì. 367 00:15:21,270 --> 00:15:22,660 Và tôi sẽ phải rời khỏi mọi thứ khác một mình. 368 00:15:22,660 --> 00:15:25,035 Thật vậy, hầu hết các lĩnh vực chúng ta sẽ không phải quan tâm. 369 00:15:25,035 --> 00:15:27,830 Và khi tôi đã sẵn sàng để cứu này, nếu internet hợp tác, 370 00:15:27,830 --> 00:15:35,032 Tôi bấm Save, và rất, rất, rất từ từ hiện cơ sở dữ liệu được lưu. 371 00:15:35,032 --> 00:15:37,240 Và bây giờ tôi trở lại này giao diện, trong đó thừa nhận, 372 00:15:37,240 --> 00:15:38,680 là áp đảo ở cái nhìn đầu tiên. 373 00:15:38,680 --> 00:15:42,450 Nhưng tất cả tôi sẽ làm là nhấp chuột vào mục Users từ ở đầu bên trái. 374 00:15:42,450 --> 00:15:47,630 Tôi sẽ đi lên đây, nhấp Người sử dụng, và theo mặc định, nó 375 00:15:47,630 --> 00:15:50,180 đã thực hiện một số SQL, nhưng thêm vào đó trong một thời điểm. 376 00:15:50,180 --> 00:15:52,654 Dưới đây chỉ là một bản tóm tắt về những gì tôi đã làm. 377 00:15:52,654 --> 00:15:55,320 Và không phải lo lắng rằng bạn nhìn thấy đề cập đến của Latin và Thụy Điển ở đây. 378 00:15:55,320 --> 00:16:00,490 Những người chỉ mặc định cài đặt, vì MySQL ban đầu, 379 00:16:00,490 --> 00:16:04,000 hoặc PHP MyAdmin, một trong hai đã xảy ra được viết bởi một số người Thụy Điển. 380 00:16:04,000 --> 00:16:06,100 Nhưng nó không liên quan trong trường hợp của chúng tôi ở đây. 381 00:16:06,100 --> 00:16:08,280 >> Được rồi, vậy tại sao tất cả điều này thú vị? 382 00:16:08,280 --> 00:16:13,050 Hóa ra, tôi có thể chèn dữ liệu vào một cơ sở dữ liệu bằng cách viết mã. 383 00:16:13,050 --> 00:16:15,940 Và tôi đi trước và trong tập tin của tôi ở đây, tôi 384 00:16:15,940 --> 00:16:19,000 sẽ đi trước và giả vờ như này là dây vào mà cơ sở dữ liệu, mà 385 00:16:19,000 --> 00:16:23,040 nó không phải là vào lúc này, nhưng nó sẽ là khi chúng tôi nhận được cho vấn đề thiết lập bảy. 386 00:16:23,040 --> 00:16:25,640 Và tôi sẽ đi trước và thực hiện một chức năng gọi là truy vấn, 387 00:16:25,640 --> 00:16:28,730 mà chúng tôi sẽ cung cấp cho bạn trong vấn đề đặt mã phân phối bảy, rằng 388 00:16:28,730 --> 00:16:31,490 mất ít nhất một đối số, mà chỉ là một chuỗi. 389 00:16:31,490 --> 00:16:33,460 Một chuỗi các mã SQL. 390 00:16:33,460 --> 00:16:36,700 Vì vậy, bạn đang về để tìm hiểu làm thế nào để viết Structured Query Language. 391 00:16:36,700 --> 00:16:41,270 >> Nếu tôi muốn chèn một hàng mới vào tôi cơ sở dữ liệu vì có người đã gửi 392 00:16:41,270 --> 00:16:47,600 một hình thức mã của tôi, tôi sẽ theo nghĩa đen viết INSERT INTO người sử dụng sau 393 00:16:47,600 --> 00:16:52,800 các lĩnh vực: username, dấu phẩy, tên, GIÁ TRỊ, 394 00:16:52,800 --> 00:16:57,480 và bây giờ tôi cần phải chèn một cái gì đó giống như Malan, và báo giá, 395 00:16:57,480 --> 00:17:01,490 unquote 'David Malan.' Và bây giờ ngay cả đối với những người không quen với SQL, 396 00:17:01,490 --> 00:17:07,830 tại sao tôi sử dụng dấu nháy đơn bên trong của chuỗi màu xanh lá cây này? 397 00:17:07,830 --> 00:17:10,790 398 00:17:10,790 --> 00:17:13,040 Điều gì có thể là lý do ở đây? 399 00:17:13,040 --> 00:17:14,609 >> Chú ý Tôi đồng hòa trộn hai thứ tiếng. 400 00:17:14,609 --> 00:17:18,099 Query là một chức năng PHP, nhưng nó có một đối số. 401 00:17:18,099 --> 00:17:21,740 Và lập luận rằng phải tự bản thân nó viết bằng một ngôn ngữ được gọi 402 00:17:21,740 --> 00:17:23,500 SQL, Structured Query Language. 403 00:17:23,500 --> 00:17:27,940 Vì vậy, tất cả mọi thứ mà tôi đã chỉ nhấn mạnh ở đây 404 00:17:27,940 --> 00:17:30,380 là ngôn ngữ này được gọi là SQL. 405 00:17:30,380 --> 00:17:36,290 Vì vậy, những gì với các dấu ngoặc đơn, chỉ là một kiểm tra sự tỉnh táo nhanh chóng? 406 00:17:36,290 --> 00:17:37,324 Đi trước. 407 00:17:37,324 --> 00:17:37,990 Họ là chuỗi. 408 00:17:37,990 --> 00:17:41,590 Vì vậy, báo giá, unquote Malan và báo giá, unquote David Malan là chuỗi. 409 00:17:41,590 --> 00:17:45,210 Và chỉ cần suy nghĩ bằng trực giác bây giờ, biết những gì bạn biết về C và PHP, 410 00:17:45,210 --> 00:17:50,220 Tại sao tôi lại không làm được điều này, mà tôi thường sử dụng dấu ngoặc kép cho chuỗi? 411 00:17:50,220 --> 00:17:52,310 Tại sao tôi không muốn làm điều đó? 412 00:17:52,310 --> 00:17:52,810 Yeah? 413 00:17:52,810 --> 00:17:53,685 >> Đung [Không nghe thấy] 414 00:17:53,685 --> 00:17:56,695 415 00:17:56,695 --> 00:17:57,570 DAVID Malan: Chính xác. 416 00:17:57,570 --> 00:17:59,653 Bởi vì tôi đã sử dụng dấu ngoặc kép trên đường 417 00:17:59,653 --> 00:18:01,929 bên ngoài của các đối số đến chức năng PHP, 418 00:18:01,929 --> 00:18:03,470 Tôi sẽ chỉ gây nhầm lẫn cho người phiên dịch. 419 00:18:03,470 --> 00:18:04,860 Nó sẽ không biết, những đi cùng nhau? 420 00:18:04,860 --> 00:18:05,735 Do những đi cùng nhau? 421 00:18:05,735 --> 00:18:06,810 Do những đi cùng nhau? 422 00:18:06,810 --> 00:18:08,070 Vì vậy, tôi luân phiên thay thế. 423 00:18:08,070 --> 00:18:11,784 >> Hoặc tôi có thể làm một cái gì đó như thế này, quote dấu gạch chéo ngược hoặc dấu gạch chéo ngược quote. 424 00:18:11,784 --> 00:18:14,200 Thành thật mà nói, mà chỉ bắt đầu nhận được rất đọc và xấu xí. 425 00:18:14,200 --> 00:18:16,790 Nhưng điều đó sẽ đạt được cùng một kết quả là tốt. 426 00:18:16,790 --> 00:18:19,760 >> Vì vậy, nếu tôi đã thực hiện điều này truy vấn bây giờ, chúng ta hãy xem những gì sẽ xảy ra. 427 00:18:19,760 --> 00:18:22,740 Tôi sẽ đi trước bây giờ và thay hơn thực thi mã PHP, mà 428 00:18:22,740 --> 00:18:24,610 là nơi mà bạn sẽ chơi trong vấn đề thiết lập bảy, 429 00:18:24,610 --> 00:18:27,200 Tôi sẽ thay vì đi đến PHP MyAdmin. 430 00:18:27,200 --> 00:18:29,770 Và tôi tự đi để đi đến tab SQL, 431 00:18:29,770 --> 00:18:31,580 và cho tôi phóng to trên giao diện. 432 00:18:31,580 --> 00:18:34,007 Và tôi sẽ để dán trong những điều tôi vừa gõ. 433 00:18:34,007 --> 00:18:36,090 Và mã hóa màu sắc có thay đổi một chút bây giờ, 434 00:18:36,090 --> 00:18:38,750 chỉ vì những định dạng chương trình việc khác một chút. 435 00:18:38,750 --> 00:18:41,960 Nhưng chú ý rằng tất cả tôi đã thực hiện là tôi đã nói, chèn vào Users. 436 00:18:41,960 --> 00:18:45,790 Tôi đã chỉ định, sau đó, trong một dấu phẩy tách parenthesized danh sách hai 437 00:18:45,790 --> 00:18:48,850 lĩnh vực mà tôi muốn chèn, và sau đó tôi đã theo nghĩa đen cho biết giá trị 438 00:18:48,850 --> 00:18:51,510 tiếp theo là dấu ngoặc khác, và sau đó hai giá trị 439 00:18:51,510 --> 00:18:53,520 Tôi muốn plug-in, và bây giờ cho các biện pháp tốt, 440 00:18:53,520 --> 00:18:55,010 Tôi sẽ đặt một dấu chấm phẩy ở cuối. 441 00:18:55,010 --> 00:18:56,570 Vì vậy, đây không phải là C. Đây không phải là PHP. 442 00:18:56,570 --> 00:18:59,970 Điều này bây giờ là SQL, và tôi đang dán nó vào web này dựa trên giao diện đó là 443 00:18:59,970 --> 00:19:02,710 chỉ cần đi để cho tôi, ngay sau khi tôi bấm Go, 444 00:19:02,710 --> 00:19:08,060 thực hiện truy vấn này trên cơ sở dữ liệu chạy bên trong CS50 IDE. 445 00:19:08,060 --> 00:19:09,470 >> Vì vậy, điều này là tốt. 446 00:19:09,470 --> 00:19:12,520 Thông báo nói rằng một hàng đưa vào, đi siêu nhanh, 447 00:19:12,520 --> 00:19:15,190 0,0054 giây để chèn dữ liệu đó. 448 00:19:15,190 --> 00:19:16,610 Vì vậy, mà âm thanh khá khỏe mạnh. 449 00:19:16,610 --> 00:19:19,350 Nó dạng truy vấn của tôi cho tôi ở đây chỉ để xem nó 450 00:19:19,350 --> 00:19:21,730 trong loại mã màu sắc phiên bản. 451 00:19:21,730 --> 00:19:24,540 Nhưng bây giờ nếu tôi bấm Browse, nhận thấy rằng, ngay cả 452 00:19:24,540 --> 00:19:29,070 mặc dù có rất nhiều lộn xộn trên màn hình, bàn của tôi bây giờ có hai hàng. 453 00:19:29,070 --> 00:19:30,700 >> Vì vậy, hãy để tôi đi trước và làm khác. 454 00:19:30,700 --> 00:19:33,760 Thay vào đó, hãy để tôi đi đến tab SQL nữa. 455 00:19:33,760 --> 00:19:40,723 Và lần này tôi sẽ chèn một cái gì đó như Rob và tên của ông sẽ là Rob Bowden. 456 00:19:40,723 --> 00:19:42,330 Bowden. 457 00:19:42,330 --> 00:19:44,040 Hãy bấm Save. 458 00:19:44,040 --> 00:19:46,140 Rất tiếc, thay Go. 459 00:19:46,140 --> 00:19:48,890 >> Nhấn Browse một lần nữa, và Bây giờ tôi nhận thấy có hai hàng. 460 00:19:48,890 --> 00:19:52,390 Vì vậy, đây chỉ là một cách phức tạp hơn cách mở cửa Google Spreadsheets 461 00:19:52,390 --> 00:19:54,010 và chỉ cần gõ một hàng vào một cột. 462 00:19:54,010 --> 00:19:57,070 Nhưng những gì quan trọng là bây giờ chúng ta có cú pháp 463 00:19:57,070 --> 00:20:00,220 mà để viết code để cuối cùng, chúng tôi thực sự có thể 464 00:20:00,220 --> 00:20:01,790 làm một số và điều này. 465 00:20:01,790 --> 00:20:05,380 Nhớ lại rằng hỗ trợ PHP biến siêu toàn cầu. 466 00:20:05,380 --> 00:20:08,415 >> Là những gì bên trong của đồng USD ký gạch GET trong PHP? 467 00:20:08,415 --> 00:20:10,290 Chúng tôi đã xem xét một hoặc hai ví dụ đơn giản. 468 00:20:10,290 --> 00:20:15,640 Và trong PSet6, nhớ lại bạn phải chào dot PHP trong đó sử dụng biến này. 469 00:20:15,640 --> 00:20:17,870 Những gì diễn ra ở đó? 470 00:20:17,870 --> 00:20:21,015 Hoặc nó là gì? 471 00:20:21,015 --> 00:20:22,522 A to hơn chút. 472 00:20:22,522 --> 00:20:23,790 >> Đung [Không nghe thấy] 473 00:20:23,790 --> 00:20:25,030 >> DAVID Malan: Đó là một tuyết hạt giống của mảng, 474 00:20:25,030 --> 00:20:27,714 chỉ là một cách nói một mảng có cặp giá trị quan trọng. 475 00:20:27,714 --> 00:20:28,880 Và các phím không số. 476 00:20:28,880 --> 00:20:30,420 Họ là những từ hoặc chuỗi. 477 00:20:30,420 --> 00:20:32,750 Và đặc biệt, những gì là những cặp giá trị? 478 00:20:32,750 --> 00:20:35,110 Họ đến từ đâu? 479 00:20:35,110 --> 00:20:35,620 Lấy làm tiếc? 480 00:20:35,620 --> 00:20:36,994 >> Đung [Không nghe thấy] 481 00:20:36,994 --> 00:20:37,660 DAVID Malan: Không? 482 00:20:37,660 --> 00:20:40,700 Nơi nào những người chủ chốt các cặp giá trị đến từ đâu? 483 00:20:40,700 --> 00:20:42,490 Nhắc lại? 484 00:20:42,490 --> 00:20:44,610 Lần nữa? 485 00:20:44,610 --> 00:20:46,472 Tôi chỉ có một buổi điều trần một cái gì đó? 486 00:20:46,472 --> 00:20:47,810 >> [Cười] 487 00:20:47,810 --> 00:20:49,042 >> Đúng vậy, đúng không? 488 00:20:49,042 --> 00:20:50,435 >> Đung [Không nghe thấy] 489 00:20:50,435 --> 00:20:52,560 DAVID Malan: Yeah, họ đến từ các chuỗi truy vấn. 490 00:20:52,560 --> 00:20:55,380 Vì vậy, nếu bạn tua lại trong thời gian tới khi chúng tôi đã chơi với Google 491 00:20:55,380 --> 00:20:59,600 và chúng tôi đã đi đến Google.com slash dấu hỏi tìm kiếm q bằng mèo, 492 00:20:59,600 --> 00:21:03,550 nếu tôi được là để nhấn Enter và nếu Google được thực hiện trong PHP, 493 00:21:03,550 --> 00:21:07,017 Đoạn mã PHP Google đã viết sẽ có quyền truy cập vào ký hiệu đô la 494 00:21:07,017 --> 00:21:11,600 nhấn GET bên trong đó là một phím gọi là Q và một giá trị 495 00:21:11,600 --> 00:21:17,680 gọi là mèo mà nó sau đó có thể sử dụng được sử dụng để làm một tìm kiếm thực tế với. 496 00:21:17,680 --> 00:21:20,860 >> Vì vậy, trên thực tế, những gì tôi sẽ làm bây giờ là trở lại mã PHP của tôi 497 00:21:20,860 --> 00:21:23,140 rằng bạn sẽ lại thấy nhiều hơn trong PSet7. 498 00:21:23,140 --> 00:21:25,440 Và thay vì cắm trong các giá trị được mã hóa cứng mà 499 00:21:25,440 --> 00:21:27,630 không có vẻ như một rất trang web năng động, 500 00:21:27,630 --> 00:21:30,680 Tôi sẽ cung cấp cho bạn một lời trêu ghẹo của những mã thực tế của bạn sẽ làm gì. 501 00:21:30,680 --> 00:21:32,854 Bạn sẽ đặt vào hai câu hỏi đánh dấu như thế này. 502 00:21:32,854 --> 00:21:34,270 Tôi không biết những gì các tên người dùng là. 503 00:21:34,270 --> 00:21:37,390 Tôi không biết những gì Tên là có được, 504 00:21:37,390 --> 00:21:39,470 nhưng tôi biết tôi có thể nhận được chúng tự động. 505 00:21:39,470 --> 00:21:43,420 >> Vì vậy, nếu các mã chúng tôi đang viết bây giờ là mã chạy trên máy chủ của Google, 506 00:21:43,420 --> 00:21:46,940 hoặc nếu điều này là chào dot PHP, mà đi kèm với PSet6, 507 00:21:46,940 --> 00:21:48,650 Tôi sẽ đi vào các chức năng truy vấn 508 00:21:48,650 --> 00:21:51,450 giống như printf, hai đối số khác. 509 00:21:51,450 --> 00:21:57,120 GET, báo giá, username unquote, và GET, báo giá, tên unquote. 510 00:21:57,120 --> 00:22:00,720 Và bây giờ, hãy chú ý những gì cấu trúc chung là ở đây. 511 00:22:00,720 --> 00:22:03,320 Tôi đã có trên bên trái bên của cuộc gọi, 512 00:22:03,320 --> 00:22:05,480 Chức năng này được gọi là truy vấn trong PHP. 513 00:22:05,480 --> 00:22:08,160 Tôi vẫn còn có như là một đầu tiên tranh luận, chỉ là một chuỗi văn bản. 514 00:22:08,160 --> 00:22:11,000 >> Nhưng đó là chuỗi văn bản viết bằng một ngôn ngữ được gọi là SQL. 515 00:22:11,000 --> 00:22:12,616 Và thẳng thắn mà nói, nó không phải là một ngôn ngữ lớn. 516 00:22:12,616 --> 00:22:14,990 Chúng tôi sẽ chỉ nói về nó chính thức ngày hôm nay, thực sự. 517 00:22:14,990 --> 00:22:17,031 Và sau đó trong vấn đề thiết lập bảy, có tương đối 518 00:22:17,031 --> 00:22:18,800 vài tính năng mà chúng tôi sẽ tận dụng. 519 00:22:18,800 --> 00:22:22,530 Những dấu hỏi, tuy nhiên, có nghĩa là cắm một giá trị ở đây và cắm giá trị khác 520 00:22:22,530 --> 00:22:23,130 chỗ này. 521 00:22:23,130 --> 00:22:26,010 Và thông báo, tôi đã bỏ qua những gì từ khắp nơi chết tiệt quote-- 522 00:22:26,010 --> 00:22:30,470 it-- quanh báo giá đánh dấu thời gian này. 523 00:22:30,470 --> 00:22:34,930 Tôi đã bỏ qua các báo giá dấu quanh dấu hỏi, 524 00:22:34,930 --> 00:22:36,410 xin lỗi, khoảng thời gian này. 525 00:22:36,410 --> 00:22:38,870 >> Vì vậy, những gì là tốt đẹp về điều này câu hỏi tính năng đánh dấu mà 526 00:22:38,870 --> 00:22:42,830 PHP có xu hướng hỗ trợ, Ruby và Python và các ngôn ngữ khác, 527 00:22:42,830 --> 00:22:45,730 này chỉ có nghĩa là cắm trong một số giá trị ở đây và bạn biết những gì? 528 00:22:45,730 --> 00:22:48,300 Bạn tìm hiểu xem sử dụng dấu ngoặc đơn hoặc dấu ngoặc kép. 529 00:22:48,300 --> 00:22:50,966 Đừng làm phiền tôi với những người Các chi tiết về mặt trí tuệ nhàm chán. 530 00:22:50,966 --> 00:22:53,780 Nhưng, chắc chắn rằng nó là chính xác để mã của tôi là cuối cùng 531 00:22:53,780 --> 00:22:57,010 vận hành và an toàn, mà sẽ có một ý nghĩa trước khi dài. 532 00:22:57,010 --> 00:23:00,460 >> Bây giờ, có bao nhiêu đối số tổng cộng, chỉ để được rõ ràng, là chức năng truy vấn lấy? 533 00:23:00,460 --> 00:23:05,240 534 00:23:05,240 --> 00:23:07,581 Bất cứ ai muốn bỏ phiếu cho hơn hai? 535 00:23:07,581 --> 00:23:08,080 Số ba? 536 00:23:08,080 --> 00:23:10,001 Chắc chắn, tại sao? 537 00:23:10,001 --> 00:23:10,920 Tại sao ba? 538 00:23:10,920 --> 00:23:12,305 >> Đung [Không nghe thấy] 539 00:23:12,305 --> 00:23:13,180 DAVID Malan: Chính xác. 540 00:23:13,180 --> 00:23:14,610 Phần đầu tiên là chuỗi. 541 00:23:14,610 --> 00:23:18,640 Đối số thứ hai là ký hiệu đô la nhấn GET khung tên người dùng. 542 00:23:18,640 --> 00:23:21,950 Và số thứ ba là điều tương tự, nhưng chỉ là cái tên. 543 00:23:21,950 --> 00:23:24,590 Vì vậy, nói cách khác, bây giờ nếu tôi có một hình thức web 544 00:23:24,590 --> 00:23:27,149 mà đã phải lĩnh vực văn bản, một tên đăng nhập của người dùng, 545 00:23:27,149 --> 00:23:29,690 một cho tên mình, chỉ như bạn sẽ thấy trong một trang web 546 00:23:29,690 --> 00:23:32,120 khi bạn đăng ký một số trang web, sức mạnh này 547 00:23:32,120 --> 00:23:35,450 là mã trở lại vào cuối đó thực hiện việc chèn nay 548 00:23:35,450 --> 00:23:37,220 vào cơ sở dữ liệu. 549 00:23:37,220 --> 00:23:40,870 >> Bây giờ thì ngược lại, chúng ta hãy nhanh về phía trước. 550 00:23:40,870 --> 00:23:43,840 Giả sử một người dùng bây giờ là đăng nhập và bạn muốn 551 00:23:43,840 --> 00:23:48,860 viết code PHP để kiểm tra xem liệu người của những người chỉ cần đăng nhập 552 00:23:48,860 --> 00:23:52,250 thực sự là một người sử dụng, bạn có thể sử dụng cú pháp khá đơn giản. 553 00:23:52,250 --> 00:23:55,832 Bạn có thể nói SELECT, chúng ta hãy nói ngôi sao, mà sao có nghĩa là tất cả mọi thứ. 554 00:23:55,832 --> 00:23:57,540 Tôi không biết những gì tôi muốn, vì vậy chỉ cần cho tôi 555 00:23:57,540 --> 00:24:01,585 tất cả các cột từ bảng gọi là người dùng ở đâu, và điều này là tốt đẹp. 556 00:24:01,585 --> 00:24:03,710 Chọn hỗ trợ những gì được gọi là một vị, đó là 557 00:24:03,710 --> 00:24:06,630 như một cách để đủ điều kiện những gì bạn muốn. 558 00:24:06,630 --> 00:24:10,590 Nơi tên người dùng bằng quote, unquote Malan. 559 00:24:10,590 --> 00:24:13,680 Vì vậy, ở đây, tôi đã nhúng bên trong đối số 560 00:24:13,680 --> 00:24:16,110 đến một chức năng PHP, một dòng mã SQL. 561 00:24:16,110 --> 00:24:18,680 Và rằng mã SQL này thời gian là nghĩa đen đi 562 00:24:18,680 --> 00:24:21,790 để tìm kiếm các báo giá, unquote Malan. 563 00:24:21,790 --> 00:24:24,420 >> Bây giờ đó là không phải tất cả những gì có ích, do đó, tôi sẽ bỏ qua 564 00:24:24,420 --> 00:24:28,650 và tôi sẽ để dứt tip này từ Brady, và đi 565 00:24:28,650 --> 00:24:30,990 và plug-in thay vì một dấu hỏi ở đây. 566 00:24:30,990 --> 00:24:33,290 Vì vậy, chỉ để được rõ ràng, những gì nên số thứ hai của tôi 567 00:24:33,290 --> 00:24:37,480 được nếu có người chỉ cần đăng nhập và tôi muốn kiểm tra xem anh ta hay cô thực sự 568 00:24:37,480 --> 00:24:39,265 một người sử dụng? 569 00:24:39,265 --> 00:24:40,140 Đung [Không nghe thấy] 570 00:24:40,140 --> 00:24:40,890 DAVID Malan: Yeah. 571 00:24:40,890 --> 00:24:44,120 Tôi nghe đôla dấu gạch dưới GET quote, tên người dùng unquote. 572 00:24:44,120 --> 00:24:50,040 Và đó nên trở về với tôi bất kỳ của các hàng trong cơ sở dữ liệu của tôi 573 00:24:50,040 --> 00:24:51,986 rằng có một tên người dùng của Malan. 574 00:24:51,986 --> 00:24:54,860 Bây giờ hy vọng, tôi sẽ trở lại zero nếu Malan không bao giờ được ở đây, 575 00:24:54,860 --> 00:24:56,290 hoặc một nếu anh có. 576 00:24:56,290 --> 00:24:59,026 Tôi không nên trở lại hai hoặc ba hoặc bốn. 577 00:24:59,026 --> 00:24:59,526 Tại sao? 578 00:24:59,526 --> 00:25:00,220 >> Đung [Không nghe thấy] 579 00:25:00,220 --> 00:25:01,120 >> DAVID Malan: Tôi nói độc đáo, phải không? 580 00:25:01,120 --> 00:25:01,750 Lý do đơn giản. 581 00:25:01,750 --> 00:25:04,030 Bởi vì tôi biết nó đã nhận là duy nhất, chỉ cần một cách hợp lý, 582 00:25:04,030 --> 00:25:07,940 bạn chỉ có thể không có hay có một Malans trong bảng cơ sở dữ liệu đặc biệt này. 583 00:25:07,940 --> 00:25:10,965 Bây giờ là một sang một bên, chỉ cần như vậy bạn đã nhìn thấy nó, mặc dù tôi tiếp tục sử dụng GET 584 00:25:10,965 --> 00:25:14,350 và mặc dù PSet6 chỉ được sử dụng GET, bạn chắc chắn có thể có POST. 585 00:25:14,350 --> 00:25:17,212 Và nhớ lại rằng bài viết là một kỹ thuật đã gửi thông tin 586 00:25:17,212 --> 00:25:19,170 từ một hình thức, nhưng nó không hiển thị trong URL. 587 00:25:19,170 --> 00:25:22,690 Đó là nhiều hơn một chút an toàn chắc chắn cho những thứ như tên người dùng và mật khẩu, 588 00:25:22,690 --> 00:25:25,210 mà PSet7 sẽ, trên thực tế, liên quan đến. 589 00:25:25,210 --> 00:25:28,130 >> Vì vậy, chúng ta hãy làm điều này trong PHP MyAdmin và xem những gì sẽ xảy ra. 590 00:25:28,130 --> 00:25:30,020 Tôi sẽ đi đến tab MySQL. 591 00:25:30,020 --> 00:25:34,450 Và nhận thấy rằng các giá trị mặc định cho PHP MyAdmin, chỉ để cố gắng để thể hữu ích, 592 00:25:34,450 --> 00:25:37,050 là chọn sao từ người dùng mà một. 593 00:25:37,050 --> 00:25:39,430 Vâng, người ta luôn luôn là sự thật, vì vậy này có ngớ ngẩn hiệu quả 594 00:25:39,430 --> 00:25:40,400 các bạn chỉ cần chọn tất cả mọi thứ. 595 00:25:40,400 --> 00:25:42,691 Nhưng tôi sẽ là một chút mô phạm hơn và bằng tay 596 00:25:42,691 --> 00:25:45,920 loại ra sao CHỌN TỪ người sử dụng. 597 00:25:45,920 --> 00:25:48,294 >> Bây giờ về mặt kỹ thuật, bạn có thể trích dẫn tên của các bảng. 598 00:25:48,294 --> 00:25:50,460 Nó hiếm hoi mà bạn có, nhưng nhận thấy đây không phải là 599 00:25:50,460 --> 00:25:52,240 báo giá bình thường của bạn trên bàn phím Mỹ. 600 00:25:52,240 --> 00:25:54,760 Đây là cái gọi là backtick, mà nói chung là mặt trên bên trái 601 00:25:54,760 --> 00:25:56,000 góc của bàn phím của bạn. 602 00:25:56,000 --> 00:25:58,500 Nhưng nó hiếm hoi mà bạn sẽ thực sự cần phải bận tâm với điều đó, 603 00:25:58,500 --> 00:25:59,950 vì vậy tôi sẽ chỉ cần bỏ qua chúng anyway. 604 00:25:59,950 --> 00:26:02,280 Vì vậy, bây giờ, hãy để tôi đi trước và nhấn đi. 605 00:26:02,280 --> 00:26:06,616 Và bao nhiêu hàng tôi sẽ nhận được trở lại khi tôi chọn sao từ người sử dụng? 606 00:26:06,616 --> 00:26:08,407 >> Đung [Không nghe thấy] 607 00:26:08,407 --> 00:26:09,990 DAVID Malan: Số lượng hàng, chắc chắn. 608 00:26:09,990 --> 00:26:12,390 Nhưng bao nhiêu người trong này câu chuyện cụ thể ngay bây giờ? 609 00:26:12,390 --> 00:26:14,640 Hai, vì đã có tôi và đã có Rob. 610 00:26:14,640 --> 00:26:19,370 Vì vậy, nếu tôi bấm Go, tôi nhìn thấy bằng mắt mà Tôi đã nhận được trở lại, thực sự, hai hàng. 611 00:26:19,370 --> 00:26:22,060 Có rất nhiều lộn xộn trên màn hình, nhưng tôi chỉ thấy hai hàng. 612 00:26:22,060 --> 00:26:28,580 Ngược lại, nếu tôi làm điều này một lần nữa và làm CHỌN sao FROM users, nơi tên người dùng 613 00:26:28,580 --> 00:26:31,840 bằng quote, unquote Malan, bây giờ nếu tôi bấm Go, 614 00:26:31,840 --> 00:26:33,970 Tôi chỉ đi để lấy lại một hàng. 615 00:26:33,970 --> 00:26:36,499 Và cuối cùng, nếu tôi làm một cái gì đó như thế này, giả sử 616 00:26:36,499 --> 00:26:38,290 rằng tôi không quan tâm về nhận được tất cả mọi thứ, 617 00:26:38,290 --> 00:26:41,020 đó là loại vô nghĩa bây giờ, bởi vì chỉ có hai cột. 618 00:26:41,020 --> 00:26:43,103 Nó không giống như tôi đang chọn một lượng lớn dữ liệu. 619 00:26:43,103 --> 00:26:46,720 Giả sử tôi đi trước và làm CHỌN tên TỪ 620 00:26:46,720 --> 00:26:51,990 người sử dụng, nơi tên người dùng bằng Malan, những gì tốt đẹp về SQL một cách trung thực, 621 00:26:51,990 --> 00:26:54,290 là nó thực sự chỉ làm những gì bạn nói với nó để làm. 622 00:26:54,290 --> 00:26:57,550 Nó đẹp, gọn gàng, nhưng bạn có nghĩa là chỉ nói với nó những gì bạn muốn làm. 623 00:26:57,550 --> 00:27:01,130 Chọn tên từ người dùng mà tên người dùng bằng Malan. 624 00:27:01,130 --> 00:27:03,440 Và nó thực sự là rõ ràng. 625 00:27:03,440 --> 00:27:08,410 Vì vậy, bây giờ nếu tôi nhấn Go, bao nhiêu hàng tôi sẽ trở lại? 626 00:27:08,410 --> 00:27:10,770 Một, bởi vì nó chỉ là Malan, hy vọng. 627 00:27:10,770 --> 00:27:13,100 Hoặc không nếu anh ấy không có, nhưng một tối đa. 628 00:27:13,100 --> 00:27:17,610 >> Và có bao nhiêu cột tôi sẽ lấy lại? 629 00:27:17,610 --> 00:27:18,450 Có bao nhiêu cột? 630 00:27:18,450 --> 00:27:20,658 Lần này, tôi chỉ cần đi để có được một bởi vì tôi đã không 631 00:27:20,658 --> 00:27:22,380 chọn ngôi sao, mà là tất cả mọi thứ. 632 00:27:22,380 --> 00:27:27,900 Bây giờ tôi chỉ chọn cái tên, nên tôi chỉ nhận lại một cột và một hàng. 633 00:27:27,900 --> 00:27:31,730 Và có vẻ loại thích hợp vô lý, chỉ cần nhìn siêu 634 00:27:31,730 --> 00:27:33,060 nhỏ như thế này. 635 00:27:33,060 --> 00:27:34,290 Vì vậy, những gì đang thực sự xảy ra? 636 00:27:34,290 --> 00:27:36,890 Khi bạn thực hiện một SQL truy vấn sử dụng lựa chọn, 637 00:27:36,890 --> 00:27:38,700 những gì bạn đang nhận được trở về từ cơ sở dữ liệu 638 00:27:38,700 --> 00:27:42,970 giống như một bảng tạm thời với các hàng và cột, có thể, 639 00:27:42,970 --> 00:27:46,260 nhưng mà bỏ qua bất cứ điều gì đã không thực sự lựa chọn của bạn. 640 00:27:46,260 --> 00:27:49,010 Vì vậy, nó giống như nếu có ai đó đã có một lớn bảng tính của tất cả các sinh viên 641 00:27:49,010 --> 00:27:51,610 đăng ký cho một số nhóm học sinh, và bạn nói, 642 00:27:51,610 --> 00:27:55,097 cho tôi tất cả các sinh viên năm nhất, người đã đăng ký cho nhóm học sinh của chúng tôi, những gì 643 00:27:55,097 --> 00:27:56,930 đồng nghiệp của bạn trong nhóm học sinh có thể làm 644 00:27:56,930 --> 00:27:58,430 là họ chỉ có thể bàn tay bạn toàn bộ bảng tính. 645 00:27:58,430 --> 00:27:59,742 Điều đó giống như nói rằng chọn sao. 646 00:27:59,742 --> 00:28:02,200 Và đó là một chút khó chịu nếu bạn chỉ muốn các sinh viên năm nhất. 647 00:28:02,200 --> 00:28:05,640 Và như vậy, nếu bạn thay vì nói, chọn sao từ bảng cơ sở dữ liệu 648 00:28:05,640 --> 00:28:08,470 nơi năm bằng quote, sinh viên năm nhất unquote, 649 00:28:08,470 --> 00:28:10,810 nó giống như bạn bè của bạn trong các nhóm học sinh 650 00:28:10,810 --> 00:28:13,770 nghĩa đen làm nổi bật và sao chép chỉ có các hàng sinh viên năm nhất, 651 00:28:13,770 --> 00:28:16,780 dán chúng vào một Google mới Bảng tính hoặc một tập tin Excel, 652 00:28:16,780 --> 00:28:18,860 và đưa bạn trở lại chỉ dẫn file. 653 00:28:18,860 --> 00:28:21,710 Đó là tất cả những gì đang xảy ra về khái niệm ở đây. 654 00:28:21,710 --> 00:28:23,920 >> Vì vậy, cuối cùng, chúng ta có thể làm một số điều khá lạ mắt 655 00:28:23,920 --> 00:28:26,560 bằng cách lưu trữ những thứ như tên người dùng và mật khẩu và các loại tương tự. 656 00:28:26,560 --> 00:28:30,310 Nhưng, hóa ra, chúng ta nên làm một chút khác biệt so với điều này. 657 00:28:30,310 --> 00:28:34,750 Nó không phải là thông minh để chỉ lưu trữ tên người dùng và mật khẩu. 658 00:28:34,750 --> 00:28:37,790 Có người trước đó, tôi nghĩ rằng xuống đây, đề nghị một ID. 659 00:28:37,790 --> 00:28:40,787 Bây giờ một ID có thể giống như một Harvard hay Yale ID ID Net, 660 00:28:40,787 --> 00:28:42,870 nhưng nó có thể đơn giản hơn trong trường hợp cơ sở dữ liệu của chúng tôi. 661 00:28:42,870 --> 00:28:45,120 Và quả thực, những trường hợp thông thường là phải có một cột khác. 662 00:28:45,120 --> 00:28:46,953 Và tôi sẽ đi trước và sửa bàn của tôi. 663 00:28:46,953 --> 00:28:49,521 Và nếu bạn chơi xung quanh với giao diện này cho PSet7, 664 00:28:49,521 --> 00:28:51,770 bạn sẽ thấy rằng bạn có thể kiểm tra nút này ở đây và thêm 665 00:28:51,770 --> 00:28:53,750 một vùng ở đầu của bảng. 666 00:28:53,750 --> 00:28:56,720 Và bây giờ nếu tôi bấm Go, nó sẽ để cung cấp cho tôi một trong những hình thức 667 00:28:56,720 --> 00:28:57,600 từ trước đó. 668 00:28:57,600 --> 00:29:00,170 Tôi sẽ thêm một lĩnh vực được gọi là ID. 669 00:29:00,170 --> 00:29:03,070 Và tôi sẽ làm cho nó một số loại. 670 00:29:03,070 --> 00:29:05,362 >> Tôi có cả một bó các giá trị cho numerics. 671 00:29:05,362 --> 00:29:08,677 Tôi chỉ đi để lựa chọn một INT và không lo lắng về các kích thước khác nhau. 672 00:29:08,677 --> 00:29:10,510 Tôi không có chỉ định một chiều dài hoặc một giá trị, 673 00:29:10,510 --> 00:29:13,710 bởi vì nó sẽ được 32 bit không có vấn đề gì. 674 00:29:13,710 --> 00:29:16,070 Thuộc tính, chúng tôi đã không nhìn thấy trước. 675 00:29:16,070 --> 00:29:18,410 Bất kỳ quan tâm trong bất kỳ các tùy chọn trình đơn lần này? 676 00:29:18,410 --> 00:29:21,890 677 00:29:21,890 --> 00:29:23,745 Đối với một INT? 678 00:29:23,745 --> 00:29:24,620 Bạn đã đề xuất gì? 679 00:29:24,620 --> 00:29:27,350 680 00:29:27,350 --> 00:29:28,445 Không có? 681 00:29:28,445 --> 00:29:29,570 Làm được điều này có ý nghĩa? 682 00:29:29,570 --> 00:29:30,536 Yeah. 683 00:29:30,536 --> 00:29:31,900 Yeah, unsigned, phải không? 684 00:29:31,900 --> 00:29:35,930 >> Nói chung, nếu chúng ta để cho tất cả mọi người một số duy nhất, mà 685 00:29:35,930 --> 00:29:38,200 là nơi mà câu chuyện này là đi, tôi thực sự chỉ muốn 686 00:29:38,200 --> 00:29:41,919 một người có số lượng như bằng không và một và hai và ba và bốn. 687 00:29:41,919 --> 00:29:43,710 Tôi không cần phải đối phó với các số âm. 688 00:29:43,710 --> 00:29:45,210 Nó chỉ có vẻ như phức tạp không đáng có. 689 00:29:45,210 --> 00:29:48,470 Tôi muốn bốn tỷ giá trị có thể, không bốn tỷ giá trị có thể, 690 00:29:48,470 --> 00:29:50,699 vì vậy tôi chỉ tăng gấp đôi năng lực của INT của tôi. 691 00:29:50,699 --> 00:29:53,490 Là một sang một bên, nếu bạn muốn liên quan này để một cái gì đó giống như Facebook, 692 00:29:53,490 --> 00:29:56,190 trở lại trong phân loại trong ngày của tôi khi Facebook lần đầu tiên xuất hiện, 693 00:29:56,190 --> 00:29:59,510 Tôi tin rằng những gì họ sử dụng trong cơ sở dữ liệu MySQL của họ 694 00:29:59,510 --> 00:30:02,856 để lưu trữ một người sử dụng của nhận dạng, chỉ là một INT. 695 00:30:02,856 --> 00:30:05,230 Nhưng tất nhiên, có rất nhiều của những người thực trong thế giới. 696 00:30:05,230 --> 00:30:07,438 Có rất nhiều giả Facebook chiếm trên thế giới. 697 00:30:07,438 --> 00:30:11,701 Và như vậy cuối cùng, Facebook tràn kích thước của một INT, một bốn tỷ 698 00:30:11,701 --> 00:30:12,200 giá trị. 699 00:30:12,200 --> 00:30:15,032 Đó là lý do tại sao, nếu bạn nhìn xung quanh và có trang web 700 00:30:15,032 --> 00:30:16,740 có thể cho bạn biết những gì ID duy nhất của bạn là. 701 00:30:16,740 --> 00:30:19,781 Và nếu bạn không bao giờ chọn một tên người dùng trong Facebook, bạn sẽ thấy ID duy nhất của bạn. 702 00:30:19,781 --> 00:30:23,080 Tôi nghĩ rằng đó là hồ sơ dot PHP dấu hỏi ID bằng gì gì đó. 703 00:30:23,080 --> 00:30:27,210 Mà bây giờ là cái giống như một lớn INT, hoặc lâu dài nếu bạn muốn, 704 00:30:27,210 --> 00:30:29,700 đó là một giá trị 64-bit hoặc cái gì đó tương tự. 705 00:30:29,700 --> 00:30:33,620 >> Vì vậy, ngay cả trong thế giới thực làm những vấn đề cuối cùng là đôi khi quan trọng. 706 00:30:33,620 --> 00:30:37,600 Và hóa ra ở đây, nếu tôi cho tất cả người dùng của tôi một ID duy nhất, 707 00:30:37,600 --> 00:30:41,750 Tôi muốn được siêu rõ ràng và tối thiểu làm cho lĩnh vực này độc đáo. 708 00:30:41,750 --> 00:30:44,750 Nhưng hóa ra có một mảnh của danh pháp ngày nay quá 709 00:30:44,750 --> 00:30:46,470 đó là một khóa chính. 710 00:30:46,470 --> 00:30:49,800 Nếu bạn đang thiết kế một cơ sở dữ liệu bảng và bạn biết trước 711 00:30:49,800 --> 00:30:55,580 mà một trong các cột trong bảng đó nên và duy nhất sẽ xác định các hàng 712 00:30:55,580 --> 00:30:58,500 trong bảng, bạn muốn xác định nó và nói với các cơ sở dữ liệu, 713 00:30:58,500 --> 00:31:00,250 đây là khóa chính của tôi. 714 00:31:00,250 --> 00:31:02,110 Có thể có bản sao trong các lĩnh vực khác, 715 00:31:02,110 --> 00:31:06,330 nhưng tôi nói với các cơ sở dữ liệu này là chính tôi, lĩnh vực quan trọng nhất của tôi, 716 00:31:06,330 --> 00:31:08,420 đó là bảo đảm là duy nhất. 717 00:31:08,420 --> 00:31:09,660 >> Bây giờ, điều này có vẻ dư thừa. 718 00:31:09,660 --> 00:31:13,830 Bây giờ tôi xin đề xuất rằng chúng ta thêm, bằng cách nhấn Save ở đây, 719 00:31:13,830 --> 00:31:17,210 một called-- trường và tôi sẽ đi trước và bấm vào AI, 720 00:31:17,210 --> 00:31:19,720 chúng tôi sẽ trở lại rằng trong một thời điểm, Lưu. 721 00:31:19,720 --> 00:31:22,540 Tôi đề xuất bây giờ mà bảng của tôi trông như thế này. 722 00:31:22,540 --> 00:31:26,305 Tôi có một trường INT gọi ID, một lĩnh vực CHAR gọi Username, 723 00:31:26,305 --> 00:31:31,100 một lĩnh vực VARCHAR gọi là Danh, nhưng ID, nếu đó là tiểu học và do đó độc đáo, 724 00:31:31,100 --> 00:31:33,760 Tại sao tôi lại chỉ lãng phí thời gian giới thiệu những gì 725 00:31:33,760 --> 00:31:39,140 hiệu quả là một thứ độc đáo lĩnh vực được gọi là ID đó là một INT? 726 00:31:39,140 --> 00:31:41,980 >> Tên truy nhập, thu hồi, đã đã độc đáo, chúng tôi đã nói. 727 00:31:41,980 --> 00:31:45,350 Vì vậy, chỉ một cách hợp lý, bạn không cần bất kỳ kinh nghiệm cơ sở dữ liệu với lý 728 00:31:45,350 --> 00:31:47,570 thông qua điều này, tại sao có thể tôi đã giới thiệu 729 00:31:47,570 --> 00:31:50,065 một INT là định danh duy nhất của tôi là tốt? 730 00:31:50,065 --> 00:31:52,740 731 00:31:52,740 --> 00:31:53,930 Có gì this-- nói một lần nữa? 732 00:31:53,930 --> 00:31:55,580 >> Đung [Không nghe thấy] 733 00:31:55,580 --> 00:31:59,534 >> DAVID Malan: Random truy cập dễ dàng hơn, tại sao? 734 00:31:59,534 --> 00:32:00,410 >> Đung [Không nghe thấy] 735 00:32:00,410 --> 00:32:02,367 DAVID Malan: Yeah, đó là chỉ số truy cập. 736 00:32:02,367 --> 00:32:04,750 Vì vậy, nếu bạn nghĩ về điều này thực sự là một bảng, giống như một mảng, 737 00:32:04,750 --> 00:32:07,690 bây giờ tôi có định danh duy nhất mà tôi có thể nhảy xung quanh. 738 00:32:07,690 --> 00:32:11,520 Và hơn thế nữa, là lớn như thế nào là một INT sẽ một lần nữa? 739 00:32:11,520 --> 00:32:14,450 740 00:32:14,450 --> 00:32:15,800 32 bit hay bốn byte. 741 00:32:15,800 --> 00:32:17,750 >> Làm thế nào lớn là username của tôi sẽ là? 742 00:32:17,750 --> 00:32:20,310 743 00:32:20,310 --> 00:32:21,990 Tối đa? 744 00:32:21,990 --> 00:32:22,880 16 byte. 745 00:32:22,880 --> 00:32:26,080 >> Vì vậy, nếu bạn đang thực sự quan tâm đến hiệu suất của mã của bạn, 746 00:32:26,080 --> 00:32:31,390 nghĩ lại PSet5, bạn sẽ thích để tìm kiếm một giá trị bốn byte hoặc một 16 747 00:32:31,390 --> 00:32:32,240 giá trị byte, phải không? 748 00:32:32,240 --> 00:32:33,810 Nó thực sự là đơn giản như vậy. 749 00:32:33,810 --> 00:32:38,060 Bạn phải làm bốn lần như làm việc nhiều để tìm kiếm tên người dùng vì những 750 00:32:38,060 --> 00:32:38,830 là 16 byte. 751 00:32:38,830 --> 00:32:41,320 Vì vậy, bạn phải theo nghĩa đen so sánh tất cả 16 byte được 752 00:32:41,320 --> 00:32:43,140 chắc chắn có, đây là username tôi muốn. 753 00:32:43,140 --> 00:32:46,610 Trong khi đối với một INT, bạn có thể làm điều đó chỉ với bốn byte. 754 00:32:46,610 --> 00:32:49,212 >> Và như là một dành cho những người quan tâm đến phần cứng máy tính, 755 00:32:49,212 --> 00:32:52,420 nó quay ra bạn có thể phù hợp với một cái gì đó như một INT hoặc một giá trị 32-bit trong một cái gì đó 756 00:32:52,420 --> 00:32:55,330 được gọi là một thanh ghi trong một máy tính CPU, có nghĩa đó là siêu, 757 00:32:55,330 --> 00:32:58,400 siêu nhanh, thậm chí ở mức thấp nhất mức độ của phần cứng của máy tính. 758 00:32:58,400 --> 00:33:00,530 Vì vậy, đó chỉ là lợi thế tất cả các xung quanh. 759 00:33:00,530 --> 00:33:01,530 Vì vậy, điều này có nghĩa là gì? 760 00:33:01,530 --> 00:33:04,850 Trong thực tế, khi bạn đang thiết kế một bảng cơ sở dữ liệu, gần như tất cả thời gian 761 00:33:04,850 --> 00:33:07,170 bạn sẽ có không chỉ những dữ liệu mà bạn quan tâm, 762 00:33:07,170 --> 00:33:09,280 nhưng cũng giống như một cái gì đó một định danh duy nhất 763 00:33:09,280 --> 00:33:11,280 bởi vì điều này sẽ chúng ta hãy làm những việc khác. 764 00:33:11,280 --> 00:33:13,160 Và chúng ta hãy vướng một vấn đề ở đây. 765 00:33:13,160 --> 00:33:15,990 >> Giả sử rằng người dùng có không chỉ tên người dùng và tên, 766 00:33:15,990 --> 00:33:19,540 nhưng họ cũng có những thứ như các thành phố và các tiểu bang và mã zip, ít nhất 767 00:33:19,540 --> 00:33:20,432 đây ở Mỹ. 768 00:33:20,432 --> 00:33:22,390 Vì vậy, tôi sẽ đi trước và chỉ cần một cách nhanh chóng nói, 769 00:33:22,390 --> 00:33:26,180 cho tôi ba cột hơn ở phần cuối của bảng. 770 00:33:26,180 --> 00:33:28,900 Và điều này là có được thành phố, này là có được Nhà nước, 771 00:33:28,900 --> 00:33:30,400 và điều này là có được Zip. 772 00:33:30,400 --> 00:33:32,710 >> Bây giờ loại thành phố, những dữ liệu này nên được, có lẽ? 773 00:33:32,710 --> 00:33:35,460 774 00:33:35,460 --> 00:33:35,989 VARCHAR? 775 00:33:35,989 --> 00:33:37,780 Tôi không biết những gì Tên thành phố dài nhất là. 776 00:33:37,780 --> 00:33:40,571 Một nơi nào đó ở Mỹ, có có lẽ một số từ ridiculously dài, 777 00:33:40,571 --> 00:33:43,605 vì vậy chúng ta chỉ cần đi với 255, hơi lịch sử hoặc tuỳ tiện. 778 00:33:43,605 --> 00:33:44,730 Nhà nước, những gì bạn muốn làm gì? 779 00:33:44,730 --> 00:33:48,380 780 00:33:48,380 --> 00:33:50,367 Cuộc gọi phán quyết, phải không? 781 00:33:50,367 --> 00:33:51,700 Có gì có thể là hiệu quả nhất? 782 00:33:51,700 --> 00:33:53,500 Có bao nhiêu ký tự? 783 00:33:53,500 --> 00:33:55,950 Có lẽ chỉ cần hai, nếu chúng ta có thể có được đi với chỉ cần làm, 784 00:33:55,950 --> 00:33:58,250 như thế, MA cho Massachusetts và vv. 785 00:33:58,250 --> 00:34:00,520 Vì vậy, tôi sẽ đi một giá trị CHAR hai. 786 00:34:00,520 --> 00:34:03,080 >> Zip code là một trong những thú vị. 787 00:34:03,080 --> 00:34:06,679 Chúng tôi ở đây tại 02138, do đó đề nghị chúng ta nên sử dụng những gì? 788 00:34:06,679 --> 00:34:07,470 Đây là một INT, phải không? 789 00:34:07,470 --> 00:34:10,030 790 00:34:10,030 --> 00:34:12,800 INT, INT, ngắn? 791 00:34:12,800 --> 00:34:14,521 Ngắn sẽ làm việc. 792 00:34:14,521 --> 00:34:15,020 Không có? 793 00:34:15,020 --> 00:34:18,920 794 00:34:18,920 --> 00:34:20,870 CHAR hoặc năm, nhưng tôi muốn một INT. 795 00:34:20,870 --> 00:34:23,710 Tại sao đẩy lùi vào một INT? 796 00:34:23,710 --> 00:34:26,820 Thuyết phục tôi từ này. 797 00:34:26,820 --> 00:34:29,210 Có gì ngu ngốc về một INT, ý tưởng của tôi? 798 00:34:29,210 --> 00:34:29,871 Yeah. 799 00:34:29,871 --> 00:34:31,199 >> Đung Đi lên bộ nhớ hơn. 800 00:34:31,199 --> 00:34:32,909 >> DAVID Malan: Đi lên bộ nhớ hơn. 801 00:34:32,909 --> 00:34:35,310 Bốn byte, nhưng bạn đề xuất một mã zip 802 00:34:35,310 --> 00:34:39,000 như năm byte hoặc một người nào đó đã như một CHAR, mà cảm thấy như eh, đó không thực sự 803 00:34:39,000 --> 00:34:39,620 trường hợp. 804 00:34:39,620 --> 00:34:40,489 >> Vâng, câu chuyện vui vẻ. 805 00:34:40,489 --> 00:34:43,179 Nhiều năm trước, khi tôi sử dụng để sử dụng Microsoft Outlook cho email của tôi, 806 00:34:43,179 --> 00:34:45,150 Cuối cùng tôi muốn chuyển sang Gmail. 807 00:34:45,150 --> 00:34:48,949 Và như vậy, tôi xuất khẩu tất cả của tôi liên lạc từ Outlook như một tập tin CSV. 808 00:34:48,949 --> 00:34:50,699 Dấu phẩy tách giá trị, mà chỉ có nghĩa là tôi 809 00:34:50,699 --> 00:34:54,060 đã có tất cả tên bạn bè của tôi và cuối cùng tên và số điện thoại và mã zip 810 00:34:54,060 --> 00:34:54,747 và tất cả điều đó. 811 00:34:54,747 --> 00:34:56,580 Và sau đó tôi đã thực hiện các sai lầm của việc mở nó lên 812 00:34:56,580 --> 00:34:58,640 trong Excel, mà là một chương trình bảng tính 813 00:34:58,640 --> 00:35:00,289 hiểu các tập tin CSV như chúng ta đã thấy. 814 00:35:00,289 --> 00:35:03,080 Nhưng sau đó, tôi đã phải đánh, như, Lệnh hoặc điều khiển S tại một thời điểm. 815 00:35:03,080 --> 00:35:06,250 Và Excel rõ ràng vào thời điểm đó có một tính năng đó bất cứ lúc nào nó 816 00:35:06,250 --> 00:35:08,100 thấy một số, nó đã cố gắng để thể hữu ích. 817 00:35:08,100 --> 00:35:11,610 Và nếu con số đó bắt đầu với số không, nó sẽ chỉ để loại bỏ chúng. 818 00:35:11,610 --> 00:35:13,420 Tại sao bạn cần hàng đầu số không trên các số nguyên? 819 00:35:13,420 --> 00:35:15,140 Họ là vô nghĩa, về mặt toán học. 820 00:35:15,140 --> 00:35:17,530 Chúng không phải là vô nghĩa trong hệ thống Bưu điện Hoa Kỳ. 821 00:35:17,530 --> 00:35:19,954 Vì vậy, tôi đã có trong nhiều năm, cho đến ngày nay, tôi vẫn 822 00:35:19,954 --> 00:35:22,370 có những người bạn khi trường hợp hiếm hoi mà tôi cần một ai đó 823 00:35:22,370 --> 00:35:24,078 giải quyết những ngày này, Tôi vẫn sẽ thấy tôi rằng 824 00:35:24,078 --> 00:35:26,767 có một người bạn ở Cambridge, Massachusetts, 2138. 825 00:35:26,767 --> 00:35:29,350 Và nó gây phiền nhiễu nếu bạn cố gắng sắp xếp của lập trình 826 00:35:29,350 --> 00:35:30,975 tạo ra phong bì hoặc chỉ ghi nó xuống. 827 00:35:30,975 --> 00:35:33,599 Và đó là vì lý do này, Tôi đã chọn nhầm kiểu dữ liệu. 828 00:35:33,599 --> 00:35:34,490 Vì vậy, tôi thích ý tưởng của bạn. 829 00:35:34,490 --> 00:35:35,650 Hãy sử dụng một trường CHAR. 830 00:35:35,650 --> 00:35:38,340 Năm nhân vật, ngoại trừ có một trường hợp góc. 831 00:35:38,340 --> 00:35:42,220 Nếu bạn vẫn còn gửi mail, đôi khi zip mã những ngày này, 832 00:35:42,220 --> 00:35:45,360 họ, như thế, cộng với bốn. 833 00:35:45,360 --> 00:35:48,200 Vì vậy, chúng ta cần một dấu gạch ngang và sau đó chúng ta cần bốn con số nhiều hơn nữa. 834 00:35:48,200 --> 00:35:50,330 Vì vậy, phải trung thực, nó có thể đi nhiều cách khác nhau. 835 00:35:50,330 --> 00:35:52,371 >> Để bây giờ, tôi sẽ giữ nó đơn giản và tôi chỉ 836 00:35:52,371 --> 00:35:54,780 sẽ nói rằng đó là một năm giá trị CHAR và chúng tôi 837 00:35:54,780 --> 00:35:56,739 sẽ bỏ toàn bộ gạch ngang cộng với bốn. 838 00:35:56,739 --> 00:35:58,280 Nhưng đó là những loại cân bằng. 839 00:35:58,280 --> 00:36:00,196 Và bạn có thể nghĩ về vấn đề tương tự phát sinh 840 00:36:00,196 --> 00:36:01,860 với các số điện thoại hoặc các lĩnh vực khác. 841 00:36:01,860 --> 00:36:04,350 >> Và bây giờ, đây là thực sự một con đường dại mà đi xuống. 842 00:36:04,350 --> 00:36:08,000 Giả sử cả Rob và tôi và Hannah và Maria và [? Davon?] Và Andy 843 00:36:08,000 --> 00:36:12,820 và những người khác trên các nhân viên đều sống ở Cambridge, Massachusetts, 02138. 844 00:36:12,820 --> 00:36:17,970 Điều này thực sự cảm thấy ngu ngốc mà tôi thêm vào bảng người dùng của tôi, thành phố, tiểu bang, 845 00:36:17,970 --> 00:36:18,630 và zip. 846 00:36:18,630 --> 00:36:20,980 Tại sao? 847 00:36:20,980 --> 00:36:21,960 >> Đung [Không nghe thấy] 848 00:36:21,960 --> 00:36:22,918 >> DAVID Malan: Nói một lần nữa? 849 00:36:22,918 --> 00:36:24,310 Đung [Không nghe thấy] 850 00:36:24,310 --> 00:36:25,850 >> DAVID Malan: Họ luôn sẽ đi cùng nhau, đúng không? 851 00:36:25,850 --> 00:36:28,660 Khi nó quay ra, chúng ta thường nghĩ đây là trường hợp cho đến khi chúng tôi triệt 852 00:36:28,660 --> 00:36:30,570 tìm kiếm toàn bộ Mỹ, và chỉ ra rằng có 853 00:36:30,570 --> 00:36:32,653 một số mâu thuẫn nơi nhiều thị trấn có 854 00:36:32,653 --> 00:36:35,060 zip giống nhau, đó là lạ. 855 00:36:35,060 --> 00:36:40,580 Nhưng, nếu chúng ta định cho bây giờ mà 02138 luôn luôn là Cambridge, Massachusetts, 856 00:36:40,580 --> 00:36:44,910 tại sao trên thế giới bạn sẽ lưu trữ trong cơ sở dữ liệu của bạn Cambridge và MA và 02138 857 00:36:44,910 --> 00:36:49,357 cho tôi và cho Hannah và cho Rob và cho [? Davon?] Và cho những người sống 858 00:36:49,357 --> 00:36:51,190 đây ở Cambridge, nó hoàn toàn không cần thiết. 859 00:36:51,190 --> 00:36:54,480 >> Chúng ta nên tránh xa với chỉ lưu trữ những gì? 860 00:36:54,480 --> 00:36:55,610 Chỉ cần các mã zip. 861 00:36:55,610 --> 00:36:58,660 Nhưng sau đó, nếu chúng ta lưu trữ chỉ zip code, tôi muốn, có lẽ, 862 00:36:58,660 --> 00:37:02,160 cho trang web của tôi để biết nơi là 02138. 863 00:37:02,160 --> 00:37:03,910 Vì vậy, tôi cần một bảng khác. 864 00:37:03,910 --> 00:37:04,697 Và đó là OK. 865 00:37:04,697 --> 00:37:07,530 Và trên thực tế, đây là một trong những quá trình thiết kế của bảng thiết kế 866 00:37:07,530 --> 00:37:11,472 mà bạn sẽ làm trong PSet7 cũng nhờ đó mà bạn muốn yếu tố ra dữ liệu chung. 867 00:37:11,472 --> 00:37:14,430 Cũng giống như chúng ta đã được thanh toán ra mã phổ biến và bao thanh toán ra phổ biến 868 00:37:14,430 --> 00:37:17,380 phong cách từ CSS, đây quá trong cơ sở dữ liệu, 869 00:37:17,380 --> 00:37:21,180 nếu tôi chỉ cần 02138 để duy nhất xác định quê hương của ai đó, 870 00:37:21,180 --> 00:37:25,020 không lưu trữ Cambridge, Mass cho mỗi người sử dụng darn trong bảng của bạn. 871 00:37:25,020 --> 00:37:29,770 >> Thay vào đó, có một bảng riêng biệt gọi là Kéo khóa mà cần phải có những gì cột? 872 00:37:29,770 --> 00:37:33,490 Có lẽ là một trường ID, chỉ vì, cho các nguyên tắc chúng ta đang nói về hiện tại. 873 00:37:33,490 --> 00:37:35,720 Có lẽ là một lĩnh vực zip cho 02138. 874 00:37:35,720 --> 00:37:38,400 Và sau đó có lẽ những gì cột khác? 875 00:37:38,400 --> 00:37:42,950 Thành phố và tiểu bang, nhưng chỉ có một hàng cho 02138, một hàng cho 02.139, 876 00:37:42,950 --> 00:37:44,772 một hàng cho 90210. 877 00:37:44,772 --> 00:37:46,730 Và đó là nghĩa đen tất cả các mã zip Tôi biết. 878 00:37:46,730 --> 00:37:49,012 >> Vì vậy, bây giờ, những gì bạn có thể làm gì? 879 00:37:49,012 --> 00:37:51,220 Đây là vấn đề, bởi vì bây giờ tôi đã có hai bảng. 880 00:37:51,220 --> 00:37:54,660 Vì vậy, người dùng của tôi chủ yếu là ở đây, nhưng thông tin nhà nước thành phố của họ là 881 00:37:54,660 --> 00:37:55,390 ở đây. 882 00:37:55,390 --> 00:37:58,635 Vì vậy, nó quay ra với SQL, có thực sự là một cách để tham gia thông tin, 883 00:37:58,635 --> 00:38:00,470 và bạn sẽ thấy điều này trong PSet. 884 00:38:00,470 --> 00:38:03,000 >> Nhưng hóa ra bạn có thể làm một cái gì đó như thế này. 885 00:38:03,000 --> 00:38:10,501 CHỌN sao FROM users, JOIN kéo khóa ON người chấm zip bằng kéo khóa chấm zip. 886 00:38:10,501 --> 00:38:13,360 Đó là một chút dài dòng, thừa nhận, nhưng điều này chỉ 887 00:38:13,360 --> 00:38:17,590 có nghĩa là chọn tất cả mọi thứ từ quá trình lấy bảng người dùng của tôi 888 00:38:17,590 --> 00:38:19,580 và bảng kéo khóa của tôi. 889 00:38:19,580 --> 00:38:22,120 Tham chúng trên một trong những lĩnh vực mà họ có trong cột. 890 00:38:22,120 --> 00:38:24,780 Vì vậy, theo nghĩa đen làm một cái gì đó như thế này, và cho tôi trở lại 891 00:38:24,780 --> 00:38:27,360 một bảng tạm thời mới đó là rộng hơn, đó là lớn hơn, 892 00:38:27,360 --> 00:38:29,450 có tất cả các cột từ cả hai. 893 00:38:29,450 --> 00:38:33,510 Và rằng, khá đơn giản, sẽ là Cú pháp để làm một cái gì đó như thế này. 894 00:38:33,510 --> 00:38:35,540 >> Vì vậy, có điều này trước, nhưng có đi 895 00:38:35,540 --> 00:38:38,950 được quyết định thiết kế khác bạn sẽ phải thực hiện, không chỉ với các chỉ mục 896 00:38:38,950 --> 00:38:40,550 nhưng cũng chạy vào những thách thức. 897 00:38:40,550 --> 00:38:43,360 Trong thực tế, có một thách thức trong bất kỳ thiết kế cơ sở dữ liệu 898 00:38:43,360 --> 00:38:47,930 nhờ đó mà đôi khi hai người có thể muốn để truy cập vào các hàng cùng một cơ sở dữ liệu 899 00:38:47,930 --> 00:38:48,530 bàn. 900 00:38:48,530 --> 00:38:51,450 Vì vậy, đây là một cái gì đó mà chúng ta sẽ gặp phải trong PSet7 là tốt. 901 00:38:51,450 --> 00:38:54,686 >> Nhưng tôi nghĩ rằng tôi muốn nhìn vào một cuộc tấn công đó là có thể trong SQL. 902 00:38:54,686 --> 00:38:56,560 Một số là gì vấn đề có thể phát sinh? 903 00:38:56,560 --> 00:38:58,170 Vì vậy, bạn sẽ gặp phải điều này trong PSet7. 904 00:38:58,170 --> 00:39:01,874 Và chúng tôi cho bạn hoàn toàn những gì giải pháp mã hóa cho vấn đề này là. 905 00:39:01,874 --> 00:39:04,790 Nhưng nếu bạn tham gia một lớp trình độ cao hơn, đặc biệt là trong các hệ thống điều hành, 906 00:39:04,790 --> 00:39:06,950 bạn sẽ gặp phải một vấn đề của nguyên tử, 907 00:39:06,950 --> 00:39:10,080 các vấn đề cố gắng làm nhiều thứ cùng một lúc 908 00:39:10,080 --> 00:39:11,000 không bị gián đoạn. 909 00:39:11,000 --> 00:39:14,560 >> Và tôi nghĩ rằng tôi muốn giới thiệu này Ý tưởng cho PSet7 với một ẩn dụ 910 00:39:14,560 --> 00:39:18,160 Tôi học được rằng bản thân mình trong Margo Hệ thống điều hành của CS164 Seltzer 911 00:39:18,160 --> 00:39:18,990 lớp năm trước. 912 00:39:18,990 --> 00:39:22,230 Giả sử rằng bạn có một trong các ký túc xá tủ lạnh trong phòng ký túc xá của bạn hoặc bằng nhà, 913 00:39:22,230 --> 00:39:24,474 và bạn có một thiên hướng thực sự cho sữa. 914 00:39:24,474 --> 00:39:27,140 Và như vậy, bạn trở về nhà từ lớp một ngày, bạn mở tủ lạnh. 915 00:39:27,140 --> 00:39:27,620 Oh, chết tiệt. 916 00:39:27,620 --> 00:39:28,870 Không có sữa trong tủ lạnh. 917 00:39:28,870 --> 00:39:32,470 Vì vậy, bạn đóng tủ lạnh, khóa cửa, khóa ký túc xá của bạn, 918 00:39:32,470 --> 00:39:34,770 đi quanh góc CVS, có được trong đường dây, 919 00:39:34,770 --> 00:39:36,312 và bắt đầu kiểm tra ra cho một ít sữa. 920 00:39:36,312 --> 00:39:38,978 Và nó sẽ mất một thời gian, bởi vì những người tự kiểm tra chết tiệt 921 00:39:38,978 --> 00:39:40,570 quầy mất mãi mãi để sử dụng anyway. 922 00:39:40,570 --> 00:39:41,950 Vì vậy, trong khi đó, người bạn cùng phòng của bạn trở về nhà. 923 00:39:41,950 --> 00:39:43,470 Anh ta hoặc cô ấy thực sự thích sữa là tốt. 924 00:39:43,470 --> 00:39:45,520 Họ đi vào phòng ký túc xá, mở tủ lạnh, oh, darn nó. 925 00:39:45,520 --> 00:39:46,490 Không có nhiều sữa hơn. 926 00:39:46,490 --> 00:39:49,040 >> Vì vậy, anh ta hoặc cô ấy cũng đi quanh góc. 927 00:39:49,040 --> 00:39:51,670 Nhưng bây giờ, kể từ khi có giống như hai hoặc ba hoặc bốn CVSes gần đó, 928 00:39:51,670 --> 00:39:53,800 chúng xảy ra để đi đến một trong các những cái khác nhau tại quảng trường. 929 00:39:53,800 --> 00:39:55,830 Và vì vậy bây giờ, một vài phút sau đó, cả hai bạn 930 00:39:55,830 --> 00:39:58,060 trở về nhà và ugh, vấn đề tồi tệ nhất bao giờ hết. 931 00:39:58,060 --> 00:40:00,967 Bây giờ bạn có quá nhiều sữa bởi vì nó sẽ đi chua. 932 00:40:00,967 --> 00:40:03,050 Và bạn thích sữa, nhưng bạn không thực sự thích sữa. 933 00:40:03,050 --> 00:40:06,730 >> Vì vậy, bây giờ, đây là một tốn kém sai lầm bởi vì cả hai bạn 934 00:40:06,730 --> 00:40:09,870 đưa ra quyết định dựa trên nhà nước của một số biến mà 935 00:40:09,870 --> 00:40:12,660 là trong quá trình được thay đổi bởi các bạn, 936 00:40:12,660 --> 00:40:14,560 người khởi xướng sẽ có được sữa. 937 00:40:14,560 --> 00:40:17,785 Vì vậy, những gì có lẽ là một con người giải pháp cho vấn đề đó? 938 00:40:17,785 --> 00:40:18,660 Đung [Không nghe thấy] 939 00:40:18,660 --> 00:40:19,430 DAVID Malan: Để lại một lưu ý, phải không? 940 00:40:19,430 --> 00:40:21,850 Luôn luôn để lại một lưu ý, nếu bạn quen thuộc với chương trình đó. 941 00:40:21,850 --> 00:40:23,100 Có, có hai chúng tôi. 942 00:40:23,100 --> 00:40:25,940 Vì vậy, luôn luôn để lại một ghi chú, hoặc nghĩa đen khóa tủ lạnh 943 00:40:25,940 --> 00:40:28,602 với một số loại ổ khóa hoặc một cái gì đó trên đầu như thế. 944 00:40:28,602 --> 00:40:31,310 Nhưng đó là thực tế sẽ vấn đề quan trọng với thiết kế cơ sở dữ liệu, 945 00:40:31,310 --> 00:40:34,710 đặc biệt là khi bạn có thể có nhiều trình duyệt, nhiều máy tính xách tay, 946 00:40:34,710 --> 00:40:37,450 nhiều người sử dụng tất cả các cố gắng để cập nhật thông tin cùng lúc. 947 00:40:37,450 --> 00:40:40,590 Thông tin đặc biệt nhạy cảm như thông tin tài chính, 948 00:40:40,590 --> 00:40:43,350 theo đó với kinh doanh chứng khoán trang web như thế bạn sẽ được xây dựng, 949 00:40:43,350 --> 00:40:47,270 những gì nếu bạn muốn kiểm tra xem có bao nhiêu tiền bạn có và sau đó nếu bạn có đủ, 950 00:40:47,270 --> 00:40:48,490 mua một số cổ phiếu? 951 00:40:48,490 --> 00:40:50,899 >> Nhưng nếu ai đó có một tài khoản chung với bạn 952 00:40:50,899 --> 00:40:52,690 đồng thời là cố gắng để mua một số cổ phiếu? 953 00:40:52,690 --> 00:40:55,190 Vì vậy, anh ta hoặc cô ấy là kiểm tra số dư tài khoản, cả hai bạn 954 00:40:55,190 --> 00:40:57,540 lấy lại cùng Câu trả lời, không có sữa. 955 00:40:57,540 --> 00:41:00,580 Hoặc cả hai bạn lấy lại các câu trả lời, bạn có 100 $ trong tài khoản. 956 00:41:00,580 --> 00:41:04,680 Cả hai bạn cố gắng để đưa ra quyết định để mua một cổ phiếu của một số công ty chứng khoán. 957 00:41:04,680 --> 00:41:06,130 >> Và bây giờ, những gì sẽ xảy ra? 958 00:41:06,130 --> 00:41:07,140 Bạn có hai cổ phiếu? 959 00:41:07,140 --> 00:41:08,420 Bạn không có cổ phiếu? 960 00:41:08,420 --> 00:41:10,320 Các vấn đề như có thể phát sinh. 961 00:41:10,320 --> 00:41:11,755 Vì vậy, chúng ta sẽ gặp phải đó. 962 00:41:11,755 --> 00:41:14,630 Các cuộc tấn công SQL injection, may mắn, là một cái gì đó chúng tôi sẽ giúp bạn với, 963 00:41:14,630 --> 00:41:17,430 nhưng đây là tàn nhẫn phổ biến những ngày này vẫn còn. 964 00:41:17,430 --> 00:41:18,680 Vì vậy, đây chỉ là một ví dụ. 965 00:41:18,680 --> 00:41:21,290 Tôi không có tuyên bố rằng Hệ thống Harvard PIN là 966 00:41:21,290 --> 00:41:23,130 dễ bị tấn công đặc biệt này. 967 00:41:23,130 --> 00:41:24,160 Chúng tôi đã cố gắng. 968 00:41:24,160 --> 00:41:26,120 Nhưng, bạn biết rằng chúng tôi có một trường như thế này. 969 00:41:26,120 --> 00:41:29,620 Và Yale ID Net có một tương tự nhìn màn hình trong những ngày này. 970 00:41:29,620 --> 00:41:33,190 Và hóa ra, rằng có lẽ Hệ thống PIN được thực hiện trong PHP. 971 00:41:33,190 --> 00:41:37,050 >> Và nếu nó were-- nó not-- họ có thể có mã số đó trông như thế này. 972 00:41:37,050 --> 00:41:38,210 Họ có hai biến. 973 00:41:38,210 --> 00:41:42,495 Hãy cho tôi tên người dùng và mật khẩu từ biến toàn cầu bài siêu 974 00:41:42,495 --> 00:41:43,970 mà chúng tôi nói chuyện về trước. 975 00:41:43,970 --> 00:41:47,310 Có lẽ Harvard có một truy vấn như SELECT sao FROM users 976 00:41:47,310 --> 00:41:50,005 nơi tên người dùng bằng đó và mật khẩu bằng đó. 977 00:41:50,005 --> 00:41:51,880 Và nhận thấy rằng tôi chỉ là cắm nó vào sử dụng 978 00:41:51,880 --> 00:41:55,050 nẹp ký hiệu xoăn từ khác ngày, có nghĩa là chỉ cần cắm vào một giá trị 979 00:41:55,050 --> 00:41:55,550 chỗ này. 980 00:41:55,550 --> 00:41:57,449 Tôi không sử dụng các dấu hỏi kỹ thuật. 981 00:41:57,449 --> 00:41:59,240 Tôi không có bất kỳ thứ hai hoặc đối số thứ ba. 982 00:41:59,240 --> 00:42:02,350 Tôi chỉ là nghĩa đen xây dựng các chuỗi bản thân mình. 983 00:42:02,350 --> 00:42:04,930 >> Vấn đề này, tuy nhiên, là nếu ai đó thích một scroob, 984 00:42:04,930 --> 00:42:09,020 đó là một tham chiếu đến một bộ phim, đăng nhập với một cái gì đó như thế này, 985 00:42:09,020 --> 00:42:11,250 và tôi đã gỡ bỏ các dấu chấm mà thường bao che 986 00:42:11,250 --> 00:42:14,370 mật khẩu, nếu anh là đặc biệt độc hại 987 00:42:14,370 --> 00:42:18,860 và mật khẩu của mình có lẽ là 12345, mỗi bộ phim được gọi là "Spaceballs," 988 00:42:18,860 --> 00:42:21,970 nhưng ông phê bình loại một báo duy nhất sau năm, 989 00:42:21,970 --> 00:42:24,790 sau đó theo nghĩa đen của từ hoặc trong không gian, và sau đó báo giá, 990 00:42:24,790 --> 00:42:29,160 một unquote bằng một trích dẫn, nhưng việc thông báo ông đã bỏ qua những gì? 991 00:42:29,160 --> 00:42:32,700 Anh ta bỏ qua các báo trên bên phải và anh ta bỏ qua các báo trên bên trái. 992 00:42:32,700 --> 00:42:35,170 >> Bởi vì nếu kẻ tấn công này giả scroob của 993 00:42:35,170 --> 00:42:38,160 là những người đã viết mã PHP này là không quá sáng, 994 00:42:38,160 --> 00:42:42,990 có lẽ họ chỉ có một số duy nhất trích xung quanh nội suy 995 00:42:42,990 --> 00:42:45,210 của một biến trong dấu ngoặc nhọn? 996 00:42:45,210 --> 00:42:48,620 Và như vậy có lẽ, ông có thể loại các hoàn thành tư tưởng của họ 997 00:42:48,620 --> 00:42:53,290 cho họ, nhưng trong một cách đó là đi để cho anh ta tấn công vào hệ thống PIN. 998 00:42:53,290 --> 00:42:55,310 Nói cách khác, giả sử rằng đây là mã 999 00:42:55,310 --> 00:42:57,140 và bây giờ chúng tôi cắm vào những gì scroob gõ. 1000 00:42:57,140 --> 00:42:58,770 Và đó là màu đỏ, bởi vì nó là xấu. 1001 00:42:58,770 --> 00:43:01,310 >> Và các văn bản cơ bản là những gì ông đã gõ trong, 1002 00:43:01,310 --> 00:43:05,510 scroob có thể lừa máy chủ của Harvard vào việc xây dựng một truy vấn SQL 1003 00:43:05,510 --> 00:43:07,440 chuỗi đó trông như thế này. 1004 00:43:07,440 --> 00:43:11,760 Mật khẩu bằng 12345 hoặc một bằng với một. 1005 00:43:11,760 --> 00:43:14,820 Kết quả có, một cách logic, là điều này sẽ đăng nhập scroob 1006 00:43:14,820 --> 00:43:18,360 nhập nếu mật khẩu của mình là 12345 hoặc nếu một equals 1007 00:43:18,360 --> 00:43:22,660 một, đó là tất nhiên luôn luôn đúng, có nghĩa là scroob luôn được trong. 1008 00:43:22,660 --> 00:43:26,060 >> Và như vậy, con đường để sửa chữa này, như trong rất nhiều trường hợp, 1009 00:43:26,060 --> 00:43:28,140 sẽ được để viết phòng thủ. 1010 00:43:28,140 --> 00:43:30,390 Để sử dụng một cái gì đó giống như của chúng tôi chức năng truy vấn thực tế, trong đó 1011 00:43:30,390 --> 00:43:33,980 bạn sẽ thấy trong PSet7, nơi chúng tôi cắm một cái gì đó giống như câu hỏi đánh dấu ở đây. 1012 00:43:33,980 --> 00:43:35,980 Và vẻ đẹp của chức năng truy vấn mà chúng tôi 1013 00:43:35,980 --> 00:43:40,010 cung cấp cho bạn là nó bảo vệ chống lại các cái gọi là các cuộc tấn công SQL injection, nơi 1014 00:43:40,010 --> 00:43:44,260 ai đó đang lừa mã của bạn vào tiêm chích ma SQL của riêng mình. 1015 00:43:44,260 --> 00:43:47,380 Bởi vì những gì các chức năng truy vấn chúng tôi cung cấp cho bạn thực sự sẽ làm gì, 1016 00:43:47,380 --> 00:43:51,270 nếu bạn sử dụng cú pháp dấu hỏi và thứ hai và số thứ ba ở đây, 1017 00:43:51,270 --> 00:43:54,590 là những gì đã làm nó thêm vào đầu vào mà người dùng được cung cấp? 1018 00:43:54,590 --> 00:43:56,060 Những dấu gạch chéo ngược trích dẫn. 1019 00:43:56,060 --> 00:43:58,590 >> Vì vậy, nó thoát ra bất kỳ tiềm năng nhân vật nguy hiểm. 1020 00:43:58,590 --> 00:44:01,000 Điều này có vẻ kỳ lạ bây giờ, nhưng nó không phải là dễ bị tổn thương 1021 00:44:01,000 --> 00:44:03,260 bởi vì nó không thay đổi logic nữa 1022 00:44:03,260 --> 00:44:06,470 bởi vì đó là toàn bộ mật khẩu bây giờ là một giá duy nhất mà không phải, 1023 00:44:06,470 --> 00:44:07,596 trong thực tế, mật khẩu của scroob. 1024 00:44:07,596 --> 00:44:09,845 Vì vậy, đã có một số câu chuyện cười về điều này trong những năm qua. 1025 00:44:09,845 --> 00:44:12,570 Vì vậy, đây là một bức ảnh chụp của một số đam mê trong một bãi đậu xe 1026 00:44:12,570 --> 00:44:16,620 nhờ đó mà bạn có thể biết rằng một số thành phố và các quốc gia cố gắng để quét giấy phép của bạn 1027 00:44:16,620 --> 00:44:19,460 tấm để tính tiền cho bạn hoặc bạn có vé nếu bạn đi qua mà không có, như thế nào, 1028 00:44:19,460 --> 00:44:20,660 điều E-Z Pass. 1029 00:44:20,660 --> 00:44:24,490 Vì vậy, người này giả định rằng có lẽ những người viết các hệ thống E-Z đèo 1030 00:44:24,490 --> 00:44:28,240 là không quá sáng, và có lẽ họ chỉ nối với nhau một chuỗi, 1031 00:44:28,240 --> 00:44:32,190 để anh cô có thể không độc hại không chỉ hoàn thành tư tưởng của họ, 1032 00:44:32,190 --> 00:44:35,150 nhưng thực sự thực thi một lệnh xấu, mà chúng tôi đã không được đề cập, 1033 00:44:35,150 --> 00:44:36,380 nhưng bạn có thể đoán. 1034 00:44:36,380 --> 00:44:39,820 Rằng ngoài việc xóa và chèn và cập nhật và lựa chọn, 1035 00:44:39,820 --> 00:44:43,370 đó cũng là một từ khóa được gọi là thả, mà theo nghĩa đen sẽ xóa tất cả mọi thứ 1036 00:44:43,370 --> 00:44:45,300 trong cơ sở dữ liệu, mà là đặc biệt xấu. 1037 00:44:45,300 --> 00:44:48,760 >> Chúng tôi có thể phóng to này nếu đó là một chút khó khăn để xem. 1038 00:44:48,760 --> 00:44:52,300 Điều này, bây giờ, là một phim hoạt hình nổi tiếng đó là tuyệt vời thông minh hiện nay 1039 00:44:52,300 --> 00:44:53,145 và dễ hiểu. 1040 00:44:53,145 --> 00:45:00,880 1041 00:45:00,880 --> 00:45:04,750 >> [Cười] 1042 00:45:04,750 --> 00:45:05,910 >> Yeah, mát mẻ. 1043 00:45:05,910 --> 00:45:06,800 Loại geeking ra. 1044 00:45:06,800 --> 00:45:08,800 Vì vậy, những lúc đó là những Các cuộc tấn công SQL injection. 1045 00:45:08,800 --> 00:45:13,050 Và họ rất dễ dàng để tránh bằng cách sử dụng đúng mã số hoặc các thư viện ngay. 1046 00:45:13,050 --> 00:45:15,947 Và bạn sẽ thấy trong PSet7, đó là lý do tại sao chúng tôi cung cấp cho bạn các chức năng truy vấn. 1047 00:45:15,947 --> 00:45:17,780 Vì vậy, một vài teaser mà chúng tôi nghĩ rằng chúng tôi muốn 1048 00:45:17,780 --> 00:45:19,930 cung cấp cho bạn ở đây trong chúng tôi phút cùng còn lại. 1049 00:45:19,930 --> 00:45:24,030 Vì vậy, khi bạn nhớ từ tuần không, chúng tôi giới thiệu hai bóng đèn mà 1050 00:45:24,030 --> 00:45:26,610 là tốt đẹp, không chỉ vì họ đang khá và có nhiều màu sắc, 1051 00:45:26,610 --> 00:45:29,450 nhưng vì họ hỗ trợ một cái gì đó được gọi là một API, một ứng dụng 1052 00:45:29,450 --> 00:45:31,980 Programming Interface Và trong CS50 vậy, đến nay, chúng tôi đã 1053 00:45:31,980 --> 00:45:34,440 chủ yếu tập trung vào GET và POST, nhưng nó quay ra 1054 00:45:34,440 --> 00:45:37,390 có động từ khác như HTTP PUT. 1055 00:45:37,390 --> 00:45:39,430 >> Và trên thực tế, đây là một slide từ tuần zero 1056 00:45:39,430 --> 00:45:44,930 theo đó, nếu bạn viết mã mà gửi a la PSet6 một yêu cầu HTTP 1057 00:45:44,930 --> 00:45:49,647 trông như thế này với đoạn này của văn bản ở dưới cùng, được gọi là JSON, 1058 00:45:49,647 --> 00:45:52,230 hoặc JavaScript Object Notation rằng chúng ta sẽ nói về trong tuần tới, 1059 00:45:52,230 --> 00:45:57,030 bạn có thể bật hoặc tắt hoặc thay đổi màu sắc của đèn như những người. 1060 00:45:57,030 --> 00:46:00,480 Vì vậy, nếu CS50 cũng có thêm vào một số của những bóng đèn ở đây ở New Haven 1061 00:46:00,480 --> 00:46:02,480 nếu bạn muốn mượn họ cho dự án cuối cùng, 1062 00:46:02,480 --> 00:46:04,370 cũng có một số Microsoft Ban nhạc, mà cũng giống như 1063 00:46:04,370 --> 00:46:07,619 đồng hồ bạn đeo quanh cổ tay của bạn mà tương tự như có một API để bạn 1064 00:46:07,619 --> 00:46:10,040 có thể viết phần mềm riêng của bạn cho họ. 1065 00:46:10,040 --> 00:46:12,490 >> Chúng tôi có một tài khoản với Mã iOS của Apple như vậy 1066 00:46:12,490 --> 00:46:15,510 rằng nếu bạn có một Xem Apple hay một chiếc iPhone hoặc iPad hoặc iPod, 1067 00:46:15,510 --> 00:46:17,707 bạn có thể viết mã thực sự chạy trên những người. 1068 00:46:17,707 --> 00:46:19,540 Chúng tôi có cả một bó của Arduinos, đó là 1069 00:46:19,540 --> 00:46:22,010 máy tính nhỏ xíu nhỏ không có trường hợp, về cơ bản, 1070 00:46:22,010 --> 00:46:25,240 mà bạn có thể kết nối qua cổng USB, thường với máy Mac hoặc máy PC của bạn, 1071 00:46:25,240 --> 00:46:28,810 viết mã chạy trên các vật lý thiết bị đó thường có bộ cảm biến trên chúng 1072 00:46:28,810 --> 00:46:30,790 vì vậy bạn có thể tương tác với thế giới thực. 1073 00:46:30,790 --> 00:46:32,860 Chúng tôi có cả một bó các thiết bị Leap Motion, 1074 00:46:32,860 --> 00:46:36,500 đó là các thiết bị USB cho máy tính Mac và Máy tính cá nhân, ở đây và một lần nữa, ở New Haven. 1075 00:46:36,500 --> 00:46:40,080 Và nếu bạn kết nối nó với máy Mac của bạn, bạn thực sự có thể kiểm soát máy tính của bạn 1076 00:46:40,080 --> 00:46:42,550 bằng cách viết phần mềm đó thông qua sóng hồng ngoại, 1077 00:46:42,550 --> 00:46:46,360 con số ra nơi bàn tay con người của bạn, thậm chí không cần chạm vào bàn phím của bạn. 1078 00:46:46,360 --> 00:46:49,135 Chúng tôi nghĩ rằng chúng tôi muốn chia sẻ một cách nhanh chóng thoáng thấy lúc này, ví dụ. 1079 00:46:49,135 --> 00:46:51,428 >> [MUSIC CHƠI] 1080 00:46:51,428 --> 00:47:55,840 1081 00:47:55,840 --> 00:47:57,590 Vì vậy, chúng tôi có một toàn bộ bó của những điều này, 1082 00:47:57,590 --> 00:48:01,040 quá, gọi là dải cánh tay Myo mà bạn đặt trên cẳng tay của bạn 1083 00:48:01,040 --> 00:48:04,595 và sau đó bạn có thể kiểm soát thực hay thế giới ảo như thế này. 1084 00:48:04,595 --> 00:48:06,471 >> [MUSIC CHƠI] 1085 00:48:06,471 --> 00:49:17,580 1086 00:49:17,580 --> 00:49:20,920 Hoặc, chúng tôi cũng có một số Google Tông, mà là nghĩa đen, như, 1087 00:49:20,920 --> 00:49:24,841 một hộp các tông bạn có thể đặt trên của bạn khuôn mặt, nhưng chiếu trong điện thoại của bạn vào nó 1088 00:49:24,841 --> 00:49:27,590 để bạn đặt ly của bạn điện thoại thực sự gần gũi với đôi mắt của bạn. 1089 00:49:27,590 --> 00:49:30,190 Và Google Tông là đẹp, giá rẻ tại $ 10 hoặc $ 20. 1090 00:49:30,190 --> 00:49:32,230 Và nó có ống kính nhỏ mà hơi ra sự thay đổi 1091 00:49:32,230 --> 00:49:35,900 các hình ảnh trên màn hình cho con người của bạn mắt để cung cấp cho bạn một cảm giác về chiều sâu 1092 00:49:35,900 --> 00:49:39,550 để bạn thực sự có một 3D môi trường ở phía trước của bạn. 1093 00:49:39,550 --> 00:49:42,927 Chúng tôi cũng có một số Samsung Gear, mà là phiên bản đắt tiền hơn về điều này, 1094 00:49:42,927 --> 00:49:46,010 nhưng đó tương tự như vậy có thể trượt trong một Điện thoại Android và cung cấp cho bạn những ảo ảnh 1095 00:49:46,010 --> 00:49:48,309 of-- hoặc cung cấp cho các kinh nghiệm của thực tế ảo. 1096 00:49:48,309 --> 00:49:50,850 Và trong hai phút cuối cùng của chúng tôi, chúng tôi nghĩ rằng chúng tôi sẽ cố gắng để làm điều này. 1097 00:49:50,850 --> 00:49:55,250 Nếu tôi có thể trình chiếu những gì Colton có ở đây chỉ là để kích thích sự thèm ăn của bạn, 1098 00:49:55,250 --> 00:49:58,442 hãy để tôi đi trước và ném lên trên màn hình lớn ở đây. 1099 00:49:58,442 --> 00:49:59,400 Hãy để tôi giết đèn. 1100 00:49:59,400 --> 00:50:02,290 Colton, bạn có muốn đi trước và đặt trên di động của bạn cho một thời điểm 1101 00:50:02,290 --> 00:50:05,171 và đến trên để các giữa sân khấu? 1102 00:50:05,171 --> 00:50:07,420 Và bạn có muốn project-- đây là những gì Colton thấy. 1103 00:50:07,420 --> 00:50:10,560 >> Bây giờ, Wi-Fi ở đây là không quá mạnh mẽ cho thiết bị này 1104 00:50:10,560 --> 00:50:13,870 rằng đây là siêu hấp dẫn, nhưng Colton là nghĩa đen 1105 00:50:13,870 --> 00:50:15,710 ở vị trí tương lai huyền diệu này. 1106 00:50:15,710 --> 00:50:16,796 Ông chỉ nhìn thấy một hình ảnh. 1107 00:50:16,796 --> 00:50:19,920 Bạn đang nhìn thấy mắt trái và phải của mình rằng bộ não của mình được khâu lại với nhau 1108 00:50:19,920 --> 00:50:22,260 trong một không gian ba chiều môi trường trên khuôn mặt của mình. 1109 00:50:22,260 --> 00:50:24,319 Anh ấy chỉ được lựa chọn một trình đơn tùy chọn ở đây. 1110 00:50:24,319 --> 00:50:27,360 Và như vậy một lần nữa, anh mặc bộ tai nghe này với một điện thoại Samsung trên đó là 1111 00:50:27,360 --> 00:50:29,080 không dây chiếu để trên cao của chúng tôi. 1112 00:50:29,080 --> 00:50:30,349 Bây giờ bạn đang trên sao Hỏa, tôi nghĩ? 1113 00:50:30,349 --> 00:50:31,140 COLTON: Tôi nghĩ vậy. 1114 00:50:31,140 --> 00:50:32,181 Tôi không chắc chắn [không nghe được]. 1115 00:50:32,181 --> 00:50:34,250 [Cười] 1116 00:50:34,250 --> 00:50:36,374 >> DAVID Malan: Hóa ra Sao Hoả có các menu. 1117 00:50:36,374 --> 00:50:41,590 >> COLTON: [Không nghe thấy] một số mát mẻ nơi nếu chúng ta muốn đi đối với: 1118 00:50:41,590 --> 00:50:43,330 >> DAVID Malan: Nơi nào chúng ta muốn đi đâu? 1119 00:50:43,330 --> 00:50:45,837 >> COLTON: [Không nghe thấy] 1120 00:50:45,837 --> 00:50:48,170 DAVID Malan: Và chúng ta hãy xem nơi Colton của việc chúng ta hiện nay. 1121 00:50:48,170 --> 00:50:48,961 COLTON: [Không nghe thấy] 1122 00:50:48,961 --> 00:50:52,830 1123 00:50:52,830 --> 00:50:56,380 >> DAVID Malan: Vì vậy, có rất nhiều những nơi khác nhau, bạn có thể mất chính mình. 1124 00:50:56,380 --> 00:51:00,590 Có FAPIs thông qua đó bạn có thể viết các trò chơi hoặc tương tác 1125 00:51:00,590 --> 00:51:01,950 chạy, cuối cùng, trên điện thoại. 1126 00:51:01,950 --> 00:51:03,908 Vì vậy, bạn thực sự chỉ viết một ứng dụng điện thoại di động. 1127 00:51:03,908 --> 00:51:06,380 Nhưng nhờ vào những phần mềm và khả năng đồ họa, 1128 00:51:06,380 --> 00:51:08,765 Hiện tại Colton là trong này tiểu thủ nhỏ bé. 1129 00:51:08,765 --> 00:51:10,515 Và tại các nguy cơ áp đảo mình, 1130 00:51:10,515 --> 00:51:13,330 Colton và tôi sẽ dính vào xung quanh cho trong khi ở cuối lớp ở đây hôm nay 1131 00:51:13,330 --> 00:51:14,300 nếu bạn muốn đến và chơi. 1132 00:51:14,300 --> 00:51:16,350 Và chúng tôi sẽ mang lại cho họ trở lại vào tuần tới là tốt. 1133 00:51:16,350 --> 00:51:18,420 Không chậm trễ thêm nữa đó là nó cho ngày hôm nay. 1134 00:51:18,420 --> 00:51:21,990 Chúng tôi sẽ gặp bạn vào tuần tới. 1135 00:51:21,990 --> 00:51:24,140 >> [MUSIC - ragga TWINS, "BAD MAN"] 1136 00:51:24,140 --> 00:55:23,146