CREATE TABLE và ràng buộc
Nội dung bài · 5 mục
- 1.Khái niệm
- 2.Ví dụ
- 3.Thử ngay
- 4.Lỗi hay gặp
- 5.Tóm tắt
Cửa hàng cần thêm bảng mã giảm giá. Mã không được trùng, phần trăm giảm chỉ từ 1 đến 50. Nếu chỉ kiểm tra trong code, quên ở một chỗ là dữ liệu sai lọt vào. Ràng buộc giúp database tự chặn dữ liệu sai.
Khái niệm
🏗️ CREATE TABLE: câu lệnh tạo bảng mới, khai báo tên cột, kiểu dữ liệu và ràng buộc của từng cột.
🛡️ Ràng buộc (constraint): quy tắc database tự kiểm tra mỗi lần thêm hay sửa dữ liệu, dữ liệu vi phạm bị từ chối.
| Ràng buộc | Ý nghĩa |
|---|---|
PRIMARY KEY |
khoá chính: không trùng, không NULL |
NOT NULL |
bắt buộc có giá trị |
UNIQUE |
không được trùng |
CHECK (điều kiện) |
giá trị phải thoả điều kiện |
REFERENCES bảng (cột) |
khoá ngoại |
DEFAULT giá_trị không phải ràng buộc, nhưng hay đi kèm: câu INSERT không
ghi cột này thì cột nhận giá trị đó.
Ví dụ
CREATE TABLE coupons (
coupon_id NUMBER GENERATED BY DEFAULT AS IDENTITY
PRIMARY KEY,
code VARCHAR2(20) NOT NULL UNIQUE,
percent NUMBER NOT NULL
CHECK (percent BETWEEN 1 AND 50),
active NUMBER(1) DEFAULT 1 NOT NULL
);codebắt buộc có giá trị và không được trùng.CHECK (percent BETWEEN 1 AND 50)chặn mọi giá trị ngoài khoảng.activemặc định là 1. Cột này dùngNUMBER(1)với 1 là có, 0 là không.
Thử ngay
INSERT INTO coupons (code, percent) VALUES ('SALE10', 10);
SELECT coupon_id, code, percent, active FROM coupons;Đoán trước khi chạy: câu INSERT không ghi coupon_id và active. Hai
cột này có giá trị gì?
Xem kết quả
| COUPON_ID | CODE | PERCENT | ACTIVE |
|---|---|---|---|
| 1 | SALE10 | 10 | 1 |
coupon_id được identity tự cấp, là 1. active lấy giá trị DEFAULT là 1.
Lỗi hay gặp
Thêm dữ liệu vi phạm CHECK. Với bảng coupons vừa tạo ở trên, Oracle
báo lỗi ORA-02290: vi phạm ràng buộc kiểm tra.
-- SAI — lỗi: 80% nằm ngoài khoảng 1 đến 50
INSERT INTO coupons (code, percent) VALUES ('BIG', 80);Mã giảm trong khoảng 1 đến 50, như VALUES ('BIG', 50), thì được thêm bình
thường.
Khai báo VARCHAR2(n) rồi lưu chữ tiếng Việt. Mặc định n tính theo
byte, mà chữ có dấu như "ũ" chiếm 2 byte. "Dũng" có 4 ký tự nhưng tới 5
byte, nên Oracle báo lỗi ORA-12899: giá trị quá dài.
-- SAI — lỗi: 'Dũng' cần 5 byte
CREATE TABLE staff_bytes (name VARCHAR2(4));
INSERT INTO staff_bytes (name) VALUES ('Dũng');-- ĐÚNG — thêm CHAR để tính theo số ký tự
CREATE TABLE staff (name VARCHAR2(4 CHAR));
INSERT INTO staff (name) VALUES ('Dũng');Tóm tắt
CREATE TABLEkhai báo cột, kiểu dữ liệu và ràng buộc.- Ràng buộc để database tự chặn dữ liệu sai:
NOT NULL,UNIQUE,CHECK, khoá chính, khoá ngoại. DEFAULTcho cột giá trị sẵn khiINSERTkhông ghi tới.- Lưu tiếng Việt thì dùng
VARCHAR2(n CHAR)để tính theo số ký tự.
Bình luận
Đang tải bình luận…