Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何防止从触发器或存储过程保存到数据库?_Mysql_Triggers_Ipv4 - Fatal编程技术网

Mysql 如何防止从触发器或存储过程保存到数据库?

Mysql 如何防止从触发器或存储过程保存到数据库?,mysql,triggers,ipv4,Mysql,Triggers,Ipv4,我有一个触发器和存储过程。在存储过程中,我验证IPv4地址。如果地址有效,它将保存到DB。如果没有,我的程序会在数据库中保存空记录。我想让它这样每当IP是无效的-没有什么要保存。我不知道当ip无效时如何停止进程。我知道不应在DB级别提供验证,但这是要求。你能帮我修改一下密码吗?谢谢:) 正如您所说的,这不应该在DB级别进行—我不相信MySQL触发器允许防止插入或更新 我能看到这种成功的唯一方法是让你的触发器改变数据,这样MySQL就不能插入它了。。。但考虑到MySQL经常操纵数据以适应表定义,我

我有一个触发器和存储过程。在存储过程中,我验证IPv4地址。如果地址有效,它将保存到DB。如果没有,我的程序会在数据库中保存空记录。我想让它这样每当IP是无效的-没有什么要保存。我不知道当ip无效时如何停止进程。我知道不应在DB级别提供验证,但这是要求。你能帮我修改一下密码吗?谢谢:)


正如您所说的,这不应该在DB级别进行—我不相信MySQL触发器允许防止插入或更新

我能看到这种成功的唯一方法是让你的触发器改变数据,这样MySQL就不能插入它了。。。但考虑到MySQL经常操纵数据以适应表定义,我不确定这是否可行

  • 如果IP正确或1不正确,则创建一个返回0的函数,而不是过程
  • 创建一个表
    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$$