SQL adalah segala-galanya

Seperti yang anda mungkin sudah meneka, semua arahan kepada pelayan SQL boleh diberikan melalui pertanyaan SQL. Semuanya.

Pasukan ini secara rasmi dibahagikan kepada 4 kumpulan:

  • pernyataan definisi data (Bahasa Definisi Data, DDL ):

    • CREATE mencipta objek pangkalan data (pangkalan data itu sendiri, jadual, paparan, pengguna dan sebagainya)
    • ALTER menukar objek
    • DROP mengalih keluar objek
  • pengendali manipulasi data (Bahasa Manipulasi Data, DML ):

    • SELECT memilih data yang memenuhi syarat yang diberikan
    • INSERT menambah data baharu
    • KEMASKINI mengubah data sedia ada
    • DELETE mengalih keluar data
  • pengendali definisi capaian data (Bahasa Kawalan Data, DCL ):

    • GRANT memberikan pengguna (kumpulan) kebenaran untuk melakukan operasi tertentu pada objek
    • BATALKAN membatalkan kebenaran yang dikeluarkan sebelum ini
    • DENY menetapkan larangan yang lebih diutamakan daripada permit
  • Penyataan Bahasa Kawalan Transaksi ( TCL ) :

    • COMMIT menggunakan transaksi
    • ROLLBACK menggulung semula semua perubahan yang dibuat dalam konteks transaksi semasa
    • SAVEPOINT membahagikan transaksi kepada bahagian yang lebih kecil

Dan dua peringkat pertama, kami hanya mengkaji jenis pernyataan SELECT. Bayangkan betapa banyak perkara menarik menanti kita pada masa hadapan.

Tetapi kami menyediakan di sini terutamanya tentang pengaturcara Java, jadi kami akan mengkaji senario yang anda pasti akan hadapi di tempat kerja.

Pentadbir sistem pada projek itu kemungkinan besar akan mencipta semua pangkalan data, tetapi anda pasti perlu membuat pilihan daripada data itu sendiri berkali-kali.

Selain itu, kadangkala kod anda tidak akan menulis semua data ke pangkalan data atau menulisnya dengan cara yang salah, jadi anda sering perlu memanjat ke dalamnya dengan pen dan melihat apa yang sebenarnya disimpan di sana.

Mari kita ulangi perkara yang kita sentuh dalam kuliah sebelum ini.

Mencipta skema dalam pangkalan data

Untuk mencipta skema baharu dalam DBMS, anda perlu menjalankan arahan:

CREATE SCHEMA Name;

Ini adalah pilihan yang paling mudah. Selain itu, apabila mencipta skema baharu, anda boleh menentukan format pengekodan data dan parameter lain.

Jika anda ingin memadamkan skema, tetapi anda tidak pasti sama ada ia wujud, maka anda perlu menjalankan arahan:

DROP SCHEMA IF EXIST Name;

Anda akan sering melihat arahan ini dalam fail dengan sandaran pangkalan data yang berbeza, itulah sebabnya saya membawanya ke sini.

Memilih skema semasa

Jika anda mempunyai banyak skema dalam DBMS anda, maka ia boleh berlaku dengan mudah bahawa skema yang berbeza mempunyai jadual yang sama. Untuk mengelakkan kekeliruan, anda boleh melakukan dua perkara:

  • Sentiasa letakkan nama skema sebelum nama jadual
  • Tentukan skema lalai

Mari tulis pertanyaan yang akan memilih data daripada jadual pengguna , yang terdapat dalam skema ujian . Ia akan kelihatan seperti ini:

SELECT * FROM test.user;

Ini amat diperlukan jika anda perlu menyertai (SERTAI) beberapa jadual daripada skema yang berbeza dalam satu pertanyaan.

Dengan cara ini, dalam bahasa Java kita sering melakukan sesuatu yang serupa: jika dalam kod kita perlu menggunakan kelas dengan nama yang sama dari pakej yang berbeza, kita menambah nama pakej sebelum nama kelas.

Cara kedua ialah dengan menentukan skema lalai . Jika pertanyaan menentukan nama jadual tetapi tiada skema, skema lalai digunakan. Untuk melakukan ini, gunakan pernyataan USE :

USE name - schemes;

Mari tulis semula pertanyaan sebelumnya menggunakan pernyataan USE:

USE test;
SELECT * FROM user;

Mencipta Pandangan

Selain jadual dengan data sebenar, SQL membolehkan anda menyimpan sesuatu seperti jadual maya, tempat data ditarik daripada jadual sebenar. Jadual maya sedemikian dipanggil VIEW.

Jadual sedemikian tidak boleh menyimpan data sebenar, dan setiap kali ia diakses, ia menarik data daripada jadual sebenar. Kandungan VIEW sedemikian ditentukan menggunakan pertanyaan SQL.

Anda boleh membuat VIEW daripada sebarang pertanyaan SELECT dengan arahan seperti:

CREATE VIEW Name AS
SELECT-request;
Mari tulis pertanyaan yang akan mencipta jadual maya public_employee berdasarkan jadual pekerja, di mana maklumat gaji pekerja akan disembunyikan:
CREATE VIEW public_employee AS
SELECT id, name FROM employee

Dalam contoh di atas, jadual (VIEW) public_employee kami hanya akan mengandungi ID pekerja dan nama mereka, tetapi bukan maklumat tentang gaji mereka. Anda boleh menggunakan Views sedemikian di tempat yang sama seperti jadual sebenar.

Mengapa Pandangan diperlukan? Mereka mempunyai beberapa kelebihan:

Kawalan fleksibel terhadap akses kepada maklumat . Anda boleh memberi pengguna tertentu akses hanya kepada VIEW, tetapi bukan untuk memberikan akses kepada jadual. Dan dalam View, keluarkan hanya maklumat awam daripada jadual. Di samping itu, jika lajur baharu dengan maklumat penting ditambahkan pada jadual pada masa hadapan, ia tidak akan masuk ke dalam Paparan secara tidak sengaja.

Penyahnormalan data . Untuk kemudahan penyimpanan, data sering dibahagikan kepada beratus-ratus dan beribu-ribu jadual, tetapi tidak begitu mudah untuk orang biasa bekerja dengan data sedemikian - anda perlu menulis pertanyaan yang terlalu rumit. Dengan View, anda boleh mencipta jadual maya yang memaparkan data daripada berpuluh-puluh jadual berbeza dalam satu jadual.

Polimorfisme dan Enkapsulasi . Anda boleh menukar struktur pangkalan data anda. Pada masa yang sama, pengguna program yang bekerja dengan Views anda tidak akan meneka bahawa sesuatu telah berubah. Dan tidak perlu menulis semula kod program yang mempunyai akses kepada View. Anda hanya perlu mengubah suai skrip SQL yang berkaitan dengan VIEW.

Baca sahaja . Paparan hanya boleh ditetapkan dengan pertanyaan SELECT, jadi bekerja dengan View tidak boleh mengubah data dalam jadual sebenar dalam apa jua cara. Ngomong-ngomong, ini adalah satu lagi kelebihan yang memihak kepada caching pertanyaan. Tetapi lebih lanjut mengenai itu lain kali.