是的,MySQL 中的外键可以同时是主键,这种设计被称为"主外键"或"标识关系(identifying relationship)"。
当外键作为主键时,通常出现在以下场景:
-- 父表
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(50) NOT NULL
);
-- 子表,其中manager_id既是主键又是外键
CREATE TABLE department_managers (
dept_id INT PRIMARY KEY,
manager_name VARCHAR(50) NOT NULL,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
这种设计最适合表示强制的、一对一的关系,例如: - 用户表和用户详情表 - 订单表和订单支付表 - 部门表和部门经理表
如果关系是可选的(可能不存在关联记录),则不适合使用这种设计,因为主键不允许NULL值。