Voor mysql 5.5. het was niet mogelijk om een insert in een trigger te stoppen. Er waren een aantal lelijke werkjes, maar niets dat ik zou aanraden. Vanaf 5.5 kun je SIGNAL gebruiken om het te doen.
delimiter //
drop trigger if exists aborting_trigger //
create trigger aborting_trigger before insert on t
for each row
begin
set @found := false;
select true into @found from t where a=new.a and b=new.b;
if @found then
signal sqlstate '45000' set message_text = 'duplicate insert';
end if;
end //
delimiter ;