Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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触发器-插入前的INET_ATON_Mysql - Fatal编程技术网

MySQL触发器-插入前的INET_ATON

MySQL触发器-插入前的INET_ATON,mysql,Mysql,在插入之前,我需要将INET_ATON添加到ip字段 INSERT INTO (`id`,`ip`) VALUES (NULL,'127.0.0.1'); 我需要数据库在插入之前透明地转换ip。 并在选择中使用INET_NTOA将其转换回 我无法将查询更改为使用 因为我无法控制执行这些查询的软件您可以使用INSERT INTO id、ip值NULL、INET_ATON'127.0.0.1';在数据库中插入 要从表中选择INET_NTOAip返回,您可以使用INSERT-INTO-id、ip值N

在插入之前,我需要将INET_ATON添加到ip字段

INSERT INTO (`id`,`ip`) VALUES (NULL,'127.0.0.1');
我需要数据库在插入之前透明地转换ip。 并在选择中使用INET_NTOA将其转换回

我无法将查询更改为使用

因为我无法控制执行这些查询的软件

您可以使用INSERT INTO id、ip值NULL、INET_ATON'127.0.0.1';在数据库中插入

要从表中选择INET_NTOAip返回,您可以使用INSERT-INTO-id、ip值NULL、INET_-ATON'127.0.0.1';在数据库中插入


要使用从表中选择INET_NTOAip返回插入零件,您可以在数据库中设置:

DELIMITER |
DROP TRIGGER IF EXISTS `before_insert_ip`|
CREATE TRIGGER `before_insert_ip` BEFORE INSERT ON `table_name`
FOR EACH ROW
BEGIN
  SET NEW.`ip` = INET_ATON(NEW.`ip`);
END;
|
delimiter;
选择部分有点棘手。mysql中没有可用于将IP转换回应用程序代码的后选择触发器

相反,您可以重命名实际表并将其隐藏在以下位置:


注意:使用此视图时,需要修改插入零件的触发器,使其使用table_name_real,而不是table_name

DELIMITER |
DROP TRIGGER IF EXISTS `before_insert_ip`|
CREATE TRIGGER `before_insert_ip` BEFORE INSERT ON `table_name`
FOR EACH ROW
BEGIN
  SET NEW.`ip` = INET_ATON(NEW.`ip`);
END;
|
delimiter;
选择部分有点棘手。mysql中没有可用于将IP转换回应用程序代码的后选择触发器

相反,您可以重命名实际表并将其隐藏在以下位置:


注意:使用此视图时,您需要修改插入部分的触发器以使用table_name_real而不是table_name

此live project,我需要通过TRIGGER使其动态此live project,我需要通过TRIGGER使其动态更新您的问题以包括您在评论中提供的重要相关信息ip字段的数据类型是什么?我需要带int的数据现在在移除分隔符时变为varcharworking;我很高兴您的回答更新了您的问题,将您在评论中提供的重要相关信息包括在内。ip字段的数据类型是什么?我需要带int的数据。现在,在删除分隔符时,它正在工作;我很高兴你的回答,但那会破坏插入。视图只有在不包含派生列时才可插入,而INET\u NTOAip就是派生列。@Naltharial是的,您是对的。我没有意识到这一点,现在就进行了测试。谢谢你的更正。我有另一个想法,稍后会回来讨论。对不起,sql错误1064-您的sql语法有错误;检查与您的MySQL服务器版本对应的手册,以了解使用near'.ip=INET\u ATONNEW.ip的正确语法@我知道。。修复了上次编辑中的语法错误。但我在那里所描述的是行不通的。我现在太忙了,无法描述真正的解决方案,请稍候:我稍后再谈。但是,抱歉,这会破坏插入。视图只有在不包含派生列时才可插入,而INET\u NTOAip就是派生列。@Naltharial是的,您是对的。我没有意识到这一点,现在就进行了测试。谢谢你的更正。我有另一个想法,稍后会回来讨论。对不起,sql错误1064-您的sql语法有错误;检查与您的MySQL服务器版本对应的手册,以了解使用near'.ip=INET\u ATONNEW.ip的正确语法@我知道。。修复了上次编辑中的语法错误。但我在那里所描述的是行不通的。我现在太忙了,无法描述真正的解决方案,请稍候:我稍后再谈。
RENAME TABLE `table_name` TO `table_name_real`;

CREATE OR REPLACE VIEW `table_name` (`id`, `ip`) AS
  SELECT `id`, INET_NTOA(`ip`) AS `ip` FROM `table_name_real`;