目錄
🎯 什么是 Constraint?
MySQL 中常見的約束類型:
1. PRIMARY KEY
2. FOREIGN KEY
3. UNIQUE
4. NOT NULL
5. DEFAULT
6. CHECK(MySQL 8.0+)
7. AUTO_INCREMENT
🎯 什么是 Constraint?
Constraint(約束) 是你在創建表時指定的一組規則,用于限制字段中允許的值,以防止無效、重復或不一致的數據寫入數據庫。
MySQL 中常見的約束類型:
約束類型 | 作用描述 |
---|---|
PRIMARY KEY | 標識表中唯一的記錄(不能重復,不能為 NULL) |
FOREIGN KEY | 保證兩個表之間的引用一致性(建立關聯) |
UNIQUE | 限制某列中的值不能重復 |
NOT NULL | 限制字段值不能為空 |
DEFAULT | 給字段設置默認值 |
CHECK | 限制字段值必須滿足指定的邏輯表達式(MySQL 8.0+ 才正式支持) |
AUTO_INCREMENT | 自動生成唯一的整數(通常用于主鍵) |
1. PRIMARY KEY
-
用于唯一標識表中每一行記錄;
-
通常只設置一個主鍵;
-
自動包含
NOT NULL
和UNIQUE
約束。
CREATE TABLE students (student_id INT PRIMARY KEY,name VARCHAR(100)
);
2. FOREIGN KEY
-
建立兩個表之間的聯系;
-
確保外鍵列中的值在父表中必須存在。
CREATE TABLE courses (course_id INT PRIMARY KEY,course_name VARCHAR(100)
);CREATE TABLE enrollments (student_id INT,course_id INT,FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
3. UNIQUE
-
限制某列中的值不能重復;
-
不限制 NULL 值(NULL 不視為“重復”)。
CREATE TABLE users (user_id INT PRIMARY KEY,email VARCHAR(100) UNIQUE
);
4. NOT NULL
-
防止列接受 NULL 值;
-
常用于業務關鍵字段,如姓名、價格等。
CREATE TABLE products (product_id INT PRIMARY KEY,name VARCHAR(100) NOT NULL
);
5. DEFAULT
-
如果插入時未指定該列的值,則自動填入默認值。
CREATE TABLE orders (order_id INT PRIMARY KEY,status VARCHAR(20) DEFAULT 'pending'
);
6. CHECK
(MySQL 8.0+)
-
驗證列值是否滿足條件;
-
在舊版本中會忽略,不生效。
CREATE TABLE employees (emp_id INT PRIMARY KEY,age INT CHECK (age >= 18)
);
7. AUTO_INCREMENT
-
自動為每一行生成唯一編號;
-
常和主鍵一起使用。
CREATE TABLE customers (customer_id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100)
);