//例如,表的引擎是MyISAM ,查询速度快。
//请教下面的方法可行吗?
$time = time();
$sql = "insert into a values($did,$user,$time)";
$ret = $this->execute($sql); //插入申请
if($ret)
{
$sql = "update b set apply_num=apply_num+1 where did=".$did;
$ret = $this->execute($sql); //申请数字+1
}
如果执行完第一条语句后断电了,你怎么delete掉a的数据
那你还得为web服务器准备台柴油发电机。。
哇塞,一不小心落后了
sns网站如果流量大的话,负载均衡和缓存是必不可少的。
那么他会将前面执行的所有sql全部再弄回去,前提是先将前面的数据备份下
$sql = "insert into a values($did,$user,$time)";
$sql = "update b set apply_num=apply_num+1 where did=".$did;
如果这两个一直是配对执行的话, 是否可以理解成
a中$did的总行数==b中$did对应的apply_num ?
也就是第二句能否改为
update b set apply_num=(select count(*) from a where did={$did} ) where did={$did}
这样就算一次操作中断,下一次也能立刻得到纠正,甚至于,你这个b中的apply_num完全可以在需要时通过a表计算出来? 当然这个b表相当于缓存,要不要取决于你对速度的要求.2.现在innodb是否比myisam慢,也不是那么绝对,以前比它慢那是一定的,而现在innodb已经是mysql的缺省引擎,可以看出mysql也推荐innodb了.这些最好通过你自己系统的测试来确定.3.用事务一般肯定比不用事务慢,就算是innodb也是这样,但是一个问题会有很多方法解决,这里速度慢了,也可以在其它地方通过其它手段来提高.
$time = time();
$sql = "insert into a values($did,$user,$time)";
$ret = $this->execute($sql); //插入申请
if($ret)
{
$sql = "update b set apply_num=apply_num+1 where did=".$did;
$ret = $this->execute($sql); //申请数字+1
}如果插入申请失败,那么$ret就是FALSE,也就不会执行UPDATE申请数字+1的操作了。楼主没试试?
//例如,表的引擎是MyISAM ,查询速度快。
//请教下面的方法可行吗?
$time = time();
$sql = "insert into a values($did,$user,$time)";
$ret = $this->execute($sql); //插入申请
if($ret)
{
$sql = "update b set apply_num=apply_num+1 where did=".$did;
$ret2 = $this->execute($sql); //申请数字+1
if(! $ret2) {
$this->execute("delete ....");
}
}
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
mysql_select_db($DBNAME,$db); //选择数据库
.........
.........
mysql_query("START TRANSACTION",$db); //开始事务 $time = time();
$sql = "insert into a values($did,$user,$time)";
$ret = $this->execute($sql); //插入申请 $sql = "update b set apply_num=apply_num+1 where did=".$did;
$ret2 = $this->execute($sql); //申请数字+1if($ret && $ret2)
{
mysql_query("COMMIT",$db); //如果上面两条 sql 语句都执行成功,则用 commit 进行提交
echo "插入成功!";
}
else
{
mysql_query("ROLLBACK",$db); //如果至少有一条没执行成功,则用 rollback 回滚,使数据库恢复到原状
echo "插入失败!";
}
inno表的缺点是count统计。除非你精确统计, 一般这个也可以通过explain来得。有程序就这么做。 你也可把count计入别的表。具体的可找dba分析,但你用事和inno表是较佳选择.