Đào tạo ngôn ngữ truy vấn SQL. Khái niệm cơ bản về sqlite và các tính năng của cơ sở dữ liệu này? Lịch sử của SQL

Từ tác giả: Họ gọi bạn là ấm trà à? Được rồi, vấn đề này có thể giải quyết được! Mỗi samovar đã từng là một ấm trà! Hay mọi người chuyên nghiệp đều từng là một ấm samovar? Không, lại có chuyện gì đó không ổn! Nói chung, MySQL dành cho người mới bắt đầu.

Tại sao người giả cần MySQL?

Nếu bạn đang có kế hoạch nghiêm túc kết nối cuộc sống của mình với Internet, thì ngay từ những bước đầu tiên trong “web” bạn sẽ bắt gặp DBMS này. MySQL có thể dễ dàng được gọi là hệ thống quản lý cơ sở dữ liệu “toàn Internet”. Không một tài nguyên nghiêm túc nào có thể làm được nếu không có nó; nó hiện diện trong bảng quản trị của mọi dịch vụ lưu trữ. Và hầu hết tất cả CMS phổ biến và thậm chí cả động cơ “tự chế” cũng được chế tạo với sự tham gia của nó.

Nói chung, bạn không thể làm gì nếu không có nền tảng này. Nhưng để nghiên cứu nó, bạn cũng cần có cách tiếp cận phù hợp, công cụ phù hợp và quan trọng nhất là sự khao khát và kiên nhẫn. Tôi hy vọng bạn có đủ các thành phần cuối cùng. Và hãy chuẩn bị cho việc não của bạn sôi lên và bốc hơi từ đầu bạn, giống như từ một chiếc ấm đun nước thực sự

Nhưng MySQL chỉ khó đối với những người chưa biết nếu bạn bắt đầu học nó không đúng cách. Bạn và tôi sẽ không phạm sai lầm như vậy và chúng ta sẽ bắt đầu làm quen với công nghệ này ngay từ đầu.

Các khái niệm cơ bản

Trước tiên, hãy điểm qua các khái niệm cơ bản mà chúng tôi sẽ đề cập trong ấn phẩm này:

Cơ sở dữ liệu (DB) là đơn vị thành phần chính của DBMS. Cơ sở dữ liệu bao gồm các bảng bao gồm các cột và bản ghi (hàng). Các ô được hình thành tại giao điểm chứa dữ liệu có cấu trúc thuộc một loại nhất định.

DBMS (hệ thống quản lý cơ sở dữ liệu) – một tập hợp tất cả module phần mềm cho việc quản trị cơ sở dữ liệu.

SQL là ngôn ngữ truy vấn có cấu trúc mà nhà phát triển “giao tiếp” với lõi DBMS (máy chủ). Giống như bất kỳ ngôn ngữ lập trình nào, SQL có cú pháp, bộ lệnh và toán tử riêng cũng như các kiểu dữ liệu được hỗ trợ.

Tôi nghĩ rằng kiến ​​thức lý thuyết là đủ để chúng ta bắt đầu. Chúng tôi sẽ “tô màu” những khoảng trống còn thiếu về lý thuyết bằng thực hành. Bây giờ tất cả những gì bạn phải làm là chọn đúng công cụ phần mềm.

Chọn đúng công cụ

Sau khi lục lọi toàn bộ các loại shell MySQL dành cho người mới bắt đầu, tôi nhận ra rằng chúng đơn giản là không tồn tại. Tất cả các sản phẩm phần mềm quản trị DBMS đều yêu cầu máy chủ cơ sở dữ liệu đã được cài đặt sẵn. Nói chung, một lần nữa tôi quyết định không phát minh ra “xe tay ga” và chọn gói Denwer nội địa. Bạn có thể tải xuống trên trang web chính thức.

Nó đã bao gồm tất cả các thành phần của DBMS, cho phép người mới bắt đầu làm quen thực tế với MySQL ngay sau khi cài đặt đơn giản và dễ hiểu. Ngoài ra, Denwer còn bao gồm một số công cụ cần thiết khác cho nhà phát triển mới làm quen: Máy chủ cục bộ,PHP.

Những bước đầu tiên

Tôi sẽ không mô tả quá trình cài đặt của bộ “quý ông”, vì mọi thứ diễn ra tự động ở đó. Sau khi khởi chạy cài đặt, chỉ có thời gian để nhấn các phím cần thiết. Đúng thứ bạn cần trong phiên bản MySQL dành cho người mới sử dụng.

Khi quá trình cài đặt hoàn tất, hãy khởi động máy chủ cục bộ, đợi vài giây. Sau đó, quay số thanh địa chỉ trình duyệt localhost.

Trên trang “Hoan hô, nó hoạt động rồi!” theo một trong các liên kết hiển thị trong hình. Sau đó, bạn sẽ được đưa đến phpMyAdmin - một shell để quản trị cơ sở dữ liệu.

Bằng cách nhấp vào liên kết http://downloads.mysql.com/docs/world.sql.zip, bạn sẽ tải xuống cơ sở dữ liệu thử nghiệm mẫu từ trang web chính thức của MySQL. Truy cập lại phpMyAdmin, trong menu chính ở trên cùng, chuyển đến tab “Nhập”. Trong cửa sổ Nhập vào hiện tại, ở phần đầu tiên (Tệp cần nhập), đặt giá trị thành Duyệt qua máy tính của bạn.

Trong cửa sổ Explorer, chọn kho lưu trữ có cơ sở dữ liệu mẫu đã tải xuống. Đừng quên nhấp vào "Ok" ở cuối cửa sổ chính.

Tôi khuyên bạn không nên thay đổi các giá trị tham số đã chỉ định vào lúc này. Điều này có thể dẫn đến hiển thị không chính xác dữ liệu nguồn đã nhập. Nếu hệ thống phpMyAdmin phát sinh lỗi không thể nhận dạng thuật toán nén cơ sở dữ liệu thì hãy giải nén và lặp lại toàn bộ quá trình nhập từ đầu.

Nếu mọi thứ suôn sẻ, thì một thông báo chương trình sẽ xuất hiện ở trên cùng cho biết quá trình nhập đã thành công và một thông báo khác (từ) sẽ xuất hiện ở bên trái trong danh sách cơ sở dữ liệu.

Chúng ta hãy nhìn vào cấu trúc của nó từ bên trong để bạn có thể hình dung rõ ràng hơn những gì bạn phải giải quyết.

Bấm vào tên cơ sở dữ liệu MySQL cho người mới bắt đầu. Một danh sách các bảng chứa nó sẽ được hiển thị bên dưới nó. Bấm vào một trong số họ. Sau đó vào mục menu trên cùng “Cấu trúc”. Vùng làm việc chính sẽ hiển thị cấu trúc bảng: tên tất cả các cột, kiểu dữ liệu và tất cả các thuộc tính.

Tôi xin giới thiệu với các bạn bản dịch miễn phí của bài viết SQL dành cho người mới bắt đầu

Hơn ứng dụng web hiện đại tương tác với cơ sở dữ liệu, thường sử dụng ngôn ngữ SQL. May mắn cho chúng ta là ngôn ngữ này khá dễ học. Trong bài viết này, chúng ta sẽ bắt đầu tìm hiểu những kiến ​​thức cơ bản về truy vấn SQL và cách chúng tương tác với cơ sở dữ liệu. MySQL.

Những gì bạn cần

SQL ( ngôn ngữ có cấu trúc truy vấn) là ngôn ngữ được thiết kế để tương tác với các hệ thống quản lý cơ sở dữ liệu quan hệ (DBMS), chẳng hạn như MySQL, Oracle, Sqlite và những người khác. Để chạy các truy vấn SQL trong bài viết này, tôi giả sử bạn có MySQL. Tôi cũng khuyên bạn nên sử dụng phpMyAdmin Làm sao hỗ trợ trực quan hiển thị cho MySQL.

Các ứng dụng sau đây sẽ giúp bạn dễ dàng cài đặt MySQLphpMyAdmin tới máy tính của bạn:

  • WAMP cho Windows
  • MAMP cho Mac

Hãy bắt đầu thực hiện các truy vấn trên dòng lệnh. WAMPđã chứa nó trong bảng điều khiển MySQL. Vì MAMP, bạn có thể cần phải đọc điều này.

TẠO CƠ SỞ DỮ LIỆU: Tạo cơ sở dữ liệu

Yêu cầu đầu tiên của chúng tôi. Chúng tôi sẽ tạo một cơ sở dữ liệu mà chúng tôi sẽ làm việc.

Trước hết hãy mở bảng điều khiển MySQL và đăng nhập. Vì WAMP, theo mặc định, được sử dụng mật khẩu trống. Vì MAMP Mật khẩu phải là "root".

Sau khi đăng nhập, gõ yêu cầu này và nhấp vào Đi vào:

TẠO CƠ SỞ DỮ LIỆU my_first_db;

Lưu ý rằng dấu chấm phẩy (;) được thêm vào cuối truy vấn, giống như ở cuối dòng trong mã.

Ngoài ra, từ khóa TẠO NÊN CƠ SỞ DỮ LIỆU không phân biệt chữ hoa chữ thường, giống như tất cả các từ khóa trong SQL. Nhưng chúng tôi sẽ viết chúng bằng chữ hoa để cải thiện khả năng đọc.

Lưu ý: bộ ký tự và thứ tự đối chiếu

Nếu bạn muốn đặt bộ ký tự mặc định và thứ tự đối chiếu, hãy sử dụng truy vấn như sau:

TẠO CƠ SỞ DỮ LIỆU my_first_db BỘ KÝ TỰ MẶC ĐỊNH utf8 THU THẬP utf8_general_ci;

Bạn sẽ tìm thấy danh sách các bộ ký tự và bộ ký tự được hỗ trợ trong MySQL.

HIỂN THỊ CƠ SỞ DỮ LIỆU: Danh sách tất cả các cơ sở dữ liệu

Truy vấn này được sử dụng để hiển thị tất cả các cơ sở dữ liệu.

DROP DATABASE: Bỏ cơ sở dữ liệu

Với truy vấn này, bạn có thể xóa cơ sở dữ liệu hiện có.

Hãy cẩn thận với yêu cầu này vì nó không tạo ra bất kỳ cảnh báo nào. Nếu bạn có bảng và dữ liệu trong cơ sở dữ liệu, truy vấn sẽ xóa tất cả chúng ngay lập tức.

Từ quan điểm kỹ thuật, đây không phải là một yêu cầu. Đây là một "toán tử" và không yêu cầu dấu chấm phẩy ở cuối.

Anh ta báo cáo MySQL rằng bạn cần chọn cơ sở dữ liệu mặc định và làm việc với nó cho đến khi kết thúc phiên. Bây giờ chúng ta đã sẵn sàng tạo các bảng và mọi thứ khác trong cơ sở dữ liệu này.

Bảng cơ sở dữ liệu là gì?

Bạn có thể coi bảng trong cơ sở dữ liệu là bảng thông thường hoặc dưới dạng tệp csv có dữ liệu có cấu trúc.

Như trong ví dụ này, bảng có tên hàng và cột dữ liệu. Sử dụng truy vấn SQL, chúng ta có thể tạo bảng này. Chúng ta cũng có thể thêm, đọc, thay đổi và xóa dữ liệu.

TẠO BẢNG: Tạo bảng

Với truy vấn này, chúng ta có thể tạo một bảng trong cơ sở dữ liệu. Thật không may, tài liệu cho MySQL không thân thiện lắm với người dùng mới. Cấu trúc của truy vấn này có thể rất phức tạp nhưng chúng ta sẽ bắt đầu đơn giản.

Truy vấn sau đây tạo một bảng có hai cột.

TẠO người dùng BẢNG (tên người dùng VARCHAR(20), create_date DATE);

Lưu ý rằng chúng ta có thể viết truy vấn trên nhiều dòng và sử dụng Chuyển hướngđể thụt lề.

Dòng đầu tiên rất đơn giản. Chúng tôi tạo một bảng có tên người dùng. Tiếp theo, các cột trong bảng được liệt kê trong dấu ngoặc đơn, cách nhau bằng dấu phẩy. Mỗi tên cột được theo sau bởi một kiểu dữ liệu, ví dụ: VARCHAR hoặc NGÀY.

VARCHAR(20) có nghĩa là cột là kiểu chuỗi và có thể dài không quá 20 ký tự. NGÀY- kiểu dữ liệu dùng để lưu trữ ngày ở định dạng: "YYYY-MM-DD".

Khóa chính

Trước khi chạy truy vấn này, chúng ta phải chèn một cột tên người dùng, đây sẽ là khóa chính (KHÓA CHÍNH). Không đi sâu vào chi tiết, bạn có thể coi khóa chính là cách để xác định từng hàng dữ liệu trong bảng.

Yêu cầu trở thành như thế này:

TẠO người dùng BẢNG (user_id INT AUTO_INCREMENT PRIMARY KEY, tên người dùng VARCHAR(20), create_date DATE);

INT- 32 bit kiểu số nguyên(số). AUTO_INCREMENT tự động tạo số id mới mỗi khi thêm hàng dữ liệu. Nó không cần thiết, nhưng nó thuận tiện hơn.

