【问题标题】:Alter table to add a check condition in SQL更改表以在 SQL 中添加检查条件
【发布时间】:2021-03-26 23:38:36
【问题描述】:

给定:

CREATE TABLE SHOW ( 
    ID VARCHAR2(10), 
    GENRE VARCHAR2(25) NOT NULL, 
    CONSTRAINT CH_GENRE CHECK (GENRE IN ('war','western')), 
    )

如何使用更改表将“戏剧”添加到 ch_genre? 我想是这样的:

ALTER TABLE TV_SHOW
ADD CONSTRAINT ADD_ROMANTIC
  CHECK (GENRE IN ('romantic'));

但它不起作用。

【问题讨论】:

    标签: sql oracle ddl alter-table check-constraints


    【解决方案1】:

    从技术上讲,您需要删除并重新创建约束:

    alter table show drop constraint ch_genre;
    alter table show 
        add constraint ch_genre 
        check (genre in ('war', 'western', 'romantic'))
        enable
    ;
    

    如果您有很多行,验证约束可能会很昂贵。另一方面,由于我们只是添加另一个可能的值,我们知道所有值都已经有效,因此我们可以跳过验证,如下所示:

    alter table show 
        add constraint ch_genre 
        check (genre in ('war', 'western', 'romantic'))
        enable novalidate
    ;
    

    如果您发现自己定期修改值列表,则表明您应该有一个单独的表来存储该列表,例如 genres,以及将 show 关联到 @987654325 的外键@(可能通过一个整数,代理主键而不是字符串)。

    【讨论】:

      【解决方案2】:

      简单>> 删除并重新创建约束

       ALTER TABLE SHOW Drop CONSTRAINT CH_GENRE; ALTER TABLE SHOW ADD
       CONSTRAINT CH_GENRE CHECK (GENRE IN ('war','western','Drama'));
      

      【讨论】:

      • 您的表包含数据??我的意思是列 GENRE 包含的数据不在 ('war','western','Drama') 那些值??
      【解决方案3】:

      像这样删除并重新创建检查约束:

      CREATE TABLE SHOW ( 
          ID VARCHAR2(10), 
          GENRE VARCHAR2(25) NOT NULL, 
          CONSTRAINT CH_GENRE CHECK (GENRE IN ('war','western'))
          );
      
      Table SHOW created.
      
      alter table SHOW drop constraint CH_GENRE ;
      
      Table SHOW altered.
      
      alter table SHOW add constraint CH_GENRE check (GENRE IN ('war','western','romantic'));
      
      Table SHOW altered.
      

      【讨论】:

        猜你喜欢
        • 2021-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-21
        相关资源
        最近更新 更多