SQL คือทุกอย่างของเรา

อย่างที่คุณอาจเดาได้อยู่แล้ว คำสั่งทั้งหมดไปยังเซิร์ฟเวอร์ SQL สามารถกำหนดได้ผ่านคำสั่ง SQL ทุกอย่าง.

ทีมเหล่านี้แบ่งออกเป็น 4 กลุ่มอย่างเป็นทางการ:

  • คำสั่งนิยามข้อมูล (Data Definition Language, DDL ):

    • CREATEสร้างวัตถุฐานข้อมูล (ฐานข้อมูลเอง ตาราง มุมมอง ผู้ใช้ และอื่นๆ)
    • ALTERเปลี่ยนวัตถุ
    • DROPลบวัตถุ
  • ตัวดำเนินการจัดการข้อมูล (Data Manipulation Language, DML ):

    • SELECTเลือกข้อมูลที่ตรงตามเงื่อนไขที่กำหนด
    • INSERTเพิ่มข้อมูลใหม่
    • UPDATEเปลี่ยนแปลงข้อมูลที่มีอยู่
    • DELETEลบข้อมูล
  • ตัวดำเนินการข้อกำหนดการเข้าถึงข้อมูล (ภาษาควบคุมข้อมูล, DCL ):

    • GRANTให้สิทธิ์ผู้ใช้ (กลุ่ม) เพื่อดำเนินการบางอย่างกับวัตถุ
    • REVOKEเพิกถอนการอนุญาตที่ออกมาก่อนหน้านี้
    • DENYกำหนดข้อห้ามที่มีผลเหนือกว่าใบอนุญาต
  • คำสั่งTransaction Control Language ( TCL ) :

    • COMMITใช้การทำธุรกรรม
    • ROLLBACKย้อนกลับการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นในบริบทของธุรกรรมปัจจุบัน
    • SAVEPOINTแบ่งการทำธุรกรรมออกเป็นส่วนย่อยๆ

และสองระดับแรก เราศึกษาเฉพาะคำสั่ง SELECT ที่หลากหลาย ลองนึกดูว่าในอนาคตจะมีอะไรน่าสนใจรอเราอยู่มากมาย

แต่เรากำลังเตรียมที่นี่เป็นหลักเกี่ยวกับโปรแกรมเมอร์ Java ดังนั้นเราจะศึกษาสถานการณ์เหล่านั้นที่คุณจะต้องเจอในที่ทำงานอย่างแน่นอน

ผู้ดูแลระบบในโครงการมักจะสร้างฐานข้อมูลทั้งหมด แต่คุณจะต้องเลือกจากข้อมูลด้วยตัวเองหลายครั้ง

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

เรามาพูดถึงสิ่งที่เราได้สัมผัสในการบรรยายครั้งก่อนกันอีกครั้ง

การสร้างสคีมาในฐานข้อมูล

ในการสร้าง schema ใหม่ใน DBMS คุณต้องเรียกใช้คำสั่ง:

CREATE SCHEMA Name;

นี่เป็นตัวเลือกที่ง่ายที่สุด นอกจากนี้ เมื่อสร้างสคีมาใหม่ คุณสามารถระบุรูปแบบการเข้ารหัสข้อมูลและพารามิเตอร์อื่นๆ

หากคุณต้องการลบสคีมา แต่คุณไม่แน่ใจว่ามีอยู่หรือไม่ คุณต้องเรียกใช้คำสั่ง:

DROP SCHEMA IF EXIST Name;

คุณมักจะเห็นคำสั่งเหล่านี้ในไฟล์ที่มีข้อมูลสำรองของฐานข้อมูลต่างๆ นั่นเป็นเหตุผลที่ฉันนำมาไว้ที่นี่

การเลือกโครงร่างปัจจุบัน

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

  • ใส่ชื่อ schema ก่อนชื่อตารางเสมอ
  • ระบุสคีมาเริ่มต้น

มาเขียนแบบสอบถามที่จะเลือกข้อมูลจากตารางผู้ใช้ซึ่งอยู่ในสคีมาทดสอบ มันจะมีลักษณะดังนี้:

SELECT * FROM test.user;

นี่เป็นสิ่งที่ขาดไม่ได้หากคุณต้องการเข้าร่วม (JOIN) หลายตารางจากสคีมาที่แตกต่างกันในแบบสอบถามเดียว

อย่างไรก็ตามในภาษา Java เรามักจะทำสิ่งที่คล้ายกัน: หากในรหัสเราจำเป็นต้องใช้คลาสที่มีชื่อเดียวกันจากแพ็คเกจต่างๆ เราจะเพิ่มชื่อแพ็คเกจก่อนชื่อคลาส

วิธีที่สองคือการระบุสคีมาเริ่มต้น ถ้าคิวรีระบุชื่อตารางแต่ไม่มีสคีมา ระบบจะใช้สคีมาเริ่มต้น ในการทำเช่นนี้ ให้ใช้คำสั่ง USE :

USE name - schemes;

ลองเขียนแบบสอบถามก่อนหน้านี้ใหม่โดยใช้คำสั่ง USE:

USE test;
SELECT * FROM user;

การสร้างมุมมอง

นอกจากตารางที่มีข้อมูลจริงแล้ว SQL ยังให้คุณจัดเก็บบางอย่าง เช่น ตารางเสมือน ซึ่งข้อมูลจะถูกดึงมาจากตารางจริง ตารางเสมือนดังกล่าวเรียกว่า VIEW

ตารางดังกล่าวไม่สามารถเก็บข้อมูลจริงได้ และทุกครั้งที่มีการเข้าถึง ตารางดังกล่าวจะดึงข้อมูลจากตารางจริง เนื้อหาของ VIEW ดังกล่าวถูกระบุโดยใช้แบบสอบถาม SQL

คุณสามารถสร้าง VIEW จากแบบสอบถาม SELECT ด้วยคำสั่งเช่น:

CREATE VIEW Name AS
SELECT-request;
ลองเขียนแบบสอบถามที่จะสร้างตารางเสมือน public_employee ตามตารางพนักงาน ซึ่งข้อมูลเงินเดือนพนักงานจะถูกซ่อนไว้:
CREATE VIEW public_employee AS
SELECT id, name FROM employee

ในตัวอย่างข้างต้น ตารางของเรา (VIEW) public_employee จะมีเฉพาะรหัสพนักงานและชื่อเท่านั้น แต่ไม่มีข้อมูลเกี่ยวกับเงินเดือน คุณสามารถใช้มุมมองดังกล่าวในที่เดียวกับตารางจริง

เหตุใดจึงจำเป็นต้องมีการดู พวกเขามีข้อดีหลายประการ:

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

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

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

อ่านอย่างเดียว . มุมมองสามารถตั้งค่าได้ด้วยคิวรี SELECT เท่านั้น ดังนั้นการทำงานกับวิวจึงไม่สามารถเปลี่ยนแปลงข้อมูลในตารางจริงได้แต่อย่างใด อย่างไรก็ตาม นี่เป็นข้อดีอีกอย่างของการแคชข้อความค้นหา แต่ในครั้งต่อไป