mysql批量insert數據的方法:1、循環插入,語法格式“for($i=1;$i
本教程操作環境:windows7系統、mysql8.0.22版、thinkpad t480電腦。
mysql批量insert數據的方法:
方法一:循環插入
這個也是最普通的方式,如果數據量不是很大,可以使用,但是每次都要消耗連接數據庫的資源。
大致思維如下
(我這里寫偽代碼,具體編寫可以結合自己的業務邏輯或者框架語法編寫)
for($i=1;$i?$value){ $sql?=?'insert...............'; //querysql } while($i?<p>因為太過普通同時也沒什么難度同時也不是我今天主要寫的所以這里我不多說</p><p><strong>方法二:減少連接資源,拼接一條sql</strong></p><p>偽代碼如下</p><pre class="brush:php;toolbar:false">//這里假設arr的key和數據庫字段同步,其實大多數框架中在php操作數據庫的時候都是這么設計的 $arr_keys????????=?array_keys($arr); $sql?????????????=?'INSERT?INTO?tablename?('?.?implode(','?,$arr_keys)?.?')?values'; $arr_values??????=?array_values($arr); $sql?????????????.=?"?('"?.?implode("','"?,$arr_values)?.?"'),"; $sql?????????????=?substr($sql?,0?,-1); //拼接之后大概就是??INSERT?INTO?tablename?('username','password')?values? ('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx') ....... //querysql
這樣寫正常插入一萬條基本問題不大,除非數據很長,應付普通的批量插入夠用了,比如:批量生成卡號,批量生成隨機碼等等。
方法三:使用存儲過程
這個我手里正好再用這個就把sql付出來,具體業務邏輯大家自己組合一下就可以。
delimiter?$$$ create?procedure?zqtest() begin declare?i?int?default?0; set?i=0; start?transaction; while?i<p>這個也只是個測試代碼,具體參數大家自行定義</p><p>我這里是一次插入8萬條,雖然不多但是,每一條數據量都很大,有很多varchar4000 和text字段</p><p>耗時 6.524s</p><p><strong>方法四:使用MYSQL LOCAL_INFILE</strong></p><p>這個我目前正在使用,所以順便把pdo的代碼也復上來,以便大家參考</p><pre class="brush:php;toolbar:false">//設置pdo開啟MYSQL_ATTR_LOCAL_INFILE /*hs96.cn@gmail.com public?function?pdo_local_info?() { ?????global?$system_dbserver; ?????$dbname??=?'hs96.cn@gmail.com'; ?????$ip??????=?'hs96.cn@gmail.com'; ?????$user????=?'hs96.cn@gmail.com'; ?????$pwd?????=?'hs96.cn@gmail.com'; ?????$dsn?????=?'mysql:dbname='?.?$dbname?.?';host='?.?$ip?.?';port=3306'; ?????$options?=?[PDO::MYSQL_ATTR_LOCAL_INFILE?=>?true]; ?????$db??????=?new?PDO($dsn?,$user?,$pwd?,$options); ?????return?$db; ?} //偽代碼如下 public?function?test(){ ?????$arr_keys?????????=?array_keys($arr); $root_dir?????????=?$_SERVER["DOCUMENT_ROOT"]?.?'/'; $my_file??????????=?$root_dir?.?"hs96.cn@gmail.com/sql_cache/"?.?$order['OrderNo']?.?'.sql'; $fhandler?????????=?fopen($my_file,'a+'); if?($fhandler)?{ ????$sql?=?implode("t"?,$arr); ??????$i???=?1; ??????while?($i?pdo_local_info?(); ??????$res?=?$pdo->exec($sql); ??????if?(!$res)?{ ???????????//TODO?插入失敗 ??????} ??????@unlink($my_file); ??} }
更多相關免費學習推薦:mysql教程(視頻)
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