[Hệ quản trị cơ sở dữ liệu] Ràng buộc trong SQL (Phần 2)

Share:
Một PRIMARY KEY là một trường trong một bảng mà nhận diện một cách duy nhất mỗi hàng/bản ghi trong một bảng dữ liệu. Các PRIMARY KEY phải chứa các giá trị duy nhất. Một cột là PRIMARY KEY không có giá trị NULL.
Một bảng có thể chỉ có một PRIMARY KEY, mà gồm một trường đơn hay nhiều trường. Khi nhiều trường được sử dụng như là một PRIMARY KEY, chúng được gọi là một Composite Key.
Nếu một bảng có một PRIMARY KEY được định nghĩa trên bất kỳ trường nào, thì bạn không thể có hai bản ghi mà có cùng giá trị trong các trường đó.
Ghi chú: Bạn sẽ sử dụng các khái niệm này trong khi tạo các bảng dữ liệu trong Database.

Tạo PRIMARY KEY trong SQL

Dưới đây là cú pháp để định nghĩa thuộc tính ID như là một PRIMARY KEY trong bảng SINHVIEN.
CREATE TABLE SINHVIEN(
       ID   INT              NOT NULL,
       TEN VARCHAR (20)     NOT NULL,
       TUOI  INT              NOT NULL,
       KHOAHOC  CHAR (25) ,
       HOCPHI   DECIMAL (18, 2),       
       PRIMARY KEY (ID)
);
Để tạo một ràng buộc PRIMARY KEY trên cột ID khi bảng này đã tồn tại, sử dụng cú pháp SQL sau:
ALTER TABLE CUSTOMER ADD PRIMARY KEY (ID);
GHI CHÚ: Nếu bạn sử dụng lệnh ALTER TABLE để thêm một PRIMARY KEY, thì cột với PRIMARY KEY phải đã được khai báo để không chứa các giá trị NULL (khi bảng được tạo lần đầu tiên).
Để định nghĩa một ràng buộc PRIMARY KEY trên nhiều cột, bạn sử dụng cú pháp SQL sau:
CREATE TABLE SINHVIEN(
       ID   INT              NOT NULL,
       TEN VARCHAR (20)     NOT NULL,
       TUOI  INT              NOT NULL,
       KHOAHOC  CHAR (25) ,
       HOCPHI   DECIMAL (18, 2),        
       PRIMARY KEY (ID, TEN)
);
Để tạo một ràng buộc PRIMARY KEY trên các cột ID và TEN khi bảng này đã tồn tại, bạn sử dụng cú pháp SQL sau:
ALTER TABLE SINHVIEN 
   ADD CONSTRAINT PK_SVID PRIMARY KEY (ID, TEN);

Xóa ràng buộc PRIMARY KEY trong SQL

Bạn có thể xóa các ràng buộc PRIMARY KEY từ một bảng bởi sử dụng cú pháp sau:
ALTER TABLE SINHVIEN DROP PRIMARY KEY ;
Một FOREIGN KEY là một khóa được sử dụng để liên kết hai bảng với nhau. Đôi khi, nó còn được gọi như là một khóa tham chiếu.
FOREIGN KEY là một cột hoặc một tổ hợp các cột có các giá trị so khớp với một PRIMARY KEY trong một bảng khác.
Mối quan hệ giữa 2 bảng so khớp là PRIMARY KEY ở một trong hai bảng với một FOREIGN KEY trong bảng thứ hai.
Nếu một bảng có một PRIMARY KEY đã được định nghĩa trên bất kỳ trường nào, thì bạn không thể có hai bản ghi có cùng giá trị trong các trường đó.

Ví dụ

Giả sử cấu trúc của hai bảng như sau:
Bảng SINHVIEN:
CREATE TABLE SINHVIEN(
       ID   INT              NOT NULL,
       TEN VARCHAR (20)     NOT NULL,
       TUOI  INT              NOT NULL,
       KHOAHOC  CHAR (25) ,
       HOCPHI   DECIMAL (18, 2),       
       PRIMARY KEY (ID)
);
Bảng MUONSACH:
CREATE TABLE MUONSACH (
       ID          INT        NOT NULL,
       NGAY        DATETIME, 
       SINHVIEN_ID INT references SINHVIEN(ID),
       SOTIEN     double,
       PRIMARY KEY (ID)
);
Nếu bảng MUONSACH đã được tạo, và FOREIGN KEY vẫn chưa được thiết lập, bạn sử dụng cú pháp sau để xác định một FOREIGN KEY.
ALTER TABLE MUONSACH 
   ADD FOREIGN KEY (SINHVIEN_ID) REFERENCES SINHVIEN (ID);

