SqlServer教程

SQLServer 外键

在SQL Server中,外键用于强制SQL Server数据库内的引用完整性。它指定一个表中的值也必须出现在另一表中。
被引用的表称为父表,而具有外键的表称为子表。子表中的外键通常将引用父表中的主键。
可以使用CREATE TABLE语句或ALTER TABLE语句创建外键。

使用CREATE TABLE语句创建外键

语法:
CREATE TABLE child_table
(
  column1 datatype [ null | NOT null ],
  column2 datatype [ null | NOT null ],
  ...
  CONSTRAint fk_name
    FOREIGN KEY (child_col1, child_col2, ... child_col_n)
    REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
    [ON DELETE {NO ACTION | CASCADE | SET null | SET DEFAULT} ]
    [ON UPDATE {NO ACTION | CASCADE | SET null | SET DEFAULT} ] 
);

参数说明

child_table: 它指定要创建的子表的名称。
列1,列2: : 它指定要在表中创建的列。每列必须具有一个数据类型。该列应定义为NULL或NOT NULL,如果将此值保留为空,则数据库将假定NULL为默认值。
fk_name: 您要创建的关键约束。
child_col1,child_col2,... child_col_n: : 它指定child_table中的列,这些列将引用parent_table中的主键。
parent_table: 它指定将在child_table中使用其主键的父表的名称。
parent_col1,parent_col2,... parent_col3: : 它指定用于在parent_table中的主键上。外键将强制此数据与child_table中的child_col1,child_col2,... child_col_n列之间建立链接。
示例:
让我们创建两个表"产品"和"库存",其中产品表的主键是" product_id",它是"库存"表中的外键。
CREATE TABLE products
( product_id int PRIMARY KEY,
  product_name VARCHAR(50) NOT null,
  category VARCHAR(25)
);
CREATE TABLE inventory
( inventory_id int PRIMARY KEY,
  product_id int NOT null,
  quantity INT,
  min_level INT,
  max_level INT,
  CONSTRAint fk_inv_product_id
    FOREIGN KEY (product_id)
    REFERENCES products (product_id)
);
输出:
SQL Server外键1
"库存"表是fk_inv_product_id。它将在库存表中的product_id列与产品表中的product_id列之间建立关系。
您现在可以检查两个表。
SQL Server外键2 SQL Server外键3

创建具有多个字段的外键

在上面的示例中,我们看到了如何创建具有一个列的外键。让我们创建具有多个字段的外键。
我们创建两个表" products2"和" inventory2"。在此示例中," products2"表具有一个主键,该主键同时包含product_name和location列。因此,第二个表和外键也必须引用这两列。
因此,在此示例中,我们的外键fk_inv_product基于两个字段(product_name和location字段)引用了products表。
CREATE TABLE products2
( product_name VARCHAR(50) NOT null,
  location VARCHAR(50) NOT null,
  category VARCHAR(25)
  CONSTRAint products_pk PRIMARY KEY (product_name, location)
);
CREATE TABLE inventory2
( inventory_id int PRIMARY KEY,
  product_name VARCHAR(50) NOT null,
  location VARCHAR(50) NOT null,
  quantity INT,
  min_level INT,
  max_level INT,
  CONSTRAint fk_inv_product
    FOREIGN KEY (product_name, location)
    REFERENCES products2 (product_name, location)
);
输出:
SQL Server外键4
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4