最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql大批量插入數(shù)據(jù)的4種方法示例

 更新時間:2019年06月13日 11:20:28   作者:躺達  
這篇文章主要給大家介紹了關于mysql大批量插入數(shù)據(jù)的4種方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用mysql具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

本文主要給大家介紹了關于mysql大批量插入數(shù)據(jù)的4種方法,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧

方法一:循環(huán)插入

這個也是最普通的方式,如果數(shù)據(jù)量不是很大,可以使用,但是每次都要消耗連接數(shù)據(jù)庫的資源。

大致思維如下

(我這里寫偽代碼,具體編寫可以結合自己的業(yè)務邏輯或者框架語法編寫)

for($i=1;$i<=100;$i++){
 $sql = 'insert...............';
 //querysql
}
foreach($arr as $key => $value){
$sql = 'insert...............';
 //querysql
}
while($i <= 100){
$sql = 'insert...............';
 //querysql
 $i++
}

因為太過普通同時也沒什么難度同時也不是我今天主要寫的所以這里我不多說

方法二:減少連接資源,拼接一條sql

偽代碼如下

//這里假設arr的key和數(shù)據(jù)庫字段同步,其實大多數(shù)框架中在php操作數(shù)據(jù)庫的時候都是這么設計的
$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

這樣寫正常插入一萬條基本問題不大,除非數(shù)據(jù)很長,應付普通的批量插入夠用了,比如:批量生成卡號,批量生成隨機碼等等。。。

方法三:使用存儲過程

這個我手里正好再用這個就把sql付出來,具體業(yè)務邏輯大家自己組合一下就可以。

delimiter $$$
create procedure zqtest()
begin
declare i int default 0;
set i=0;
start transaction;
while i<80000 do
 //your insert sql 
set i=i+1;
end while;
commit;
end
$$$
delimiter;
call zqtest();

這個也只是個測試代碼,具體參數(shù)大家自行定義

我這里是一次插入8萬條,雖然不多但是,每一條數(shù)據(jù)量都很大,有很多varchar4000 和text字段
耗時 6.524s

方法四:使用MYSQL LOCAL_INFILE

這個我目前正在使用,所以順便把pdo的代碼也復上來,以便大家參考

//設置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 <= 80000)
   {
    $i++;
    fwrite($fhandler ,$sql . "\r\n");
   }
   $sql = "LOAD DATA local INFILE '" . $myFile . "' INTO TABLE ";
   $sql .= "tablename (" . implode(',' ,$arr_keys) . ")";
   $pdo = $this->pdo_local_info ();
   $res = $pdo->exec($sql);
   if (!$res) {
    //TODO 插入失敗
   }
   @unlink($my_file);
  }
}

這個同樣每一條數(shù)據(jù)量都很大,有很多varchar4000 和text字段

耗時 2.160s

以上滿足基本需求,100萬數(shù)據(jù)問題不大,要不數(shù)據(jù)實在太大也涉及分庫分表了,或者使用隊列插入了。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • 兩個windows服務器使用canal實現(xiàn)mysql實時同步

    兩個windows服務器使用canal實現(xiàn)mysql實時同步

    canal是阿里基于java寫的一個組件,他的作用是canal.deployer讀取mysql數(shù)據(jù)的binlog日志,然后canal.adapter將其轉換為對應的數(shù)據(jù)(數(shù)據(jù)的變化或者變化后的數(shù)據(jù),跟配置有關),并且同步到相關中間件,本文實現(xiàn)兩個windows服務器使用canal實現(xiàn)mysql主從復制實時同步
    2025-03-03
  • MySQL中連接查詢和子查詢的問題

    MySQL中連接查詢和子查詢的問題

    這篇文章主要介紹了MySQL中連接查詢和子查詢的問題,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • CentOS7中安裝MySQL的圖文講解

    CentOS7中安裝MySQL的圖文講解

    這篇文章主要介紹了CentOS7中安裝MySQL的圖文講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 詳解騰訊云CentOS7.0使用yum安裝mysql及使用遇到的問題

    詳解騰訊云CentOS7.0使用yum安裝mysql及使用遇到的問題

    本篇文章主要介紹了騰訊云CentOS7.0使用yum安裝mysql,詳細的介紹了使用yum安裝mysql及使用遇到的問題,有興趣的可以了解一下。
    2017-01-01
  • SQL實現(xiàn)數(shù)據(jù)過濾流程詳解

    SQL實現(xiàn)數(shù)據(jù)過濾流程詳解

    這篇文章主要介紹了SQL實現(xiàn)數(shù)據(jù)過濾流程,當我們在SQL中查詢數(shù)據(jù)時,肯定是有一些數(shù)據(jù)是我們不需要的,所以我們此時就要對數(shù)據(jù)進行過濾,以篩選出我們僅需要的數(shù)據(jù)
    2023-01-01
  • 利用MySQL加密函數(shù)保護Web網(wǎng)站敏感數(shù)據(jù)的方法分享

    利用MySQL加密函數(shù)保護Web網(wǎng)站敏感數(shù)據(jù)的方法分享

    如果您正在運行使用MySQL的Web應用程序,那么它把密碼或者其他敏感信息保存在應用程序里的機會就很大
    2012-03-03
  • MySQL主從復制之GTID模式詳細介紹?

    MySQL主從復制之GTID模式詳細介紹?

    這篇文章主要介紹了MySQL主從復制之GTID模式,GTID的復制方式,它由UUID和事務ID兩個部分組成,具有GTID事務是全局唯一性的,并且一個事務對應一個GTID值、一個GTID值在同一個MySQL實例上只會執(zhí)行一次等特點,想了解更多的小伙伴可以參考下面詳細內容,希望對你有所幫助
    2022-02-02
  • MySQL批量插入唯一索引沖突的幾種避免辦法

    MySQL批量插入唯一索引沖突的幾種避免辦法

    我們在進行大批量的數(shù)據(jù)插入時,遇到唯一索引沖突是經常的事,本文主要介紹了MySQL批量插入唯一索引沖突的幾種避免辦法,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • MySql中取前幾行數(shù)據(jù)使用limit來完成

    MySql中取前幾行數(shù)據(jù)使用limit來完成

    在mysql中是沒有top關鍵字的,不過可以用limit來完成此功能,下面舉例為大家詳細介紹下它的使用方法,不會的朋友可以學習下
    2013-07-07
  • 大數(shù)據(jù)小內存排序問題如何巧妙解決

    大數(shù)據(jù)小內存排序問題如何巧妙解決

    文章介紹了大數(shù)據(jù)小內存排序的三種方法:數(shù)據(jù)庫排序、分治法和位圖法,數(shù)據(jù)庫排序簡單但速度慢,對設備要求高;分治法高效但實現(xiàn)復雜;位圖法可讀性差,但存儲空間受限
    2025-01-01

最新評論

灯塔市| 万宁市| 大名县| 黄陵县| 明光市| 曲靖市| 阜平县| 西峡县| 正安县| 莫力| 平潭县| 玉树县| 泗阳县| 永兴县| 阳谷县| 湘潭市| 无棣县| 平遥县| 通海县| 东乡| 唐山市| 昔阳县| 秦安县| 榕江县| 靖边县| 元谋县| 东台市| 安泽县| 平南县| 治县。| 兴国县| 保亭| 云龙县| 永吉县| 凤山市| 新竹市| 师宗县| 武川县| 贵德县| 蓝山县| 安塞县|