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。
有没有办法检查行是否已经存在并且处于活动状态?
假设行看起来像这样:
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。