Thứ hai, 14/09/2020 | 00:00 GMT+7

Cách sử dụng các ràng buộc trong SQL

Khi thiết kế database SQL, có thể có trường hợp bạn muốn áp đặt các hạn chế về dữ liệu nào có thể được thêm vào các cột nhất định trong bảng. SQL làm cho điều này trở nên khả thi thông qua việc sử dụng các ràng buộc . Sau khi áp dụng một ràng buộc cho cột hoặc bảng, bất kỳ nỗ lực nào để thêm dữ liệu vào cột hoặc bảng không phù hợp với ràng buộc sẽ không thành công.

Các triển khai SQL khác nhau có những cách xử lý ràng buộc độc đáo của riêng chúng. Hướng dẫn này cung cấp tổng quan về cú pháp mà nhiều hệ quản trị database sử dụng để quản lý các ràng buộc, sử dụng MySQL trong các ví dụ xuyên suốt.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần một máy tính chạy một số loại hệ quản trị database quan hệ (RDBMS) sử dụng SQL. Các hướng dẫn và ví dụ trong hướng dẫn này đã được kiểm nghiệm bằng cách sử dụng môi trường sau:

Lưu ý : Xin lưu ý nhiều RDBMS sử dụng các triển khai SQL duy nhất của riêng họ. Mặc dù các lệnh được nêu trong hướng dẫn này sẽ hoạt động trên hầu hết các RDBMS, nhưng cú pháp hoặc kết quả chính xác có thể khác nếu bạn kiểm tra chúng trên một hệ thống không phải MySQL.

Nó cũng sẽ hữu ích nếu có một hiểu biết chung về các ràng buộc SQL là gì và cách chúng hoạt động. Để biết tổng quan về khái niệm này, bạn có thể theo dõi bài viết của ta về Hiểu các ràng buộc SQL .

Bạn cũng cần một database có thể sử dụng để thực hành tạo bảng với các ràng buộc. Nếu bạn không có database thử nghiệm như vậy, hãy xem phần Kết nối với MySQL và Cài đặt Database Mẫu sau đây để biết chi tiết về cách tạo một cơ sở dữ liệu .

Kết nối và cài đặt database mẫu

Trong trường hợp hệ thống database SQL của bạn chạy trên một server từ xa, hãy SSH vào server của bạn từ máy local của bạn:

  • ssh sammy@your_server_ip

Sau đó, mở dấu nhắc server MySQL, thay thế sammy bằng tên account user MySQL của bạn:

  • mysql -u sammy -p

Tạo một database có tên là constraintsDB :

  • CREATE DATABASE constraintsDB;

Nếu database được tạo thành công, bạn sẽ nhận được kết quả như sau:

Output
Query OK, 1 row affected (0.01 sec)

Để chọn database constraintsDB , hãy chạy câu lệnh USE sau:

  • USE constraintsDB;
Output
Database changed

Như vậy, bạn đã sẵn sàng làm theo phần còn lại của hướng dẫn và bắt đầu tìm hiểu về cách tạo và quản lý các ràng buộc trong SQL.

Tạo bảng với các ràng buộc

Thông thường, bạn xác định các ràng buộc trong quá trình tạo bảng. Sau CREATE TABLE cú pháp tạo ra một bảng tên employeeInfo với ba cột: empId , empName , và empPhoneNum . Câu lệnh cũng áp dụng một ràng buộc UNIQUE cho cột empId . Điều này sẽ ngăn bất kỳ hàng nào trong bảng phải có các giá trị giống nhau trong cột này:

  • CREATE TABLE employeeInfo (
  • empId int UNIQUE,
  • empName varchar(30),
  • empPhoneNum int
  • );

Câu lệnh này định nghĩa ràng buộc UNIQUE ngay sau cột empId , nghĩa là ràng buộc chỉ áp dụng cho cột đó. Nếu bạn cố gắng thêm bất kỳ dữ liệu nào vào bảng này, DBMS sẽ chỉ kiểm tra nội dung hiện có của empId đảm bảo rằng bất kỳ giá trị mới nào bạn thêm vào empId trên thực tế là duy nhất. Đây là những gì được gọi là một ràng buộc cấp cột .

Bạn cũng có thể áp dụng ràng buộc bên ngoài các định nghĩa cột. Ví dụ sau tạo một bảng có tên racersInfo với ba cột: racerId , racerNamefinish . Bên dưới các định nghĩa cột, nó cũng áp dụng một CHECK khó khăn để finish cột đảm bảo rằng tất cả các tay đua có một lớn hơn kết thúc hơn hoặc bằng 1 (vì không có tay đua có thể đặt bên dưới vị trí đầu tiên):

  • CREATE TABLE racersInfo (
  • racerId int,
  • finish int,
  • racerName varchar(30),
  • CHECK (finish > 0)
  • );

