วิธีการหลัก MySQL จริง ๆ


13

ฉันใช้ MySQL เป็นระยะเวลาเท่ากันกับที่ฉันใช้ PHP อย่างไรก็ตามฉันรู้สึกมั่นใจเกี่ยวกับ PHP มากขึ้นอีก 10 เท่า หรือภาษาโปรแกรมอื่น ๆ แต่ฉันก็ดูเหมือนจะไม่เข้าใจ SQL จริงๆ ฉันหมายถึงฉันสามารถเลือกอัปเดตแทรกลบเข้าร่วมและอื่น ๆ แต่เมื่อพูดถึงสิ่งที่ซับซ้อนกว่าฉันหลงทาง วิธีเขียนคำสั่ง select ที่ซับซ้อนยิ่งขึ้นวิธีใช้ดัชนีอย่างถูกต้องใช้เอ็นจินที่ใช้เป็นต้น

ด้วยเหตุผลบางอย่างฉันพบว่า mysql docs ยากต่อการติดตาม แต่ php นั้นง่ายต่อการติดตาม

ฉันเริ่มคิดว่าบางทีสมองของฉันอาจมีสายในลักษณะที่ทำให้การเขียนโปรแกรมทำตั้งแต่ แต่ sql ทำให้สับสน ฉันไม่รู้ คนส่วนใหญ่คิดว่า Regex สับสนมาก แต่สำหรับฉันแล้วมันมีเหตุผลทางวิทยาศาสตร์มากกว่าการสร้างคำสั่ง sql โปรดอย่าเข้าใจฉันผิดฉันไม่ชอบ SQL ฉันชอบมันมากฉันแค่อยากจะเข้าใจมันให้ดีขึ้น

วิธีที่ดีที่สุด / เร็วที่สุดในการเป็นผู้เชี่ยวชาญ MySQL จริงๆ

เมื่อฉันพูดว่า "ปรมาจารย์" ฉันไม่ได้หมายถึงกูรูในหมู่ปรมาจารย์ฉันหมายถึงฉลาดพอที่จะหาคำถามส่วนใหญ่ที่ฉันถามด้วยตัวเองโดยไม่ต้องการความช่วยเหลือ


2
คุณกำลังพูดถึง SQL หรือ MySQL เพราะอาจแตกต่างกันมาก การตั้งค่าและการจัดการการจำลองแบบเป็นงานที่แตกต่างกันมากจากการเขียนแบบสอบถาม SQL ที่ซับซ้อน ฉันสงสัยว่านี่เป็นฟังก์ชั่นของเวลาเช่นกัน คุณเกือบจะใช้เวลาเขียน PHP มากกว่าที่คุณมี SQL อยู่แม้ว่าคุณจะใช้มันใน 'ระยะเวลาเท่ากัน' ก็ตาม
Steven Evers

@SnOrfus คุณมีจุดที่ดีเกี่ยวกับการเขียนโค้ดเพิ่มเติมใน PHP MySQL เป็นภาษาฐานข้อมูลเชิงสัมพันธ์เดียวที่ฉันเคยใช้ เมื่อฉันพูดว่า "SQL" ฉันแค่หมายถึงประเภทของภาษาโดยทั่วไป
JD Isaacks

ทำสิ่งที่มีประโยชน์ สำรวจปัญหาต่าง ๆ ที่คุณสามารถพบได้ในโลกแห่งความเป็นจริง วิธีนี้จะทำให้คุณสำรวจสถานการณ์ที่ซับซ้อนกว่าทฤษฎีตำราเรียน ทดสอบสิ่งต่าง ๆ ในคอนโซลและดูว่าคุณสามารถรับผลลัพธ์ที่คุณต้องการโดยไม่ต้องใช้ PHP หรือไม่ ตัวอย่างเช่นคลาสการแนะนำฐานข้อมูลฟรีที่ Stanford เปิดตัวมีแบบฝึกหัดที่ยอดเยี่ยมเกี่ยวกับเครือข่ายสังคม
James P.

ผู้คนจำนวนมากเกลียด PHP (ด้วยเหตุผลต่าง ๆ บางคนดีมาก) แต่เอกสารมันยอดเยี่ยม เหตุผลหนึ่งที่คุณพบเอกสาร PHP ที่ง่ายต่อการติดตามมากกว่าเอกสาร MySQL ไม่ใช่ลักษณะของภาษา แต่เป็นลักษณะของเอกสาร
TRiG

คำตอบ:


10

ใช้มัน

การปรับใช้วิธีการทำงานของฐานข้อมูลเชิงสัมพันธ์เป็นเรื่องยากสำหรับผู้คนจำนวนมาก - แต่มันมีค่ามาก เมื่อคุณทำงานกับ SQL มากขึ้นมันก็จะเข้าสู่สมองของคุณ ผลักดันตัวเองต่อไป

