gpt4 book ai didi

MySQL 触发器 - 插入前的 INET_ATON

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:40 33 4
gpt4 key购买 nike

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

INSERT INTO (`id`,`ip`) VALUES (NULL,'127.0.0.1');

我需要数据库在插入之前透明地转换ip。并在选择中使用 INET_NTOA() 将其转换回来

无法更改查询以使用

INSERT INTO (`id`,`ip`) VALUES (NULL,INET_ATON('127.0.0.1'));

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

最佳答案

对于插入部分,您可以设置一个 TRIGGER BEFORE INSERT在数据库中:

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;

SELECT 部分有点棘手。 mysql 中没有 AFTER SELECT 触发器,您可以使用它在途中将 IP 转换回应用程序代码。

相反,您可以重命名真实表并将其隐藏在 VIEW 后面:

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`;

注意:使用此VIEW时,需要修改INSERT部分的TRIGGER为使用 table_name_real 而不是 table_name

关于MySQL 触发器 - 插入前的 INET_ATON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9428165/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com