国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL隨機選取資源

2024-07-24 12:31:50
字體:
來源:轉載
供稿:網友
       隨機選取一個資源
      模擬表如下:
      create table room_info(  
     RoomID bigint not null auto_increment comment '房間ID',  
     State smallint not null default 1 comment '狀態.1表示空閑,2表示被占用',  
     primary key(RoomID)  
) ;  
  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (1,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (2,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (3,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (4,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (5,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (6,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (7,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (8,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (9,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (10,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (11,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (12,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (13,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (14,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (15,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (16,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (17,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (18,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (19,1);  
INSERT INTO `room_info` (`RoomID`,`State`) VALUES (20,1);  
 
從資源表中隨機選取一個資源,并且修改狀態.
資源表的記錄不多,大致1w行左右.
 
創建普通索引
create index inx_1 on room_info(roomid,state);
 
這個索引非常重要
如果沒有這個索引,可能會鎖多行.
 
隨機獲取一行,并且修改資源狀態.
set autocommit=false;  
update room_info set state=2 where RoomID=(  
    select * from (  
        select RoomID from room_info where state=1 order by rand() limit 1  
    ) a  
) and state=1 and @roomid:=roomid;  
select @roomid;  
commit;  
 
需要注意的是,在執行下面SQL的時候,沒有上鎖.
select RoomID from room_info where state=1 order by rand() limit 1
所以在多線程環境下,可能沖突.
所以需要判斷 update 的影響行數.如果影響行數為0,說明資源已經被別人鎖定.自己需要重新獲取.
 
如果影響行數為0,此時切記不能拿到@roomid直接使用,而是需要重新運行.

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景东| 胶南市| 慈利县| 丰城市| 天镇县| 盐池县| 屏东市| 乃东县| 巴林右旗| 武宁县| 苍南县| 太湖县| 新昌县| 靖边县| 泸西县| 桐梓县| 饶平县| 濮阳县| 同江市| 保定市| 伊吾县| 阳江市| 朝阳区| 三门峡市| 呼伦贝尔市| 嘉义市| 石狮市| 铜梁县| 迁安市| 耿马| 吴堡县| 神农架林区| 府谷县| 广汉市| 富阳市| 清镇市| 元谋县| 久治县| 徐汇区| 绍兴县| 临沂市|