【魔神】SQL Server创建表以及一些外键约束

1.创建基本表
CREATE TABLE dbo.Orders (
    OrderID INT PRIMARY KEY,           -- 主键
    CustomerID INT,                    -- 客户ID
    OrderDate DATETIME,                -- 订单日期
    ShipDate DATETIME,                 -- 发货日期
    ShipAddress NVARCHAR(255),         -- 发货地址
    Status NVARCHAR(50)                -- 订单状态
);



2.添加外键约束

外键约束用于确保表与表之间的关系。以下是如何在 SQL Server 中创建外键约束的详细步骤。

2.1. 创建一个参照关系(外键)约束
假设有两个表:Orders 和 Customers,Orders 表的 CustomerID 字段是 Customers 表的外键。
 

CREATE TABLE dbo.Customers (
    CustomerID INT PRIMARY KEY,               -- 客户ID
    CustomerName NVARCHAR(100),               -- 客户姓名
    ContactName NVARCHAR(100)                 -- 联系人
);

CREATE TABLE dbo.Orders (
    OrderID INT PRIMARY KEY,                  -- 订单ID
    CustomerID INT,                           -- 客户ID
    OrderDate DATETIME,                       -- 订单日期
    ShipAddress NVARCHAR(255),                -- 发货地址
    CONSTRAINT FK_CustomerOrder FOREIGN KEY (CustomerID)
        REFERENCES dbo.Customers(CustomerID)  -- 外键指向 Customers 表的 CustomerID
);


2.2. 外键约束的附加选项
ON DELETE CASCADE: 当主表的记录被删除时,相关的外键记录也会被删除。
ON UPDATE CASCADE: 当主表的记录更新时,相关的外键记录会被更新。

CREATE TABLE dbo.Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    OrderDate DATETIME,
    ShipAddress NVARCHAR(255),
    CONSTRAINT FK_CustomerOrder FOREIGN KEY (CustomerID)
        REFERENCES dbo.Customers(CustomerID)
        ON DELETE CASCADE                    -- 删除时级联删除外键记录
        ON UPDATE CASCADE                    -- 更新时级联更新外键记录
);


 

2.3. 外键约束的条件
外键可以具有删除限制或更新限制,这些限制会在外键被删除或更新时发生:

ON DELETE NO ACTION: 如果删除主表记录时有相关的外键记录,操作会被拒绝。默认值。
ON DELETE SET NULL: 当主表记录删除时,外键字段会被设置为 NULL。

CREATE TABLE dbo.Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    OrderDate DATETIME,
    ShipAddress NVARCHAR(255),
    CONSTRAINT FK_CustomerOrder FOREIGN KEY (CustomerID)
        REFERENCES dbo.Customers(CustomerID)
        ON DELETE SET NULL                    -- 删除时将外键字段设为 NULL
);
 

2.4. 外键约束中的检查条件
有时,外键约束可以包含检查条件,例如,确保引用的记录符合特定条件。以下是一个示例:
CREATE TABLE dbo.Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    OrderDate DATETIME,
    ShipAddress NVARCHAR(255),
    CONSTRAINT FK_CustomerOrder FOREIGN KEY (CustomerID)
        REFERENCES dbo.Customers(CustomerID)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
    CONSTRAINT CHK_OrderDate CHECK (OrderDate > '2020-01-01') -- 检查订单日期
);

2.5. 自定义外键约束
有时,可能需要在外键约束中使用多列。例如,Orders 表可能包含多个外键,且需要共同作用:

CREATE TABLE dbo.OrderDetails (
    OrderDetailID INT PRIMARY KEY,
    OrderID INT,
    ProductID INT,
    Quantity INT,
    CONSTRAINT FK_Order FOREIGN KEY (OrderID)
        REFERENCES dbo.Orders(OrderID),
    CONSTRAINT FK_Product FOREIGN KEY (ProductID)
        REFERENCES dbo.Products(ProductID)
);


3. 创建带有多重外键约束的表
如果表涉及多个外键关系,可以按以下方式进行设置:
 

CREATE TABLE dbo.Products (
    ProductID INT PRIMARY KEY,
    ProductName NVARCHAR(100),
    CategoryID INT
);

CREATE TABLE dbo.Categories (
    CategoryID INT PRIMARY KEY,
    CategoryName NVARCHAR(100)
);

CREATE TABLE dbo.OrderDetails (
    OrderDetailID INT PRIMARY KEY,
    OrderID INT,
    ProductID INT,
    Quantity INT,
    CONSTRAINT FK_Order FOREIGN KEY (OrderID)
        REFERENCES dbo.Orders(OrderID),
    CONSTRAINT FK_Product FOREIGN KEY (ProductID)
        REFERENCES dbo.Products(ProductID),
    CONSTRAINT FK_Category FOREIGN KEY (CategoryID)
        REFERENCES dbo.Categories(CategoryID)
);

4. 外键约束的管理
4.1. 删除外键约束
如果需要删除外键约束,可以使用 ALTER TABLE 删除:

ALTER TABLE dbo.Orders
DROP CONSTRAINT FK_CustomerOrder;


4.2. 修改外键约束
SQL Server 不允许直接修改外键约束。如果要修改外键约束,必须先删除它,然后重新创建新的外键。

ALTER TABLE dbo.Orders
DROP CONSTRAINT FK_CustomerOrder;

ALTER TABLE dbo.Orders
ADD CONSTRAINT FK_CustomerOrder FOREIGN KEY (CustomerID)
    REFERENCES dbo.Customers(CustomerID);


在 SQL Server 中,外键约束通过 FOREIGN KEY 关键字创建,并且可以包括多种附加选项,如级联删除、级联更新、删除时设为 NULL 等。可以根据需要选择合适的约束方式来确保数据的完整性和一致性。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值