我有一个包含两列的表 1.Clanid 2.Active
我的问题是,我不希望Clanid列中的任何值插入此表中,如果此值已经在Clanid列中,并且该值的Active为1。
例如
Clanid Active
1 1
2 1
3 0
现在不应该插入一个Clanid = 1且Active = 1的记录,但我可以插入Clanid = 3和Active = 1,因为此记录不存在。
答案 0 :(得分:1)
试试这个:
delimiter //
create trigger unique_clanid
before insert on mytable
for each row
begin
if new.active and exists (
select * from mytable
where clanid = new.clanid
and active) then
signal sqlstate '02000' set MESSAGE_TEXT = 'Duplicate ClanID';
end if;
end//
delimiter ;
答案 1 :(得分:0)
我认为你应该在你的应用程序级别处理,但是你想要处理DB lavel,你可以编写触发器检查它 你可以检查计数记录(其中Clanid = @param和Active = 1) 如果计数> 1:回滚
我无法使用mysql进行测试,我只能将我的解决方案描述如下(我不确定语法是否正确,我不太长时间不在mysql中编写触发器)
CREATE TRIGGER test BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
DECLARE newClanId integer;
DECLARE counts integer;
Set @newClanId = NEW.Clanid;
Set @count := (SELECT count (*) FROM table_name
WHERE Clanid = @newClanId and Active =1)
IF @count > 1 THEN ROLLBACK;
END;