关于联合外键

1.联合外键的定义语法:

      ALTER TABLE 外键表名 ADD CONSTRAINTS/CONSTRAINT  外键名 FOREIGN KEY (外键列名1,外键列名2,外键列名3,......) REFERENCES 主键表名 (主键列名1,主键列名2,主键列名3,......);

外键列名:作为外键的列的名称。

主键列名:作为主键的列的名称。

2.联合外键定义时的注意事项:

a.定义联合外键首先必须要有联合主键。

b.联合外键与联合主键个数必须匹配,否则:

c.联合外键与一般普通外键类似,必须主键中有值,外键才能有值,而且必须是主键中已经有的值。

d.联合外键的值必须成对并与联合主键的值完全相对应,如:

扫描二维码关注公众号,回复: 3419398 查看本文章

设置上图这张DEPARTMENTS表中的DEPARTMENT_ID和MANAGER_ID为联合主键。

设置上图这张EMPLOYEES表中DEPARTMENT_ID和MANAGER_ID为DEPARTMENTS表中的DEPARTMENT_ID和MANAGER_ID的联合外键。

这样,在向外键表EMPLOYEES中属性DEPARTMENT_ID和MANAGER_ID中添加数据时,必须成对出现或者是必须与联合主键的对应关系一致,如:

UPDATE EMPLOYEES SET MANAGER_ID=3001 WHERE EMPLOYEE_ID=10008;

其中EMPLOYEE_ID=10008对应的DEPARTMENT_ID是8901,又因为3001-8901在主键表当中是成对出现的,所以不能是像这样:

UPDATE EMPLOYEES SET MANAGER_ID=3001 WHERE EMPLOYEE_ID=10009;

EMPLOYEE_ID=10009在表中很容易查到其DEPARTMENT_ID是8902,但是在主键表中,与8902对应的是3002,因此上面这句话是错误的。

e.在定义联合外键时,作为联合外键的几个列的顺序与作为联合主键的几个列的顺序必须相一致,比如下面的定义是错误的:

    ALTER TABLE EMPLOYEES ADD CONSTRAINTS FORE_DM_ID FOREIGN KEY(MANAGER_ID,DEPARTMENT_ID) REFERENCES DEPARTMENTS(DEPARTMENT_ID,MANAGER_ID);

   原因就在于作为主键的列的顺序为DEPARTMENT_ID,MANAGER_ID,而作为外键的列的顺序为MANAGER_ID,DEPARTMENT_ID,因此这样的定义是错误的。

猜你喜欢

转载自blog.csdn.net/baidu_38760069/article/details/81211802