เมื่อสิ่งที่ดูเหมือนแปลกตรวจสอบ

ใน Chrome ฉันตั้งค่าเครื่องมือค้นหานี้ดังนั้นสิ่งที่ฉันต้องทำคือพิมพ์ "m [คำค้นหา]" เพื่อค้นหาเอกสาร (การค้นหาของ dev.mysql.com sucks): {google: baseURL} ค้นหา? {google: RLZ} {google: acceptedSuggestion} {google: originalQueryForSuggestion} sourceid = โครเมี่ยมและเช่น = {} inputEncoding & q = เว็บไซต์: dev.mysql.com/doc/refman/5.1/en+%s

หากเอกสารไม่มีคำตอบให้ดู #mysql บน freenode และดูว่ามีใครสามารถให้ข้อมูลเชิงลึกได้บ้าง

อ่าน!

เมื่อคุณเข้าใจว่าฐานข้อมูลเชิงสัมพันธ์ทำสิ่งนั้นได้อย่างไรคุณจะต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่ MySQL กำลังทำกับเคียวรีวิเศษที่คุณเขียน ฉันอยากจะแนะนำMySQL ประสิทธิภาพสูง - มันคุ้มค่ากับเวลาของคุณมาก


1
ข่าวดีก็คือฉันมีหนังสือที่คุณแนะนำอยู่แล้ว แต่ก็ยังไม่ผ่านมาก ขอบคุณ! +1 สำหรับคำแนะนำวิธีตั้งค่าการค้นหาโครเมี่ยม
JD Isaacks

ฉันมีหนังสือเล่มหนึ่งยังไม่ได้อ่านเลย
crosenblum

@tehShrike คุณทำอย่างนั้นกับโครเมี่ยมได้อย่างไร
jaybny

@ jaybny คลิกขวาที่แถบ url แล้วไปที่ "แก้ไขเครื่องมือค้นหา"
TehShrike

9

ก่อนอื่นทำความเข้าใจการเข้าร่วมอย่างละเอียด ไม่เพียงแค่ด้านในและด้านซ้ายเท่านั้น รู้ว่าการเข้าร่วมไขว้ทำอะไรและการรวมภายนอกเต็มรูปแบบ รู้ถึงสถานการณ์ที่จะทำให้คุณเลือกการเข้าร่วมประเภทใดประเภทหนึ่ง เข้าใจว่าพวกเขาไม่สามารถใช้แทนกันได้และแบบสอบถามที่ใช้การเข้าร่วมด้านซ้ายอาจส่งคืนผลลัพธ์ที่แตกต่างจากที่ใช้การเข้าร่วมภายใน (ใครจะคิดว่าจะเห็นได้ชัด แต่ฉันอ่านคำถามมากเกินไปที่ผู้คนในการแก้ปัญหาของพวกเขาลองสุ่มเข้าร่วมที่ต่างกัน)

ถัดไปจะเข้าใจมวลรวมและวิธีการทำงาน Mysql จะช่วยให้คุณไม่ต้องทำอะไรเป็นกลุ่มด้วยวิธีมาตรฐาน แต่มีวินัยในการกำหนดกลุ่มอย่างสมบูรณ์โดยข้ออย่างถูกต้อง มันจะช่วยให้คุณเข้าใจสิ่งที่คุณกำลังทำและจะทำให้ knowldge ของคุณสามารถถ่ายโอนไปยังฐานข้อมูลอื่นได้ง่ายขึ้น

เรียนรู้ว่าคำสั่ง case ทำอะไร

