Mysql SQL列中只有一个单元格可以有X值

Mysql SQL列中只有一个单元格可以有X值,mysql,sql,Mysql,Sql,在设计表SQL、MySQL时,是否有办法确保X列中只有一个单元格为true,其余单元格自动为false?当您将不同单元格的值更改为true时,所有其他单元格应自动变为false。单选按钮类型的排他性,但用于列 mainOfferName | value --------------------- pizza | false spaghetti | false salad | true stew | false 改变比萨饼作为主要供应时,

在设计表SQL、MySQL时,是否有办法确保X列中只有一个单元格为
true
,其余单元格自动为
false
?当您将不同单元格的值更改为true时,所有其他单元格应自动变为false。单选按钮类型的排他性,但用于列

mainOfferName | value
---------------------
pizza         | false
spaghetti     | false
salad         | true
stew          | false
改变比萨饼作为主要供应时,您会得到如下内容:

mainOfferName | value
---------------------
pizza         | true
spaghetti     | false
salad         | false
stew          | false

我可以手动运行查询并确保在任何给定时间只有一个值为真,但是我很好奇,我是否可以在我的表中添加一个约束,这样我就可以只更改需要
true
的行/单元格,而DB引擎只负责保持该值
true

有一个单独的表,其中一行包含所需行的
mainfername
。然后查询为:

select yt.*, (nt.mainOfferName is not null) as valueFlag
from yourtable yt left join
     newtable nt
     on yt.mainOfferName = nt.mainOfferName;
如果要更改该值,请在
newtable
中更改该值

注意:您可以将查询放入视图中,只读用户就可以工作了


而且,您可以通过
yourtable
上的
update
触发器来实现这一点。它不会更新
您的表
,而是更新
新表

您需要它做什么?我觉得这与你使用数据库的目的背道而驰。也许你可以创建一个变量
selectedItem
,它指向你想要的行?@McAdam331好奇。很公平,哈哈。我不是建议反对,只是好奇自己。太好了!好极了。。。!听起来很有趣。谢谢,我有个问题。
yt.*
的含义是什么
yt
是别名,但什么是
*
?当你使用
*
时,它意味着一切,你不需要使用其他任何东西。你能给我解释一下吗?tnx@stack星号用于选择所有列。在本例中,存在一个联接,因此星号将从两个表中选择所有列。通过将表别名放在第一位,只会选择该表中的列。我有一个与主题无关的问题,这两个词之间有区别吗
nt.mainOfferName不为空
nt.mainOfferName'