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

MySQL Constraint check if exist and active

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

假设行看起来像这样:

ID: 123456

Active : 1

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

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

但这不是我想要的。

如果我尝试使用相同的信息再次向 table 中插入一个查询,它应该不会重复。

但如果约束未处于活动状态 (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