事發(fā)經(jīng)過(guò):
之前用這個(gè)功能都是好好的,后來(lái)運(yùn)營(yíng)那邊反應(yīng),突然就不行了,然后我自己測(cè)試了一下,新增了瞎寫(xiě)的卡號(hào)和卡密是正常的,運(yùn)營(yíng)那份表格批量導(dǎo)入就不行,我就向crmeb客服反饋,客服那邊用我的表格導(dǎo)入也是正常的,當(dāng)時(shí)我就納悶了,因?yàn)樽约阂彩情_(kāi)發(fā),翻翻源碼結(jié)合線上調(diào)試,終于找到問(wèn)題了。
我編輯的商品product_id是31,發(fā)現(xiàn)product_virtual里面product_id 19已經(jīng)有了我31想導(dǎo)入的數(shù)據(jù),于是我返回product表看,發(fā)現(xiàn)是product_id 19是已經(jīng)刪除了,但是副表數(shù)據(jù)還存在,于是我把副表的數(shù)據(jù)刪除了,然后導(dǎo)入就成功了,為了看看具體的原因我看了一下源碼,代碼上看副表數(shù)據(jù)應(yīng)該是有刪除的,但是執(zhí)行了一大托業(yè)務(wù)既然沒(méi)有做事務(wù),我就知道大概得原因了,估計(jì)是網(wǎng)速卡頓或者高負(fù)載的情況下,由于沒(méi)有事務(wù)腳本執(zhí)行到一半就沒(méi)有執(zhí)行了,就會(huì)產(chǎn)生這樣的奇怪問(wèn)題。
我全局搜索了一下用事務(wù)的地方 Db::startTrans() ,只有3個(gè)地方用了事物,分別是
1.auto_upgrade
2.upgrade
3.databaseUpgrade
我個(gè)人建議
1、大量的業(yè)務(wù)進(jìn)行多表操作還是需要加上事務(wù),不然出現(xiàn)網(wǎng)速慢、斷線、斷電、高負(fù)載等不可抗因素好難保持?jǐn)?shù)據(jù)的一致性。
2、批量寫(xiě)入數(shù)據(jù)不要在循環(huán)一條一條寫(xiě)入,應(yīng)該拼接成數(shù)組一次性寫(xiě)入,如果導(dǎo)入的數(shù)據(jù)量大會(huì)耗沒(méi)數(shù)據(jù)庫(kù)鏈接的。
希望官方采納,謝謝?。?!