เมื่อทำแบบสอบถามที่ซับซ้อนเรียนรู้การทำงานเป็นชิ้น ๆ ตรวจสอบที่แต่ละชิ้นที่คุณมีผลลัพธ์ที่คุณคาดหวัง ตัวอย่างเช่นสมมติว่าคุณต้องเขียนแบบสอบถามการรายงานเกี่ยวกับคำสั่งซื้อที่ได้รับคืนภายใน 3 เดือนที่ผ่านมาและเหตุผลของการส่งคืนรวมถึงข้อมูลติดต่อสำหรับลูกค้า ขั้นตอนแรกคือการรับใบสั่งซื้อที่ส่งคืนภายในสามเดือนที่ผ่านมา เมื่อคุณรู้ว่าคุณมีสถานะของแข็งคุณสามารถเพิ่มข้อมูลเกี่ยวกับเหตุผลในการคืนสินค้า เมื่อคุณมีสถานะของแข็งคุณสามารถเพิ่มลูกค้าที่ส่งคืนได้ เมื่อคุณมีสถานะของแข็งนี้แล้วให้เพิ่มข้อมูลติดต่อของบุคคลนั้น ตรวจสอบผลลัพธ์ของคุณในแต่ละขั้นตอนและดูว่าเหมาะสมหรือไม่ ในกรณีนี้ฉันอาจต้องการจบด้วยระเบียนเดียวต่อการส่งคืน หากในระดับกลางใด ๆ จำนวนผลลัพธ์ขึ้นหรือลงคุณรู้ว่าคุณมีปัญหากับแบบสอบถาม บางครั้งในแบบเอกสารสำเร็จรูปคุณจะต้องการดูฟิลด์เพิ่มเติมเพื่อยืนยันว่าข้อมูลนั้นถูกต้องหรือไม่ ฉันใส่สิ่งเหล่านี้ลงในบรรทัดที่แยกต่างหากและคอมเม้นท์พวกเขาเมื่อฉันทำงานในขั้นตอนต่อไป (ลบพวกเขาออกเมื่อสิ้นสุดฉันรู้ว่าฉันถูก) เพื่อให้พวกเขาพร้อมที่จะดูอีกครั้งได้อย่างง่ายดายหากเพิ่มริ้วรอยอื่น คุณไม่สามารถทำการสืบค้นที่ซับซ้อนได้อย่างถูกต้องหากไม่เข้าใจอย่างถ่องแท้ว่าผลลัพธ์ของคุณควรเป็นอย่างไร คิดว่ามันดูโอเคเพราะมันส่งคืนผลลัพธ์บางอย่างเกือบจะรับประกันได้ว่าคุณมีผลลัพธ์ที่ไม่ถูกต้องเป็นส่วนที่ดีของเวลา m) ดังนั้นพวกเขาจึงพร้อมที่จะดูอีกครั้งได้อย่างง่ายดายหากเพิ่มรอยย่นอีกทำให้ข้อความค้นหาเป็นเรื่องตลก คุณไม่สามารถทำการสืบค้นที่ซับซ้อนได้อย่างถูกต้องหากไม่เข้าใจอย่างถ่องแท้ว่าผลลัพธ์ของคุณควรเป็นอย่างไร คิดว่ามันดูโอเคเพราะมันส่งคืนผลลัพธ์บางอย่างเกือบจะรับประกันได้ว่าคุณมีผลลัพธ์ที่ไม่ถูกต้องเป็นส่วนที่ดีของเวลา m) ดังนั้นพวกเขาจึงพร้อมที่จะดูอีกครั้งได้อย่างง่ายดายหากเพิ่มรอยย่นอีกทำให้ข้อความค้นหาเป็นเรื่องตลก คุณไม่สามารถทำการสืบค้นที่ซับซ้อนได้อย่างถูกต้องหากไม่เข้าใจอย่างถ่องแท้ว่าผลลัพธ์ของคุณควรเป็นอย่างไร คิดว่ามันดูโอเคเพราะมันส่งคืนผลลัพธ์บางอย่างเกือบจะรับประกันได้ว่าคุณมีผลลัพธ์ที่ไม่ถูกต้องเป็นส่วนที่ดีของเวลา

นี่คือรายการของสิ่งพื้นฐานบางอย่างที่คุณควรจะทำใน SQL โดยไม่ต้องคิดถึงมัน:

  1. ก่อนอื่นให้เลือกแบบตรงขึ้นโดยไม่มีการเข้าร่วม (และไม่เลือก *) แต่มีเงื่อนไขในการเลือก
  2. คุณควรรู้วิธีรวมสองตารางขึ้นไปและรับระเบียนที่อยู่ในตารางทั้งหมด
  3. คุณควรรู้วิธีรวมตารางสองตารางขึ้นไปและรับระเบียนที่อยู่ในตารางทั้งหมด แต่ส่งคืนระเบียนเดียวจากตารางที่มีหลายด้านของความสัมพันธ์แบบหนึ่ง - ต่อกลุ่ม
  4. คุณควรจะสามารถรับระเบียนในตารางเดียว แต่ไม่สามารถอยู่ในตารางที่เกี่ยวข้องได้
  5. คุณควรจะสามารถรวบรวมข้อมูลสำหรับรายงาน
  6. คุณควรจะสามารถแทรกหนึ่งระเบียนไปยังตาราง
  7. คุณควรจะสามารถอัปเดตหนึ่งระเบียนในตาราง
  8. คุณควรจะสามารถลบหนึ่งระเบียนในตาราง
  9. คุณควรจะสามารถแทรกกลุ่มของระเบียนไปยังตารางโดยไม่มีเคอร์เซอร์
  10. คุณควรจะสามารถอัปเดตกลุ่มของระเบียนในตารางโดยไม่มีเคอร์เซอร์
  11. คุณควรจะสามารถลบกลุ่มของระเบียนในตารางโดยไม่มีเคอร์เซอร์
  12. คุณควรจะสามารถดำเนินการหลายอย่างในหนึ่งธุรกรรมและจัดการกับดักข้อผิดพลาด
  13. คุณควรจะสามารถสร้างสหภาพของระเบียนและรู้ว่าเมื่อใดควรใช้ยูเนี่ยนรองสหภาพทั้งหมด
  14. คุณควรจะสามารถเปลี่ยนแปลงข้อมูลสำหรับหนึ่งฟิลด์ตามเกณฑ์บางอย่าง (โดยใช้ CASE)

