首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 外鍵建立實戰:InnoDB 引擎下主從表關聯語法與常見錯誤避坑

     編輯:MySQL 資料庫相關知識

前置條件

  • 存儲引擎必須為 InnoDB(MyISAM 不支援外鍵)。
  • 父表欄位需為主鍵或唯一索引。
  • 子表外鍵欄位類型、長度、字符集必須與父表參照欄位完全一致(含 VARCHAR(11) 等長度定義)。

範例:1:N 關聯(部落格主表 → 留言表)

1. 建立主表 biao

DROP TABLE IF EXISTS `biao`;
CREATE TABLE `biao` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(11) DEFAULT NULL,
  `content` varchar(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

2. 建立子表 cotton(含外鍵約束)

DROP TABLE IF EXISTS `cotton`;
CREATE TABLE `cotton` (
  `id` int PRIMARY KEY,
  `user` varchar(11),
  `email` varchar(11),
  `url` varchar(11),
  `content` varchar(11),
  `addTime` date,
  `biao_id` int,
  CONSTRAINT `FK_biao_id` FOREIGN KEY (`biao_id`) REFERENCES `biao`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

工具導出 SQL 對比(sql-front 導出)

CREATE TABLE `comment` (
  `id` int(11) NOT NULL,
  `user` varchar(11) DEFAULT NULL,
  `email` varchar(11) DEFAULT NULL,
  `url` varchar(11) DEFAULT NULL,
  `content` varchar(11) DEFAULT NULL,
  `addTime` date DEFAULT NULL,
  `blog_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_blog_id` (`blog_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

ALTER TABLE `comment` ADD FOREIGN KEY (`blog_id`) REFERENCES `blog` (`id`);

工具導出採用「先建表加索引,再 ALTER TABLE ADD FOREIGN KEY」兩步驟,等效於建表時直接聲明 CONSTRAINT。

常見錯誤與避坑

  • 欄位類型/長度不匹配:VARCHAR(11) vs VARCHAR(20) 會報錯。
  • 父表無索引:參照欄位必須有索引。
  • 引擎不支援:誤用 MyISAM 導致外鍵無效。
  • 字符集/校對不一致:父子表字符集不同會導致建立失敗。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved