我有一个名为vote_value的专栏。该列的内容始终是1或-1。为了获得更多的安全性,我想限制它只接受两个值(1或-1)。有什么解决办法吗?
在插入之前,我可以通过PHP做到这一点:
if($vote_value !== '1' && $vote_value !== '-1'){ echo 'not valid!' }但是我想知道,通过mysql是否有可能呢?
发布于 2015-08-12 14:08:59
除了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。
发布于 2015-08-12 14:01:02
通常,您会对此使用check约束,但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个触发器-一个用于更新,一个用于插入。
https://stackoverflow.com/questions/31967356
复制相似问题