陌生人233 2018-07-09 01:30 采纳率: 66.7%
浏览 1061
已采纳

一个新生报道宿舍分配的问题

我在做一个PHP的新生报到的东西,我设置的一个宿舍可以住三个专业,每个新生都有自己的专业,根据专业住进不同的宿舍,宿舍最多住6个人,我想自动分配,先开启了事务,循环 从宿舍的第一个专业开始查看是否有匹配,没有则匹配第二个专业,以此类推,当找不到的时候跳出循环,找到以后用

 UPDATE `Building`  SET `ExistSum`=ExistSum+1,`version`=version+1  WHERE  `ID` = 62  AND `version` = 0

然后判断是否更新完成,更新成功了,跳出循环,不成功就继续循环,
但是,我在测试的时候发现一开始还好,但是大概40个左右就会卡死,好像是因为行锁的原因,请教一下大家,有没有好办法优化下,测试是我用Python写的开了40个线程,读取队列,.每0.1秒访问一次,数据都是提前准备好的
表结构:

 CREATE TABLE `Building` (   `ID` int(6) NOT NULL,   `isdel` tinyint(1) NOT NULL DEFAULT '0',   `Building` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,   `DormNumber` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL,   `Department` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',   `money` int(3) NOT NULL DEFAULT '800',   `Sum` int(1) NOT NULL DEFAULT '6',   `ExistSum` int(1) DEFAULT '0',   `MainMajorID` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',   `SecondMajorID` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',   `ThiredMajorID` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',   `Sex` varchar(2) COLLATE utf8mb4_unicode_ci DEFAULT '男' COMMENT '真男假女',   `remark` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',   `version` int(3) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 

图片说明

  • 写回答

4条回答 默认 最新

  • weixin_41976242 2018-07-09 03:21
    关注

    这是多线程问题把表锁死了、

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 个人网站被恶意大量访问,怎么办
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制