限制用戶對數據的非法修改,保證資料準確性、一致性、完整性。
插入時未指定值,自動使用預設值。
CREATE TABLE test1 (
tin INT,
tname VARCHAR(20) NOT NULL
);
-- INSERT INTO test1 (tin) VALUES (1); -- 報錯
-- INSERT INTO test1 (tin, tname) VALUES (1, ''); -- 空字串允許
注意: NULL ≠ 空字串 ''。
值不可重複,但允許一個 NULL(多個 NULL 在某些版本視為不重複)。
-- 列級
CREATE TABLE test1 (tin INT PRIMARY KEY, tname VARCHAR(20));
-- 表級(複合主鍵)
CREATE TABLE employee (
name VARCHAR(25),
dept_id INT,
salary FLOAT,
PRIMARY KEY (name, dept_id)
);
插入新行自動分配遞增整數,常用於代理主鍵。
特性 說明 類型限制 僅支援整數類型(TINYINT/SMALLINT/INT/BIGINT) 唯一性 一張表只能有一個 AUTO_INCREMENT 列 起始值 預設 1,可 ALTER TABLE t AUTO_INCREMENT = 1000修改DELETE vs TRUNCATE DELETE不重置計數器;TRUNCATE歸零間隙 事務回滾、刪除行會導致自增值不連續(正常現象) 6. 外鍵約束
參見《SQL 多表管理核心》一文詳細說明。
約束對比速查表
| 約束 | 允許 NULL | 允許重複 | 每表數量 | 典型用途 |
|---|---|---|---|---|
| PRIMARY KEY | 否 | 否 | 1 | 實體唯一標識 |
| UNIQUE | 是(1個) | 否 | 多個 | 業務唯一鍵(郵箱、身份證) |
| NOT NULL | 否 | 是 | 多個 | 必填欄位 |
| DEFAULT | 視情況 | 是 | 多個 | 預設狀態、時間戳 |
| AUTO_INCREMENT | 否 | 否 | 1 | 代理主鍵 |
| FOREIGN KEY | 是 | 是 | 多個 | 關聯完整性 |