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

问题描述

PHP+MYSQL项目要实现一个预约功能,我的实现方式是把当天的预约提取出来存入一个memory类型的表,一般情况下一千条左右数据。然后每次访问时对这个表进行查询此时刻向前推五分钟内,有无未执行的预约之后执行。如执行成功则进行相应的标记。每次查询前会检查是否有当天的数据,如果没有,则对表进行清空操作。然后从其他表把当天数据查询出来插入memory类型的表。相关代码大概为://查询今天的数据条数:$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 { //执行相应刷新操作}我的问题是:就上面这段代码,经常出现数据重复插入的情况,明明只有2000条数据,结果经常会出现表里成倍的插入数据,变成4000条或六千条。而且通过我记录的插入时间来看,几批数据多是相差一两秒。我分析可能是由于网站并发较大,第一次的语句没有执行成功时在间隔时间内另一个请求又执行了插入代码。但又实在想不出好的解决办法,特来请教,万分感谢!----区分下面的广告 问题补充:titanaly 写道

解决方案

mysql有锁表语句的,你可以直接调用LOCK TABLES。具体看看手册吧
解决方案二:
防止请求重复提交应该可以,在进入预约页面前生成一个token和当前用户绑定,然后在提交预约请求时先验证当前的token是否和用户绑定的token一致,不一致不提交请求,一致就解除user绑定的token并提交数据.或者你在数据库做唯一性约束

时间: 2024-10-21 14:59:04

关于mysql数据库memory表数据重复问题的相关文章

hbase-如何将mysql数据库中的数据存到hadoop上

问题描述 如何将mysql数据库中的数据存到hadoop上 求助如何将mysql数据库中的数据存到hadoop上,又如何进行查询? 解决方案 http://www.2cto.com/database/201412/359232.html 解决方案二: http://www.iteye.com/news/27625 解决方案三: 可以使用Kettle Spoon对数据进行抽取和转移,是图形化界面,可以支持几乎所有的数据库,包括关系型数据库Oracle.MySQL和非关系型数据库HBase等,也支持

java实现连接mysql数据库单元测试查询数据的实例代码_java

1.按照javaweb项目的要求逐步建立搭建起机构,具体的类包有:model .db.dao.test; 具体的架构详见下图: 2.根据搭建的项目架构新建数据库test和数据库表t_userinfo并且添加对应的测试数据; (这里我使用的是绿色版的数据库,具体的下载地址:http://pan.baidu.com/s/1mg88YAc) 具体的建立数据库操作详见下图: 开发实例"> 3.编写包中的各种类代码,具体参考代码如下: UserInfo.java /** * FileName: Us

MySQL数据库结构和数据的导出和导入_DB2

正在看的db2教程是:MySQL数据库结构和数据的导出和导入. 导出要用到MySQL的mysqldump工具,基本用法是: shell> mysqldump [OPTIONS] database [tables] 如果你不给定任何表,整个数据库将被导出. 通过执行mysqldump --help,你能得到你mysqldump的版本支持的选项表. 注意,如果你运行mysqldump没有--quick或--opt选项,mysqldump将在导出结果前装载整个结果集到内存中,如果你正在导出一个大的数据

如何在Java程序中访问mysql数据库中的数据并进行简单的操作_Mysql

在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据并进行简单的操作,具体详情请看下文. 创建一个javaProject,并输入如下java代码: package link; import java.sql.*; /** * 使用JDBC连接数据库MySQL的过程 * DataBase:fuck, table:person: * 使用myeclipse对mysql数据库进行增删改查的基本操作. */ public

PHP操作mysql数据库分表的方法_php实例

一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法.首先,我们需要想好到底分多少个 表,前提当然是满足应用.这里我使用了一个比较简单的分表方法,就是根据自增id的尾数来分,也就是说分0-9一共10个表,其取值也很好做,就是对10 进行取模.另外,还可以根据某一字段的md5值取其中几位进行分表,这样的话,可以分的表就很多了. 好了,先来创建表吧,代码如下: CREATE TABLE `ttlsa_com`.`article_0` ( `i

PHP操作mysql数据库分表的方法

一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法.首先,我们需要想好到底分多少个 表,前提当然是满足应用.这里我使用了一个比较简单的分表方法,就是根据自增id的尾数来分,也就是说分0-9一共10个表,其取值也很好做,就是对10 进行取模.另外,还可以根据某一字段的md5值取其中几位进行分表,这样的话,可以分的表就很多了. 好了,先来创建表吧,代码如下: CREATE TABLE `ttlsa_com`.`article_0` ( `i

MySQL数据库与表的最基本命令大盘点

你是否对获得MySQL数据库与表的最基本命令的实际操作感到十分头疼?如果是这样子的话,以下的文章将会给你相应的解决方案,以下的文章主要是介绍获得关于MySQL数据库与表的最基本命令的方案,以下就是相关内容的具体描述. SELECT DATABASE(); 列出当前所选择的数据库,如果未选择数据库则显示NULL; SHOW DATABASES; 列出服务器上当前存在的MySQL数据库; USE databasename; 选择访问某个数据库; SHOW tables; 找出当前的MySQL数据库包

保护MySQL数据库中重要数据的注意事项

本文介绍了保护MySQL数据库中重要数据受外部攻击的六个注意事项,以减少面临的风险. 与自动的数据库备份不同,对系统管理员来说,保护数据免受未授权用户的侵犯需要采取一定的行动.如果你用的是MySQL,就可以使用一些方便的功能来保护系统,来大大减少机密数据被未授权用户访问的风险. 企业最有价值的资产通常是其数据库中的客户或产品信息.因此,在这些企业中,数据库管理的一个重要部分就是保护这些数据免受外部攻击,及修复软/硬件故障. 在大多数情况下,软硬件故障通过数据备份机制来处理.多数数据库都自带有内置

MySQL数据库与表的最基本命令

你是否对获得MySQL数据库与表的最基本命令的实际操作感到十分头疼?如果是这样子的话,以下的文章将会给你相应的解决方案,以下的文章主要是介绍获得关于MySQL数据库与表的最基本命令的方案,以下就是相关内容的具体描述. SELECT DATABASE(); 列出当前所选择的数据库,如果未选择数据库则显示NULL; SHOW DATABASES; 列出服务器上当前存在的MySQL数据库; USE databasename; 选择访问某个数据库; SHOW tables; 找出当前的MySQL数据库包