`
faiinlove
  • 浏览: 58718 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Mysql Limit 出现误差?

    博客分类:
  • php
阅读更多

在一段更新数据库的代码中,居然出现了虚假的更新动作。

数据库用的是MySql,测试环境是局域网,4核机器,Mysql无事务机制,无存储过程;PHP5.2.x。

 

这段代码需要更新超过300条记录。

每次更新完自己后,需要调用JobManage::synchroJobStatus做同步,同步过程中有一次数据库操作。

 

 <?php
$ibegin=0;
while (true) {
$sql = "SELECT JI_ID FROM tb_job_info WHERE JI_CompanyID={$companyID} LIMIT {$ibegin},100";
$jobList = DB::sql($sql, DBName_company);

 if (empty($jobList)) {
	break;
 }

foreach ($jobList as $job){
	$data = array(
		'JS_IsAdminChecked'   => $status,
		'JS_AdminCheckedRemark' => $remark,
		'JS_AdminCheckedTime' => time(),
	);

$where = array('JS_JobID' => $job["JI_ID"]);
$statusInfo = DB::getRow('tb_job_status', $where, DBName_company,'JS_JobID');
if(empty($statusInfo)){
	$iRnt = $this->addJobStatus($job['JI_ID'],$status,$remark);
	if($iRnt<0){
		return 0;
	}
}
$iRtn += DB::edit('tb_job_status', $data, $where, DBName_company);
$statusInfo = array_merge($statusInfo,$data);

$data = array(
	'LC_Type' => $isAdminCheck,
	'LC_AdminID'=>$checkAdminID,
	'LC_CheckStatus' => $status,
	'LC_HitWords'  => $remark,
	'LC_UpdateTime' => time()
);
$where = array('LC_CompanyID' => $companyID,'LC_JobID' =>$job["JI_ID"]);
$exist = DB::getRow('tb_log_checkjob',$where,DBName_company,'LC_CompanyID');
if(!empty($exist)){
	DB::edit('tb_log_checkjob',$data,$where,DBName_company);
}else{
	$data = array_merge($data,$where,array('LC_AddTime' => time()));
	$result = DB::add('tb_log_checkjob',$data,DBName_company);
}

JobManage::synchroJobStatus($statusInfo);
}

 $ibegin+=100;

 }
?>

更新的语句关键是这条:DB::edit('tb_job_status', $data, $where, DBName_company);

 上面的问题是:

1.查询数据库,一轮300多条记录中,有100多条记录的该语句没有生效。
2.这条语句每次都返回了更新成功。

3.数据能够完整的读取,没有遗漏。

 

经过修改:

 <?php
//$ibegin=0;
//while (true) {
$sql = "SELECT JI_ID FROM tb_job_info WHERE JI_CompanyID={$companyID}";// LIMIT {$ibegin},100";
$jobList = DB::sql($sql, DBName_company);

 //if (empty($jobList)) {
//	break;
 //}

foreach ($jobList as $job){
	$data = array(
		'JS_IsAdminChecked'   => $status,
		'JS_AdminCheckedRemark' => $remark,
		'JS_AdminCheckedTime' => time(),
	);

$where = array('JS_JobID' => $job["JI_ID"]);
$statusInfo = DB::getRow('tb_job_status', $where, DBName_company,'JS_JobID');
if(empty($statusInfo)){
	$iRnt = $this->addJobStatus($job['JI_ID'],$status,$remark);
	if($iRnt<0){
		return 0;
	}
}
$iRtn += DB::edit('tb_job_status', $data, $where, DBName_company);
$statusInfo = array_merge($statusInfo,$data);

$data = array(
	'LC_Type' => $isAdminCheck,
	'LC_AdminID'=>$checkAdminID,
	'LC_CheckStatus' => $status,
	'LC_HitWords'  => $remark,
	'LC_UpdateTime' => time()
);
$where = array('LC_CompanyID' => $companyID,'LC_JobID' =>$job["JI_ID"]);
$exist = DB::getRow('tb_log_checkjob',$where,DBName_company,'LC_CompanyID');
if(!empty($exist)){
	DB::edit('tb_log_checkjob',$data,$where,DBName_company);
}else{
	$data = array_merge($data,$where,array('LC_AddTime' => time()));
	$result = DB::add('tb_log_checkjob',$data,DBName_company);
}

JobManage::synchroJobStatus($statusInfo);
}

 //$ibegin+=100;

 //}
?>

 

问题不再存在· · 

何种原因,导致这个错误出现呢?

初步断定 Limit 出现了这个误差!

具体如何产生的,还有待分析。

 

0
0
分享到:
评论

相关推荐

    limit传参的使用方法

    在MySQL数据库操作过程中,`LIMIT`子句是非常实用的一个功能,尤其是在需要限制查询结果集大小的情况下。本文将详细介绍如何在MySQL中使用`LIMIT`结合参数化查询来实现灵活且安全的数据检索。 #### 一、基础知识...

    mysql分页的limit参数简单示例

    Mysql的分页的两个参数 select * from user limit 1,2 ... 您可能感兴趣的文章:详解MySQL的limit用法和分页查询语句的性能分析MYSQL分页limit速度太慢的优化方法mysql limit分页优化方法分享Mysql limit

    关于Mysql分页的两种方法,假分页和limit分页

    相比之下,LIMIT分页是MySQL数据库内置的分页机制,它在服务器端直接处理分页,只返回所需页面的数据。LIMIT关键字与ORDER BY一起使用,可以实现高效的数据分页。例如,`SELECT * FROM table ORDER BY column LIMIT ...

    #_ssm_104_mysql_杏种质资源管理系统_.zip

    1. 项目名称为“杏种质资源管理系统”,结合文件名“#_ssm_104_mysql_杏种质资源管理系统_.zip”,可以推断这是一个使用Spring、SpringMVC和MyBatis(SSM)框架开发的系统,并且与数据库MySQL紧密相关。 2. 根据...

    #_ssm_102_mysql_商店积分管理系统_.zip

    首先,文件标题中的"#_ssm_102_mysql_商店积分管理系统_.zip"暗示了这是一个使用Spring、SpringMVC和MyBatis(SSM)框架开发的,基于MySQL数据库的商店积分管理系统。这种系统通常用于处理顾客在商店消费后的积分...

    #_ssm_146_mysql_作业提交与批改程序_.zip

    首先,从标题中可以得知这是一个与MySQL数据库相关,涉及学生作业提交与批改系统的软件程序。标题中的"#_ssm_146_mysql_"表明该程序可能是基于SSM框架开发的,SSM是指Spring、SpringMVC和MyBatis这三个Java框架的...

    #_ssm_103_mysql_团员管理系统_.zip

    \”中,出现的问号可能表示具体的模块名称或功能区域,这些目录下可能存放着系统的具体实现文件。 6. “#_ssm_103_mysql_??????_\??\config\”目录可能存放系统的配置文件,例如数据库连接配置、Spring和MyBatis的...

    #_ssm_031_mysql_学生网上请假系统_.zip

    标题中“#_ssm_031_mysql_学生网上请假系统_.zip”表明这是一个与学生网上请假系统相关的项目压缩包文件。从标题可以得知,这个系统是基于SSM框架构建的,即Spring、SpringMVC和MyBatis的组合,而MySQL作为数据库...

    模拟mysql的limit字段的sql处理函数

    SQL数据库不支持limit语法,利用逻辑处理函数模拟出来的思路,具体可照此改造。

    #_ssm_117_mysql_校园门户网_.zip

    "ssm_117"可能指的是该课程或者项目的编号,而"mysql"表明项目使用了MySQL数据库系统。 其次,文件的名称列表显示了项目的基本目录结构,具体如下: 1. "#_ssm_117_mysql_?????_\", 这个目录可能是存放整个项目的...

    mybatis连接MySQL8出现的问题解决方法

    "mybatis连接MySQL8出现的问题解决方法" MyBatis是当前最流行的持久层框架之一,它提供了一个简单的方式来访问数据库。然而,在使用MyBatis连接MySQL8时,可能会出现一些问题。本文将介绍MyBatis连接MySQL8出现的...

    #_ssm_065_mysql_高校学生请假管理系统_.zip

    标题中的"#_ssm_065_mysql_高校学生请假管理系统_.zip"表明这个压缩包包含了关于一个高校学生请假管理系统的开发文档和代码。从标题可以推断出这是一个基于SSM(Spring+SpringMVC+MyBatis)框架开发的项目,使用...

    mysql limit两个参数.docx

    在MySQL数据库中,`LIMIT`子句是一个非常重要的部分,特别是在处理大数据集时,它允许我们有效地控制查询结果的返回数量。`LIMIT`通常与`OFFSET`一起使用,以实现分页效果,使得用户能够逐步浏览大量数据,而无需一...

    #_ssm_071_mysql_在线项目众筹平台_.zip

    文件标题 "#_ssm_071_mysql_在线项目众筹平台_.zip" 指出该项目是一个基于Java的在线项目众筹平台。"ssm" 是指Spring、SpringMVC 和 MyBatis 的组合,这是一个常见的Java企业级应用开发框架。项目使用了MySQL数据库...

    #_ssm_067_mysql_网约车用户服务平台_.zip

    根据提供的文件信息,我们可以了解到该压缩包文件是关于一个名为“#_ssm_067_mysql_网约车用户服务平台”的项目。这个项目的名称中包含了多个技术要素,其中包括#、ssm、067、mysql和网约车用户服务平台。接下来,...

    MySQL 用 limit 为什么会影响性能?.docx

    你真的会写一手好SQL吗?你真的深入了解数据库吗?你真的对MYSQL很理解吗?来自一线大厂资深数据库开发工程师的分享,纯粹干货,值得拥有。

    MySQL Interview Questions.pdf

    1. 什么是 MySQL? MySQL 是一个开源的关系数据库管理系统(RDBMS),它可以在 Web 和服务器上运行。 2. 使用 MySQL 的优点是什么? MySQL 快速、可靠、易于使用,且为开源软件。 3. 什么是数据库? 数据库是指...

    MySQL limit性能分析与优化

    语法结构: limit offset, rows 结论:rows 相同条件下,offset 值越大,limit 语句性能越差 二、测试 执行测试: 5750000 条数据 sql 1 执行时间: sql 6执行时间: 三、优化 方式一:可根据主键ID等其他索引字段...

    Mysql_limit.zip_limit

    在MySQL数据库系统中,`LIMIT`子句是一个非常重要的部分,它用于限制SQL查询返回的结果集数量。在处理大量数据时,`LIMIT`是优化查询性能、避免过度消耗资源的有效手段。下面我们将深入探讨`LIMIT`子句的工作原理,...

Global site tag (gtag.js) - Google Analytics