Cột này có thể không phải là số nguyên, mặc dù đây là kiểu dữ liệu phổ biến nhất. Cột khóa chính là tùy chọn nhưng được khuyến nghị để cải thiện hiệu suất và kiến ​​trúc cơ sở dữ liệu.

Hãy chạy truy vấn:

HIỂN THỊ BẢNG: Liệt kê tất cả các bảng

Truy vấn cho phép bạn lấy danh sách tất cả các bảng trong cơ sở dữ liệu hiện tại.

GIẢI THÍCH: Hiển thị cấu trúc bảng

Sử dụng truy vấn này để xem cấu trúc của bảng hiện có.

Kết quả hiển thị các trường (cột) và thuộc tính của chúng.

DROP TABLE: Bỏ bảng

Giống BỎ CƠ SỞ DỮ LIỆU, truy vấn này sẽ xóa bảng và nội dung của nó mà không có bất kỳ cảnh báo nào.

ALTER TABLE: Thay đổi bảng

Một truy vấn như vậy có thể có cấu trúc phức tạp vì nó có thể thực hiện nhiều thay đổi đối với bảng. Hãy xem xét các ví dụ đơn giản.

Nhờ khả năng đọc SQL, truy vấn này không cần giải thích.

Việc loại bỏ cũng dễ dàng như vậy. Sử dụng yêu cầu một cách thận trọng; dữ liệu sẽ bị xóa mà không có cảnh báo.

Hãy thêm lại trường e-mail, sau này bạn sẽ cần nó:

Người dùng ALTER TABLE THÊM email VARCHAR(100) SAU tên người dùng;

Đôi khi bạn có thể cần thay đổi các thuộc tính của một cột; để thực hiện việc này, bạn không cần phải xóa nó và tạo lại nó.

Yêu cầu này đổi tên trường tên tài khoản V. tên tài khoản và thay đổi loại của nó từ VARCHAR(20) TRÊN VARCHAR(30). Những thay đổi như vậy không ảnh hưởng đến dữ liệu trong bảng.

INSERT: Thêm dữ liệu vào bảng

Hãy thêm bản ghi vào bảng bằng truy vấn.

Bạn có thể thấy, GIÁ TRỊ() chứa danh sách các giá trị được phân tách bằng dấu phẩy. Các giá trị chuỗi được đặt trong dấu ngoặc đơn. Các giá trị phải tuân theo thứ tự được chỉ định khi tạo bảng.

Lưu ý rằng giá trị đầu tiên là VÔ GIÁ TRỊ cho khóa chính có trường mà chúng tôi đặt tên tên người dùng. Tất cả chỉ vì trường được đánh dấu là AUTO_INCREMENT và id được tạo tự động. Hàng dữ liệu đầu tiên sẽ có id là 1. Hàng tiếp theo được thêm vào sẽ là 2, v.v.

Cú pháp thay thế

Đây là một cú pháp khác để chèn hàng.

Lần này chúng tôi sử dụng từ khóa BỘ thay vì GIÁ TRỊ. Chúng ta hãy lưu ý một số điều:

  • Cột có thể được bỏ qua. Ví dụ: chúng tôi không gán giá trị cho trường tên người dùng, bởi vì nó được đánh dấu là AUTO_INCREMENT. Nếu bạn không gán giá trị cho trường có loại VARCHAR, thì mặc định nó sẽ lấy giá trị dòng trống(nếu giá trị mặc định khác không được chỉ định khi tạo bảng).
  • Mỗi cột có thể được truy cập theo tên. Do đó, các trường có thể theo bất kỳ thứ tự nào, không giống như cú pháp trước đó.

Cú pháp thay thế số 2

Đây là một ví dụ khác.

Như trước đây, các trường có thể được truy cập theo tên và có thể theo bất kỳ thứ tự nào.

Sử dụng truy vấn này để chèn id của hàng cuối cùng.

HIỆN NAY()

Đã đến lúc hướng dẫn bạn cách sử dụng các chức năng MySQL trong các yêu cầu.

Chức năng HIỆN NAY() trả về ngày hiện tại. Sử dụng nó cho tự động thêm ngày hiện tại trong một trường có loại NGÀY.

Xin lưu ý rằng chúng tôi đã nhận được cảnh báo từ MySQL, nhưng điều đó không quan trọng lắm. Nguyên nhân là do chức năng HIỆN NAY() thực sự trả về thông tin thời gian.

Chúng tôi đã tạo một trường tạo_ngày, chỉ có thể chứa ngày chứ không thể chứa thời gian, vì vậy dữ liệu đã bị cắt bớt. Thay vì HIỆN NAY() chúng ta có thể sử dụng CURDATE(), chỉ trả về ngày hiện tại, nhưng cuối cùng kết quả sẽ giống nhau.

CHỌN: Lấy dữ liệu từ một bảng

Rõ ràng, dữ liệu chúng ta viết ra sẽ vô ích cho đến khi chúng ta đọc được nó. Một yêu cầu đến để giải cứu LỰA CHỌN.

Ví dụ đơn giản nhất về việc sử dụng một yêu cầu LỰA CHỌNđể đọc dữ liệu từ một bảng:

Dấu hoa thị (*) có nghĩa là chúng ta muốn lấy tất cả các cột của bảng. Nếu bạn chỉ cần lấy một số cột nhất định, hãy sử dụng cái gì đó như thế này:

Thông thường, chúng tôi chỉ muốn truy xuất một số hàng nhất định chứ không phải tất cả chúng. Ví dụ: hãy lấy địa chỉ email của người dùng lưới.

Nó tương tự như điều kiện IF. WHERE cho phép bạn đặt điều kiện trong truy vấn và nhận được kết quả mong muốn.

Điều kiện đẳng thức sử dụng dấu đơn (=) thay vì dấu kép (==) mà bạn có thể sử dụng trong lập trình.

Bạn cũng có thể sử dụng các điều kiện khác:

HOẶCđược sử dụng để kết hợp các điều kiện:

Xin lưu ý rằng các giá trị số không cần phải đặt trong dấu ngoặc kép.

TRONG()

Được sử dụng để so sánh với nhiều giá trị.

GIỐNG

Cho phép bạn chỉ định một mẫu tìm kiếm.

Dấu phần trăm (%) được sử dụng để chỉ định một mẫu.

ĐẶT HÀNG THEO điều kiện

Sử dụng điều kiện này nếu bạn muốn kết quả trả về được sắp xếp:

Thứ tự mặc định là TĂNG DẦN.(Tăng dần). Thêm vào DESCđể sắp xếp theo thứ tự ngược lại.

GIỚI HẠN...Bù Trừ...

Bạn có thể giới hạn số lượng hàng được trả về.

GIỚI HẠN 2 lấy hai dòng đầu tiên. GIỚI HẠN 1 Bù đắp 2 mất một dòng sau hai dòng đầu tiên. GIỚI HẠN 2, 1 có nghĩa tương tự, chỉ có số đầu tiên là phần bù và số thứ hai giới hạn số dòng.

CẬP NHẬT: Cập nhật dữ liệu trong bảng

Truy vấn này được sử dụng để cập nhật dữ liệu trong bảng.

Trong hầu hết các trường hợp được sử dụng cùng với Ở ĐÂU, để cập nhật các hàng cụ thể. Nếu điều kiện Ở ĐÂU không được chỉ định, những thay đổi sẽ được áp dụng cho tất cả các hàng.

Để giới hạn các hàng có thể thay đổi, bạn có thể sử dụng GIỚI HẠN.

DELETE: Xóa dữ liệu khỏi bảng

Giống , truy vấn này thường được sử dụng cùng với điều kiện Ở ĐÂU.

BẢNG CẮT

Để xóa nội dung khỏi bảng, hãy sử dụng truy vấn sau:

XÓA TỪ người dùng;

Để cải thiện hiệu suất, hãy sử dụng .

Bộ đếm trường cũng sẽ được thiết lập lại. AUTO_INCREMENT, do đó các hàng mới thêm vào sẽ có id bằng 1. Khi sử dụng điều này sẽ không xảy ra và bộ đếm sẽ tiếp tục phát triển.

Thoát giá trị chuỗi và các từ đặc biệt

Giá trị chuỗi

Một số ký tự cần phải được thoát, nếu không có thể có vấn đề.

Dấu gạch chéo ngược (\) được sử dụng để thoát.

Điều này rất quan trọng vì lý do bảo mật. Mọi dữ liệu người dùng phải được thoát trước khi ghi vào cơ sở dữ liệu. TRONG PHP sử dụng hàm mysql_real_escape_string() hoặc các truy vấn đã chuẩn bị sẵn.

Từ đặc biệt

