mysql – 检测(自动递增)序列中的缺失值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 检测(自动递增)序列中的缺失值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1034字,纯文字阅读大概需要2分钟。
内容图文
![mysql – 检测(自动递增)序列中的缺失值](/upload/InfoBanner/zyjiaocheng/899/9320e1621257486a910a820a5e9327bf.jpg)
我有一个’Port’INT列,它的范围应该是30000到50000.
所以,我有一个存储过程插入值(端口是非空).所以我必须选择“手动”存储在该字段上的值.问题是,尽管我可以在某一点逐步插入(30000,30001,30002 ….)一些条目被删除(它因为30000,30002,30004 ….)所以有空洞要设置.
我需要在我的SP中放置一个适合这些孔的方法(例如我有30001,30003 ……).我的问题是如何在SP中检查,如果某个值已经“ocuppied”.
我想从MySQL使用LOOP.试过这样的事情:
CREATE PROCEDURE teste()
BEGIN
DECLARE p INT;
DECLARE aux INT;
SET p = 30000;
label1: LOOP
SELECT Port FROM Reg WHERE Port = p INTO aux;
IF p = 50000 THEN
LEAVE label1;
END IF;
IF aux IS NULL THEN -- aux-1 is not null, so I can verify the "next miminum available position"
aux = aux - 1;
LEAVE label1;
ELSE
SET p = p + 1;
ITERATE label1;
END IF;
END LOOP label1;
RETURN aux;
END $$
我的问题是获得结果值.如果我放置RETURN语句,我将获得仅在FUNCTION上允许的信息.当我结束循环时,SELECT的结果总是为null.
我能做什么?
解决方法:
SELECT IFNULL(MIN(r1.Port) + 1, 30000) as minport
FROM Reg r1
LEFT JOIN Reg r2 ON r1.Port + 1 = r2.Port
WHERE r2.Port IS NULL:
内容总结
以上是互联网集市为您收集整理的mysql – 检测(自动递增)序列中的缺失值全部内容,希望文章能够帮你解决mysql – 检测(自动递增)序列中的缺失值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。