Since version 5.5, MySQL's support for SIGNAL allows Triggers to block Inserts:
drop table if exists foo;
create table foo( v varchar(32) );
drop trigger if exists foo_ins;
delimiter go
create trigger foo_ins before insert on foo
for each row
begin
if new.v = '' then
signal sqlstate '45000'
set message_text="Your Insert was blocked.";
end if;
end;
go
delimiter ;
insert into foo values(""); -- ERROR 1644 (45000): Your Insert was blocked.
insert into foo values ("abc");
select * from foo;
+------+
| v |
+------+
| abc |
+------+
Last updated 8 Mar 2025 |
 |