Xóa một ràng buộc FOREIGN KEY trong SQL

Để xóa một ràng buộc FOREIGN KEY, bạn sử dụng cú pháp SQL sau:
ALTER TABLE MUONSACH
   DROP FOREIGN KEY;
Ràng buộc CHECK cho phép một điều kiện để kiểm tra giá trị đang được nhập vào một bản ghi. Nếu điều kiện được ước lượng là false, thì bản ghi vi phạm ràng buộc này và không được nhập vào trong bảng.

Ví dụ

Ví dụ sau tạo một bảng mới với tên SINHVIEN và thêm 5 cột. Ở đây, chúng ta thêm một ràng buộc CHECK cho cột TUOI, để bảng không nhận bất kỳ dữ liệu nào mà dưới 18 tuổi.
CREATE TABLE SINHVIEN(
       ID   INT              NOT NULL,
       TEN VARCHAR (20)     NOT NULL,
       TUOI  INT              NOT NULL CHECK (TUOI >= 18),
       KHOAHOC  CHAR (25) ,
       HOCPHI   DECIMAL (18, 2),       
       PRIMARY KEY (ID)
);
Nếu bảng đã được tạo, thì để thêm một ràng buộc CHECK cho cột TUOI, bạn viết lệnh tương tự như:
ALTER TABLE SINHVIEN
   MODIFY TUOI INT NOT NULL CHECK (TUOI >= 18 );
Bạn có thể sử dụng cú pháp sau, mà hỗ trợ việc đặt ràng buộc trong nhiều cột:
ALTER TABLE SINHVIEN
   ADD CONSTRAINT myCheckConstraint CHECK(TUOI >= 18);

Xóa một ràng buộc CHECK trong SQL

Để xóa một ràng buộc CHECK trong SQL, bạn sử dụng cú pháp sau. Cú pháp này không làm việc trong MySQL.
ALTER TABLE SINHVIEN
   DROP CONSTRAINT myCheckConstraint;
INDEX (chỉ mục) được sử dụng để tạo và lấy dữ liệu từ Database một các nhanh chóng. INDEX có thể được tạo bởi sử dụng một hay một nhóm các cột trong một bảng. Khi index được tạo, nó được gán một ROWID cho mỗi hàng trước khi nó sắp xếp dữ liệu.
Các chỉ mục hợp lý sẽ làm tăng hiệu suất trong một Databse lớn, nhưng bạn cần cẩn thận trong khi tạo chỉ mục. Việc lựa chọn các trường phụ thuộc vào những gì bạn đang sử dụng trong các truy vấn SQL của bạn.

Ví dụ

Ví dụ sau tạo một bảng mới với tên SINHVIEN và thêm 5 cột:
CREATE TABLE SINHVIEN(
       ID   INT              NOT NULL,
       TEN VARCHAR (20)     NOT NULL,
       TUOI  INT              NOT NULL,
       KHOAHOC  CHAR (25) ,
       HOCPHI   DECIMAL (18, 2),       
       PRIMARY KEY (ID)
);
Bây giờ, bạn có thể tạo chỉ mục trên một hay nhiều cột bởi sử dụng cú pháp:
CREATE INDEX ten_chi_muc
    ON ten_bang ( cot1, cot2.....);
Để tạo một INDEX trên cột TUOI, để tối ưu hóa việc tìm kiếm một tuổi cụ thể trong các sinh viên, bạn sử dụng cú pháp SQL sau:
CREATE INDEX idx_tuoi
    ON SINHVIEN ( TUOI );

Xóa một ràng buộc INDEX trong SQL

Để xóa một ràng buộc INDEX trong SQL, bạn sử dụng cú pháp:
ALTER TABLE SINHVIEN
   DROP INDEX idx_tuoi;