陌生人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条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题