Làm thế nào để thực sự làm chủ MySQL?


13

Tôi đã sử dụng mysql trong cùng khoảng thời gian tôi đã sử dụng PHP. Tuy nhiên tôi cảm thấy tự tin hơn gấp 10 lần về PHP; hoặc bất kỳ ngôn ngữ lập trình nào khác. Nhưng tôi dường như không thể thực sự nắm bắt được SQL. Ý tôi là, tôi có thể chọn, cập nhật, chèn, xóa, tham gia, v.v. nhưng khi nói đến những thứ phức tạp hơn thì tôi bị mất. Cách viết câu lệnh chọn phức tạp hơn, cách sử dụng chỉ mục đúng cách, sử dụng công cụ nào, v.v.

Vì một số lý do, tôi thực sự thấy các tài liệu mysql khó theo dõi, nhưng các tài liệu php dễ theo dõi.

Tôi bắt đầu nghĩ rằng có lẽ bộ não của tôi chỉ có dây theo cách khiến cho việc lập trình trở nên khó hiểu. Tôi không biết. Hầu hết mọi người nghĩ rằng Regex rất khó hiểu nhưng với tôi nó có ý nghĩa khoa học hơn là cách xây dựng một tuyên bố sql. Xin đừng hiểu sai ý tôi, tôi không ghét SQL, tôi thực sự thích nó, tôi chỉ muốn hiểu nó tốt hơn.

Cách tốt nhất / nhanh nhất để thực sự làm chủ MySQL là gì?

Khi tôi nói "bậc thầy", tôi không có nghĩa là bậc thầy trong số các bậc thầy, tôi có nghĩa là đủ thông minh để tự mình tìm ra hầu hết các câu hỏi mà tôi tự hỏi về SO mà không cần sự giúp đỡ.


2
Bạn đang nói về SQL hay MySQL, bởi vì chúng có thể là những thứ rất khác nhau. Thiết lập và quản trị nhân rộng là một nhiệm vụ rất khác với việc viết một truy vấn sql phức tạp. Tôi nghi ngờ rằng đây là một chức năng của thời gian là tốt. Bạn gần như chắc chắn đã dành nhiều thời gian để viết PHP hơn bạn có SQL, ngay cả khi bạn đã sử dụng chúng trong 'cùng một khoảng thời gian'.
Steven Evers

@SnOrfus Bạn có một điểm hay về việc viết thêm mã trong PHP. MySQL là ngôn ngữ cơ sở dữ liệu quan hệ duy nhất tôi từng sử dụng. Khi tôi nói "SQL", tôi chỉ có nghĩa là loại ngôn ngữ nói chung.
JD Isaacks

Làm những việc có ích. Khám phá những vấn đề khác nhau mà bạn có thể gặp phải trong thế giới thực. Bằng cách này, bạn sẽ dẫn bạn khám phá các kịch bản phức tạp hơn lý thuyết sách giáo khoa. Kiểm tra mọi thứ trong bảng điều khiển và xem liệu bạn có thể có được kết quả bạn muốn mà không cần sử dụng PHP không. Ví dụ, lớp giới thiệu cơ sở dữ liệu miễn phí mà Stanford đưa ra có một vài bài tập thú vị liên quan đến mạng xã hội.
James P.

Rất nhiều người ghét PHP (vì nhiều lý do, một số trong số họ rất tốt), nhưng tài liệu của nó rất tuyệt vời. Một lý do bạn thấy các tài liệu PHP dễ theo dõi hơn các tài liệu MySQL không phải là bản chất của các ngôn ngữ mà là bản chất của tài liệu.
TRiG

Câu trả lời:


10

Sử dụng nó

Nội bộ hóa cách thức cơ sở dữ liệu quan hệ làm việc là khó khăn đối với nhiều người - nhưng nó rất có giá trị. Khi bạn làm việc với SQL nhiều hơn, nó sẽ hoạt động theo cách của bạn vào bộ não của bạn. Hãy tiếp tục thúc đẩy bản thân.

Khi một cái gì đó có vẻ kỳ lạ, điều tra

Trong Chrome, tôi đã thiết lập công cụ tìm kiếm này để tất cả những gì tôi phải làm là nhập "m [truy vấn tìm kiếm]" để tìm kiếm tài liệu (tìm kiếm của dev.mysql.com): {google: baseURL} tìm kiếm? {Google: RLZ} {google: acceptSuggestion} {google: originalQueryForSuggestion} sourceid = chrome & eg = {inputEncoding} & q = site: dev.mysql.com/doc/refman/5.1/en+%s

Nếu các tài liệu không có câu trả lời, hãy truy cập #mysql trên freenode và xem ai đó có thể cung cấp một số thông tin chi tiết.

Đọc!

Khi bạn hiểu cách cơ sở dữ liệu quan hệ thực hiện công việc của mình, bạn sẽ muốn biết thêm một chút về những gì MySQL đang làm với những truy vấn ma thuật mà bạn đang viết. Tôi rất muốn giới thiệu MySQL hiệu suất cao - nó rất đáng để bạn dành thời gian.


