我们经常会遇到操作一张大表,发现操作时间过长或影响在线业务了,想要回退大表操作的场景。在我们停止大表操作之后,等待回滚是一个很漫长的过程,尽管你可能对知道一些缩短时间的方法,处于对生产环境数据完整性的敬畏,也会选择不做介入。最终选择不作为的原因大多源于对操作影响的不确定性。实践出真知,下面针对两种主要提升事务回滚速度的方式进行验证,一种是提升操作可用内存空间,一种是通过停实例,禁用 redo 回滚方式进行进行验证。
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、网站建设、东光网络推广、小程序设计、东光网络营销、东光企业策划、东光品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供东光建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
仔细阅读过官方手册的同学,一定留意到了对于提升大事务回滚效率,官方提供了两种方法:一是增加 innodb_buffer_pool_size 参数大小,二是合理利用 innodb_force_recovery=3 参数,跳过事务回滚过程。第一种方式比较温和,innodb_buffer_pool_size 参数是可以动态调整的,可行性也较高。第二种方式相较之下较暴力,但效果较好。
两种方式各有自己的优点,第一种方式对线上业务系统影响较小,不会中断在线业务。第二种方式效果更显著,会短暂影响业务连续,回滚所有没有提交的事务。
您好,可参考如下思路,然后结合自己的业务逻辑即可:
?php
//首先链接数据库
$conn = mysql_connect('主机名','数据库登陆用户名','数据库登陆密码') or die('链接数据库失败');
//选择数据库
mysql_select_db( 'test',$conn );
//假设test数据库中有文章表,article,表有字段 id,title,create_time 那么可采用如下代码循环读出里面数据
//进行SQL查询-查询article中的数据并按照id倒序排列
$sql = 'SELECT *FROM article ORDER BY id DESC';
//获取执行结果
$result = mysql_query( $sql,$conn );
if( !$result ) die( '执行SQL语句失败' );
//循环读出结果集中的数据
while( $row = mysql_fetch_assoc( $result ) )
{
//输出数据
echo $row['id'].'--'.$row['title'].'--'.$row['create_time'].'br/';
}
//如果test中有三条数据,比如下列数据
//id title create_time
//1 文章标题1 2014/10/31 14:20
//2 文章标题2 2014/11/01 15:12
//3 文章标题3 2014/11/03 12:10
//那么执行代码后,网页应显示如下:
//3--文章标题3--2014/11/03 12:10
//2--文章标题2--2014/11/01 15:12
//1--文章标题1--2014/10/31 14:20
?
请看手册:
使用 transaction 方法操作数据库事务,当发生异常会自动回滚,例如:
自动控制事务处理
Db::transaction(function(){
Db::table('think_user')-find(1);
Db::table('think_user')-delete(1);
});
也可以手动控制事务,例如:
// 启动事务
Db::startTrans();
try{
Db::table('think_user')-find(1);
Db::table('think_user')-delete(1);
// 提交事务
Db::commit();
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
}
注意在事务操作的时候,确保你的数据库连接是相同的。
echo $goods_id[0]; 或者 echo $goods_id["goods_id"];
mysql_fetch_array($result) 是返回一个数组
你可以在通过
$result = mysql_query("select `goods_id` from `sdb_goods` where `astrict_id`=1");
var_dump(mysql_fetch_array($result));
我看了你的追问
我觉得你是while($goods_id = mysql_fetch_array($result))没有理解
是把每一次执行的mysql_fetch_array 赋给 $goods_id
比如有三行数据
id name
1 123
2 456
3 789
那么while第一次执行的是把数组 array("name"="123") 赋给 $goods_id
第二次就是你查询出来的第二项,也就是 456..
希望你可以明白
也就是$goods_id得到的是一个数组,你需要输入键名引索出来
另外可以查查mysql_fetch_array,它还有个选项,控制引索出来按照数字还是查询数据的名字