如何根据表中先前插入的值创建before insert触发器

时间:2014-06-06 09:35:16

标签: mysql triggers

我有一个包含两列的表 1.Clanid 2.Active

我的问题是,我不希望Clanid列中的任何值插入此表中,如果此值已经在Clanid列中,并且该值的Active为1。

例如
  Clanid Active
  1 1
  2 1
  3 0

现在不应该插入一个Clanid = 1且Active = 1的记录,但我可以插入Clanid = 3和Active = 1,因为此记录不存在。

2 个答案:

答案 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;