首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我是否可以使表中的一列只允许一个“true”值,而所有其他行都应为“false”

我是否可以使表中的一列只允许一个“true”值,而所有其他行都应为“false”
EN

Stack Overflow用户
提问于 2010-07-12 19:43:11
回答 4查看 15.7K关注 0票数 30

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

我需要确保1。特定列只能接受'true‘或'false’值。2.并且恰好只有一行应该具有“true”值?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-12 20:40:17

您可以使用另一个表,它包含一行并指向原始表中您认为为true的行,而不是在表中使用boolean属性。

要更改真值,只需更新TrueRow表中的外键。

票数 26
EN

Stack Overflow用户

发布于 2017-07-14 01:54:22

在MySQL中,唯一索引将忽略任何NULL值。所以这里有一些你可以使用的技巧。

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

代码语言:javascript
运行
复制
ALTER TABLE mytable 
  ADD COLUMN `is_default` BIT NULL,
  ADD UNIQUE INDEX `is_default_UNIQUE` (`is_default` ASC);

此时,一行可能为1 ( TRUE ),尝试添加另一行也为TRUE将导致错误:

代码语言:javascript
运行
复制
1062: Duplicate entry '\x01' for key 'is_default_UNIQUE'

唯一需要注意的是,所有其他行都需要为NULL,并且不能为false,因为这也会被算作唯一值。

(这确实不是索引的本意)

票数 11
EN

Stack Overflow用户

发布于 2010-07-12 19:47:15

  1. 特定列只能接受'true‘或'false’值。

booleantiny-int列使用数据类型

2并且恰好只有一行应该具有“true”值?

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3228161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档