1. 什么是外键
在关系型数据库中,存在多个表之间的关系,而这些关系需要用到外键来维护。外键可以实现表与表之间的数据完整性和一致性,保证每个表中的数据没有关联错误。
外键是指一个表中的字段(或字段组),它与另一个表中的字段(或字段组)有关联关系。其中,一个表的外键必须对应另一个表的主键。
2. 外键的使用场景
2.1 防止数据更新
通过外键来指定关联,可以防止删除了主表中的数据,因为外键中的数据还与其他表有关联,这样只是删除主表中的数据而不能删除与该主表相关的所有数据,从而保证了数据的完整性。
2.2 提高数据检索效率
在查询操作的时候,使用外键可以非常轻松地查询主表以及与之相关的所有表中的数据。
3. 创建外键
我们来看一个例子,在两个表中创建外键:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE
);
CREATE TABLE customers (
customer_id int PRIMARY KEY,
customer_name VARCHAR(50),
customer_email VARCHAR(50),
CONSTRAINT fk_customer_orders FOREIGN KEY (customer_id)
REFERENCES orders (customer_id)
);
上面的代码中,我们创建了两个表,orders和customers。在customers表中,我们创建了一个外键fk_customer_orders,它指定了customers表中的customer_id字段与orders表中的customer_id字段有一个关联关系。
4. 外键的类型
在SQL Server中,有两种外键类型,即引用完整性约束外键和自主完整性约束外键。
4.1 引用完整性约束外键
引用完整性约束外键是指外键字段必须引用主表中的现有值,并且在删除主表中的数据时必须删除从表中的相关数据。
下面是一个例子,创建外键fk_customer_orders引用完整性约束外键:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE
);
CREATE TABLE customers (
customer_id int PRIMARY KEY,
customer_name VARCHAR(50),
customer_email VARCHAR(50)
);
ALTER TABLE orders
ADD CONSTRAINT fk_customer_orders
FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
ON DELETE CASCADE;
上面的代码中,我们用ALTER TABLE命令将外键fk_customer_orders添加到orders表中,引用customers表中的customer_id字段。其中ON DELETE CASCADE表示当删除主表中的数据时,从表中相关的数据也会被删除。
4.2 自主完整性约束外键
自主完整性约束外键是指外键字段是自定义的,而不是引用主表中的现有值。这种类型的外键不需要删除从表中的相关数据。
下面是一个例子,创建外键fk_customer_orders自主完整性约束外键:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE
);
CREATE TABLE customers (
customer_id int PRIMARY KEY,
customer_name VARCHAR(50),
customer_email VARCHAR(50),
CONSTRAINT fk_customer_orders CHECK (customer_id > 10 AND customer_id < 20)
);
ALTER TABLE orders
ADD CONSTRAINT fk_customer_orders
FOREIGN KEY (customer_id) REFERENCES customers (customer_id);
上面的代码中,我们在customers表中创建了一个外键fk_customer_orders,它定义了一个自主完整性约束,只允许customer_id字段的值在10和20之间。在orders表中,我们使用ALTER TABLE命令将外键fk_customer_orders添加到了orders表中。
5. 总结
通过上面的介绍,我们可以看到外键是如何能够提高关系型数据库中的数据冗余的处理能力,并保证数据的完整性和一致性的。同时,外键的使用要根据具体情况来选择,需要根据自己的业务需求来灵活运用。