Vì trong MySQL nhiều từ dành riêng như LỰA CHỌN hoặc Để tránh xung đột, hãy đặt tên cột và bảng trong dấu ngoặc kép. Hơn nữa, bạn cần sử dụng dấu ngoặc ngược (`) thay vì dấu ngoặc kép thông thường.

Giả sử, vì lý do nào đó, bạn muốn thêm một cột có tên :

Phần kết luận

Cảm ơn đã đọc bài viết. Tôi hy vọng tôi có thể cho bạn thấy ngôn ngữ đó SQL rất chức năng và dễ học.

Ngày nay, các khóa học SQL “dành cho người mới bắt đầu” đang ngày càng trở nên phổ biến. Điều này có thể được giải thích rất đơn giản, bởi vì trong thế giới hiện đại Ngày càng thường xuyên hơn, bạn có thể tìm thấy cái gọi là dịch vụ web “động”. Chúng được phân biệt bằng lớp vỏ khá linh hoạt và dựa trên Tất cả các lập trình viên mới quyết định dành các trang web, trước hết hãy đăng ký các khóa học SQL “dành cho người mới bắt đầu”.

Tại sao nên học ngôn ngữ này?

Trước hết, SQL được dạy với mục đích sáng tạo thêm rất nhiều ứng dụng cho một trong những công cụ tạo blog phổ biến nhất hiện nay - WordPress. Sau khi hoàn thành một số bài học đơn giản, bạn sẽ có thể tạo các truy vấn ở bất kỳ mức độ phức tạp nào, điều này chỉ xác nhận tính đơn giản của ngôn ngữ này.

SQL là gì?

Hoặc một ngôn ngữ truy vấn có cấu trúc, được tạo ra với một mục đích duy nhất: xác định, cung cấp quyền truy cập và xử lý chúng trong khoảng thời gian khá ngắn. Nếu bạn biết ý nghĩa của SQL thì bạn sẽ hiểu rằng máy chủ này được phân loại là ngôn ngữ được gọi là ngôn ngữ “phi thủ tục”. Nghĩa là, khả năng của nó chỉ bao gồm mô tả về bất kỳ thành phần hoặc kết quả nào mà bạn muốn thấy trong tương lai trên trang web. Nhưng khi nào thì không cho biết chính xác kết quả sẽ thu được là gì. Mỗi yêu cầu mới trong ngôn ngữ này giống như một “cấu trúc thượng tầng” bổ sung. Theo thứ tự chúng được nhập vào cơ sở dữ liệu, các truy vấn sẽ được thực hiện.

Những thủ tục nào có thể được thực hiện bằng ngôn ngữ này?

Mặc dù đơn giản nhưng cơ sở dữ liệu SQL cho phép bạn tạo nhiều truy vấn khác nhau. Vậy bạn có thể làm gì nếu học ngôn ngữ lập trình quan trọng này?

  • tạo nhiều loại bảng;
  • nhận, lưu trữ và sửa đổi dữ liệu nhận được;
  • thay đổi cấu trúc bảng theo ý của bạn;
  • kết hợp thông tin nhận được thành các khối duy nhất;
  • tính toán dữ liệu nhận được;
  • đảm bảo bảo vệ thông tin đầy đủ.

Lệnh nào phổ biến nhất trong ngôn ngữ này?

Nếu bạn quyết định tham gia khóa học SQL for Dummies thì bạn sẽ nhận được thông tin chi tiết về các lệnh được sử dụng để tạo truy vấn bằng cách sử dụng khóa học đó. Phổ biến nhất hiện nay là:

  1. DDL là lệnh xác định dữ liệu. Nó được sử dụng để tạo, sửa đổi và xóa nhiều loại đối tượng trong cơ sở dữ liệu.
  2. DCL là lệnh thao tác dữ liệu. Nó được sử dụng để cung cấp cho những người dùng khác nhau quyền truy cập vào thông tin trong cơ sở dữ liệu, cũng như sử dụng các bảng hoặc dạng xem.
  3. TCL là nhóm quản lý nhiều giao dịch khác nhau. Mục đích chính của nó là xác định tiến độ của một giao dịch.
  4. DML - thao tác dữ liệu nhận được. Mục đích của nó là cho phép người dùng di chuyển thông tin khác nhau từ cơ sở dữ liệu hoặc nhập nó vào đó.

Các loại đặc quyền tồn tại trong máy chủ này

Đặc quyền đề cập đến những hành động mà một người dùng cụ thể có thể thực hiện theo trạng thái của mình. Tất nhiên, tối thiểu nhất là đăng nhập thường xuyên. Tất nhiên, đặc quyền có thể thay đổi theo thời gian. Những cái cũ sẽ bị xóa và những cái mới sẽ được thêm vào. Đến nay, tất cả những người tham gia các khóa học Máy chủ SQL"dành cho người giả" biết rằng có một số loại hành động được phép:

  1. Loại đối tượng - người dùng chỉ được phép thực hiện bất kỳ lệnh nào liên quan đến đối tượng cụ thể, có trong cơ sở dữ liệu. Đồng thời, các đặc quyền khác nhau đối với các đối tượng khác nhau. Chúng cũng được gắn không chỉ với một người dùng cụ thể mà còn với các bảng. Nếu ai đó sử dụng khả năng của mình để tạo ra một cái bàn thì người đó được coi là chủ sở hữu của nó. Vì vậy, anh ta có quyền gán những đặc quyền mới cho những người dùng khác liên quan đến thông tin trong đó.
  2. Loại hệ thống được gọi là bản quyền dữ liệu. Người dùng đã nhận được những đặc quyền đó có thể tạo các đồ vật khác nhau trong cơ sở dữ liệu.

Lịch sử của SQL

Ngôn ngữ này được Phòng thí nghiệm nghiên cứu IBM tạo ra vào năm 1970. Lúc đó tên của nó có hơi khác một chút (SEQUEL) nhưng sau vài năm sử dụng thì được đổi, rút ​​ngắn lại một chút. Mặc dù vậy, thậm chí ngày nay nhiều chuyên gia lập trình nổi tiếng thế giới vẫn phát âm cái tên này theo cách lỗi thời. SQL được tạo ra với một mục đích duy nhất - phát minh ra một ngôn ngữ đơn giản đến mức thậm chí người dùng thông thường Internet. Một sự thật thú vị là vào thời điểm đó SQL không phải là công cụ duy nhất ngôn ngữ tương tự. Ở California, một nhóm chuyên gia khác đã phát triển một loại Ingres tương tự nhưng nó chưa bao giờ trở nên phổ biến. Trước năm 1980, có một số biến thể của SQL chỉ khác nhau một chút. Để tránh nhầm lẫn, một phiên bản tiêu chuẩn đã được tạo ra vào năm 1983, phiên bản này vẫn còn phổ biến cho đến ngày nay. Các khóa học SQL "dành cho người mới bắt đầu" cho phép bạn tìm hiểu thêm nhiều điều về dịch vụ và nghiên cứu đầy đủ về dịch vụ này trong vài tuần.

  • Hướng dẫn

Hướng dẫn này nói về cái gì?

Hướng dẫn này giống như một “dấu ấn trong bộ nhớ của tôi” bằng ngôn ngữ SQL (DDL, DML), tức là. Đây là thông tin được tích lũy trong quá trình hoạt động nghề nghiệp của tôi và liên tục được lưu trữ trong đầu tôi. Đối với tôi đây là mức tối thiểu đủ, được sử dụng thường xuyên nhất khi làm việc với cơ sở dữ liệu. Nếu có nhu cầu sử dụng đầy đủ hơn Cấu trúc SQL, sau đó tôi thường tìm đến thư viện MSDN trên Internet để được trợ giúp. Theo tôi, rất khó để giữ mọi thứ trong đầu và không có nhu cầu đặc biệt nào về việc này. Nhưng biết các cấu trúc cơ bản là rất hữu ích, bởi vì... chúng có thể áp dụng ở dạng gần như giống nhau trong nhiều cơ sở dữ liệu quan hệ, chẳng hạn như Oracle, MySQL, Firebird. Sự khác biệt chủ yếu là ở các loại dữ liệu, có thể khác nhau về chi tiết. Không có nhiều cấu trúc SQL cơ bản và nếu thực hành liên tục, chúng sẽ nhanh chóng được ghi nhớ. Ví dụ: để tạo các đối tượng (bảng, ràng buộc, chỉ mục, v.v.), chỉ cần có sẵn trong tay soạn thảo văn bản môi trường (IDE) để làm việc với cơ sở dữ liệu và không cần phải nghiên cứu các công cụ trực quan được thiết kế riêng để làm việc với loại cụ thể cơ sở dữ liệu (MS SQL, Oracle, MySQL, Firebird, ...). Điều này cũng thuận tiện vì tất cả văn bản đều hiển thị trước mắt bạn và bạn không cần phải chạy qua nhiều tab để tạo, chẳng hạn như chỉ mục hoặc ràng buộc. Tại công việc lâu dài với cơ sở dữ liệu, việc tạo, thay đổi và đặc biệt là tạo lại một đối tượng bằng tập lệnh nhanh hơn nhiều lần so với khi bạn thực hiện ở chế độ trực quan. Ngoài ra, ở chế độ tập lệnh (và theo đó, với sự cẩn thận thích đáng), việc thiết lập và kiểm soát các quy tắc đặt tên đối tượng sẽ dễ dàng hơn (ý kiến ​​​​chủ quan của tôi). Ngoài ra, các tập lệnh rất thuận tiện để sử dụng khi các thay đổi được thực hiện trong một cơ sở dữ liệu (ví dụ: kiểm tra) cần được chuyển ở dạng tương tự sang cơ sở dữ liệu khác (sản xuất).

Ngôn ngữ SQL được chia thành nhiều phần, ở đây tôi sẽ xem xét 2 phần quan trọng nhất:
  • DML - Ngôn ngữ thao tác dữ liệu, chứa các cấu trúc sau:
    • CHỌN – lựa chọn dữ liệu
    • INSERT – chèn dữ liệu mới
    • UPDATE – cập nhật dữ liệu
    • DELETE – xóa dữ liệu
    • MERGE – hợp nhất dữ liệu
Bởi vì Tôi là một người thực hành; sẽ có rất ít lý thuyết như vậy trong cuốn sách này và tất cả các cấu trúc sẽ được giải thích bằng các ví dụ thực tế. Ngoài ra, tôi tin rằng một ngôn ngữ lập trình, và đặc biệt là SQL, chỉ có thể thành thạo thông qua thực hành, bằng cách tự mình trải nghiệm và hiểu điều gì sẽ xảy ra khi bạn thực thi cấu trúc này hoặc cấu trúc kia.

Sách giáo khoa này được biên soạn theo nguyên tắc Từng bước một, tức là bạn cần đọc tuần tự và tốt nhất là làm theo ngay các ví dụ. Nhưng nếu trong quá trình thực hiện, bạn cần tìm hiểu chi tiết hơn về một lệnh nào đó, thì hãy sử dụng một tìm kiếm cụ thể trên Internet, chẳng hạn như trong thư viện MSDN.

Khi viết cuốn sách giáo khoa này Cơ sở dữ liệu MS SQL Server phiên bản 2014 đã được sử dụng, tôi đã sử dụng MS SQL để thực thi các tập lệnh Quản lý máy chủ Studio (SSMS).

Sơ lược về MS SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) là một tiện ích dành cho Microsoft SQL Server để định cấu hình, quản lý và quản lý các thành phần cơ sở dữ liệu. Tiện ích này chứa một trình soạn thảo tập lệnh (mà chúng tôi sẽ chủ yếu sử dụng) và một chương trình đồ họa hoạt động với các đối tượng và cài đặt máy chủ. Chủ yếu công cụ SQL Server Management Studio là một Object Explorer cho phép người dùng xem, truy xuất và quản lý các đối tượng máy chủ. Văn bản này được mượn một phần từ Wikipedia.

Để tạo trình chỉnh sửa tập lệnh mới, hãy sử dụng nút “Truy vấn mới”:

Để thay đổi cơ sở dữ liệu hiện tại, bạn có thể sử dụng danh sách thả xuống:

Để thực thi một đội nhất định(hoặc nhóm lệnh) chọn nó và nhấn nút “Thực thi” hoặc phím “F5”. Nếu hiện tại chỉ có một lệnh trong trình soạn thảo hoặc bạn cần thực thi tất cả các lệnh thì bạn không cần phải chọn bất kỳ lệnh nào.

Sau khi chạy các tập lệnh, đặc biệt là các tập lệnh tạo đối tượng (bảng, cột, chỉ mục), để xem các thay đổi, hãy sử dụng tính năng làm mới từ danh mục bằng cách chọn nhóm thích hợp (ví dụ: Bảng), chính bảng đó hoặc nhóm Cột trong đó.

Trên thực tế, đó là tất cả những gì chúng ta cần biết để hoàn thành các ví dụ được đưa ra ở đây. Phần còn lại của tiện ích SSMS bạn có thể dễ dàng tự học.

Một chút lý thuyết

Cơ sở dữ liệu quan hệ (RDB hoặc sau đây trong ngữ cảnh gọi đơn giản là DB) là một tập hợp các bảng được kết nối với nhau. Nói một cách đơn giản, cơ sở dữ liệu là một tệp trong đó dữ liệu được lưu trữ ở dạng có cấu trúc.

DBMS - Hệ thống quản lý cơ sở dữ liệu, tức là đây là bộ công cụ để làm việc với một loại cơ sở dữ liệu cụ thể (MS SQL, Oracle, MySQL, Firebird, ...).

Ghi chú
Bởi vì trong cuộc sống, trong cách nói thông tục, chúng ta chủ yếu nói: “Oracle DB”, hoặc thậm chí chỉ là “Oracle”, thực ra có nghĩa là “Oracle DBMS”, thì trong ngữ cảnh của cuốn sách này, thuật ngữ DB đôi khi sẽ được sử dụng. Từ bối cảnh, tôi nghĩ sẽ rõ chính xác chúng ta đang nói về điều gì.

Một bảng là một tập hợp các cột. Cột cũng có thể được gọi là trường hoặc cột; tất cả những từ này sẽ được sử dụng làm từ đồng nghĩa thể hiện cùng một điều.

Bảng là đối tượng chính của RDB; tất cả dữ liệu RDB được lưu trữ theo hàng trong các cột của bảng. Dòng và bản ghi cũng là từ đồng nghĩa.

Đối với mỗi bảng, cũng như các cột của nó, tên được chỉ định để chúng được truy cập sau đó.
Tên đối tượng (tên bảng, tên cột, tên chỉ mục, v.v.) trong MS SQL có thể có độ dài tối đa 128 ký tự.

Để tham khảo– trong cơ sở dữ liệu ORACLE, tên đối tượng có thể có độ dài tối đa 30 ký tự. Do đó, đối với một cơ sở dữ liệu cụ thể, bạn cần xây dựng quy tắc đặt tên đối tượng của riêng mình để đáp ứng giới hạn về số lượng ký tự.

SQL là ngôn ngữ cho phép bạn truy vấn cơ sở dữ liệu bằng DBMS. Trong một DBMS cụ thể, ngôn ngữ SQL có thể có cách triển khai cụ thể (phương ngữ riêng của nó).

DDL và DML là tập hợp con của ngôn ngữ SQL:

  • Ngôn ngữ DDL được sử dụng để tạo và sửa đổi cấu trúc cơ sở dữ liệu, tức là. để tạo/sửa đổi/xóa bảng và mối quan hệ.
  • Ngôn ngữ DML cho phép bạn thao tác dữ liệu bảng, tức là. với lời thoại của cô ấy. Nó cho phép bạn chọn dữ liệu từ các bảng, thêm dữ liệu mới vào bảng cũng như cập nhật và xóa dữ liệu hiện có.

Trong SQL, bạn có thể sử dụng 2 loại chú thích (một dòng và nhiều dòng):

Bình luận một dòng

/* chú thích nhiều dòng */

Trên thực tế, điều này sẽ là đủ cho lý thuyết.

DDL - Ngôn ngữ định nghĩa dữ liệu

Ví dụ: hãy xem xét một bảng có dữ liệu về nhân viên, ở dạng quen thuộc với người không phải là lập trình viên:

TRONG trong trường hợp này Các cột của bảng có tên: Mã số nhân sự, Họ tên, Ngày sinh, E-mail, Chức vụ, Phòng ban.

Mỗi cột này có thể được đặc trưng bởi loại dữ liệu chứa trong đó:

  • Mã số nhân sự – số nguyên
  • Tên đầy đủ – chuỗi
  • Ngày sinh – ngày
  • Email – chuỗi
  • Vị trí - chuỗi
  • Sở - tuyến
Loại cột là đặc tính cho biết loại dữ liệu mà một cột nhất định có thể lưu trữ.

Để bắt đầu, chỉ cần nhớ các kiểu dữ liệu cơ bản sau được sử dụng trong MS SQL là đủ:

Nghĩa Ký hiệu trong MS SQL Sự miêu tả
Chuỗi có độ dài thay đổi varchar(N)

nvarchar(N)
Sử dụng số N, chúng ta có thể chỉ định độ dài chuỗi tối đa có thể cho cột tương ứng. Ví dụ: nếu chúng ta muốn nói rằng giá trị của cột “Tên” có thể chứa tối đa 30 ký tự thì chúng ta cần đặt loại của nó thành nvarchar(30).
Sự khác biệt giữa varchar và nvarchar là varchar cho phép bạn lưu trữ các chuỗi ở định dạng ASCII, trong đó một ký tự chiếm 1 byte và nvarchar lưu trữ các chuỗi ở định dạng Unicode, trong đó mỗi ký tự chiếm 2 byte.
Loại varchar chỉ nên được sử dụng nếu bạn chắc chắn 100% rằng trường này sẽ không cần lưu trữ các ký tự Unicode. Ví dụ: varchar có thể được sử dụng để lưu trữ địa chỉ E-mail, bởi vì chúng thường chỉ chứa các ký tự ASCII.
Chuỗi có độ dài cố định ký tự(N)

nchar(N)
Loại này khác với chuỗi có độ dài thay đổi ở chỗ nếu độ dài của chuỗi nhỏ hơn N ký tự thì nó luôn được đệm ở bên phải với độ dài N bằng khoảng trắng và được lưu trữ trong cơ sở dữ liệu ở dạng này, tức là. trong cơ sở dữ liệu, nó chiếm chính xác N ký tự (trong đó một ký tự chiếm 1 byte cho char và 2 byte cho nchar). Trong thực tế của tôi, loại này rất hiếm khi được sử dụng và nếu được sử dụng, nó được sử dụng chủ yếu ở định dạng char(1), tức là. khi một trường được xác định bởi một ký tự đơn.
số nguyên int Kiểu này cho phép chúng ta chỉ sử dụng các số nguyên trong cột, cả dương và âm. Để tham khảo (bây giờ điều này không còn phù hợp với chúng tôi nữa), phạm vi số mà loại int cho phép là từ -2,147,483,648 đến 2,147,483,647. Thông thường, đây là loại chính được sử dụng để chỉ định mã định danh.
Số thực hoặc số thực trôi nổi Nói một cách đơn giản, đây là những số có thể chứa dấu thập phân (dấu phẩy).
ngày ngày Nếu cột chỉ cần lưu trữ Ngày, bao gồm ba thành phần: Ngày, Tháng và Năm. Ví dụ: 15/02/2014 (15/02/2014). Loại này có thể được sử dụng cho cột “Ngày nhập học”, “Ngày sinh”, v.v., tức là. trong trường hợp điều quan trọng là chúng tôi chỉ ghi lại ngày hoặc khi thành phần thời gian không quan trọng đối với chúng tôi và có thể bị loại bỏ hoặc nếu nó không được biết.
Thời gian thời gian Loại này có thể được sử dụng nếu cột chỉ cần lưu trữ dữ liệu thời gian, tức là. Giờ, Phút, Giây và Mili giây. Ví dụ: 17:38:31.3231603
Ví dụ: “Thời gian khởi hành chuyến bay” hàng ngày.
ngày và giờ ngày giờ Loại này cho phép bạn lưu đồng thời cả Ngày và Giờ. Ví dụ: 15/02/2014 17:38:31.323
Ví dụ: đây có thể là ngày và giờ của một sự kiện.
Lá cờ chút Loại này thuận tiện sử dụng để lưu trữ các giá trị có dạng “Có”/“Không”, trong đó “Có” sẽ được lưu dưới dạng 1 và “Không” sẽ được lưu dưới dạng 0.

Ngoài ra, giá trị trường, nếu không bị cấm, có thể không được chỉ định; từ khóa NULL được sử dụng cho mục đích này.

Để chạy các ví dụ, hãy tạo một cơ sở dữ liệu thử nghiệm có tên Test.

Một cơ sở dữ liệu đơn giản (không chỉ định tham số bổ sung) có thể được tạo bằng cách chạy lệnh sau:

TẠO CƠ SỞ DỮ LIỆU
Bạn có thể xóa cơ sở dữ liệu bằng lệnh (bạn nên hết sức cẩn thận với lệnh này):

Kiểm tra cơ sở dữ liệu DROP
Để chuyển sang cơ sở dữ liệu của chúng tôi, bạn có thể chạy lệnh:

SỬ DỤNG Kiểm tra
Ngoài ra, hãy chọn cơ sở dữ liệu Kiểm tra từ danh sách thả xuống trong vùng menu SSMS. Khi làm việc, tôi thường sử dụng phương pháp chuyển đổi giữa các cơ sở dữ liệu này.

Bây giờ trong cơ sở dữ liệu của chúng tôi, chúng tôi có thể tạo một bảng bằng cách sử dụng các mô tả như hiện tại, sử dụng dấu cách và ký tự Cyrillic:

TẠO BẢNG [Nhân viên]([Mã số nhân sự] int, [Tên] nvarchar(30), [Ngày sinh] ngày, nvarchar(30), [Vị trí] nvarchar(30), [Bộ phận] nvarchar(30))
Trong trường hợp này, chúng ta sẽ phải đặt tên trong dấu ngoặc vuông […].

Nhưng trong cơ sở dữ liệu, để thuận tiện hơn, tốt hơn hết bạn nên chỉ định tất cả các tên đối tượng bằng tiếng Latinh và không sử dụng dấu cách trong tên. Trong MS SQL, thông thường trong trường hợp này, mỗi từ bắt đầu bằng một chữ cái viết hoa, ví dụ: đối với trường “Mã số nhân sự”, chúng ta có thể đặt tên Số nhân sự. Bạn cũng có thể sử dụng số trong tên, ví dụ: PhoneNumber1.

Trên một ghi chú
Trong một số DBMS, có thể thích hợp hơn định dạng tiếp theo ví dụ: tên “PHONE_NUMBER”, định dạng này thường được sử dụng trong cơ sở dữ liệu ORACLE. Đương nhiên, khi chỉ định tên trường, điều mong muốn là nó không trùng với các từ khóa được sử dụng trong DBMS.

Vì lý do này, bạn có thể quên cú pháp dấu ngoặc vuông và xóa bảng [Employees]:

BẢNG THẢ [Nhân viên]
Ví dụ: một bảng có nhân viên có thể được đặt tên là “Nhân viên” và các trường của nó có thể được đặt các tên sau:

  • ID – Mã số nhân sự (ID nhân viên)
  • Tên - tên đầy đủ
  • Ngày sinh – Ngày sinh
  • Email – Email
  • Chức vụ - Chức vụ
  • Khoa - Khoa
Rất thường từ ID được sử dụng để đặt tên cho trường định danh.

Bây giờ hãy tạo bảng của chúng tôi:

TẠO BẢNG Nhân viên(ID int, Tên nvarchar(30), Ngày sinh, Email nvarchar(30), Chức vụ nvarchar(30), Phòng ban nvarchar(30))
Để chỉ định các cột bắt buộc, bạn có thể sử dụng tùy chọn NOT NULL.

Đối với một bảng hiện có, các trường có thể được xác định lại bằng các lệnh sau:

Cập nhật trường ID ALTER TABLE Nhân viên ALTER COLUMN ID int NOT NULL -- cập nhật trường Tên ALTER TABLE Nhân viên ALTER COLUMN Tên nvarchar(30) NOT NULL

Trên một ghi chú
Khái niệm chung về ngôn ngữ SQL vẫn giống nhau đối với hầu hết các DBMS (ít nhất, đây là những gì tôi có thể đánh giá từ các DBMS mà tôi đã làm việc cùng). Sự khác biệt giữa DDL trong các DBMS khác nhau chủ yếu nằm ở các kiểu dữ liệu (không chỉ tên của chúng có thể khác nhau ở đây mà còn cả các chi tiết về cách triển khai chúng) và các chi tiết cụ thể về việc triển khai ngôn ngữ SQL cũng có thể khác nhau đôi chút (nghĩa là, bản chất của các lệnh là như nhau, nhưng có thể có một chút khác biệt về phương ngữ, than ôi, nhưng không có một tiêu chuẩn chung nào cả). Sau khi nắm vững các khái niệm cơ bản về SQL, bạn có thể dễ dàng chuyển đổi từ DBMS này sang DBMS khác, bởi vì... Trong trường hợp này, bạn chỉ cần hiểu chi tiết về việc triển khai các lệnh trong DBMS mới, tức là. Trong hầu hết các trường hợp, chỉ cần vẽ một sự tương tự là đủ.

Tạo một bảng TẠO BẢNG Nhân viên (ID int, -- trong ORACLE kiểu int tương đương (trình bao bọc) cho số (38) Tên nvarchar2(30), -- nvarchar2 trong ORACLE tương đương với nvarchar trong MS SQL Ngày sinh nhật, Email nvarchar2(30) , Vị trí nvarchar2(30), Sở nvarchar2(30)); -- cập nhật các trường ID và Name (ở đây MODIFY(...) được sử dụng thay cho ALTER COLUMN) ALTER TABLE Nhân viên MODIFY(ID int NOT NULL,Name nvarchar2(30) NOT NULL); -- thêm PK (trong trường hợp này, cấu trúc trông giống như trong MS SQL, nó sẽ được hiển thị bên dưới) ALTER TABLE Nhân viên THÊM CONSTRAINT PK_Employees PRIMARY KEY(ID);
Đối với ORACLE, có sự khác biệt trong việc triển khai loại varchar2; mã hóa của nó phụ thuộc vào cài đặt cơ sở dữ liệu và văn bản có thể được lưu, chẳng hạn như ở dạng mã hóa UTF-8. Ngoài ra, độ dài trường trong ORACLE có thể được chỉ định theo cả byte và ký tự; đối với điều này, các tùy chọn bổ sung BYTE và CHAR được sử dụng, ví dụ: được chỉ định sau độ dài trường:

NAME varchar2(30 BYTE) -- dung lượng trường sẽ là 30 byte NAME varchar2(30 CHAR) -- dung lượng trường sẽ là 30 ký tự
Tùy chọn nào sẽ được sử dụng theo mặc định BYTE hoặc CHAR, trong trường hợp chỉ chỉ định loại varchar2(30) trong ORACLE, tùy thuộc vào cài đặt cơ sở dữ liệu và đôi khi nó có thể được đặt trong cài đặt IDE. Nói chung, đôi khi bạn có thể dễ dàng bị nhầm lẫn, vì vậy trong trường hợp ORACLE, nếu loại varchar2 được sử dụng (và điều này đôi khi hợp lý ở đây, chẳng hạn như khi sử dụng mã hóa UTF-8), tôi thích viết rõ ràng CHAR hơn (vì thường sẽ thuận tiện hơn khi tính độ dài của chuỗi theo ký tự).

Nhưng trong trường hợp này, nếu đã có một số dữ liệu trong bảng, thì để thực hiện thành công các lệnh, điều cần thiết là phải điền các trường ID và Name trong tất cả các hàng của bảng. Hãy chứng minh điều này bằng một ví dụ: chèn dữ liệu vào bảng trong các trường ID, Vị trí và Bộ phận; việc này có thể được thực hiện bằng tập lệnh sau:

INSERT Nhân viên(ID,Vị trí,Bộ phận) GIÁ TRỊ (1000,N"Giám đốc",N"Quản trị"), (1001,N"Lập trình viên",N"IT"), (1002,N"Kế toán",N"Kế toán" ), (1003,N"Lập trình viên cao cấp",N"IT")
Trong trường hợp này, lệnh INSERT cũng sẽ phát sinh lỗi vì chúng tôi đã không chỉ định giá trị khi chèn phần bắt buộc Tên.
Nếu chúng ta đã có dữ liệu này trong bảng gốc thì lệnh “ALTER TABLE Nhân viên ALTER COLUMN ID int NOT NULL” sẽ được thực thi thành công và lệnh “ALTER TABLE Nhân viên ALTER COLUMN Name int NOT NULL” sẽ tạo ra một thông báo lỗi, trường Tên chứa các giá trị NULL (không xác định).

Chúng ta thêm giá trị cho trường Name và điền lại dữ liệu:


Tùy chọn NOT NULL cũng có thể được sử dụng trực tiếp khi tạo bảng mới, tức là. trong ngữ cảnh của lệnh CREATE TABLE.

Đầu tiên, xóa bảng bằng lệnh:

BẢNG THẢ Nhân viên
Bây giờ hãy tạo một bảng với các cột ID và Tên được yêu cầu:

TẠO BẢNG Nhân viên(ID int NOT NULL, Tên nvarchar(30) NOT NULL, Ngày sinh, Email nvarchar(30), Chức vụ nvarchar(30), Phòng ban nvarchar(30))
Bạn cũng có thể viết NULL sau tên cột, điều này có nghĩa là các giá trị NULL (không được chỉ định) sẽ được phép trong đó, nhưng điều này là không cần thiết vì đặc tính này được ngụ ý theo mặc định.

Ngược lại, nếu bạn muốn tạo một cột hiện có là tùy chọn, thì hãy sử dụng cú pháp lệnh sau:

THAY ĐỔI BẢNG Nhân viên THAY ĐỔI CỘT Tên nvarchar(30) NULL
Hoặc đơn giản:

ALTER TABLE Nhân viên THAY ĐỔI CỘT Tên nvarchar(30)
Với lệnh này, chúng ta cũng có thể thay đổi loại trường sang loại tương thích khác hoặc thay đổi độ dài của nó. Ví dụ: hãy mở rộng trường Tên thành 50 ký tự:

ALTER TABLE Nhân viên THAY ĐỔI CỘT Tên nvarchar(50)

Khóa chính

Khi tạo một bảng, điều mong muốn là nó có một cột duy nhất hoặc một tập hợp các cột duy nhất cho mỗi hàng của nó - một bản ghi có thể được xác định duy nhất bởi giá trị duy nhất này. Giá trị này được gọi là khóa chính của bảng. Đối với bảng Nhân viên của chúng tôi, giá trị duy nhất như vậy có thể là cột ID (có chứa “Mã số nhân viên của nhân viên” - trong trường hợp của chúng tôi giá trị đã cho duy nhất cho mỗi nhân viên và không thể lặp lại).

Bạn có thể tạo khóa chính cho bảng hiện có bằng lệnh:

THAY ĐỔI BẢNG Nhân viên THÊM Ràng buộc PK_Nhân viên KHÓA CHÍNH (ID)
Trong đó "PK_Employees" là tên của ràng buộc chịu trách nhiệm về khóa chính. Thông thường, khóa chính được đặt tên bằng tiền tố “PK_” theo sau là tên bảng.

Nếu khóa chính bao gồm một số trường thì các trường này phải được liệt kê trong dấu ngoặc đơn, phân tách bằng dấu phẩy:

THAY ĐỔI BẢNG tên_bảng THÊM Ràng buộc ràng buộc_tên KHÓA CHÍNH(field1,field2,…)
Điều đáng chú ý là trong MS SQL, tất cả các trường có trong khóa chính phải có đặc tính NOT NULL.

Khóa chính cũng có thể được xác định trực tiếp khi tạo bảng, tức là. trong ngữ cảnh của lệnh CREATE TABLE. Hãy xóa bảng:

BẢNG THẢ Nhân viên
Và sau đó chúng ta sẽ tạo nó bằng cú pháp sau:

TẠO BẢNG Nhân viên(ID int NOT NULL, Tên nvarchar(30) NOT NULL, Ngày sinh, Email nvarchar(30), Vị trí nvarchar(30), Phòng nvarchar(30), CONSTRAINT PK_Employees PRIMARY KEY(ID) -- mô tả PK sau tất cả các trường là một hạn chế)
Sau khi tạo, điền dữ liệu vào bảng:

INSERT Nhân viên(ID,Vị trí,Bộ phận,Tên) GIÁ TRỊ (1000,N"Giám đốc",N"Quản trị",N"Ivanov I.I."), (1001,N"Lập trình viên",N"IT",N" Petrov P.P." ), (1002,N"Kế toán",N"Kế toán",N"Sidorov S.S."), (1003,N"Lập trình viên cấp cao",N"IT",N"Andreev A. A.")
Nếu khóa chính trong bảng chỉ bao gồm các giá trị của một cột thì bạn có thể sử dụng cú pháp sau:

TẠO BẢNG Nhân viên(ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, -- chỉ định làm đặc điểm của trường Tên nvarchar(30) NOT NULL, Ngày sinh, Email nvarchar(30), Vị trí nvarchar(30), Phòng ban nvarchar(30) )
Trên thực tế, bạn không cần phải chỉ định tên của ràng buộc, trong trường hợp đó nó sẽ được gán một tên hệ thống (như “PK__Employee__3214EC278DA42077”):

TẠO BẢNG Nhân viên(ID int NOT NULL, Tên nvarchar(30) NOT NULL, Ngày sinh, Email nvarchar(30), Vị trí nvarchar(30), Phòng ban nvarchar(30), PRIMARY KEY(ID))
Hoặc:

TẠO BẢNG Nhân viên(ID int NOT NULL PRIMARY KEY, Tên nvarchar(30) NOT NULL, Ngày sinh, Email nvarchar(30), Vị trí nvarchar(30), Phòng ban nvarchar(30))
Nhưng tôi khuyên bạn rằng đối với các bảng cố định, bạn luôn đặt rõ ràng tên của ràng buộc, bởi vì Với một tên được chỉ định rõ ràng và dễ hiểu, sau này sẽ dễ dàng thao tác hơn, ví dụ: bạn có thể xóa nó:

THAY ĐỔI BẢNG Nhân viên BỎ Ràng buộc PK_Employees
Nhưng cú pháp ngắn gọn như vậy, không chỉ định tên của các hạn chế, sẽ thuận tiện khi sử dụng khi tạo các bảng cơ sở dữ liệu tạm thời (tên của bảng tạm thời bắt đầu bằng # hoặc ##), sẽ bị xóa sau khi sử dụng.

Hãy tóm tắt

Cho đến nay chúng ta đã xem xét các lệnh sau:
  • TẠO BẢNG table_name (danh sách các trường và loại của chúng, các hạn chế) – được sử dụng để tạo một bảng mới trong cơ sở dữ liệu hiện tại;
  • BÀN THẢ table_name – dùng để xóa một bảng khỏi cơ sở dữ liệu hiện tại;
  • BẢNG THAY ĐỔI tên_bảng THAY ĐỔI CỘT tên_cột... – được sử dụng để cập nhật loại cột hoặc thay đổi cài đặt của nó (ví dụ: để đặt đặc tính NULL hoặc NOT NULL);
  • BẢNG THAY ĐỔI tên_bảng THÊM Ràng buộc ràng buộc_name KHÓA CHÍNH(field1, field2,...) – thêm khóa chính vào bảng hiện có;
  • BẢNG THAY ĐỔI tên_bảng Ràng buộc thả ràng buộc_name – loại bỏ một ràng buộc khỏi bảng.

Một chút về bảng tạm thời

Trích xuất từ ​​MSDN. Có hai loại bảng tạm thời trong MS SQL Server: cục bộ (#) và toàn cục (##). Các bảng tạm thời cục bộ chỉ hiển thị với người tạo ra chúng cho đến khi phiên kết nối với phiên bản SQL Server kết thúc khi chúng được tạo lần đầu tiên. Các bảng tạm thời cục bộ sẽ tự động bị xóa sau khi người dùng ngắt kết nối khỏi phiên bản SQL Server. Các bảng tạm thời chung hiển thị với tất cả người dùng trong bất kỳ phiên kết nối nào sau khi các bảng đó được tạo và bị xóa khi tất cả người dùng tham chiếu các bảng đó ngắt kết nối khỏi phiên bản SQL Server.

Các bảng tạm thời được tạo trong cơ sở hệ thống tempdb, tức là Bằng cách tạo chúng, chúng tôi không làm tắc nghẽn cơ sở dữ liệu chính; mặt khác, các bảng tạm thời hoàn toàn giống với các bảng thông thường; chúng cũng có thể bị xóa bằng lệnh DROP TABLE. Các bảng tạm thời cục bộ (#) được sử dụng phổ biến hơn.

Để tạo bảng tạm thời, bạn có thể sử dụng lệnh CREATE TABLE:

TẠO BẢNG #Temp(ID int, Tên nvarchar(30))
Vì bảng tạm thời trong MS SQL tương tự như bảng thông thường nên nó cũng có thể bị xóa bằng lệnh DROP TABLE:

BẢNG THẢ #Temp

Bạn cũng có thể tạo một bảng tạm thời (như bảng thông thường) và điền ngay vào đó dữ liệu được truy vấn trả về bằng cú pháp SELECT ... INTO:

CHỌN ID, Tên VÀO #Temp TỪ Nhân viên

Trên một ghi chú
Việc triển khai các bảng tạm thời có thể khác nhau ở các DBMS khác nhau. Ví dụ, trong ORACLE và Firebird DBMS, cấu trúc của các bảng tạm thời phải được xác định trước bằng lệnh CREATE GLOBAL TEMPORARY TABLE, cho biết chi tiết cụ thể về việc lưu trữ dữ liệu trong đó, sau đó người dùng nhìn thấy nó trong số các bảng chính và làm việc với nó như với một chiếc bàn thông thường.

Chuẩn hóa cơ sở dữ liệu – chia thành các bảng con (thư mục) và xác định các kết nối

Bảng Nhân viên hiện tại của chúng tôi có nhược điểm là trong các trường Vị trí và Bộ phận, người dùng có thể nhập bất kỳ văn bản nào, điều này chủ yếu có nhiều lỗi, vì đối với một nhân viên, anh ta có thể chỉ cần chỉ định “IT” là bộ phận và đối với nhân viên thứ hai, đối với Ví dụ: nhập “Phòng CNTT”, ô thứ 3 có “IT”. Kết quả là, sẽ không rõ ý của người dùng là gì, tức là. Những nhân viên này là nhân viên của cùng một bộ phận hay người dùng tự mô tả và đây là 3 bộ phận khác nhau? Hơn nữa, trong trường hợp này, chúng tôi sẽ không thể nhóm chính xác dữ liệu cho một số báo cáo, trong đó có thể cần phải hiển thị số lượng nhân viên theo từng bộ phận.

Nhược điểm thứ hai là khối lượng lưu trữ thông tin này và sự trùng lặp của nó, tức là. Đối với mỗi nhân viên, tên đầy đủ của bộ phận được chỉ định, điều này cần có khoảng trống trong cơ sở dữ liệu để lưu trữ từng ký tự từ tên bộ phận.

Hạn chế thứ ba là khó cập nhật các trường này nếu tên vị trí thay đổi, chẳng hạn nếu bạn cần đổi tên vị trí “Lập trình viên” thành “Lập trình viên trẻ”. Trong trường hợp này, chúng ta sẽ phải thực hiện các thay đổi đối với từng hàng của bảng có Vị trí bằng “Lập trình viên”.

Để tránh những thiếu sót này, cái gọi là chuẩn hóa cơ sở dữ liệu được sử dụng - chia nó thành các bảng con và bảng tham chiếu. Không cần thiết phải đi sâu vào rừng lý thuyết và nghiên cứu chúng là gì dạng bình thường, chỉ cần hiểu bản chất của việc bình thường hóa là đủ.

Hãy tạo 2 bảng thư mục “Vị trí” và “Bộ phận”, hãy gọi Vị trí đầu tiên và bảng thứ hai tương ứng là Bộ phận:

TẠO BẢNG Vị trí(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Positions PRIMARY KEY, Tên nvarchar(30) NOT NULL) TẠO BẢNG Phòng ban(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Departments PRIMARY KEY, Tên nvarchar(30 ) CÓ GIÁ TRỊ)
Lưu ý rằng ở đây chúng tôi đã sử dụng tùy chọn IDENTITY mới, tùy chọn này cho biết dữ liệu trong cột ID sẽ được đánh số tự động, bắt đầu từ 1, với gia số là 1, tức là. Khi thêm bản ghi mới, chúng sẽ được gán tuần tự các giá trị 1, 2, 3, v.v. Các trường như vậy thường được gọi là tăng tự động. Một bảng chỉ có thể có một trường được xác định bằng thuộc tính IDENTITY và thông thường, nhưng không nhất thiết, trường đó là khóa chính cho bảng đó.

Trên một ghi chú
Trong các DBMS khác nhau, việc triển khai các trường bằng bộ đếm có thể được thực hiện khác nhau. Ví dụ: trong MySQL, trường như vậy được xác định bằng tùy chọn AUTO_INCREMENT. Trong ORACLE và Firebird, chức năng này trước đây có thể được mô phỏng bằng SEQUENCE. Nhưng theo những gì tôi biết, ORACLE hiện đã thêm tùy chọn TẠO NHƯ IDENTITY.

Hãy tự động điền vào các bảng này, dựa trên dữ liệu hiện tại được ghi trong các trường Vị trí và Phòng ban của bảng Nhân viên:

Chúng tôi điền vào trường Tên của bảng Vị trí với các giá trị duy nhất từ ​​trường Vị trí của bảng Nhân viên CHÈN Vị trí(Tên) CHỌN Vị trí DISTINCT TỪ Nhân viên Ở ĐÂU Vị trí KHÔNG NULL -- loại bỏ các bản ghi mà vị trí không được chỉ định
Hãy làm tương tự với bảng Departments:

CHÈN Phòng ban(Tên) CHỌN Phòng ban DISTINCT TỪ Nhân viên Ở ĐÂU Phòng ban KHÔNG CÓ
Nếu bây giờ chúng ta mở bảng Vị trí và Phòng ban, chúng ta sẽ thấy một tập hợp giá trị được đánh số cho trường ID:

CHỌN * TỪ Vị trí

CHỌN * TỪ các khoa

Các bảng này lúc này sẽ đóng vai trò là sổ sách tham khảo để xác định các vị trí, phòng ban. Bây giờ chúng ta sẽ đề cập đến ID công việc và bộ phận. Trước hết, hãy tạo các trường mới trong bảng Nhân viên để lưu trữ dữ liệu định danh:

Thêm trường cho vị trí ID ALTER TABLE Nhân viên THÊM ID vị trí int -- thêm trường cho ID bộ phận ALTER TABLE Nhân viên THÊM ID phòng ban int
Loại trường tham chiếu phải giống như trong thư mục, trong trường hợp này là int.

Bạn cũng có thể thêm nhiều trường vào bảng cùng lúc bằng một lệnh, liệt kê các trường được phân tách bằng dấu phẩy:

THAY ĐỔI BẢNG Nhân viên THÊM Vị tríID int, DepartmentID int
Bây giờ chúng ta hãy viết các liên kết (hạn chế tham chiếu - FOREIGN KEY) cho các trường này để người dùng không có cơ hội ghi vào các trường này những giá trị không nằm trong số các giá trị ID được tìm thấy trong thư mục.

THAY ĐỔI BẢNG Nhân viên THÊM Ràng buộc FK_Employees_PositionID KHÓA NGOẠI TỆ(PositionID) TÀI LIỆU THAM KHẢO Vị trí(ID)
Và chúng ta sẽ làm tương tự cho trường thứ hai:

THAY ĐỔI BẢNG Nhân viên THÊM Ràng buộc FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) TÀI LIỆU THAM KHẢO Phòng ban(ID)
Bây giờ người dùng sẽ chỉ có thể nhập các giá trị ID từ thư mục tương ứng vào các trường này. Theo đó, để sử dụng một bộ phận hoặc vị trí mới, trước tiên anh ta sẽ phải thêm một mục mới vào thư mục tương ứng. Bởi vì Các vị trí, phòng ban hiện được lưu trữ trong các thư mục thành một bản duy nhất, vì vậy để thay đổi tên, chỉ cần thay đổi trong thư mục là đủ.

Tên của ràng buộc tham chiếu thường là tên tổng hợp, bao gồm tiền tố "FK_", theo sau là tên bảng và theo sau là dấu gạch dưới, theo sau là tên của trường tham chiếu đến mã định danh bảng tham chiếu.

Mã định danh (ID) thường là một giá trị nội bộ chỉ được sử dụng cho các mối quan hệ và giá trị nào được lưu trữ ở đó hoàn toàn không quan trọng trong hầu hết các trường hợp, do đó không cần phải cố gắng loại bỏ các lỗ hổng trong chuỗi số phát sinh khi làm việc với bảng, chẳng hạn, sau khi xóa các bản ghi khỏi sổ tham khảo.

Bảng ALTER TABLE THÊM Ràng buộc ràng buộc_name KHÓA NGOẠI(field1,field2,…) TÀI LIỆU THAM KHẢO reference_table(field1,field2,…)
Trong trường hợp này, trong bảng “reference_table”, khóa chính được biểu thị bằng sự kết hợp của một số trường (field1, field2,...).

Trên thực tế, bây giờ hãy cập nhật các trường Vị tríID và DepartmentID với các giá trị ID từ các thư mục. Hãy sử dụng lệnh DML UPDATE cho mục đích này:

CẬP NHẬT e SET Vị tríID=(CHỌN ID TỪ Vị trí WHERE Tên=e.Vị trí), DepartmentID=(CHỌN ID TỪ Phòng ban WHERE Tên=e.Bộ phận) TỪ Nhân viên e
Hãy xem điều gì xảy ra bằng cách chạy yêu cầu:

CHỌN * TỪ Nhân viên

Vậy là các trường Vị trí và Phòng ban đã được điền đầy đủ các mã định danh tương ứng với các vị trí, phòng ban; trường Vị trí và Phòng ban không còn cần thiết trong bảng Nhân viên nữa, các bạn có thể xóa các trường này:

THAY ĐỔI BẢNG Nhân viên THẢ CỘT Chức vụ, Bộ phận
Bây giờ bảng của chúng tôi trông như thế này:

CHỌN * TỪ Nhân viên

NHẬN DẠNG Tên Sinh nhật E-mail ID vị trí ID khoa
1000 Ivanov I.I. VÔ GIÁ TRỊ VÔ GIÁ TRỊ 2 1
1001 Petrov P.P. VÔ GIÁ TRỊ VÔ GIÁ TRỊ 3 3
1002 Sidorov S.S. VÔ GIÁ TRỊ VÔ GIÁ TRỊ 1 2
1003 Andreev A.A. VÔ GIÁ TRỊ VÔ GIÁ TRỊ 4 3

Những thứ kia. Cuối cùng chúng tôi đã loại bỏ việc lưu trữ thông tin dư thừa. Bây giờ, dựa trên số công việc và bộ phận, chúng ta có thể xác định rõ ràng tên của họ bằng cách sử dụng các giá trị trong bảng tham chiếu:

CHỌN e.ID,e.Name,p.Name Vị tríTên,d.Tên Tên bộ phận TỪ Nhân viên e THAM GIA TRÁI Phòng ban d ON d.ID=e.DepartmentID LEFT THAM GIA Vị trí p ON p.ID=e.PositionID

Trong trình kiểm tra đối tượng, chúng ta có thể thấy tất cả các đối tượng được tạo cho một bảng nhất định. Từ đây bạn có thể thực hiện nhiều thao tác khác nhau với các đối tượng này - ví dụ: đổi tên hoặc xóa đối tượng.

Điều đáng lưu ý là bảng có thể tham chiếu đến chính nó, tức là. bạn có thể tạo một liên kết đệ quy. Ví dụ: hãy thêm một trường ManagerID khác vào bảng của chúng ta với các nhân viên, trường này sẽ cho biết nhân viên mà nhân viên này báo cáo. Hãy tạo một trường:

ALTER TABLE Nhân viên THÊM ID người quản lý int
Trường này hợp lệ Giá trị rỗng, trường này sẽ trống nếu, ví dụ, nhân viên không có cấp trên.

Bây giờ hãy tạo một KHÓA NGOẠI TỆ cho bảng Nhân viên:

THAY ĐỔI BẢNG Nhân viên THÊM Ràng buộc FK_Employees_ManagerID KHÓA NGOẠI TỆ (ID người quản lý) TÀI LIỆU THAM KHẢO Nhân viên(ID)
Bây giờ chúng ta hãy tạo một sơ đồ và xem mối quan hệ giữa các bảng của chúng ta trông như thế nào trên đó:

Kết quả là chúng ta sẽ thấy hình ảnh sau (bảng Nhân viên được kết nối với các bảng Vị trí và Phòng ban, đồng thời cũng tham chiếu đến chính nó):

Cuối cùng, điều đáng nói là các khóa tham chiếu có thể bao gồm các tùy chọn bổ sung BẬT XÓA CASCADE và BẬT CẬP NHẬT CASCADE, cho biết cách xử lý khi xóa hoặc cập nhật bản ghi được tham chiếu trong bảng tham chiếu. Nếu các tùy chọn này không được chỉ định thì chúng tôi không thể thay đổi ID trong bảng thư mục cho bản ghi được tham chiếu từ bảng khác và chúng tôi cũng sẽ không thể xóa bản ghi đó khỏi thư mục cho đến khi xóa tất cả các hàng tham chiếu bản ghi này hoặc Hãy cập nhật các tham chiếu trong những dòng này thành một giá trị khác.

Ví dụ: hãy tạo lại bảng chỉ định tùy chọn BẬT XÓA CASCADE cho FK_Employees_DepartmentID:

DROP TABLE Nhân viên TẠO BẢNG Nhân viên(ID int NOT NULL, Tên nvarchar(30), Ngày sinh, Email nvarchar(30), LocationID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Employees PRIMARY KEY (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) ) TÀI LIỆU THAM KHẢO Phòng ban(ID) TRÊN XÓA CASCADE, CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Vị trí(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENCES Nhân viên(ID)) INSERT Nhân viên (ID,Tên,Ngày sinh,Vị tríID,DepartmentID,Người đàn ông agerID )GIÁ TRỊ (1000,N"Ivanov I.I.","19550219",2,1,NULL), (1001,N"Petrov P.P.","19831203",3,3,1003), (1002 ,N"Sidorov S.S. ","19760607",1,2,1000), (1003,N"Andreev A.A.","19820417",4,3,1000)
Hãy xóa phòng ban có ID 3 khỏi bảng Phòng ban:

XÓA Phòng ban CÓ ID=3
Hãy xem dữ liệu trong bảng Nhân viên:

CHỌN * TỪ Nhân viên

NHẬN DẠNG Tên Sinh nhật E-mail ID vị trí ID khoa ID người quản lý
1000 Ivanov I.I. 1955-02-19 VÔ GIÁ TRỊ 2 1 VÔ GIÁ TRỊ
1002 Sidorov S.S. 1976-06-07 VÔ GIÁ TRỊ 1 2 1000

Như bạn có thể thấy, dữ liệu của bộ phận 3 trong bảng Nhân viên cũng đã bị xóa.

Tùy chọn ON UPDATE CASCADE hoạt động tương tự nhưng nó có hiệu quả khi cập nhật giá trị ID trong thư mục. Ví dụ: nếu chúng ta thay đổi ID của một vị trí trong thư mục vị trí thì trong trường hợp này DepartmentID trong bảng Nhân viên sẽ được cập nhật thành giá trị ID mới mà chúng ta đặt trong thư mục. Nhưng trong trường hợp này đơn giản là không thể chứng minh được điều này, bởi vì cột ID trong bảng Phòng ban có tùy chọn IDENTITY, tùy chọn này sẽ không cho phép chúng tôi thực hiện truy vấn sau (thay đổi ID phòng ban 3 thành 30):

CẬP NHẬT Phòng ban SET ID=30 WHERE ID=3
Điều chính là phải hiểu bản chất của 2 tùy chọn này TRÊN XÓA CASCADE và TRÊN CẬP NHẬT CASCADE. Tôi rất hiếm khi sử dụng các tùy chọn này và khuyên bạn nên suy nghĩ cẩn thận trước khi chỉ định chúng trong ràng buộc tham chiếu, bởi vì nếu bạn vô tình xóa một mục khỏi bảng thư mục, điều này có thể dẫn đến những vấn đề lớn và tạo ra phản ứng dây chuyền.

Hãy khôi phục lại bộ phận 3:

Chúng tôi cho phép thêm/thay đổi giá trị IDENTITY SET IDENTITY_INSERT Phòng ban ON INSERT Departments(ID,Name) VALUES(3,N"IT") -- chúng tôi cấm thêm/thay đổi giá trị IDENTITY SET IDENTITY_INSERT Phòng ban OFF
Hãy xóa hoàn toàn bảng Nhân viên bằng lệnh TRUNCATE TABLE:

BẢNG TRUNCATE Nhân viên
Và một lần nữa chúng ta sẽ tải lại dữ liệu vào đó bằng lệnh INSERT trước đó:

XÁC NHẬN Nhân viên (ID,Tên,Ngày sinh,ID vị trí,ID bộ phận,ID người quản lý)GIÁ TRỊ (1000,N"Ivanov I.I.","19550219",2,1,NULL), (1001,N"Petrov P.P." ,"19831203",3 ,3,1003), (1002,N"Sidorov S.S.","19760607",1,2,1000), (1003,N"Andreev A.A.","19820417" ,4,3,1000)

Hãy tóm tắt

Hiện tại, một số lệnh DDL khác đã được thêm vào kiến ​​thức của chúng tôi:
  • Thêm thuộc tính IDENTITY vào một trường - cho phép bạn biến trường này thành trường được điền tự động (trường bộ đếm) cho bảng;
  • BẢNG THAY ĐỔI tên_bảng THÊM VÀO list_of_fields_with_characteristics – cho phép bạn thêm các trường mới vào bảng;
  • BẢNG THAY ĐỔI tên_bảng CỘT THẢ list_fields – cho phép bạn xóa các trường khỏi bảng;
  • BẢNG THAY ĐỔI tên_bảng THÊM Ràng buộc ràng buộc_name KHÓA NGOÀI(lĩnh vực) NGƯỜI GIỚI THIỆU table_reference(fields) – cho phép bạn xác định mối quan hệ giữa bảng và bảng tham chiếu.

Các hạn chế khác – ĐỘC ĐÁO, MẶC ĐỊNH, KIỂM TRA

Với sự giúp đỡ hạn chế ĐỘC ĐÁO chúng ta có thể nói rằng giá trị của mỗi hàng trong một trường hoặc tập hợp trường nhất định phải là duy nhất. Trong trường hợp bảng Nhân viên, chúng ta có thể áp đặt ràng buộc như vậy đối với trường Email. Chỉ cần điền trước Email các giá trị nếu chúng chưa được xác định:

CẬP NHẬT Email nhân viên SET=" [email được bảo vệ]" WHERE ID=1000 UPDATE Nhân viên SET Email=" [email được bảo vệ]" WHERE ID=1001 CẬP NHẬT Nhân viên SET Email=" [email được bảo vệ]" WHERE ID=1002 UPDATE Nhân viên SET Email=" [email được bảo vệ]"ID Ở ĐÂU = 1003
Bây giờ bạn có thể áp đặt ràng buộc về tính duy nhất trên trường này:

THAY ĐỔI BẢNG Nhân viên THÊM Ràng buộc UQ_Employees_Email ĐỘC ĐÁO(Email)
Bây giờ người dùng sẽ không thể nhập cùng một E-mail cho nhiều nhân viên.

Một ràng buộc duy nhất thường được đặt tên như sau - đầu tiên là tiền tố “UQ_”, sau đó là tên của bảng và sau dấu gạch dưới là tên của trường mà ràng buộc này được áp dụng.

Theo đó, nếu tổ hợp các trường phải là duy nhất trong ngữ cảnh của các hàng trong bảng thì chúng tôi sẽ liệt kê chúng và phân tách chúng bằng dấu phẩy:

THAY ĐỔI BẢNG tên_bảng THÊM Ràng buộc ràng buộc_tên ĐỘC ĐÁO(field1,field2,…)
Bằng cách thêm ràng buộc DEFAULT vào trường, chúng ta có thể đặt giá trị mặc định sẽ được thay thế nếu khi chèn lối đi mới trường này sẽ không được liệt kê trong danh sách trường của lệnh INSERT. Hạn chế này có thể được đặt trực tiếp khi tạo bảng.

Hãy thêm một trường mới “Ngày thuê” vào bảng Nhân viên và gọi nó là Ngày thuê và nói rằng giá trị mặc định cho trường này sẽ là Ngày hiện tại:

THAY ĐỔI BẢNG Nhân viên THÊM ngày thuê ngày KHÔNG NULL MẶC ĐỊNH SYSDATETIME()
Hoặc nếu cột HireDate đã tồn tại thì có thể sử dụng cú pháp sau:

THAY ĐỔI BẢNG Nhân viên THÊM SYSDATETIME MẶC ĐỊNH() CHO HireDate
Ở đây tôi không chỉ rõ tên của ràng buộc, bởi vì... trong trường hợp DEFAULT, tôi có ý kiến ​​​​rằng điều này không quá quan trọng. Nhưng nếu làm đúng cách thì mình nghĩ bạn không cần phải lười biếng mà cứ đặt tên bình thường thôi. Điều này được thực hiện như sau:

THAY ĐỔI BẢNG Nhân viên THÊM Ràng buộc DF_Employees_HireDate DEFAULT SYSDATETIME() CHO HireDate
Vì cột này không tồn tại trước đó nên khi nó được thêm vào mỗi bản ghi, giá trị ngày hiện tại sẽ được chèn vào trường HireDate.

Tất nhiên, khi thêm một mục mới, ngày hiện tại cũng sẽ được chèn tự động, trừ khi chúng tôi đặt nó một cách rõ ràng, tức là. Chúng tôi sẽ không chỉ ra nó trong danh sách các cột. Hãy thể hiện điều này bằng một ví dụ mà không chỉ định trường HireDate trong danh sách các giá trị được thêm vào:

CHÈN Nhân viên(ID,Tên,Email)GIÁ TRỊ(1004,N"Sergeev S.S."," [email được bảo vệ]")
Hãy xem những gì đã xảy ra:

CHỌN * TỪ Nhân viên

NHẬN DẠNG Tên Sinh nhật E-mail ID vị trí ID khoa ID người quản lý Ngày thuê
1000 Ivanov I.I. 1955-02-19 [email được bảo vệ] 2 1 VÔ GIÁ TRỊ 2015-04-08
1001 Petrov P.P. 1983-12-03 [email được bảo vệ] 3 4 1003 2015-04-08
1002 Sidorov S.S. 1976-06-07 [email được bảo vệ] 1 2 1000 2015-04-08
1003 Andreev A.A. 1982-04-17 [email được bảo vệ] 4 3 1000 2015-04-08
1004 Sergeev S.S. VÔ GIÁ TRỊ [email được bảo vệ] VÔ GIÁ TRỊ VÔ GIÁ TRỊ VÔ GIÁ TRỊ 2015-04-08

Ràng buộc kiểm tra CHECK được sử dụng khi cần kiểm tra các giá trị được chèn vào một trường. Ví dụ: hãy áp đặt hạn chế này đối với trường mã số nhân sự, đối với chúng tôi đây là mã định danh nhân viên (ID). Sử dụng ràng buộc này, chúng ta nói rằng số lượng nhân sự phải có giá trị từ 1000 đến 1999:

THAY ĐỔI BẢNG Nhân viên THÊM Ràng buộc CK_Employees_ID KIỂM TRA (ID GIỮA 1000 VÀ 1999)
Ràng buộc thường được đặt tên theo cùng một cách, đầu tiên với tiền tố “CK_”, sau đó là tên của bảng và tên của trường mà ràng buộc này được áp đặt.

Hãy thử chèn một bản ghi không hợp lệ để kiểm tra xem ràng buộc có hoạt động không (chúng ta sẽ gặp lỗi tương ứng):

CHÈN GIÁ TRỊ Nhân viên(ID,Email)(2000," [email được bảo vệ]")
Bây giờ, hãy thay đổi giá trị được chèn thành 1500 và đảm bảo rằng bản ghi được chèn:

XÁC NHẬN GIÁ TRỊ Nhân viên (ID, Email) (1500," [email được bảo vệ]")
Bạn cũng có thể tạo các ràng buộc UNIQUE và CHECK mà không cần chỉ định tên:

ALTER TABLE Nhân viên THÊM ĐỘC ĐÁO(Email) ALTER TABLE Nhân viên THÊM KIỂM TRA (ID GIỮA 1000 VÀ 1999)
Nhưng nó không hẳn là vậy thực hành tốt và tốt hơn là chỉ định rõ ràng tên của ràng buộc, bởi vì Để tìm ra nó sau này, điều này sẽ khó khăn hơn, bạn sẽ cần phải mở đối tượng và xem nó chịu trách nhiệm cho điều gì.

Với một cái tên hay, rất nhiều thông tin về ràng buộc có thể được tìm hiểu trực tiếp từ tên của nó.

Và theo đó, tất cả những hạn chế này có thể được tạo ngay lập tức khi tạo bảng, nếu nó chưa tồn tại. Hãy xóa bảng:

BẢNG THẢ Nhân viên
Và chúng tôi sẽ tạo lại nó với tất cả các hạn chế đã tạo bằng một lệnh CREATE TABLE:

TẠO BẢNG Nhân viên(ID int NOT NULL, Tên nvarchar(30), Ngày sinh nhật, Email nvarchar(30), LocationID int, DepartmentID int, HireDate date NOT NULL DEFAULT SYSDATETIME(), -- đối với DEFAULT tôi sẽ tạo một ngoại lệ CONSTRAINT PK_Employees KHÓA CHÍNH (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) TÀI LIỆU THAM KHẢO Phòng ban(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) FERENCES Vị trí(ID), CONSTRAINT UQ_Employees_Email UNIQUE (Email), CONSTRAINT CK_Employees_ID CHECK (ID GIỮA NĂM 1000 VÀ 1999) )

CHÈN Nhân viên (ID,Tên,Ngày sinh,Email,ID vị trí,ID bộ phận)GIÁ TRỊ (1000,N"Ivanov I.I.","19550219"," [email được bảo vệ]",2,1), (1001,N"Petrov P.P.","19831203"," [email được bảo vệ]",3,3), (1002,N"Sidorov S.S.","19760607"," [email được bảo vệ]",1,2), (1003,N"Andreev A.A.","19820417"," [email được bảo vệ]",4,3)

Một chút về các chỉ mục được tạo khi tạo ràng buộc PRIMARY KEY và UNIQUE

Như bạn có thể thấy trong ảnh chụp màn hình ở trên, khi tạo các ràng buộc PRIMARY KEY và UNIQUE, các chỉ mục có cùng tên (PK_Employees và UQ_Employees_Email) sẽ được tạo tự động. Theo mặc định, chỉ mục cho khóa chính được tạo là CLUSTERED và đối với tất cả các chỉ mục khác là NONCLUSTERED. Điều đáng nói là khái niệm chỉ mục cụm không có sẵn trong tất cả các DBMS. Một bảng chỉ có thể có một chỉ mục CLUSTERED. CLUSTERED – nghĩa là các bản ghi trong bảng sẽ được sắp xếp theo chỉ mục này, chúng ta cũng có thể nói rằng chỉ mục này có quyền truy cập trực tiếp vào tất cả dữ liệu trong bảng. Có thể nói đây là chỉ mục chính của bảng. Nói một cách đại khái hơn, đây là một chỉ mục được gắn vào một bảng. Chỉ mục được nhóm là một công cụ rất mạnh có thể giúp tối ưu hóa truy vấn, nhưng bây giờ chúng ta hãy nhớ điều này. Nếu chúng ta muốn yêu cầu chỉ mục được nhóm không được sử dụng trên khóa chính mà trên một chỉ mục khác, thì khi tạo khóa chính, chúng ta phải chỉ định tùy chọn NONCLUSTERED:

THAY ĐỔI BẢNG tên_bảng THÊM Ràng buộc ràng buộc_tên KHÓA CHÍNH KHÔNG BAO GỒM(field1,field2,…)
Ví dụ: hãy tạo chỉ mục ràng buộc PK_Employees không được phân cụm và chỉ mục ràng buộc UQ_Employees_Email được phân cụm. Trước hết, hãy loại bỏ những hạn chế này:

THAY ĐỔI BẢNG Nhân viên BỎ Ràng buộc PK_Employees ALTER BẢNG Nhân viên BỎ Ràng buộc UQ_Employees_Email
Bây giờ hãy tạo chúng với các tùy chọn CLUSTERED và NONCLUSTERED:

ALTER BẢNG Nhân viên THÊM Ràng buộc PK_Employees KHÓA CHÍNH KHÔNG BAO GỒM (ID) ALTER BẢNG Nhân viên THÊM Ràng buộc UQ_Employees_Email ĐỘC ĐÁO (Email)
Bây giờ, bằng cách chọn từ bảng Nhân viên, chúng ta sẽ thấy các bản ghi được sắp xếp theo chỉ mục nhóm UQ_Employees_Email:

CHỌN * TỪ Nhân viên

NHẬN DẠNG Tên Sinh nhật E-mail ID vị trí ID khoa Ngày thuê
1003 Andreev A.A. 1982-04-17 [email được bảo vệ] 4 3 2015-04-08
1000 Ivanov I.I. 1955-02-19 [email được bảo vệ] 2 1 2015-04-08
1001 Petrov P.P. 1983-12-03 [email được bảo vệ] 3 3 2015-04-08
1002 Sidorov S.S. 1976-06-07 [email được bảo vệ] 1 2 2015-04-08

Trước đây, khi chỉ mục được nhóm là chỉ mục PK_Employees, các bản ghi được sắp xếp theo trường ID theo mặc định.

Nhưng trong trường hợp này, đây chỉ là một ví dụ cho thấy bản chất của chỉ mục được nhóm, bởi vì Rất có thể, các truy vấn sẽ được thực hiện đối với bảng Nhân viên bằng cách sử dụng trường ID và trong một số trường hợp, có lẽ chính bảng đó sẽ hoạt động như một thư mục.

Đối với các thư mục, thông thường nên xây dựng chỉ mục nhóm trên khóa chính, bởi vì trong các yêu cầu, chúng tôi thường đề cập đến mã định danh thư mục để lấy, chẳng hạn như tên (Vị trí, Phòng ban). Chúng ta hãy nhớ ở đây những gì tôi đã viết ở trên, rằng một chỉ mục được nhóm có quyền truy cập trực tiếp vào các hàng của bảng và theo đó chúng ta có thể nhận được giá trị của bất kỳ cột nào mà không cần thêm chi phí.

Sẽ rất thuận lợi khi áp dụng chỉ mục cụm cho các trường được lấy mẫu thường xuyên nhất.

Đôi khi các bảng được tạo bằng khóa dựa trên trường thay thế; trong trường hợp này, có thể hữu ích nếu lưu tùy chọn chỉ mục CLUSTERED cho một chỉ mục phù hợp hơn và chỉ định tùy chọn NONCLUSTERED khi tạo khóa chính thay thế.

Hãy tóm tắt

Ở giai đoạn này, chúng ta đã làm quen với tất cả các loại hạn chế, theo cách riêng của chúng. ở dạng đơn giản, được tạo bởi một lệnh như “ALTER TABLE table_name ADD CONSTRAINT ràng buộc_name …”:
  • KHÓA CHÍNH- khóa chính;
  • KHÓA NGOÀI– thiết lập các kết nối và giám sát tính toàn vẹn tham chiếu của dữ liệu;
  • ĐỘC NHẤT– cho phép bạn tạo ra sự độc đáo;
  • KIỂM TRA– cho phép bạn đảm bảo tính chính xác của dữ liệu đã nhập;
  • MẶC ĐỊNH– cho phép bạn đặt giá trị mặc định;
  • Điều đáng lưu ý là tất cả các hạn chế có thể được loại bỏ bằng lệnh “ BẢNG THAY ĐỔI tên_bảng Ràng buộc thả ràng buộc_name".
Chúng tôi cũng đề cập một phần đến chủ đề chỉ mục và xem xét khái niệm cụm ( được nhóm) và không phân cụm ( KHÔNG BAO GỒM) mục lục.

Tạo chỉ mục độc lập

Bằng từ độc lập ở đây chúng tôi muốn nói đến các chỉ mục không được tạo theo ràng buộc PRIMARY KEY hoặc UNIQUE.

Chỉ mục trên một hoặc nhiều trường có thể được tạo bằng lệnh sau:

TẠO CHỈ SỐ IDX_Employees_Name TRÊN Nhân viên(Tên)
Cũng tại đây, bạn có thể chỉ định các tùy chọn CLUSTERED, NONCLUSTERED, UNIQUE và bạn cũng có thể chỉ định hướng sắp xếp của từng trường riêng lẻ ASC (mặc định) hoặc DESC:

TẠO CHỈ SỐ KHÔNG BAO GỒM ĐỘC ĐÁO UQ_Employees_EmailDesc ON Nhân viên(Email DESC)
Khi tạo một chỉ mục không được nhóm, tùy chọn NONCLUSTERED có thể được bỏ qua, bởi vì theo mặc định, nó được ngụ ý và được hiển thị ở đây chỉ để cho biết vị trí của tùy chọn CLUSTERED hoặc NONCLUSTERED trong lệnh.

Bạn có thể xóa chỉ mục bằng lệnh sau:

DROP INDEX IDX_Employees_Name TRÊN Nhân viên
Các chỉ mục đơn giản cũng như các ràng buộc có thể được tạo trong ngữ cảnh của lệnh CREATE TABLE.

Ví dụ: hãy xóa bảng một lần nữa:

BẢNG THẢ Nhân viên
Và chúng tôi sẽ tạo lại nó với tất cả các hạn chế và chỉ mục đã tạo bằng một lệnh CREATE TABLE:

TẠO BẢNG Nhân viên (ID int NOT NULL, Tên nvarchar(30), Ngày sinh, Email nvarchar(30), Vị tríID int, DepartmentID int, HireDate date NOT NULL CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME(), ManagerID int, CONSTRAINT PK_Employees PRIMARY KEY (ID ), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) TÀI LIỆU THAM KHẢO Phòng ban(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) FERENCES Vị trí(ID), CONSTRAINT FK_Employees_ManagerID NGOÀI KHÓA (ID người quản lý) TÀI LIỆU THAM KHẢO Nhân viên(ID), CONSTRAINT UQ_Emplo Email ĐỘC ĐÁO(Email), Ràng buộc CK_Employees_ID CHECK(ID GIỮA 1000 VÀ 1999), INDEX IDX_Employees_Name(Name))
Cuối cùng, hãy chèn nhân viên của chúng ta vào bảng:

CHÈN Nhân viên (ID,Tên,Ngày sinh,Email,ID vị trí,ID bộ phận,ID người quản lý)GIÁ TRỊ (1000,N"Ivanov I.I.","19550219"," [email được bảo vệ]",2,1,NULL), (1001,N"Petrov P.P.","19831203"," [email được bảo vệ]",3,3,1003), (1002,N"Sidorov S.S.","19760607"," [email được bảo vệ]",1,2,1000), (1003,N"Andreev A.A.","19820417"," [email được bảo vệ]",4,3,1000)
Ngoài ra, điều đáng lưu ý là bạn có thể bao gồm các giá trị trong chỉ mục không được nhóm bằng cách chỉ định chúng trong INCLUDE. Những thứ kia. trong trường hợp này, chỉ mục INCLUDE sẽ phần nào gợi nhớ đến chỉ mục được nhóm, chỉ là bây giờ chỉ mục này không được gắn vào bảng mà các giá trị cần thiết sẽ được gắn vào chỉ mục. Theo đó, các chỉ mục như vậy có thể cải thiện đáng kể hiệu suất của các truy vấn lựa chọn (CHỌN); nếu tất cả các trường được liệt kê đều có trong chỉ mục thì có thể không cần truy cập vào bảng. Nhưng điều này tự nhiên làm tăng kích thước của chỉ mục, bởi vì giá trị của các trường được liệt kê sẽ bị trùng lặp trong chỉ mục.

Trích xuất từ ​​MSDN. Cú pháp lệnh chung để tạo chỉ mục

TẠO [ ĐỘC ĐÁO] [CỘP | KHÔNG BẬT ] INDEX tên_chỉ mục BẬT (cột [ ASC | DESC ] [ ,...n ]) [ INCLUDE (tên_cột [ ,...n ]) ]

Hãy tóm tắt

Các chỉ mục có thể tăng tốc độ truy xuất dữ liệu (SELECT), nhưng các chỉ mục làm giảm tốc độ sửa đổi dữ liệu bảng, bởi vì Sau mỗi lần sửa đổi, hệ thống sẽ cần xây dựng lại tất cả các chỉ mục cho một bảng cụ thể.

Trong mỗi trường hợp, nên tìm giải pháp tối ưu, giá trị trung bình vàng để cả hiệu suất lấy mẫu và sửa đổi dữ liệu đều ở mức phù hợp. Chiến lược tạo chỉ mục và số lượng chỉ mục có thể phụ thuộc vào nhiều yếu tố, chẳng hạn như tần suất dữ liệu trong bảng thay đổi.

Kết luận về DDL

Như bạn có thể thấy, DDL không phức tạp như thoạt nhìn. Ở đây tôi có thể hiển thị hầu hết các cấu trúc chính của nó chỉ bằng ba bảng.

Điều chính là phải hiểu bản chất, và phần còn lại là vấn đề thực hành.

Chúc may mắn thành thạo ngôn ngữ tuyệt vời có tên SQL này.

Ngôn ngữ truy vấn có cấu trúc hoặc SQL là ngôn ngữ lập trình khai báo để sử dụng trong cơ sở dữ liệu gần như quan hệ. Nhiều tính năng ban đầu của SQL được lấy từ phép tính bộ dữ liệu, nhưng các phần mở rộng gần đây của SQL bao gồm ngày càng nhiều đại số quan hệ.
SQL ban đầu được IBM tạo ra, nhưng nhiều nhà cung cấp đã phát triển ngôn ngữ riêng của họ. Nó được Viện Tiêu chuẩn Quốc gia Hoa Kỳ (ANSI) áp dụng làm tiêu chuẩn vào năm 1986 và ISO vào năm 1987. Trong tiêu chuẩn ngôn ngữ lập trình SQL, ANSI tuyên bố rằng cách phát âm chính thức của SQL là "es q el". Tuy nhiên, nhiều chuyên gia cơ sở dữ liệu đã sử dụng cách phát âm "tiếng lóng" "Sequel", phản ánh tên ban đầu của ngôn ngữ, Sequel, sau này đã được thay đổi do xung đột. nhãn hiệu và những cái tên từ IBM. Lập trình cho người mới bắt đầu.
Ngôn ngữ lập trình SQLđược sửa đổi vào năm 1992 và phiên bản này được gọi là SQL-92. 1999 sau đó được sửa lại thành SQL:1999 (AKA SQL3). Lập trình cho người giả. SQL 1999 hỗ trợ các đối tượng mà trước đây không được hỗ trợ trong các phiên bản khác, nhưng tính đến cuối năm 2001, chỉ có một số hệ thống quản lý cơ sở dữ liệu hỗ trợ triển khai SQL: SQL 1999.
SQL, mặc dù được định nghĩa là ANSI và ISO, có nhiều biến thể và phần mở rộng, hầu hết trong số đó có các đặc điểm riêng, chẳng hạn như cách triển khai "PL/SQL" của Tập đoàn Oracle hoặc cách triển khai của Sybase và Microsoft có tên là "Transact-SQL", có thể gây nhầm lẫn cho người sử dụng. những người quen với kiến ​​thức cơ bản về lập trình. Cũng không có gì lạ khi việc triển khai thương mại bỏ qua hỗ trợ cho các tính năng chính của tiêu chuẩn, chẳng hạn như các kiểu dữ liệu như ngày và giờ, ưu tiên một số biến thể của riêng chúng. Kết quả là, không giống như ANSI C hoặc ANSI Fortran thường có thể được chuyển từ nền tảng này sang nền tảng khác mà không có những thay đổi lớn về cấu trúc, các truy vấn ngôn ngữ lập trình SQL hiếm khi có thể được chuyển giữa các hệ thống cơ sở dữ liệu khác nhau mà không có sửa đổi đáng kể. Hầu hết mọi người trong ngành cơ sở dữ liệu tin rằng sự thiếu tương thích này là có chủ ý, nhằm cung cấp cho mỗi nhà phát triển hệ thống quản lý cơ sở dữ liệu của riêng họ và ràng buộc người mua với một cơ sở dữ liệu cụ thể.
Đúng như tên gọi của nó, ngôn ngữ lập trình SQL được thiết kế cho các mục đích cụ thể và có giới hạn - truy vấn dữ liệu có trong cơ sở dữ liệu quan hệ dữ liệu. Như vậy, nó là một tập hợp các hướng dẫn ngôn ngữ lập trình để tạo mẫu dữ liệu, chứ không phải là ngôn ngữ thủ tục như C hoặc BASIC, được thiết kế để giải quyết nhiều vấn đề hơn. Các phần mở rộng ngôn ngữ như "PL/SQL" được thiết kế để giải quyết hạn chế này bằng cách thêm các phần tử thủ tục vào SQL trong khi vẫn duy trì các lợi ích của SQL. Một cách tiếp cận khác là nhúng các lệnh ngôn ngữ lập trình thủ tục vào các truy vấn SQL và tương tác với cơ sở dữ liệu. Ví dụ: Oracle và những người khác hỗ trợ ngôn ngữ Java trong cơ sở dữ liệu, trong khi PostgreSQL cho phép bạn viết các hàm trong Perl, Tcl hoặc C.
Một câu nói đùa về SQL: "SQL không phải là một cấu trúc cũng như một ngôn ngữ." Mục đích của trò đùa là SQL không phải là ngôn ngữ Turing. .

Chọn * từ T
C1 C2
1 Một
2 b
C1 C2
1 Một
2 b
Chọn C1 từ T
C1
1
2
C1 C2
1 Một
2 b
Chọn * từ T trong đó C1=1
C1 C2
1 Một

Cho một bảng T, truy vấn Select * from T sẽ hiển thị tất cả các phần tử của tất cả các hàng trong bảng.
Từ cùng một bảng, truy vấn Chọn C1 từ T sẽ hiển thị các phần tử từ cột C1 của tất cả các hàng trong bảng.
Từ cùng một bảng, truy vấn Chọn * từ T trong đó C1=1 sẽ hiển thị tất cả các phần tử của tất cả các hàng trong đó giá trị của cột C1 là "1".

từ khóa SQL

Các từ SQL được chia thành một số nhóm.

Điều thứ nhất là Ngôn ngữ thao tác dữ liệu hoặc DML(ngôn ngữ quản lý dữ liệu). DML là tập hợp con của ngôn ngữ được sử dụng để truy vấn cơ sở dữ liệu và thêm, cập nhật và xóa dữ liệu.

  • SELECT là một trong những lệnh DML được sử dụng phổ biến nhất và cho phép người dùng chỉ định một truy vấn dưới dạng mô tả tập hợp của kết quả mong muốn. Truy vấn không chỉ định cách sắp xếp kết quả - dịch truy vấn sang dạng có thể được thực thi trong cơ sở dữ liệu là công việc của hệ thống cơ sở dữ liệu, cụ thể hơn là trình tối ưu hóa truy vấn.
  • INSERT được sử dụng để thêm các hàng (bộ chính thức) vào bảng hiện có.
  • UPDATE được sử dụng để thay đổi giá trị dữ liệu trong một hàng của bảng hiện có.
  • DELETE chỉ định các hàng hiện có sẽ bị xóa khỏi bảng.

Ba người khác từ khóa Chà, chúng ta có thể nói rằng họ thuộc nhóm DML:

  • BEGIN WORK (hoặc START TRANSACTION, tùy thuộc vào phương ngữ SQL) có thể được sử dụng để đánh dấu sự bắt đầu của một giao dịch cơ sở dữ liệu sẽ hoàn thành tất cả hoặc hoàn toàn không thực hiện.
  • CAM KẾT tuyên bố rằng tất cả các thay đổi dữ liệu được thực hiện sau khi thực hiện các thao tác đều được lưu lại.
  • ROLLBACK chỉ định rằng tất cả các thay đổi dữ liệu sau lần xác nhận hoặc khôi phục cuối cùng phải bị hủy, cho đến thời điểm được ghi trong cơ sở dữ liệu dưới dạng “khôi phục”.

COMMIT và ROLLBACK được sử dụng trong các lĩnh vực như kiểm soát giao dịch và khóa. Cả hai hướng dẫn đều hoàn thành tất cả các giao dịch hiện tại (tập hợp các thao tác trên cơ sở dữ liệu) và loại bỏ tất cả các khóa thay đổi dữ liệu trong bảng. Sự hiện diện hay vắng mặt của câu lệnh BEGIN WORK hoặc câu lệnh tương tự phụ thuộc vào việc triển khai SQL cụ thể.

Nhóm từ khóa thứ 2 thuộc nhóm Ngôn ngữ định nghĩa dữ liệu hoặc DDL (Ngôn ngữ định nghĩa dữ liệu). DDL cho phép người dùng xác định các bảng mới và các phần tử liên quan của chúng. Hầu hết các cơ sở dữ liệu SQL thương mại đều có phần mở rộng DDL riêng cho phép kiểm soát các phần tử không chuẩn nhưng thường quan trọng của một hệ thống cụ thể.
Điểm chính của DDL là các lệnh tạo và xóa.

  • CREATE chỉ định các đối tượng (chẳng hạn như bảng) sẽ được tạo trong cơ sở dữ liệu.
  • DROP chỉ định những đối tượng hiện có trong cơ sở dữ liệu sẽ bị xóa, thường là vĩnh viễn.
  • Một số hệ thống cơ sở dữ liệu cũng hỗ trợ lệnh ALTER, cho phép người dùng thay đổi đối tượng hiện có theo nhiều cách khác nhau - ví dụ: đây là cách bạn có thể thêm cột vào bảng hiện có.

Nhóm chìa khóa thứ ba từ SQLNgôn ngữ kiểm soát dữ liệu hoặc DCL (Ngôn ngữ kiểm soát dữ liệu). DCL chịu trách nhiệm về quyền truy cập dữ liệu và cho phép người dùng kiểm soát ai có quyền truy cập để xem hoặc thao tác dữ liệu trong cơ sở dữ liệu. Có hai từ khóa chính ở đây:

  • GRANT - cho phép người dùng thực hiện các thao tác
  • REVOKE - Loại bỏ hoặc hạn chế khả năng thực hiện các thao tác của người dùng.

Hệ thống cơ sở dữ liệu sử dụng SQL

  • liên cơ sở
  • MySQL
  • Lời tiên tri
  • PostgreSQL
  • Máy chủ SQL

Làm thế nào để trở thành một chuyên gia phát triển trang web và bắt đầu kiếm tiền? Các khóa học video không tốn kém với phần giới thiệu giới thiệu.