我有一列名为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。

10-08 19:45