SQL là tất cả của chúng tôi

Như bạn có thể đã đoán, tất cả các lệnh cho máy chủ SQL có thể được đưa ra thông qua các truy vấn SQL. Mọi thứ.

Các đội này chính thức được chia thành 4 nhóm:

  • câu lệnh định nghĩa dữ liệu (Ngôn ngữ định nghĩa dữ liệu, DDL ):

    • CREATE tạo một đối tượng cơ sở dữ liệu (bản thân cơ sở dữ liệu, bảng, dạng xem, người dùng, v.v.)
    • ALTER thay đổi một đối tượng
    • DROP loại bỏ một đối tượng
  • toán tử thao tác dữ liệu ( Ngôn ngữ thao tác dữ liệu, DML ):

    • CHỌN chọn dữ liệu thỏa mãn các điều kiện nhất định
    • INSERT thêm dữ liệu mới
    • CẬP NHẬT thay đổi dữ liệu hiện có
    • DELETE xóa dữ liệu
  • toán tử định nghĩa truy cập dữ liệu (Ngôn ngữ điều khiển dữ liệu, DCL ):

    • GRANT cấp quyền cho người dùng (nhóm) để thực hiện các thao tác nhất định trên một đối tượng
    • REVOKE thu hồi các quyền đã cấp trước đó
    • DENY đặt lệnh cấm được ưu tiên hơn giấy phép
  • Câu lệnh Ngôn ngữ kiểm soát giao dịch ( TCL ) :

    • CAM KẾT áp dụng một giao dịch
    • ROLLBACK khôi phục tất cả các thay đổi được thực hiện trong ngữ cảnh của giao dịch hiện tại
    • SAVEPOINT chia giao dịch thành các phần nhỏ hơn

Và hai cấp độ đầu tiên, chúng tôi chỉ nghiên cứu các biến thể của câu lệnh SELECT. Hãy tưởng tượng có bao nhiêu điều thú vị đang chờ đợi chúng ta trong tương lai.

Nhưng chúng tôi đang chuẩn bị ở đây chủ yếu về các lập trình viên Java, vì vậy chúng tôi sẽ nghiên cứu những tình huống mà bạn chắc chắn sẽ gặp phải tại nơi làm việc.

Quản trị viên hệ thống của dự án rất có thể sẽ tạo tất cả các cơ sở dữ liệu, nhưng bạn chắc chắn sẽ phải tự mình lựa chọn dữ liệu nhiều lần.

Hơn nữa, đôi khi mã của bạn sẽ không ghi tất cả dữ liệu vào cơ sở dữ liệu hoặc ghi sai cách, vì vậy bạn sẽ thường phải trèo vào nó bằng bút và xem những gì thực sự được lưu trữ ở đó.

Chúng ta hãy xem lại những điều chúng ta đã đề cập trong các bài giảng trước một lần nữa.

Tạo lược đồ trong cơ sở dữ liệu

Để tạo một lược đồ mới trong DBMS, bạn cần chạy lệnh:

CREATE SCHEMA Name;

Đây là lựa chọn dễ dàng nhất. Ngoài ra, khi tạo một lược đồ mới, bạn có thể chỉ định định dạng mã hóa dữ liệu và các tham số khác.

Nếu bạn muốn xóa lược đồ nhưng không chắc nó có tồn tại hay không, thì bạn cần chạy lệnh:

DROP SCHEMA IF EXIST Name;

Bạn sẽ thường thấy các lệnh này trong các tệp có bản sao lưu của các cơ sở dữ liệu khác nhau, đó là lý do tại sao tôi mang chúng đến đây.

Chọn sơ đồ hiện tại

Nếu bạn có nhiều lược đồ trong DBMS, thì có thể dễ dàng xảy ra trường hợp các lược đồ khác nhau có cùng bảng. Để tránh nhầm lẫn, bạn có thể làm hai việc:

  • Luôn đặt tên lược đồ trước tên bảng
  • Chỉ định lược đồ mặc định

Hãy viết một truy vấn sẽ chọn dữ liệu từ bảng người dùng , bảng này nằm trong lược đồ thử nghiệm . Nó sẽ trông giống như thế này:

