如何限制只接受特定值的列?

时间:2015-08-12 13:57:43

标签: php mysql

我有一个名为vote_value的列。此列的内容始终为1-1。现在为了更安全,我想限制它只接受两个值(1或-1)。有什么解决方案吗?

我可以在插入之前通过PHP做到这一点:

if($vote_value !== '1' && $vote_value !== '-1'){ echo 'not valid!' }

但我想知道可以通过mysql吗?

2 个答案:

答案 0 :(得分:4)

除了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。

答案 1 :(得分:2)

通常你会使用检查约束,但MySQL目前不支持。如果值不正确,请使用触发器取消更新/插入

delimiter $$
CREATE TRIGGER check_value_trigger
BEFORE UPDATE ON your_table
FOR EACH ROW
BEGIN
   IF (NEW.vote_value not in (1,-1)) THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'value out of range';
   END IF;    
END
$$

您需要2个触发器 - 一个用于更新,另一个用于插入。