我有一个名为vote_value
的列。此列的内容始终为1
或-1
。现在为了更安全,我想限制它只接受两个值(1或-1)。有什么解决方案吗?
我可以在插入之前通过PHP做到这一点:
if($vote_value !== '1' && $vote_value !== '-1'){ echo 'not valid!' }
但我想知道可以通过mysql吗?
答案 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个触发器 - 一个用于更新,另一个用于插入。