您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

删除外键

从表中删除外键。

过程

  1. 创建主表和外表。例如:CREATE TABLE DEPT(DeptNo int primary key,DeptName varchar(20),Mgr int );CREATE TABLE EMPLOYEE(EmpNo int primary key,DeptNo int references DEPT(DeptNo)on delete restrict,LastName varchar(20),FirstName varchar(20),Salary int);

  1. 如果未指定任何角色名称,则指定外键的缺省角色名称为 DEPT:ALTER TABLE EMPLOYEE DROP FOREIGN KEY DEPT;

  1. 如果有多个外键且角色名称未知,可使用 sp_iqconstraint 过程显示角色名称。请参见《SAP IQ SQL 参考》。

  1. 如果已分配角色名称,如 EMP_DEPT,则删除键时必须指定该角色名称:ALTER TABLE EMPLOYEE DROP FOREIGN KEY EMP_DEPT;

    示例

    上述语句不删除隐式创建的 EMPLOYEE(DeptNo) 的非唯一 HG 索引。要删除该索引,请使用 sp_iqindex 找到 High_Group 索引名,并使用 DROP INDEX 语句,如下所示:

    sp_iqindex(‘EMPLOYEE’);
    EMPLOYEE DBA DeptNO FP ASIQ_IDX_T27_C2_FP N
    

    EMPLOYEE DBA DeptNO HG ASIQ_IDX_T27_C2_HG N

    EMPLOYEE DBA EmpNO FP ASIQ_IDX_T27_C1_FP N

    EMPLOYEE DBA EmpNO HG ASIQ_IDX_T27_I11_HG N

    EMPLOYEE DBA FirstName FP ASIQ_IDX_T27_C4_FP N

    EMPLOYEE DBA LastName FP ASIQ_IDX_T27_C3_FP N

    EMPLOYEE DBA Salary FP ASIQ_IDX_T27_C5_FP N

    DROP INDEX ASIQ_IDX_T27_C2_HG

    要删除表,必须删除所有关联的外键约束。请按以下顺序删除外键约束和表:

    ALTER TABLE DROP FOREIGN KEY MGR_EMPNO;
    

    DROP TABLE EMPLOYEE;

    DROP TABLE DEPT;

    删除同一表的另一种方法是:按任意顺序使用下列两个 ALTER TABLE 语句,然后按任意顺序使用 DROP TABLE 语句:

    ALTER TABLE DEPT DROP FOREIGN KEY MGR_EMPNO;
    

    ALTER TABLE EMPLOYEE DROP FOREIGN KEY EMP_DEPT;

    假设数据库中还包含一个列出了办事处地点的办事处表。employee 表中可能有办事处表的外键,显示雇员工作办事处的地点。该数据库的设计人员可以选择在聘用雇员时不指派办事处地点。此时,外键应允许 NULL 值,因为办事处地点未知或该雇员不在外面的办事处工作。