在MySQL中,我可以在数据库级别添加如下限制吗?
我需要确定 1.特定列只能采用“true”或“false”值。 2.而且只有一行应该具有'真'值?
答案 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,因为这也会被视为唯一值。
(这实际上不是索引的用途)
答案 2 :(得分:1)
特定列只能采用“true”或“false”值。
将数据类型用于boolean
或tiny-int
2并且只有一行应该具有'true'值?
您必须编写一个查询,将所有行列更新为false,除非您设置为true
答案 3 :(得分:1)
将列的数据类型设置为“boolean”;然后添加一个触发器函数,在更新时将您想要的行始终设置为“true”。