📅  最后修改于: 2023-12-03 15:37:51.047000             🧑  作者: Mango
外键是一种关系型数据库中用来建立表与表之间关联关系的一种方式。在 Oracle SQL 中,外键约束用来确保一个表中的数据与其他表中数据的完整性并且使两个表之间的关系更清晰。
外键约束是一条规则,它指定了表与外部表之间的关联关系。外键可以保障数据的完整性和一致性。在创建外键时,需要指定一个参照表和一个关联字段。这个参照表中的字段必须是一个主键,唯一约束或非空约束。
下面是一个外键约束的示例:
CREATE TABLE students (
id NUMBER(10) PRIMARY KEY,
name VARCHAR2(50),
class_id NUMBER(10) REFERENCES classes(id)
);
CREATE TABLE classes (
id NUMBER(10) PRIMARY KEY,
name VARCHAR2(50)
);
在上面的示例中,我们创建了两个表,students 和 classes。students 表中的 class_id 列作为一个外键约束,参考了 classes 表的 id 列。这意味着类别 ID 必须存在于 classes 表中。在添加记录时,如果我们试图在 classes 表中没有相应 ID 的情况下向 students 表中添加记录,那么就会收到一个错误提示。
使用外键可以极大地提高数据库的安全性和可靠性。下面是使用外键的几个优点:
外键约束可以保障数据完整性:外键约束可以确保两个表之间的数据是一致的,因为它们都关联在相同的参考表上。
外键可以自动更新:如果一个表中的某个记录在参考表中被删除或修改,与之相关的外键约束会自动更新。这样可以保证所有记录都是最新的。
外键可以自动删除:如果一个表中有一个记录被删除,与之相关的记录会自动从外部表中删除。这避免了数据残留和多余数据的产生。
下面是一个具体的外键案例:
CREATE TABLE orders (
id NUMBER(10) PRIMARY KEY,
customer_id NUMBER(10) REFERENCES customers(id),
order_date DATE,
total NUMBER(10,2)
);
CREATE TABLE customers (
id NUMBER(10) PRIMARY KEY,
name VARCHAR2(50),
email VARCHAR2(50)
);
在上面的例子中,订单表(orders)中的 customer_id 列是一个外键,它参考了客户表(customers)的 id 列。这保证了订单的存在必须与客户表关联。如果客户被删除,则与其相关联的订单也会被自动删除。这种方式保证了数据的连贯性及完整性,从而避免了产生脏数据。