我有一个关于这种情况的最佳实践的问题:我有一个 mysql 表,其中包含(除了其他列之外)两列都是 TINYINT(1) 但它们不能都在 0 上,它们可以是 0 和 1 , 1 和 0, 1 和 1 但没有 0 和 0。控制这个的最好方法是什么?甚至是控制这个的方法吗?
编辑:我想我会选择 ENUM 选项,但是如果我将 mysql 与实体框架结合起来,这将如何执行?
我建议使用一个枚举,结合两个值。它们的存储效率很高。所以它会enum('0;1','1;0','1;1') not null
。
编辑:
鉴于附加信息,并遵循@landons 的建议,仅供记录:枚举将是
delivery enum('physical', 'digital', 'both') not null;
您可以使用(也关注@landon)
delivery SET('physical','digital');
但这将允许空值。
我能想到的几个选项:
我个人可能会使用最后一种方法。
编辑:
刚刚意识到——SET
数据类型完美地完成了这一点。
一种解决方法是将您的两列合并到一个 BIT(2) 列中,然后当您执行更新时,您可以测试您没有将该列更新为 b'00'。
至于内置预防,我不相信有办法做到这一点。
也许您可以通过将它们放在一列中来实现这一点。
1
2
1
然后,您的列可以包含 values2
或3
。当它是时0
,它们都是。
和第二2
个3
数字将是1
。和1
第3
一个数字将是1
。