SQL数据库系统
我的关系中有三个布尔属性,我只希望其中一个具有真值,否则表会给出错误。我该怎么做 如果DBMS支持检查约束(大多数都支持),则可以使用检查约束。在它中,您检查,恰好有一个标志是正确的。为此,可以使用布尔表达式SQL数据库系统,sql,database,schema,Sql,Database,Schema,我的关系中有三个布尔属性,我只希望其中一个具有真值,否则表会给出错误。我该怎么做 如果DBMS支持检查约束(大多数都支持),则可以使用检查约束。在它中,您检查,恰好有一个标志是正确的。为此,可以使用布尔表达式 CREATE TABLE elbat (... CHECK (flag1 = true AND flag2 = false AND flag3 = fa
CREATE TABLE elbat
(...
CHECK (flag1 = true
AND flag2 = false
AND flag3 = false
OR flag1 = false
AND flag2 = true
AND flag3 = false
OR flag1 = false
AND flag2 = false
AND flag3 = true));
(为了了解这一点,不同的DBMS的语法可能有所不同。)如果您的DBMS支持检查约束,则可以使用检查约束(大多数都支持)。在它中,您检查,恰好有一个标志是正确的。为此,可以使用布尔表达式
CREATE TABLE elbat
(...
CHECK (flag1 = true
AND flag2 = false
AND flag3 = false
OR flag1 = false
AND flag2 = true
AND flag3 = false
OR flag1 = false
AND flag2 = false
AND flag3 = true));
(为了了解这一点,不同的DBMS的语法可能不同。)您可以使用检查约束
create table some_table
(
flag1 boolean not null,
flag2 boolean not null,
flag3 boolean not null,
constraint only_one_true
check ( (flag1,flag2,flag3) IN ( (true, false, false),
(false, true, false),
(false, false, true)) )
);
以上是标准SQL
某些DBMS系统还允许将布尔值强制转换为表示0
或1
的数字。在这种情况下,您可以将它们相加,并且总和必须等于1(确保恰好有一个标志设置为true)
您可以为此使用检查约束
create table some_table
(
flag1 boolean not null,
flag2 boolean not null,
flag3 boolean not null,
constraint only_one_true
check ( (flag1,flag2,flag3) IN ( (true, false, false),
(false, true, false),
(false, false, true)) )
);
以上是标准SQL
某些DBMS系统还允许将布尔值强制转换为表示0
或1
的数字。在这种情况下,您可以将它们相加,并且总和必须等于1(确保恰好有一个标志设置为true)
你的关系数据库管理系统是什么?@paulsm4:当然,这可以用SQL来完成,这叫做检查constraint@GordonLinoff:是的。布尔类型是在SQL:1999中引入的,请参见示例。-具有讽刺意味的是,它来自Oracle,尽管Oracle仍然缺少真正的布尔类型。您的RDBMS是什么?@paulsm4:当然可以使用SQL完成这一操作—它被称为检查constraint@GordonLinoff:是的。布尔类型是在SQL:1999中引入的,请参见示例。-具有讽刺意味的是,它来自Oracle,尽管Oracle仍然缺少真正的布尔类型。