首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

SQL 數據約束完整指南:主鍵、外鍵、非空、唯一、默認、自增六大約束詳解

     編輯:MySQL 綜合教學

SQL 數據約束完整指南:主鍵、外鍵、非空、唯一、默認、自增六大約束詳解

什麼是數據約束

限制用戶對數據的非法修改,保證資料準確性、一致性、完整性。

1. 默認約束

插入時未指定值,自動使用預設值。

CREATE TABLE test1 (
    tin INT,
    tname VARCHAR(20) NOT NULL
);
-- INSERT INTO test1 (tin) VALUES (1); -- 報錯
-- INSERT INTO test1 (tin, tname) VALUES (1, ''); -- 空字串允許

注意: NULL ≠ 空字串 ''。

3. 唯一約束

值不可重複,但允許一個 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)
);

5. 自增約束

插入新行自動分配遞增整數,常用於代理主鍵。

特性說明
類型限制僅支援整數類型(TINYINT/SMALLINT/INT/BIGINT)
唯一性一張表只能有一個 AUTO_INCREMENT 列
起始值預設 1,可 ALTER TABLE t AUTO_INCREMENT = 1000 修改
DELETE vs TRUNCATEDELETE 不重置計數器;TRUNCATE 歸零
間隙事務回滾、刪除行會導致自增值不連續(正常現象)


6. 外鍵約束

參見《SQL 多表管理核心》一文詳細說明。

約束對比速查表

約束允許 NULL允許重複每表數量典型用途
PRIMARY KEY否否1實體唯一標識
UNIQUE是(1個)否多個業務唯一鍵(郵箱、身份證)
NOT NULL否是多個必填欄位
DEFAULT視情況是多個預設狀態、時間戳
AUTO_INCREMENT否否1代理主鍵
FOREIGN KEY是是多個關聯完整性

最佳實踐建議

  1. 業務主鍵(如訂單號)與代理主鍵(自增 ID)分離,代理主鍵供關聯使用
  2. 所有表強制 NOT NULL,必要時給 DEFAULT
  3. 唯一業務鍵加 UNIQUE 索引,既約束又加速查詢
  4. 外鍵在高併發核心鏈路可考慮應用層維護,減少資料庫鎖開銷
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved