Ràng Buộc (Constraint) Trong Oracle SQL

2023-05-15 13:54:46

Các Ràng Buộc Dữ Liệu Trong SQL

Ràng buộc (Constraint) là các quy tắc được áp dụng trên các cột dữ liệu của một bảng. Chúng được sử dụng để kiểm tra tính hợp lệ của dữ liệu đầu vào, đảm bảo tính chính xác, độ tin cậy và tính toàn vẹn của dữ liệu trong database.

Ràng buộc NULL – NOT NULL

• NULL chỉ ra rằng giá trị NULL được phép lưu trong cột được khai báo

• NOT NULL chỉ ra rằng giá trị NULL không được phép lưu trong cột khai báo

CREATE TABLE NhanVIen(
    ma_nhan_vien VARCHAR(10) NOT NULL,
    ho_va_ten NVARCHAR2(50) NOT NULL,
    so_dien_thoai VARCHAR(12)
);
INSERT INTO NhanVien(ma_nhan_vien,ho_va_ten,so_dien_thoai) VALUES ('S001',N'Nguyễn Minh Khôi',null);

CÂU LỆNH SAI
INSERT INTO NhanVien(ma_nhan_vien,ho_va_ten,so_dien_thoai) VALUES (null,N'Nguyễn Minh Khánh',null);

Primary Key – Ràng Buộc Khoá chính

Ràng buộc PRIMARY KEY được tạo nên từ một cột hoặc một tập các cột, nó đảm bảo toàn vẹn thực thể trong bảng, tức là các giá trị trong cột khóa chính phải là duy nhất, không chứa giá trị NULL. Trong 1 bảng chỉ có 1 khóa chính.

CREATE TABLE categories(
    id int primary key, -- rang buoc khóa chính
    name nvarchar2(50) not null
);
--thêm mơi dữ liệu
INSERT INTO categories (id,name) VALUES (1,N'Áo sơ mi');
-- câu sau sai vì đã có id = 1 rồi
INSERT INTO categories (id,name) VALUES (1,N'Áo sơ mi');

UNIQUE - Khóa duy nhất

Ràng buộc khóa duy nhất được tạo nên từ một cột hoặc một tập các cột, nó bảo đảm rằng chỉ các giá trị duy nhập vào trong cột hoặc một tập các cột là duy nhất, ràng buộc UNIQUE cho phép nhận giá trị NULL, trong 1 bảng có thể tạo nhiều khóa UNIQUE.

CREATE TABLE brand(
    id int primary key,
    name nvarchar2(50) unique -- ràng buộc duy nhất
);
INSERT INTO brand (id,name) VALUES (1,N'demo');
-- loi vi trùng tên demo
INSERT INTO brand (id,name) VALUES (1,N'demo');

FOREIGN KEY – Khóa ngoại

Khóa ngoại là khóa dùng để liên kết hai bảng với nhau, nó được tạo nên từ một hoặc một tập các cột, nó tham chiếu đến khóa chính trong một bảng khác, ràng buộc khóa ngoại được sử dụng để đảm bảo toàn vẹn tham chiếu. Bảng chứa khóa ngoại gọi là bảng con, bảng chứa khóa chính gọi là bảng cha.

create table LopHoc(
    MaLop int GENERATED AS IDENTITY primary key,
    TenLop nvarchar2(100) not null unique
);
create table SinhVien(
    MaSV varchar2(15) not null primary key,
    HoTen nvarchar2(50),
    GioiTinh number,
    NgaySinh date,
    DiaChi nvarchar2(200),
    MaLop int,
    foreign key(MaLop) references LopHoc(MaLop) -- khóa ngoại chiếu đến MaLop của bảng LopHoc
);

NOTE: Cột khóa ngoại và khóa chính không nhất thiết và cùng tên nhưng phải cùng kiểu và kích thước.

Ràng buộc DEFAULT

Ràng buộc DEFAULT định nghĩa cho một cột trong bảng, nó gán giá trị mặc định cho cột đó nếu khi thêm bản ghi mới mà không nhập dữ liệu cho cột đó

CREATE TABLE cate(
    id int primary key,
    name nvarchar2(50)not null unique,
    status number default 1
);

Ràng buộc CHECK

Ràng buộc CHECK giới hạn giá trị có thể được nhập vào trong một cột hoặc logic nhiều cột với nhau

create table ProductDetail(
    ProDetailId int GENERATED AS IDENTITY primary key,
    ProId varchar2(15),
    YearMaking number check (YearMaking>1900) -- ràng buộc kiểm tra YearMaking > 900,
    ExpireDate date,
    ImportPrice float check (ImportPrice>=0),
    SalePrice float check (SalePrice>=0) -- ràng buộc kiểm tra sale_price>= 0,
    Description nvarchar2(200),
    Status number default 1,
    foreign key(ProId) references Product(ProId))