1
À, tin tốt là tôi đã có cuốn sách mà bạn khuyên bạn chưa đọc hết. cảm ơn! +1 để được hướng dẫn cách thiết lập tìm kiếm chrome.
JD Isaacks

Tôi có cuốn sách, chưa đọc nó.
crosenblum

@tehShrike bạn đã làm điều đó như thế nào trên chrome?
jaybny

@jaybny nhấp chuột phải vào thanh url và chuyển đến "chỉnh sửa công cụ tìm kiếm"
TehShrike

9

Đầu tiên và quan trọng nhất, có được sự hiểu biết thấu đáo về tham gia. Không chỉ bên trong và bên trái tham gia. Biết những gì một tham gia chéo làm và tham gia bên ngoài đầy đủ. Biết các trường hợp sẽ khiến bạn chọn một loại tham gia cụ thể. Hiểu rằng chúng không thể thay thế cho nhau và truy vấn sử dụng phép nối trái có thể trả về các kết quả khác với kết quả sử dụng phép nối bên trong. (Mọi người sẽ nghĩ điều đó là hiển nhiên nhưng tôi đã đọc quá nhiều câu hỏi trong đó mọi người giải mã vấn đề của họ, hơi ngẫu nhiên thử các cách tham gia khác nhau.)

Tiếp theo thực sự hiểu tổng hợp và cách họ làm việc. Mysql sẽ cho phép bạn thoát khỏi việc không làm theo nhóm theo cách tiêu chuẩn. Nhưng có kỷ luật để xác định hoàn toàn nhóm theo mệnh đề đúng. Nó sẽ giúp bạn hiểu những gì bạn đang làm và sẽ làm cho kiến ​​thức của bạn dễ dàng chuyển sang các cơ sở dữ liệu khác.

Tìm hiểu những gì các tuyên bố trường hợp làm.

Khi thực hiện các truy vấn phức tạp, hãy học cách làm việc theo khối. Xác nhận tại mỗi đoạn mà bạn có kết quả mà bạn mong đợi. Vì vậy, ví dụ, giả sử bạn cần phải viết một truy vấn báo cáo về các đơn hàng đã được trả lại trong 3 tháng qua và lý do trả lại cũng như thông tin liên hệ cho khách hàng. Bước đầu tiên là nhận được các đơn đặt hàng được trả lại trong ba tháng qua. Một khi bạn biết bạn có chất rắn đó, bạn có thể thêm thông tin về lý do trả lại. Một khi bạn có sự vững chắc đó, bạn có thể thêm khách hàng đã trả lại nó. Một khi bạn có vững chắc, thêm thông tin liên lạc cho người đó. Ở mỗi giai đoạn, kiểm tra kết quả của bạn và xem nếu chúng có ý nghĩa. Trong trường hợp này, tôi có thể muốn kết thúc chỉ với một bản ghi cho mỗi đơn hàng được trả lại. Nếu ở bất kỳ giai đoạn trung gian nào, số lượng kết quả tăng hoặc giảm, bạn biết bạn có một vấn đề với truy vấn. Đôi khi trong các khối xây dựng, bạn sẽ muốn xem các trường bổ sung chỉ để xác minh xem thông tin có chính xác không. Tôi đặt chúng trên một dòng riêng biệt và nhận xét chúng khi tôi thực hiện bước tiếp theo (loại bỏ chúng ở cuối khi tôi biết tôi đúng) để chúng có thể nhìn thấy lại một cách dễ dàng nếu thêm một nếp nhăn làm cho truy vấn trở nên buồn cười. Bạn không thể thực hiện truy vấn phức tạp một cách chính xác mà không có sự hiểu biết thấu đáo về kết quả của bạn sẽ như thế nào. Nghĩ rằng nó có vẻ ổn vì nó trả về một số kết quả sẽ gần như đảm bảo rằng bạn có kết quả sai một phần thời gian tốt. m phải) để họ có thể gặp lại dễ dàng nếu thêm một nếp nhăn khác khiến cho truy vấn trở nên buồn cười. Bạn không thể thực hiện truy vấn phức tạp một cách chính xác mà không có sự hiểu biết thấu đáo về kết quả của bạn sẽ như thế nào. Nghĩ rằng nó có vẻ ổn vì nó trả về một số kết quả sẽ gần như đảm bảo rằng bạn có kết quả sai một phần thời gian tốt. m phải) để họ có thể gặp lại dễ dàng nếu thêm một nếp nhăn khác khiến cho truy vấn trở nên buồn cười. Bạn không thể thực hiện truy vấn phức tạp một cách chính xác mà không có sự hiểu biết thấu đáo về kết quả của bạn sẽ như thế nào. Nghĩ rằng nó có vẻ ổn vì nó trả về một số kết quả sẽ gần như đảm bảo rằng bạn có kết quả sai một phần thời gian tốt.

