【问题标题】:Delete/Modify row in one table based on a condition - Oracle DBMS根据条件删除/修改一个表中的行 - Oracle DBMS
【发布时间】:2020-04-20 00:00:18
【问题描述】:

我有一个类似的表结构

 create table EMPLOYE (
    CodeEmploye varchar2(100) not null,
    NAS varchar2(100),
    CONSTRAINT employe_pk primary key (CodeEmploye)
);

create table SALAIRE (
    CodeEmploye varchar2(100) not null,
    Mois number not null,
    CONSTRAINT salaire_pk primary key (CodeEmploye, Mois),
    CONSTRAINT salaire_code_employe_fk FOREIGN KEY(CodeEmploye) REFERENCES EMPLOYE(CodeEmploye)
);

我想添加一个约束,如果 SALAIRE 表中存在相同的员工,我不应该被允许修改/删除 EMPLOYE 表中的一行。

最好的方法是什么?

【问题讨论】:

  • 你已经用 salaire_code_employe_fk 做到了

标签: sql database oracle constraints


【解决方案1】:

由于您已经通过“CodeEmployee”列定义了两个表之间的外键关系,所以您想要的已经实现了。

一点扩展是,如果在 fk 声明后添加“ON DELETE CASCADE”,一旦删除员工表中的任何一行,工资表中的所有相关记录也将被删除。

【讨论】:

    【解决方案2】:

    最好的方法之一是在 CREATE TABLE 或 ALTER TABLE 语句期间在“CodeEmploye”列上创建外键约束。在您的情况下,它已经作为您的 CREATE 语句的一部分创建 (salaire_code_employe_fk)。 如果子表 (SALAIRE) 中存在同一雇员,则外键约束确保不能修改/删除父表 (EMPLOYE) 中的雇员行。

    【讨论】:

      【解决方案3】:

      在这种情况下,当您创建 order_items 表时,您使用 DELETE CASCADE 选项定义外键约束,如下所示:

      CREATE TABLE order_items   
      (  
          order_id   NUMBER( 12, 0 ),   
          -- other columns  
          -- ...  
          CONSTRAINT fk_order_items_orders     
          FOREIGN KEY( order_id )     
          REFERENCES orders( order_id )   
          ON DELETE CASCADE  
      );  
      By doing this, whenever you delete a row from the orders table, for example:  
      
      DELETE  
      FROM  
          orders  
      WHERE  
          order_id = 1;  
      

      order_items表中order id为1的所有行也会被数据库系统自动删除。

      【讨论】:

        猜你喜欢
        • 2017-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-16
        相关资源
        最近更新 更多