我可以在表中创建一个列只允许一个'true'值而所有其他行应该是'false'

时间:2010-07-12 11:43:11

标签: mysql

在MySQL中,我可以在数据库级别添加如下限制吗?

我需要确定 1.特定列只能采用“true”或“false”值。 2.而且只有一行应该具有'真'值?

4 个答案:

答案 0 :(得分:15)

您可以拥有另一个包含一行并指向原始表中您认为为真的行的表,而不是在表中使用布尔属性。

更改真值是更新TrueRow表中的外键的问题。

答案 1 :(得分:4)

在MySQL中,唯一索引将忽略任何NULL值。所以你可以使用一些黑客。

您可以考虑添加一个可为空的bit列(只能包含值1或0):

ADD COLUMN `is_default` BIT NULL;
ADD UNIQUE INDEX `is_default_UNIQUE` (`is_default` ASC);

此时,一行可以是1(TRUE),并且尝试添加另一行也是TRUE,将导致错误:

1062: Duplicate entry '\x01' for key 'is_default_UNIQUE'

唯一的问题是所有其他行都必须是NULL并且不能为false,因为这也会被视为唯一值。

Example table data

(这实际上不是索引的用途)

答案 2 :(得分:1)

  1. 特定列只能采用“true”或“false”值。

    将数据类型用于booleantiny-int

  2. 2并且只有一行应该具有'true'值?

    您必须编写一个查询,将所有行列更新为false,除非您设置为true

答案 3 :(得分:1)

将列的数据类型设置为“boolean”;然后添加一个触发器函数,在更新时将您想要的行始终设置为“true”。