SELECT * FROM test.user;

Điều này đơn giản là không thể thiếu nếu bạn cần tham gia (THAM GIA) một số bảng từ các lược đồ khác nhau trong một truy vấn.

Nhân tiện, trong ngôn ngữ Java, chúng ta thường làm một việc tương tự: nếu trong mã chúng ta cần sử dụng các lớp có cùng tên từ các gói khác nhau, chúng ta sẽ thêm tên gói trước tên lớp.

Cách thứ hai là chỉ định lược đồ mặc định . Nếu truy vấn chỉ định tên bảng nhưng không có lược đồ, thì lược đồ mặc định sẽ được sử dụng. Để làm điều này, hãy sử dụng câu lệnh USE :

USE name - schemes;

Hãy viết lại truy vấn trước đó bằng cách sử dụng câu lệnh USE:

USE test;
SELECT * FROM user;

Tạo một View

Ngoài các bảng có dữ liệu thực, SQL cho phép bạn lưu trữ một số thứ như bảng ảo, nơi dữ liệu được lấy từ các bảng thực. Các bảng ảo như vậy được gọi là VIEW.

Một bảng như vậy không thể lưu trữ dữ liệu thực và mỗi khi nó được truy cập, nó sẽ lấy dữ liệu từ các bảng thực. Nội dung của một CHẾ ĐỘ XEM như vậy được chỉ định bằng truy vấn SQL.

Bạn có thể tạo CHẾ ĐỘ XEM từ bất kỳ truy vấn CHỌN nào bằng một lệnh như:

CREATE VIEW Name AS
SELECT-request;
Hãy viết một truy vấn sẽ tạo một bảng ảo public_employee dựa trên bảng employee, nơi thông tin lương của nhân viên sẽ bị ẩn:
CREATE VIEW public_employee AS
SELECT id, name FROM employee

Trong ví dụ trên, bảng (VIEW) public_employee của chúng ta sẽ chỉ chứa ID nhân viên và tên của họ chứ không chứa thông tin về mức lương của họ. Bạn có thể sử dụng các Chế độ xem như vậy ở cùng một nơi với các bảng thực.

Tại sao cần có Chế độ xem? Họ có một số lợi thế:

Kiểm soát linh hoạt truy cập thông tin . Bạn chỉ có thể cấp cho một số người dùng quyền truy cập vào XEM, nhưng không thể cấp quyền truy cập vào các bảng. Và trong Chế độ xem, chỉ lấy thông tin công khai từ các bảng. Ngoài ra, nếu các cột mới có thông tin quan trọng được thêm vào các bảng trong tương lai, nó sẽ không vô tình lọt vào Chế độ xem.

Dữ liệu không chuẩn hóa . Để thuận tiện cho việc lưu trữ, dữ liệu thường được chia thành hàng trăm, hàng nghìn bảng, nhưng một người bình thường không thuận tiện lắm khi làm việc với dữ liệu đó - bạn phải viết các truy vấn quá phức tạp. Với Dạng xem, bạn có thể tạo các bảng ảo hiển thị dữ liệu từ hàng chục bảng khác nhau trong một bảng.

Đa hình và đóng gói . Bạn có thể thay đổi cấu trúc cơ sở dữ liệu của mình. Đồng thời, người dùng chương trình làm việc với Chế độ xem của bạn sẽ không đoán được rằng có điều gì đó đã thay đổi. Và sẽ không cần phải viết lại mã của các chương trình có quyền truy cập vào Chế độ xem. Bạn sẽ chỉ cần chỉnh sửa tập lệnh SQL có liên quan đến VIEW.

Chỉ đọc . Chế độ xem chỉ có thể được đặt bằng truy vấn CHỌN, vì vậy làm việc với Chế độ xem không thể thay đổi dữ liệu trong bảng thực theo bất kỳ cách nào. Nhân tiện, đây là một điểm cộng khác có lợi cho bộ nhớ đệm truy vấn. Nhưng nhiều hơn về điều đó thời gian tới.