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

MySQL 存儲引擎與表約束速查:InnoDB/MyISAM/Memory 特性對比、主鍵/外鍵/非空/唯一/自增/默認值語法

     編輯:MySQL 綜合教學

一、三大核心存儲引擎對比

特性InnoDBMyISAMMemory (HEAP)
事務支持✅ ACID 完整支持❌ 不支持❌ 不支持
鎖粒度行鎖 (高並發)表鎖 (低並發寫入)表鎖
外鍵約束✅ 支持❌ 不支持❌ 不支持
崩潰恢復✅ Redo/Undo Log 自動恢復❌ 易損壞,需 REPAIR TABLE❌ 重啟數據全丟失
MVCC✅ 多版本並發控制❌❌
全文索引5.6+ 支持✅ 早期優勢❌
空間索引5.7+ 支持✅❌
數據存儲聚簇索引 (主鍵順序)堆表 (.MYD/.MYI)純內存 (重啟丟失)
適用場景核心業務、高並發、事務、外鍵只讀/多讀少寫、全文搜索、日誌歸檔臨時表、查詢緩存、查找表 (數據可重建)

默認引擎:MySQL 5.5+ 默認 InnoDB,SHOW ENGINES; 查看支持列表。

二、字符集配置 (my.cnf)

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[client]
default-character-set = utf8mb4

三、表約束語法速查 (建表時定義)

CREATE TABLE table_name (
  -- 1. 主鍵
  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,  -- 單列主鍵
  -- 或
  col1 INT, col2 INT, PRIMARY KEY (col1, col2),         -- 複合主鍵

  -- 2. 外鍵
  fk_col INT,
  CONSTRAINT fk_name FOREIGN KEY (fk_col) REFERENCES ref_table(ref_col)
    ON DELETE CASCADE ON UPDATE CASCADE,  -- 可選級聯動作

  -- 3. 非空
  name VARCHAR(50) NOT NULL,
  -- 或允許空
  nickname VARCHAR(50) NULL,

  -- 4. 唯一
  email VARCHAR(100) UNIQUE,
  -- 或複合唯一
  UNIQUE KEY uk_name_status (name, status),

  -- 5. 自增 (僅整數類型,通常配合主鍵)
  seq INT AUTO_INCREMENT,

  -- 6. 默認值
  status TINYINT DEFAULT 1,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

四、約束修改 (ALTER TABLE)

操作SQL 示例
添加主鍵ALTER TABLE t ADD PRIMARY KEY (id);
刪除主鍵ALTER TABLE t DROP PRIMARY KEY;
添加外鍵ALTER TABLE t ADD CONSTRAINT fk_name FOREIGN KEY (col) REFERENCES ref(col);
刪除外鍵ALTER TABLE t DROP FOREIGN KEY fk_name;
修改非空ALTER TABLE t MODIFY col VARCHAR(50) NOT NULL;
添加唯一索引ALTER TABLE t ADD UNIQUE KEY uk_name (name);
修改自增起始值ALTER TABLE t AUTO_INCREMENT = 1000;
修改默認值ALTER TABLE t ALTER COLUMN col SET DEFAULT 'new_val'; (8.0+)
ALTER TABLE t MODIFY col VARCHAR(50) DEFAULT 'new_val'; (舊版)

五、外鍵關鍵規則

  1. 父表被引用列必須有索引 (主鍵/唯一鍵自動有索引)
  2. 子表外鍵列自動創建索引 (InnoDB)
  3. 數據類型、長度、字符集、校對規則 完全一致 (含 UNSIGNED/SIGNED)
  4. 級聯動作:CASCADE (級聯刪除/更新)、SET NULL (置空)、RESTRICT/NO ACTION (阻止)
  5. 生產環境高並發慎用外鍵 (鎖開銷大),改由應用層維護一致性

六、引擎轉換

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved