网站分享设计,网站备案收费么,做金融的免费发帖的网站有哪些,水滴保险官方网站3.同步数据到其他表的。 这种又分插入和更新字段两种情况#xff0c;除了sql方面的逻辑外#xff0c;要考虑记录执行sql和变化前后数据记录。总是要做最坏的打算#xff0c;一旦更新错了还能回滚数据。 比如在更新之前先记录被更新的数据记录到某表#xff08;新建表#…3.同步数据到其他表的。 这种又分插入和更新字段两种情况除了sql方面的逻辑外要考虑记录执行sql和变化前后数据记录。总是要做最坏的打算一旦更新错了还能回滚数据。 比如在更新之前先记录被更新的数据记录到某表新建表或文件中。在编写阶段也做到先跑一条数据然后再进循环去测试。 一步一步小心驶得万年船毕竟你是在做非select操作。 4.从一种DB迁移数据到另外一种DB的。比如从mssql-mysql,或反之这种迁移其实和第二种是类似的除了业务逻辑外也要考虑上线后数据的回滚还有查询和插入需要做到分批。编写代码的时候各种引用渠道和调用model不要写到foreach里面了驱动也别滥用每一次的初始化都会消耗链接资源和时间成本。把不必要的查询都干掉集中在一次查询里面同时也避免什么都select *之类的查询用到哪几个字段列就select那几个。在设计数据表的时候mysql还是多用时间戳方便查询即使显示格式要求也可以在脚本层面去做。 在插入的时候还应该多用框架自带的批量方法比如CI中有insert_batch方法多了解一下驱动底层的实现免得自己重复造轮子还加一些多于判断。 比如我之前写的分批插入 for ($i 1; $i $times;$i) {$insertData array();$partData $this-mssql-select($sql, array(), $i, 10000);//var_dump($partData);die();foreach ($partData as $p) {$insertData[] array(user_id $p[user_id],login_from $p[login_from],type $p[type],ip $p[ip],created $p[created]);}$allData array_chunk($insertData, 1000); // 分批插入$num count($allData);for ($n 0; $n $num; $n) {$mysql-insert_batch($tableName , $allData[$n]);}
} 其中array_chunk那句是把装好的10000条数据的数组再分成1000个一份然后每一千个记录插入一次。看起来很合理但实际上CI的insert_batch里面已经帮我们这么做了。 DB_active_rec.php源码如下 // Batch this baby
for ($i 0, $total count($this-ar_set); $i $total; $i $i 1000)
{$sql $this-_insert_batch($this-_protect_identifiers($table, TRUE, NULL, FALSE), $this-ar_keys, array_slice($this-ar_set, $i, 1000));$this-query($sql);
} 这里面已经是1000条一次性批量插入了这是我修改过的默认是100当然mssql的官方驱动比较二逼那个_insert_batch方法并不存在我把mysql驱动对应的那个_insert_batch方法给拷贝过去即可。 多了解一些底层实现就少一些麻烦。转载于:https://www.cnblogs.com/freephp/p/5094238.html