Ràng buộc (constraints) trong SQL được sử dụng để đảm bảo tính toàn vẹn và nhất quán của dữ liệu trong cơ sở dữ liệu. Dưới đây là các loại ràng buộc phổ biến và cách quản lý chúng.
Managing constraints | Sử dụng Constraints trong SQL
1. Các Loại Ràng Buộc (Constraints)
- PRIMARY KEY: Đảm bảo mỗi hàng trong bảng là duy nhất và không null.
- FOREIGN KEY: Đảm bảo tính toàn vẹn tham chiếu giữa hai bảng.
- UNIQUE: Đảm bảo tất cả các giá trị trong một cột là duy nhất.
- NOT NULL: Đảm bảo cột không chứa giá trị null.
- CHECK: Đảm bảo các giá trị trong cột thỏa mãn một điều kiện cụ thể.
2. Tạo Ràng Buộc Khi Tạo Bảng
PRIMARY KEY:
CREATE TABLE employees ( employee_id NUMBER PRIMARY KEY, first_name VARCHAR2(50), last_name VARCHAR2(50), email VARCHAR2(100) UNIQUE, hire_date DATE, job_id VARCHAR2(10), salary NUMBER );
FOREIGN KEY:
CREATE TABLE orders ( order_id NUMBER PRIMARY KEY, customer_id NUMBER, order_date DATE, CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id) );
UNIQUE:
CREATE TABLE users ( user_id NUMBER PRIMARY KEY, username VARCHAR2(50) UNIQUE, email VARCHAR2(100) UNIQUE );
NOT NULL:
CREATE TABLE products ( product_id NUMBER PRIMARY KEY, product_name VARCHAR2(100) NOT NULL, price NUMBER NOT NULL );
CHECK:
CREATE TABLE employees ( employee_id NUMBER PRIMARY KEY, first_name VARCHAR2(50), last_name VARCHAR2(50), salary NUMBER, CONSTRAINT chk_salary CHECK (salary > 0) );
3. Thêm Ràng Buộc Vào Bảng Đã Tồn Tại
PRIMARY KEY:
ALTER TABLE employees ADD CONSTRAINT pk_employee PRIMARY KEY (employee_id);
FOREIGN KEY:
ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id);
UNIQUE:
ALTER TABLE users ADD CONSTRAINT uq_username UNIQUE (username);
NOT NULL:
ALTER TABLE products MODIFY product_name NOT NULL;
CHECK:
ALTER TABLE employees ADD CONSTRAINT chk_salary CHECK (salary > 0);
4. Xóa Ràng Buộc
PRIMARY KEY:
ALTER TABLE employees DROP CONSTRAINT pk_employee;
FOREIGN KEY:
ALTER TABLE orders DROP CONSTRAINT fk_customer;
UNIQUE:
ALTER TABLE users DROP CONSTRAINT uq_username;
CHECK:
ALTER TABLE employees DROP CONSTRAINT chk_salary;
5. Đặt Tên Cho Ràng Buộc
Đặt tên cho ràng buộc giúp dễ dàng quản lý và sửa đổi. Ví dụ:
CREATE TABLE employees ( employee_id NUMBER, first_name VARCHAR2(50), last_name VARCHAR2(50), salary NUMBER, CONSTRAINT pk_employee PRIMARY KEY (employee_id), CONSTRAINT chk_salary CHECK (salary > 0) );
VÍ DỤ:
Tạo bảng với các ràng buộc:
CREATE TABLE departments ( department_id NUMBER, department_name VARCHAR2(50) NOT NULL, location VARCHAR2(50), CONSTRAINT pk_department PRIMARY KEY (department_id), CONSTRAINT uq_department_name UNIQUE (department_name) ); CREATE TABLE employees ( employee_id NUMBER, first_name VARCHAR2(50), last_name VARCHAR2(50), department_id NUMBER, salary NUMBER, CONSTRAINT pk_employee PRIMARY KEY (employee_id), CONSTRAINT fk_department FOREIGN KEY (department_id) REFERENCES departments(department_id), CONSTRAINT chk_salary CHECK (salary > 0) );
Thêm ràng buộc vào bảng đã tồn tại:
ALTER TABLE employees ADD CONSTRAINT chk_salary CHECK (salary > 0);
Xóa ràng buộc:
ALTER TABLE employees DROP CONSTRAINT chk_salary;
Chúc anh em thành công.