我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL随机选取资源

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL随机选取资源

随机选取一个资源
模拟表如下:
  1. create table room_info(  
  2.     RoomID bigint not null auto_increment comment '房间ID',  
  3.     State smallint not null default 1 comment '状态.1表示空闲,2表示被占用',  
  4.     primary key(RoomID)  
  5. ) ;  
  6.   
  7. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (1,1);  
  8. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (2,1);  
  9. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (3,1);  
  10. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (4,1);  
  11. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (5,1);  
  12. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (6,1);  
  13. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (7,1);  
  14. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (8,1);  
  15. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (9,1);  
  16. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (10,1);  
  17. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (11,1);  
  18. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (12,1);  
  19. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (13,1);  
  20. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (14,1);  
  21. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (15,1);  
  22. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (16,1);  
  23. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (17,1);  
  24. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (18,1);  
  25. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (19,1);  
  26. INSERT INTO `room_info` (`RoomID`,`State`) VALUES (20,1);  

从资源表中随机选取一个资源,并且修改状态.
资源表的记录不多,大致1w行左右.

创建普通索引
create index inx_1 on room_info(roomid,state);

这个索引非常重要
如果没有这个索引,可能会锁多行.

随机获取一行,并且修改资源状态.
  1. set autocommit=false;  
  2. update room_info set state=2 where RoomID=(  
  3.     select * from (  
  4.         select RoomID from room_info where state=1 order by rand() limit 1  
  5.     ) a  
  6. ) and state=1 and @roomid:=roomid;  
  7. select @roomid;  
  8. commit;  

需要注意的是,在执行下面SQL的时候,没有上锁.
select RoomID from room_info where state=1 order by rand() limit 1
所以在多线程环境下,可能冲突.
所以需要判断 update 的影响行数.如果影响行数为0,说明资源已经被别人锁定.自己需要重新获取.
MySQL随机选取资源

如果影响行数为0,此时切记不能拿到@roomid直接使用,而是需要重新运行.

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL随机选取资源

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql随机抽取数据

-- 慢SELECT * FROM table_name ORDER BY rand() LIMIT 5;-- 较慢SELECT * FROM `table`WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id
mysql随机抽取数据
2020-09-09

python3 list列表随机选取一个

爬虫时适当更换user-agent可以稍微规避一下代理被封的风险。。。from random import sampleua = [ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1
2023-01-31

MySQL中的随机抽取的实现

目录1. 引言2. 内存临时表3. 磁盘临时表4. 优先队列排序算法1. 引言现在有一个需求是从一个单词表中每次随机选取三个单词。这个表的建表语句和如下所示:mysql> Create table 'words'('id' int(1
2023-03-20

mysql如何随机获取几条数据

mysql如何随机获取几条数据,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。mysql随机获取几条数据的方法:1、通过“SELECT * FROM tablen
2023-06-22

MySQL中的随机抽取如何实现

今天小编给大家分享一下MySQL中的随机抽取如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 引言现在有一个需求是
2023-07-05

python怎么从列表中随机选取多个数

您可以使用random模块的sample函数来从列表中随机选取多个数。以下是一个示例代码:```pythonimport randomlst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]num_samples = 3r
2023-09-04

php mysql怎么随机获取几条数据

php mysql随机获取几条数据的方法:1、通过“SELECT * FROM tablename ORDER BY RAND() LIMIT”获取数据;2、通过“ORDER BY t1.id ASC LIMIT”方式获取指定条数的数据等。
2019-07-29

.NET Core如何使用CZGL.SystemInfo库获取主机运行资源

今天就跟大家聊聊有关.NET Core如何使用CZGL.SystemInfo库获取主机运行资源,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。简介CZGL.SystemInfo 是一个
2023-06-28

php怎么打乱数组随机选取几个数组元素

方法:1、用shuffle()随机打乱数组;2、用array_rand()随机从数组中获取多个键名,返回一个键名数组;3、用foreach语句遍历键名数组,根据获取到的键名从乱序数组中取值,并赋值给一个新数组;4、遍历结束后输出新数组即可。
2019-11-11

php如何打乱数组随机选取几个数组元素

本篇内容主要讲解“php如何打乱数组随机选取几个数组元素”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php如何打乱数组随机选取几个数组元素”吧!方法:1、用shuffle()随机打乱数组;2、
2023-06-21

编程热搜

目录