亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL隨機選取資源

發布時間:2020-08-10 15:12:19 來源:ITPUB博客 閱讀:138 作者:壹頁書 欄目: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直接使用,而是需要重新運行.
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

富源县| 台南县| 鹿泉市| 秀山| 磐安县| 鄂托克前旗| 华容县| 玉树县| 瑞丽市| 天柱县| 漳平市| 阿拉善右旗| 桂阳县| 塘沽区| 嵩明县| 壶关县| 乌鲁木齐县| 弥勒县| 南通市| 平安县| 双鸭山市| 比如县| 门源| 鄯善县| 鹰潭市| 刚察县| 阳高县| 探索| 扬中市| 孟村| 宝坻区| 石家庄市| 竹北市| 满洲里市| 长葛市| 武乡县| 灵武市| 大洼县| 蒙自县| 故城县| 金湖县|