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

MySQL 字段約束全解析:主鍵、外鍵、非空、默認值、唯一、自增

     編輯:MySQL 綜合教學

核心概念

字段約束是保障數據完整性、可靠性與準確性的關鍵機制。MySQL 支持六大核心約束,合理使用能從源頭杜絕髒數據。

1. 主鍵約束

單列主鍵

CREATE TABLE student (
    sid INT PRIMARY KEY,
    name VARCHAR(20)
);

複合主鍵

CREATE TABLE score (
    sid INT,
    cid INT,
    grade FLOAT,
    PRIMARY KEY (sid, cid)
);

後續添加/修改

-- 添加主鍵
ALTER TABLE good ADD PRIMARY KEY (gid);

-- 修改主鍵:必須先刪除再創建
ALTER TABLE book DROP PRIMARY KEY;
ALTER TABLE book ADD PRIMARY KEY (bnum);

2. 外鍵約束

前置條件

  • 雙表必須為 InnoDB 引擎
  • 被引用字段需有索引(主鍵或唯一鍵)
  • 字段類型、長度、字符集完全一致

創建語法

ALTER TABLE child_table
ADD CONSTRAINT fk_name
FOREIGN KEY (child_col) REFERENCES parent_table (parent_col)
ON DELETE RESTRICT ON UPDATE CASCADE;

級聯動作說明

動作行為
CASCADE父表更新/刪除,子表跟隨更新/刪除
SET NULL父表更新/刪除,子表外鍵列置 NULL
RESTRICT/NO ACTION拒絕父表操作(默認)

3. 非空約束

-- 建表時指定
CREATE TABLE t (col INT NOT NULL);

-- 後續修改
ALTER TABLE t MODIFY col INT NOT NULL;

注意:非空列仍可插入空字符串 '' 或數值 0。

4. 默認值約束

-- 建表時
CREATE TABLE t (status TINYINT DEFAULT 1);

-- 後續添加/修改/刪除
ALTER TABLE t ALTER status SET DEFAULT 2;
ALTER TABLE t ALTER status DROP DEFAULT;

5. 唯一性約束

-- 列級
CREATE TABLE t (email VARCHAR(50) UNIQUE);

-- 表級(支持組合唯一)
CREATE TABLE t (
    a INT, b INT,
    CONSTRAINT uk_ab UNIQUE (a, b)
);

-- 後續添加/刪除
ALTER TABLE t ADD UNIQUE (col);
ALTER TABLE t DROP INDEX uk_ab;

特性:允許一個 NULL 值,多列組合時只要組合值唯一即可。

6. 自增約束

CREATE TABLE t (
    id INT AUTO_INCREMENT PRIMARY KEY
);
  • 僅適用整數類型
  • 隱含唯一約束
  • 單表僅允許一個自增列
  • TRUNCATE TABLE 會重置計數器

7. 通用約束刪除

-- 通過約束名刪除(主鍵、唯一、外鍵、普通索引均適用)
ALTER TABLE t DROP INDEX constraint_name;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved