【问题标题】:creating a table with null constraint in SQL but have constraint在 SQL 中创建具有空约束但有约束的表
【发布时间】:2013-05-21 18:49:35
【问题描述】:

我想创建一个列值大于 0 并且可以为空的表。

当我在创建表列时这样做

CREATE TABLE Ship
  (
    SITE_ID         INTEGER NOT NULL,
    Ship_CATEGORY  VARCHAR2(50)  CHECK (WRECK_CATEGORY IN ('Military','Government','Passenger', 'Unknown', 'Commercial')),
    Ship_TYPE      VARCHAR2(100) ,
    Ship_TONNAGE   INTEGER CHECK ((WRECK_TONNAGE>0) AND WRECK_TONNAGE IS NULL) ,
    Ship_CAUSE     VARCHAR2(100) NULL CHECK (WRECK_CAUSE IN ('Fire', 'Collision','Unknown',' Deliberate', 'Explosion',' Attack', 'Other')),
    Ship_DATESUNK  DATE NULL,
    Ship_CONDITION VARCHAR2(50) NULL CHECK (WRECK_CONDITION IN ('Excellent', 'Moderate','Poor', 'Very Poor')),
    CONSTRAINT SHIPWRECK_PK PRIMARY KEY (SITE_ID)
  );

在“Ship_TONNAGE INTEGER CHECK ((WRECK_TONNAGE>0) AND WRECK_TONNAGE IS NULL) ”行中 当我向该列插入空值时,它违反了约束。我如何创建满足条件的表?谢谢

【问题讨论】:

    标签: sql constraints create-table


    【解决方案1】:

    将检查约束从and 更改为or

    CHECK ((WRECK_TONNAGE>0) or WRECK_TONNAGE IS NULL)
    

    您的约束引用了错误的列,WRECK* 而不是 SHIP*。试试这个定义语句:

    CREATE TABLE Ship
      (
        SITE_ID         INTEGER NOT NULL,
        Ship_CATEGORY  VARCHAR2(50)  CHECK (SHIP_CATEGORY IN ('Military','Government','Passenger', 'Unknown', 'Commercial')),
        Ship_TYPE      VARCHAR2(100) ,
        Ship_TONNAGE   INTEGER CHECK ((SHIP_TONNAGE>0) or SHIP_TONNAGE IS NULL) ,
        Ship_CAUSE     VARCHAR2(100) NULL CHECK (SHIP_CAUSE IN ('Fire', 'Collision','Unknown',' Deliberate', 'Explosion',' Attack', 'Other')),
        Ship_DATESUNK  DATE NULL,
        Ship_CONDITION VARCHAR2(50) NULL CHECK (SHIP_CONDITION IN ('Excellent', 'Moderate','Poor', 'Very Poor')),
        CONSTRAINT SHIPWRECK_PK PRIMARY KEY (SITE_ID)
      );
    

    【讨论】:

    • 错误报告:SQL 错误:ORA-02290:检查约束 (SYS_C00421597) 违反 02290. 00000 - “检查约束 (%s.%s) 被违反” *原因:插入的值不满足命名检查 *Action:不要插入违反约束的值。
    • 是的,我编辑了那个,但我仍然有违反上述约束的错误。
    • @BolorCh 。 . .它适用于我的 SQL Fiddle (sqlfiddle.com/#!4/351d2/13)。
    • 现在我发现我的错误是我将约束创建为'Deliberate'(带空格),然后尝试将值插入为'Deliberate'(不带空格),这就是我出错的原因。谢谢大家
    猜你喜欢
    • 2017-11-19
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2022-01-11
    • 2018-05-03
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多