Mysql 如何防止从触发器或存储过程保存到数据库?
我有一个触发器和存储过程。在存储过程中,我验证IPv4地址。如果地址有效,它将保存到DB。如果没有,我的程序会在数据库中保存空记录。我想让它这样每当IP是无效的-没有什么要保存。我不知道当ip无效时如何停止进程。我知道不应在DB级别提供验证,但这是要求。你能帮我修改一下密码吗?谢谢:)Mysql 如何防止从触发器或存储过程保存到数据库?,mysql,triggers,ipv4,Mysql,Triggers,Ipv4,我有一个触发器和存储过程。在存储过程中,我验证IPv4地址。如果地址有效,它将保存到DB。如果没有,我的程序会在数据库中保存空记录。我想让它这样每当IP是无效的-没有什么要保存。我不知道当ip无效时如何停止进程。我知道不应在DB级别提供验证,但这是要求。你能帮我修改一下密码吗?谢谢:) 正如您所说的,这不应该在DB级别进行—我不相信MySQL触发器允许防止插入或更新 我能看到这种成功的唯一方法是让你的触发器改变数据,这样MySQL就不能插入它了。。。但考虑到MySQL经常操纵数据以适应表定义,我
正如您所说的,这不应该在DB级别进行—我不相信MySQL触发器允许防止插入或更新 我能看到这种成功的唯一方法是让你的触发器改变数据,这样MySQL就不能插入它了。。。但考虑到MySQL经常操纵数据以适应表定义,我不确定这是否可行
b_setting_parameters
类似setting_parameters
,但使用ENGINE=BLACKHOLE
。这将创建一个表,该表将丢弃插入其中的所有内容(如/dev/null)CREATE TRIGGER validation_test_trigger BEFORE INSERT ON b_setting_parameters
FOR EACH ROW
BEGIN
IF validate_ip(NEW.parameter_value) = 0 THEN
INSERT INTO setting_parameters(col1, col2,...)
VALUES (NEW.col1, NEW.col2,...)
END IF;
END$$
b_setting_parameters
,而不是setting_parameters
,这样就可以了oracle确实支持
而不是可以执行此操作的
触发器。对于mysql,您必须使用黑洞引擎插件(见我的答案)
CREATE TRIGGER validation_test_trigger BEFORE INSERT ON b_setting_parameters
FOR EACH ROW
BEGIN
IF validate_ip(NEW.parameter_value) = 0 THEN
INSERT INTO setting_parameters(col1, col2,...)
VALUES (NEW.col1, NEW.col2,...)
END IF;
END$$