MySQL Constraint检查是否存在且处于活动状态

时间:2015-02-15 20:00:09

标签: mysql constraints

有没有办法检查行是否已经存在并且是否处于活动状态?

让行看起来像那样:

ID: 123456

Active : 1

我知道我可以做那样的事情:

SELECT * FROM TableName WHERE id=123456 AND Active=1;

但那不是我想要的。

如果我尝试使用相同的信息再次将查询插入表中,则不应重复。

但是如果约束不活动(0),则约束应该有效。

我不想明智地执行验证码。我希望数据库服务器进行验证。

谢谢!

1 个答案:

答案 0 :(得分:0)

当且仅当已存在活动行时,您可以在插入之前使用触发器来阻止插入。

create trigger tr_bi_TableName
before insert on TableName
for each row
begin
  if((select count(*) from TableName where id = new.id and active = 1) > 0) then
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'There is already an active row for this id.';
  end if 
end

SQLState 45000表示未处理的用户定义的异常。

有关信号的更多信息,请参阅documentaton