เมื่อคุณรู้สึกคุ้นเคยกับความรู้ SQL พื้นฐานของคุณแล้วให้รู้จักโครงสร้างฐานข้อมูลของคุณ ฉันสามารถเขียนเคียวรีที่ซับซ้อนกับ dbs ที่ซับซ้อนมากที่ฉันสนับสนุนได้เร็วกว่าคนอื่น ๆ เพราะฉันเข้าใจโครงสร้างและไม่ต้องคิดเกี่ยวกับที่เก็บสิ่งต่าง ๆ หากคุณเข้าใจโครงสร้างของตารางและความสัมพันธ์กับคีย์ต่างประเทศและที่เก็บค่าการค้นหาและความหมายของคอลัมน์ (ไม่ใช่แค่ชื่อ แต่เป็นข้อมูลที่เก็บไว้ในนั้น) คุณสามารถเป็นผู้เชี่ยวชาญในการสอบถามฐานข้อมูลนั้น สิ่งแรกที่ฉันทำในงานใหม่ใด ๆ คือเข้าใจโครงสร้าง db อย่างถี่ถ้วน


3

ในความคิดของฉันเพื่อเรียนรู้ SQL (และนี่คือสิ่งที่คุณต้องการจริงๆ, เฉพาะข้อมูล MySQL สามารถมาได้ในภายหลัง), คุณควรลบตัวเองออกจากการควบคุมการเขียนโปรแกรมสไตล์ PHP คิดโดยเฉพาะในกระบวนทัศน์ของภาษาที่เปิดเผย:

SQL จะกำหนดสิ่งที่คุณต้องการไม่ใช่วิธีการ หากคุณสามารถลองลบสิ่งหลังออกทางจิตใจอดีตจะตามมาทันเวลา บทคัดย่อชั้นนี้ในใจของคุณและให้ MySQL (หรือ Oracle หรืออะไรก็ตาม) ต้องกังวลเกี่ยวกับวิธีการ

แอ็พพลิเคชันลอจิกสามารถเกิดขึ้นได้ใน SQL กับโค้ดโพรซีเดอร์ / OO ใน PHP ตัวอย่างเช่นเมื่อทำแบบสอบถามไปยังฐานข้อมูลสำหรับบางสิ่งคุณสามารถเข้าร่วมในตารางผู้ใช้อย่างสม่ำเสมอและอาจเป็นตารางสิทธิ์เพื่อให้แน่ใจว่าสิทธิ์ที่เหมาะสมแทนการทำแบบสอบถามล่วงหน้าหลายรายการ การแทรกสามารถทำได้ผ่านการเลือกที่คล้ายกัน ( insert into ... select ...) แทนค่าที่ตั้งชื่อเพื่อให้แน่ใจว่าการตรวจสอบข้อมูล

อย่างไรก็ตามฉันขอแนะนำให้มุ่งเน้นไปที่การคัดเลือกแบบดั้งเดิมและความเข้าใจการเลือกการฉายการเข้าร่วมการรวมและความแตกต่าง ในตอนท้ายของวันแนวความคิดตรงไปตรงมาและคุณสามารถบรรลุ 80% ของสิ่งที่คุณต้องการจะทำผ่านพวกเขา ส่วนที่เหลือสามารถปฏิบัติตาม


+1 สำหรับคำแนะนำที่ดีในวรรคที่ 2 และฉันไม่เคยคิดมาก่อนเลย!
JD Isaacks

2

วิธีที่เร็วที่สุดที่ฉันพบว่า "ปรมาจารย์" อะไรก็ตามที่ท้าทายตัวเองด้วย ใช้ชุดข้อมูลและจดบันทึกสิ่งต่าง ๆ ที่คุณต้องการสอบถามแปดถึงสิบ กลุ่มนักเรียนที่คุณอาจต้องการหาอายุเฉลี่ยของทุกคนจัดกลุ่มตามเกรดเฉลี่ยที่ปัดเศษเป็นจำนวนเต็มที่ใกล้ที่สุด จากนั้นเขียนแบบสอบถามสำหรับพวกเขา เริ่มต้นด้วยหนึ่งตารางจากนั้นเพิ่มมากขึ้น ข้อมูลการปฏิบัติเข้าร่วมและสร้างขึ้นในฟังก์ชั่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.