获取两地之间的距离中关于 DEFINER=`root`@`%`的解释

DELIMITER $$

USE `huatiandb_real`$$

DROP FUNCTION IF EXISTS `get_distance`$$

CREATE DEFINER=`root`@`%` FUNCTION `get_distance`(lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT) RETURNS FLOAT
    DETERMINISTIC
BEGIN
IF lat1 IS NULL OR lon1 IS NULL OR lat2 IS NULL OR lon2 IS NULL THEN
  RETURN NULL;
END IF;
RETURN ROUND(6378.138 * 2 * ASIN(SQRT(POW(SIN((lat1 * PI() / 180 - lat2 * PI() / 180) / 2), 2)+ COS(lat1 * PI() / 180) * COS(lat2 * PI() / 180)* POW(SIN(( lon1 * PI() / 180 - lon2 * PI() / 180 ) / 2),2))), 3);
END$$

DELIMITER ;

这段 SQL 脚本定义了一个名为 get_distance 的 MySQL 函数,用于计算两个经纬度坐标之间的球面距离(以公里为单位)。在语法和逻辑层面,该脚本没有明显错误。以下是该函数的详细说明:
首先,它检查输入的经纬度参数(lat1, lon1, lat2, lon2)是否为 NULL,如果任意一个为空,则返回 NULL。
接着,它使用 Haversine 公式计算两点间的球面距离,公式已转换为适应经纬度坐标的形式。
最后,结果通过 ROUND 函数保留到小数点后三位,并返回。
总之,这个 get_distance 函数设计合理,用于计算地理坐标之间的距离,没有发现语法或逻辑上的问题。

DEFINER=`root`@`%`这个里面的root就是你数据库的用户名

在MySQL中,DEFINER 关键字后面通常会接一个用户名和主机名,例如 'username'@'hostname',表示该函数的定义者以及执行时将使用的安全上下文。这里的 % 是通配符,代表任意主机。

如果你从其他电脑上备份了这个数据库,记得对比一下两个数据库的用户名是否相同

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风雨流年666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值