weixin_42411605 2011-01-13 13:50
浏览 257
已采纳

关于mysql数据库memory表数据重复问题

PHP+MYSQL项目

要实现一个预约功能,我的实现方式是把当天的预约提取出来存入一个memory类型的表,一般情况下一千条左右数据。
然后每次访问时对这个表进行查询此时刻向前推五分钟内,有无未执行的预约之后执行。如执行成功则进行相应的标记。

每次查询前会检查是否有当天的数据,如果没有,则对表进行清空操作。然后从其他表把当天数据查询出来插入memory类型的表。

相关代码大概为:
[code="php"]
//查询今天的数据条数:
$forday = strtotime(date("Y-m-d", $timestamp));
$havefresh = $DB->result("SELECT COUNT(id) FROM ".tname('freshtmp')." WHERE forday = $forday");
if (empty($havefresh)) {
  //此条语句清空数据表
  $DB->query("TRUNCATE TABLE ".tname('freshtmp'));
//此处为从其他表查询出数据并组合成:$txt = (1,2,3,4),(1,2,3,4)......这样的格式
$DB->query("INSERT INTO ".tname('freshtmp')." (houseid, uid, freshtime, forday, fangan, addtime) VALUES $txt");//此处一般会一次性插入2000条左右的数据
} else {
//执行相应刷新操作
}
[/code]

我的问题是:
就上面这段代码,经常出现数据重复插入的情况,明明只有2000条数据,结果经常会出现表里成倍的插入数据,变成4000条或六千条。而且通过我记录的插入时间来看,几批数据多是相差一两秒。我分析可能是由于网站并发较大,第一次的语句没有执行成功时在间隔时间内另一个请求又执行了插入代码。
但又实在想不出好的解决办法,特来请教,万分感谢!

----区分下面的广告

  • 写回答

2条回答 默认 最新

  • xieye114 2011-01-14 09:10
    关注

    mysql有锁表语句的,你可以直接调用LOCK TABLES。

    具体看看手册吧

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

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