我有一列名为vote_value
。此列的内容始终为1
或-1
。现在,为了提高安全性,我想限制它只接受两个值(1或-1)。有什么解决办法吗?
我可以在插入之前通过PHP做到这一点:
if($vote_value !== '1' && $vote_value !== '-1'){ echo 'not valid!' }
但是我想知道是否可以通过mysql?
最佳答案
除了check
约束(尽管接受语法,MySQL的存储引擎未实现)或触发器之外,您确实具有其他选项。
一种是使用枚举类型。这在输入时生效。但是,我一般不喜欢枚举类型,它们会混淆数字数据。
另一种方法是外键关系:
create table refValidVotes (
vote int,
description varchar(255)
);
insert into refValidVotes(Vote, Description)
select 1, 'Aye' union all select -1, 'Nay';
create table . . . (
. . .
vote int not null, -- Perhaps you want to allow NULL
constraint chk_valid_vote foreign key (vote) references refValidVotes(vote)
);
如果您确实只有两个值,则还有一个选择是使用
bit
:vote bit(1)
但是,两个值是0和1,而不是-1和1。