【问题标题】:Reusing a constraint while creating a table创建表时重用约束
【发布时间】:2012-07-20 08:40:37
【问题描述】:

在创建表时,如何重用之前列中提到的约束?

create table ticket_details(
  from_stn char(3)
  constraint chk check(from_stn in ('vsh','mas','ndl'))
  constraint nn NOT NULL,
  to_stn char(3)
  constraint nn1 NOT NULL, (instead of crea)
  seat_no number(3)
  constraint PK primary key,
); 

【问题讨论】:

  • 欢迎使用 StackOverflow:如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行并单击“代码示例”按钮 ({ } ) 在编辑器工具栏上以很好地格式化和语法突出显示它!
  • 使其成为域约束,并让 from_stn 和 to_stn 都基于该域。

标签: sql constraints


【解决方案1】:

将在域的任何实例上强制执行域约束。另外:更改后,您只需要在一个地方进行更改。 (实现之间的语法可能略有不同)

CREATE DOMAIN THE_STN CHAR(3) constraint THE_STN_check_da_value check(VALUE in ('vsh','mas','ndl'))
        ;

CREATE table ticket_details
        ( seat_no INTEGER NOT NULL PRIMARY KEY
        , from_stn THE_STN NOT NULL
        , to_stn THE_STN
        );
INSERT INTO ticket_details(seat_no,from_stn,to_stn) VALUES (1, 'vsh', 'ndl' ); -- succeeds
INSERT INTO ticket_details(seat_no,from_stn,to_stn) VALUES (2, 'vsh', NULL ); -- succeeds
INSERT INTO ticket_details(seat_no,from_stn,to_stn) VALUES (2, 'lol', 'mas' ); -- fails

【讨论】:

    【解决方案2】:

    无法对另一列重用约束。如果需要,您必须为其他列定义它

    【讨论】:

      猜你喜欢
      • 2015-02-17
      • 2010-12-19
      • 1970-01-01
      • 2022-01-17
      • 2018-05-01
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多