SQL外键

外键是表中的一列,其值必须列在另一表的主键中。外键是保证引用完整性的极其重要部分。我们举个例子来理解外键。

Orders表将录入到系统的每个订单作为一行包含其中。顾客信息存储在Customers表中。Orders表中的订单通过顾客ID与Customers表中的特定行相关联。顾客ID为Customers表的主键,每个顾客都有唯一的ID。订单号为Orders表的主键,每个订单都有唯一的订单号。

Orders表中顾客ID列的值不一定是唯一的。如果某个顾客有多个订单,则有多个行具有相同的顾客ID(虽然每个订单都有不同的订单号)。同时,Orders表中顾客ID列的合法值为Customers表中顾客的ID。

这就是外键的作用。在这个例子中,在Orders的顾客ID列上定义了一个外键,因此该列只能接受Customers表的主键值。

下面是定义这个外键的方法。

    CREATE TABLE Orders
    (
        order_num     INTEGER     NOT NULL PRIMARY KEY,
        order_date    DATETIME    NOT NULL,
        cust_id       CHAR(10)    NOT NULL REFERENCES Customers(cust_id)
    );

其中的表定义使用了REFERENCES关键字,它表示cust_id中的任何值都必须是Customers表的cust_id中的值。

相同的工作也可以在ALTER TABLE语句中用CONSTRAINT语法来完成:

    ALTER TABLE Orders
    ADD CONSTRAINT
    FOREIGN KEY (cust_id) REFERENCES Customers (cust_id);

提示:外键有助防止意外删除
除帮助保证引用完整性外,外键还有另一个重要作用。在定义外键后,DBMS不允许删除在另一个表中具有关联行的行。例如,不能删除关联订单的顾客。删除该顾客的唯一方法是首先删除相关的订单(这表示还要删除相关的订单项)。由于需要一系列的删除,因而利用外键可以防止意外删除数据。

有的DBMS支持称为级联删除(cascading delete)的特性。如果启用,该特性在从一个表中删除行时删除所有相关的数据。例如,如果启用级联删除并且从Customers表中删除某个顾客,则任何关联的订单行也会被自动删除。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!

 

SQL教程