突然看到这么一个名词,觉得有些陌生,特地记录下来。
键保留表是理解连接视图修改限制的一个基本概念。该表的主键列全部显示在视图中,并且它们的值在视图中都是唯一且非空的。也就是说,表的键值在一个连接视图中也是键值,那么就称这个表为键保留表。
下面来看一个例子:
首先定义一个这样的视图
SQL> CREATE VIEW emp_dept AS SELECT emp.empno, emp.ename, emp.deptno, emp.sal, dept.dname, dept.loc FROM emp, dept WHERE emp.deptno = dept.deptno AND dept.loc IN ('DALLAS', 'NEW YORK', 'BOSTON'); SQL> SELECT * FROM emp_dept; EMPNO ENAME DEPTNO SAL DNAME LOC ---------- ---------- ---------- ---------- -------------- ------------- 7584 OSTER 10 ACCOUNTING NEW YORK 7369 SMITH 20 800 RESEARCH DALLAS 7566 JONES 20 2975 RESEARCH DALLAS 7782 CLARK 10 2450 ACCOUNTING NEW YORK 7788 SCOTT 20 3000 RESEARCH DALLAS 7839 KING 10 5000 ACCOUNTING NEW YORK 7876 ADAMS 20 1100 RESEARCH DALLAS 7902 FORD 20 3000 RESEARCH DALLAS 7934 MILLER 10 1300 ACCOUNTING NEW YORK 9 ROWS selected.
这个例子里,dept表不是键保留表,而emp表是。这是因为,emp表的empno列既是emp表的键值,同时也是这个连接的键值;而deptno列虽然对于dept表来说是唯一的,但是在整个连接里并不唯一。
理解了这一点,对于多表连接的视图dml操作就很好理解了,一个基本的原则是:任何DML语句只能修改连接视图中一个潜在的基表,也即是键保留表。