Bởi vì ràng buộc được áp dụng bên ngoài bất kỳ định nghĩa cột riêng lẻ nào, bạn cần chỉ định tên của các cột mà bạn muốn ràng buộc áp dụng trong dấu ngoặc đơn. Khi nào bạn chỉ định một ràng buộc bên ngoài định nghĩa của một cột, nó được gọi là một ràng buộc cấp bảng . Các ràng buộc mức cột chỉ áp dụng cho các cột riêng lẻ, nhưng các ràng buộc bảng như thế này có thể áp dụng cho hoặc tham chiếu nhiều cột.

Giới hạn đặt tên

Khi nào bạn xác định một ràng buộc, RDBMS của bạn sẽ tự động tạo tên cho nó. Tên này được sử dụng để tham chiếu đến ràng buộc trong các thông báo lỗi trong các lệnh được sử dụng để quản lý các ràng buộc.

Tuy nhiên, đôi khi, rất thuận tiện cho người quản trị database cung cấp tên riêng của họ cho một ràng buộc. Tên ràng buộc được tạo tự động thường không mang tính mô tả, vì vậy việc tự đặt tên có thể giúp bạn ghi nhớ mục đích của ràng buộc.

Để đặt tên cho một ràng buộc, hãy đặt trước loại ràng buộc bằng từ khóa CONSTRAINT sau đó là tên bạn chọn. Câu lệnh ví dụ này tạo lại bảng racersInfo , đổi tên nó thành newRacersInfo và thêm noNegativeFinish làm tên cho ràng buộc CHECK :

  • CREATE TABLE newRacersInfo (
  • racerId int,
  • finish int,
  • racerName varchar(30),
  • CONSTRAINT noNegativeFinish
  • CHECK (finish >= 1)
  • );

Lưu ý : Nếu bạn không đặt tên cho một ràng buộc hoặc bạn có nhưng quên nó sau này, bạn có thể tìm thấy tên đó bằng cách tham khảo các lược đồ thông tin của hệ thống quản lý database của bạn. Nhiều hệ thống database hiện đại và client thậm chí còn cung cấp một lối tắt để hiển thị các câu CREATE bên trong cho biết tên của một ràng buộc.

Dưới đây là các liên kết đến tài liệu chính thức cho lối tắt liên quan cho MySQL và PostgreSQL:

  • MySQL : MySQL bao gồm câu SHOW CREATE TABLE , trả về toàn bộ câu CREATE TABLE đã tạo bảng có tên:
  • SHOW CREATE TABLE table_name;
  • PostgreSQL : Các PostgreSQL client psql có một số tùy chọn, bạn có thể sử dụng để lộ thông tin về một bảng nhất định. Tùy chọn \d trả về metadata của bảng được đặt tên:
  • \d table_name

Quản lý các ràng buộc

Trong MySQL, bạn có thể thêm các ràng buộc vào các bảng hiện có cũng như xóa chúng bằng các ALTER TABLE .

Ví dụ, lệnh sau đây thêm một UNIQUE chế đến empName cột trong employeeInfo bảng được tạo trước đó:

  • ALTER TABLE employeeInfo ADD UNIQUE (empName);

Khi thêm một ràng buộc vào bảng hiện có, bạn cũng có thể sử dụng từ khóa CONSTRAINT để cung cấp tên để xác định ràng buộc. Ví dụ này thêm một ràng buộc UNIQUE có tên uID vào cột racerId từ bảng racersInfo đã tạo trước đó:

  • ALTER TABLE racersInfo ADD CONSTRAINT uID UNIQUE (racerId);

Nếu trước khi thêm một ràng buộc như thế này, bạn đã chèn bất kỳ bản ghi nào vi phạm điều kiện của ràng buộc mới, ALTER TABLE sẽ không thành công.

Để xóa một ràng buộc, hãy sử dụng cú pháp DROP CONSTRAINT , theo sau là tên của ràng buộc bạn muốn xóa. Lệnh này xóa ràng buộc racersPK được tạo trong lệnh trước:

  • ALTER TABLE racersInfo DROP CONSTRAINT uID;

Kết luận

Bằng cách đọc hướng dẫn này, bạn đã học cách thêm và xóa các ràng buộc đối với cột và bảng bằng SQL. Mặc dù các lệnh hiển thị ở đây sẽ hoạt động trên hầu hết các database quan hệ, nhưng hãy lưu ý mọi database SQL sử dụng cách triển khai ngôn ngữ duy nhất của riêng nó. Bạn nên tham khảo tài liệu chính thức của DBMS để có mô tả đầy đủ hơn về từng lệnh và bộ tùy chọn đầy đủ của chúng.

Nếu bạn muốn tìm hiểu thêm về cách làm việc với SQL, ta khuyến khích bạn xem các hướng dẫn khác trong loạt bài này về Cách sử dụng SQL .


Tags:

Các tin liên quan