Dưới đây là danh sách một số điều cơ bản bạn có thể làm trong SQL mà không cần phải suy nghĩ về nó:

  1. Đầu tiên, chọn thẳng không có phép nối (và không chọn *) nhưng với điều kiện chọn
  2. Bạn nên biết cách kết hợp hai hoặc nhiều bảng và nhận các bản ghi trong tất cả các bảng
  3. Bạn nên biết cách kết hợp hai hoặc nhiều bảng và nhận các bản ghi trong tất cả các bảng nhưng chỉ trả lại một bản ghi từ bảng với nhiều mặt của mối quan hệ một-nhiều
  4. Bạn sẽ có thể lấy các bản ghi trong một bảng nhưng không có trong một bảng liên kết
  5. Bạn sẽ có thể Tổng hợp dữ liệu cho báo cáo
  6. Bạn sẽ có thể chèn một bản ghi vào bảng
  7. Bạn sẽ có thể cập nhật một bản ghi trong bảng
  8. Bạn sẽ có thể xóa một bản ghi trong bảng
  9. Bạn sẽ có thể chèn một nhóm các bản ghi vào một bảng mà không cần con trỏ
  10. Bạn sẽ có thể cập nhật một nhóm các bản ghi trong một bảng mà không cần con trỏ
  11. Bạn sẽ có thể xóa một nhóm các bản ghi trong một bảng mà không cần con trỏ
  12. Bạn sẽ có thể thực hiện nhiều hành động trong một giao dịch và xử lý bẫy lỗi
  13. Bạn sẽ có thể tạo liên minh các hồ sơ và biết khi nào nên sử dụng UNION vice UNION ALL
  14. Bạn sẽ có thể thay đổi dữ liệu cho một trường dựa trên một số tiêu chí (sử dụng CASE)

Khi bạn cảm thấy thoải mái với kiến ​​thức SQL cơ bản của mình, hãy tìm hiểu cấu trúc cơ sở dữ liệu của bạn. Tôi có thể viết các truy vấn phức tạp đối với các dbs rất phức tạp mà tôi hỗ trợ nhanh hơn nhiều so với những người khác vì tôi hiểu cấu trúc và không phải suy nghĩ về nơi lưu trữ mọi thứ. Nếu bạn hiểu cấu trúc bảng và các mối quan hệ khóa ngoài và nơi lưu trữ giá trị tra cứu và ý nghĩa của các cột (không chỉ tên của chúng mà cả dữ liệu được lưu giữ trong chúng) thì bạn có thể là chuyên gia truy vấn cơ sở dữ liệu đó. Điều đầu tiên tôi làm trong bất kỳ công việc mới nào là tìm hiểu kỹ cấu trúc db.


3

Theo ý kiến ​​của tôi để học SQL (và đây thực sự là những gì bạn đang hỏi, các chi tiết cụ thể của MySQL có thể đến sau), bạn nên loại bỏ bản thân khỏi luồng điều khiển của lập trình kiểu PHP. Hãy suy nghĩ cụ thể trong mô hình của các ngôn ngữ khai báo:

SQL định nghĩa những gì bạn muốn, không phải làm thế nào để làm điều đó. Nếu bạn có thể cố gắng loại bỏ cái sau, cái trước sẽ theo kịp. Tóm tắt lớp này trong tâm trí của bạn và để MySQL (hoặc Oracle hoặc bất cứ điều gì) lo lắng về cách .

Logic ứng dụng có thể xảy ra trong SQL so với mã thủ tục / OO trong PHP. Chẳng hạn, khi thực hiện truy vấn cơ sở dữ liệu cho một cái gì đó, bạn có thể liên tục tham gia vào bảng người dùng và có thể là bảng quyền để đảm bảo quyền thích hợp thay vì thực hiện nhiều truy vấn trước. Chèn có thể được thực hiện thông qua một lựa chọn tương tự (insert into ... select ... ) thay vì các giá trị được đặt tên để đảm bảo xác thực dữ liệu.

Dù sao, tôi đặc biệt khuyên bạn nên tập trung vào các nguyên tắc Codd và hiểu lựa chọn, dự đoán, tham gia, hợp nhất và khác biệt. Vào cuối ngày, các khái niệm rất đơn giản và bạn có thể hoàn thành 80% những gì bạn muốn làm thông qua chúng. Phần còn lại có thể làm theo.


+1 cho đoạn 2 lời khuyên tuyệt vời và tôi chưa bao giờ nghĩ về nó theo cách đó!
JD Isaacks

2

Cách nhanh nhất tôi tìm thấy để "làm chủ" bất cứ điều gì là thử thách bản thân với nó. Lấy một bộ dữ liệu và viết ra tám đến mười điều khác nhau mà bạn muốn truy vấn. Một nhóm học sinh bạn có thể muốn tìm độ tuổi trung bình của mọi người được nhóm theo điểm trung bình lớp được làm tròn đến số nguyên gần nhất. Sau đó viết các truy vấn cho họ. Bắt đầu với một bảng, sau đó thêm nhiều hơn. Thực hành dữ liệu tham gia và được xây dựng trong các chức năng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.