插件窝 干货文章 SQL 如何添加外键列

SQL 如何添加外键列

列名 添加 customer 引用 922    来源:    2025-03-29

在SQL中添加外键列的方法

在SQL中,添加外键列可以通过两种方式实现:在创建表时添加,或者在已有表上修改添加。以下是详细的操作方法:

1. 创建表时添加外键列

CREATE TABLE 子表名 (
    列1 数据类型,
    列2 数据类型,
    ...
    外键列名 数据类型,
    FOREIGN KEY (外键列名) REFERENCES 主表名(主键列名)
    [ON DELETE 引用操作] [ON UPDATE 引用操作]
);

示例:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
    ON DELETE CASCADE
);

2. 在已有表上添加外键列

方法一:先添加列,再添加外键约束

-- 添加列
ALTER TABLE 子表名 ADD COLUMN 外键列名 数据类型;

-- 添加外键约束
ALTER TABLE 子表名
ADD CONSTRAINT 约束名称
FOREIGN KEY (外键列名) REFERENCES 主表名(主键列名)
[ON DELETE 引用操作] [ON UPDATE 引用操作];

示例:

ALTER TABLE orders ADD COLUMN customer_id INT;

ALTER TABLE orders
ADD CONSTRAINT fk_customer
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
ON DELETE SET NULL;

方法二:一步完成添加列和外键约束

ALTER TABLE 子表名
ADD COLUMN 外键列名 数据类型,
ADD CONSTRAINT 约束名称
FOREIGN KEY (外键列名) REFERENCES 主表名(主键列名)
[ON DELETE 引用操作] [ON UPDATE 引用操作];

示例:

ALTER TABLE orders
ADD COLUMN customer_id INT,
ADD CONSTRAINT fk_customer
FOREIGN KEY (customer_id) REFERENCES customers(customer_id);

引用操作选项

在定义外键时,可以指定当主表中的记录被更新或删除时的操作:

  • ON DELETE CASCADE:主表记录删除时,自动删除子表中的相关记录
  • ON DELETE SET NULL:主表记录删除时,将子表中的外键设为NULL
  • ON DELETE SET DEFAULT:主表记录删除时,将子表中的外键设为默认值
  • ON DELETE NO ACTION/ON DELETE RESTRICT:阻止删除主表中有子表引用的记录
  • ON UPDATE 也有类似的选项

注意事项

  1. 主表中的被引用列必须是主键或唯一键
  2. 外键列的数据类型必须与被引用列的数据类型匹配
  3. 添加外键前,确保现有数据满足外键约束条件
  4. 不同数据库系统的语法可能略有不同

不同数据库系统的语法差异

  • MySQL/MariaDB:支持上述语法
  • PostgreSQL:与标准SQL语法基本相同
  • SQL Server:使用ADD CONSTRAINT语法
  • Oracle:语法类似,但约束命名方式可能不同