问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql 更新数据 怎么知道是否更新成功

发布网友 发布时间:2022-04-25 14:55

我来回答

5个回答

热心网友 时间:2022-04-08 08:36

有时候我们会不小心对一个大表进行了 update,比如说写错了 where 条件......

此时,如果 kill 掉 update 线程,那回滚 undo log 需要不少时间。如果放置不管,也不知道 update 会持续多久。

那我们能知道 update 的进度么?



实验

我们先创建一个测试数据库:

快速创建一些数据:

连续执行同样的 SQL 数次,就可以快速构造千万级别的数据:

查看一下总的行数:

我们来释放一个大的 update:

然后另起一个 session,观察 performance_schema 中的信息:

可以看到,performance_schema 会列出当前 SQL 从引擎获取的行数。

等 SQL 结束后,我们看一下 update 从引擎总共获取了多少行:


可以看到该 update 从引擎总共获取的行数是表大小的两倍,那我们可以估算:update 的进度 = (rows_examined) / (2 * 表行数)

💡小贴士

information_schema.tables 中,提供了对表行数的估算,比起使用 select count(1) 的成本低很多,几乎可以忽略不计。

那么是不是所有的 update,从引擎中获取的行数都会是表大小的两倍呢?这个还是要分情况讨论的,上面的 SQL 更新了主键,如果只更新内容而不更新主键呢?我们来试验一下:

等待 update 结束,查看 row_examined,发现其刚好是表大小:

那我们怎么准确的这个倍数呢?

一种方法是靠经验:update 语句的 where 中会扫描多少行,是否修改主键,是否修改唯一键,以这些条件来估算系数。

另一种方法就是在同样结构的较小的表上试验一下,获取倍数。

这样,我们就能准确估算一个大型 update 的进度了。

热心网友 时间:2022-04-08 09:54

用这个php自带的语句试试:@mysql_affected_rows ( 句柄 );
例如:
$sql = @mysql_pconnect ( 主机, 用户名, 密码 );
@mysql_select_db ( 你选择的数据库名, $sql );
这里是你执行的更新数据(增加、删除、修改)...
$result = @mysql_affected_rows ( $sql );
if($result > 1){
$aaa = "更新数据成功";
}else{
$aaa = "操作失败";
}
return $aaa;
若是用javaScript实现的话我建议你使用ajax技术,下面的兄弟已经说得很详细了,我在这里就不写了,如有不明白的,可联系我Email:a_756432@163.com

热心网友 时间:2022-04-08 11:28

用ajax来写,代码简要如下,服务端我用的php的写的,很简单

<script type="text/javascript">
var ajax;

try
{
ajax=new XMLHttpRequest();
}
catch (e)
{
try
{
ajax=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
ajax=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("您的浏览器不支持AJAX!");
return false;
}
}
}

var s = "name=xeepy&sex=boy";//这个用来传参数

ajax.open("POST","sql.php",true);//这个指定提交的页面
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.onreadystatechange = onResult;

ajax.send(s);

function onResult()
{
if(ajax.readyState == 4)
{
alter(ajax.responseText);
}
}
</script>

下面是sql.php的代码

<?php
//省出连接数据库的代码
echo mysql_query("select * from abc");
?>

热心网友 时间:2022-04-08 13:20

要是不用 javascript 获取,那就简单了,

.......
$xresult=mysql_query("update table set ....... where .......",$dblink);

if ($xresult)
{
echo "更新成功!";
}
else
{
echo mysql_error(); //输出错误原因
}

要是用 javascript 获取,你得像楼上那位仁兄说的那样,用 Ajax 吧,将 mysql_error() 的返回结果通过 Ajax 送到客户端,这样 javascript 就可以处理了。

热心网友 时间:2022-04-08 15:28

可以在你执行语句后,马上执行以下语句进行获取:

select row_count();

来获取影响的行数
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
烘烘怎么造句 卧室的英语单词怎么读 微信聊天记录不见了,怎么办? 一九六八年阴历八月二十九零晨一至三点间出生的人五行缺啥?_百度知 ... 2012年农历八月二十八曰丑时出生女命运? 65年农历8月28日凌晨1点生辰八字? 1968年农历8月28日丑时出生日期 联想拯救者 Y7000P 2021款十一代酷睿版-规格与性能大揭秘 Lenovo 联想 拯救者 Y7000 2021款 十一代酷睿版 游戏本 - 适用对象_百... Lenovo 联想拯救者 Y7000 2021款 十一代酷睿版游戏本-适用对象 充电打火机一次充电多长时间? 产妇吃的清炖羊肉汤的做法 mysql更新问题 充电打火机一般要充电多久才能充满? 羊肉炖什么补血 navicat for mysql怎么更新 微信发的图片过了很久要怎么撤回 葱油饼有哪些新做法呢,怎样做葱香浓郁好吃呢? 智能打火机充电多长时间? 羊肉与什么在一起炖比较补气血呢 mysql 如何更新某一条数据内容 月子餐羊肉汤的做法 MYSQL数据库字段内容如何批量更新 充电打火机充电要充多久才能充满? Mysql如何更新字段值 月子里羊肉汤最佳做法 充电打火机充电多长时间? Mysql查询将查询的结果进行更新 坐月子补气血吃什么 这八款食谱有效补气血 触摸电子打火机充电接口发烫怎么回事 羊肉补气血的做法大全 什么是复合树脂 mysql实现按条件更新数据 树脂基复合材料的组成和作用 补气血的羊肉汤怎么做 MySql更新操作的问题 复合树脂的种类有哪些 月子里炖羊汤能放什么料 mysql 我如何查询一批数据后,并更新这批数据 环氧树脂、合成树脂、复合树脂那种材料做的花盆更好? 产妇吃什么补气血最好? mysql 根据自身值更新 复合树脂的作用? 3M牙科树脂的复合树脂的种类 一般牙齿修复的常用材料有哪些 凉粉如何熬制 复合树脂井盖原材料是什么? 光固化复合树脂? 堵牙一般用什么材料?哪种最好? 现在的蛀牙补什么材料,我的大洞应该补什么材料,银汞和树脂哪个好?