erential integrityOracle关系数据库参照完整性约束实践(oracle关键字ref)

在Oracle关系数据库中,参照完整性约束是对表间的数据关系进行保护的重要机制。它确保了在更新或删除任何存在关联的行时,引用完整性不会被弄乱。在本文中,将介绍参照完整性约束的概念、使用方法以及一些实践技巧。

1. 什么是参照完整性约束?

参照完整性约束是一种数据库机制,用于确保表之间关联数据的内在一致性。这通常由主键 – 外键关联构建,其中一个表的主键被作为另一个表中的外键引用。这种机制可以帮助我们避免与参照完整性冲突的不一致数据的错误输入和更新。

2. 如何使用参照完整性约束?

步骤1:向一个表添加主键约束

CREATE TABLE employee

(

id NUMBER(4) PRIMARY KEY,

name VARCHAR2(10),

job VARCHAR2(10),

hiredate DATE,

salary NUMBER(7, 2),

dept_id NUMBER(4)

);

步骤2:将表B的外键字段引用到上述主表的主键上,以确保关联完整性

CREATE TABLE department

(

dept_id NUMBER(4),

dept_name VARCHAR2(14),

CONSTRNT pk_dept PRIMARY KEY (dept_id)

);

ALTER TABLE employee ADD CONSTRNT fk_employee_dept

FOREIGN KEY (dept_id)

REFERENCES department (dept_id);

3. 四种参照完整性方式:

默认: ON DELETE NO ACTION,ON UPDATE RESTRICT

ON DELETE SET NULL / ON UPDATE SET NULL

ON DELETE CASCADE / ON UPDATE CASCADE

ON DELETE SET DEFAULT / ON UPDATE SET DEFAULT

4. 实例演示:

先创建主表employee和子表department, 并在其中加入相应数据

INSERT INTO employee VALUES(101, ‘Lucy’, ‘销售员’, TO_DATE(’15/3/2021′), 1500, 1);

INSERT INTO employee VALUES(102, ‘Kelvin’, ‘工程师’, TO_DATE(’24/11/2022′), 2300, 2);

INSERT INTO employee VALUES(103, ‘Nancy’, ‘销售员’, TO_DATE(’20/2/2022′), 2600,2);

INSERT INTO employee VALUES(104, ‘Tom’, ‘市场经理’, TO_DATE(’30/4/2023′), 3200,3);

INSERT INTO employee VALUES(105, ‘King’, ‘保安’, TO_DATE(’16/6/2021′), 1700,1);

INSERT INTO employee VALUES(106, ‘Mary’, ‘文员’, TO_DATE(’10/5/2021′), 1300,2);

INSERT INTO department VALUES(1, ‘销售部门’);

INSERT INTO department VALUES(2, ‘技术部门’);

INSERT INTO department VALUES(3, ‘市场部门’);

在本演示中,我们将使用级联删除和级联更新这两种参照完整性约束方式。

ON DELETE CASCADE的演示:

在employee表上使用ON DELETE CASCADE 参照完整性约束选项

ALTER TABLE employee ADD CONSTRNT fk2_employee FOREIGN KEY (dept_id) REFERENCES department(dept_id) ON DELETE CASCADE;

然后删除department表中的dept_id为2的行,系统会自动删除employee表中dept_id为2的所有行。

DELETE FROM department WHERE dept_id=2;

检查此过程将影响多少行

SELECT * FROM employee;

在这里我们可以看到,dept_id为2的行已从employee表中删除。

ON UPDATE CASCADE的演示:

我们使用ON UPDATE CASCADE 在department表中更新dept_id以确保employee表的完整性.

UPDATE department SET dept_id=4 WHERE dept_id=1;

通过查询我们可以看到id为101和105的行dept_id已经被成功地更新为4.

SELECT * FROM employee;

参照完整性约束为数据库管理员提供了一种非常有用的方法,用于保护表之间的数据关系,并减少了不一致数据带来的错误。这篇文章对参照完整性约束的简要介绍和实际演示,可以帮助读者更好地理解Oracle数据库中的这一重要机制。


数据运维技术 » erential integrityOracle关系数据库参照完整性约束实践(oracle关键字ref)